diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..eb15bc5e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +custom: ['https://hippo4j.cn/docs/community/sponsor'] diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 00000000..ca08366e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,27 @@ +--- +name: "BUG 报告" +about: 提交问题缺陷帮助我们更好的改进 +--- + +## Bug Report + +在开始报告错误之前,请确保认真查看了以下步骤: + +- 搜索打开和关闭的 [GitHub 问题](https://github.com/opengoofy/hippo4j/issues) +- 阅读 [常见问题文档](https://hippo4j.cn/pages/9cc27d/) + +请在提交问题之前回答这些问题,谢谢。 + +### 你使用了哪个项目?Hippo-4J Server 还是 Hippo-4J Core? + +### 你使用了哪个版本? + +### 预期行为 + +### 实际行为 + +### 原因分析(如果可以) + +### 问题重现步骤 + +### 用于重现此问题的示例代码(例如 GitHub 链接) diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 00000000..2422175e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,13 @@ +--- +name: "需求建议" +about: 提出针对本项目的想法和建议 +--- + +## Feature Request + +请在提交问题之前回答这些问题,谢谢。 + +### 您的功能请求是否与问题有关? + +### 描述你想要的功能 + diff --git a/.github/ISSUE_TEMPLATE/question-report.md b/.github/ISSUE_TEMPLATE/question-report.md new file mode 100644 index 00000000..54af7154 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question-report.md @@ -0,0 +1,27 @@ +--- +name: "问题支持" +about: 文档或讨论中未回答的使用问题 +--- + +## Question Report + +在开始报告问题之前,请确保认真查看了以下步骤: + +- 搜索打开和关闭的 [GitHub 问题](https://github.com/opengoofy/hippo4j/issues) +- 阅读 [常见问题文档](https://hippo4j.cn/pages/9cc27d/) + +请在提交问题之前回答这些问题,谢谢。 + +### 你使用了哪个项目?Hippo-4J Server 还是 Hippo-4J Core? + +### 你使用了哪个版本? + +### 预期行为 + +### 实际行为 + +### 原因分析(如果可以) + +### 问题重现步骤 + +### 用于重现此问题的示例代码(例如 GitHub 链接) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 00000000..0aa809f5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,6 @@ +Fixes #ISSUSE_ID + +Changes proposed in this pull request: +- + +> Check mailbox configuration when submitting. [Contributor Guide](https://hippo4j.cn/docs/community/contributor) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..5ace4600 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..3ace1daf --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +# +# 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. +# + +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Continuous Integration + +on: + push: + branches: [ develop ] + paths: + - '.github/workflows/ci.yml' + - '**/pom.xml' + - '**/src/main/**' + - '**/src/test/**' + - '!*.md' + - '!docs/**' + pull_request: + branches: [ develop ] + paths: + - '.github/workflows/ci.yml' + - '**/pom.xml' + - '**/src/main/**' + - '**/src/test/**' + - '!*.md' + - '!docs/**' + repository_dispatch: + types: [rerun-ci] + +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + unix: + name: JDK ${{ matrix.java.version }} - on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + strategy: + matrix: + os: [ macos-latest ] + java: + - { + version: 11 + } + - { + version: 17 + } + steps: + - uses: actions/checkout@v3 + - name: Build with Maven + run: echo y | mvn clean install -Dskip.gpg=true -Dspotless.apply.skip=true diff --git a/.gitignore b/.gitignore index 549e00a2..033c445d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,12 @@ build/ ### VS Code ### .vscode/ + +# maven plugin ignore +*.gpg +.flattened-pom.xml + +### Docs ### +docs/node_modules +docs/build +docs/.docusaurus \ No newline at end of file diff --git a/README.md b/README.md index 82b0b968..d1907836 100644 --- a/README.md +++ b/README.md @@ -1,174 +1,67 @@ -
- -
-

- :fire:   动态线程池(Hippo4J)系统,包含 Server 端及 SpringBoot Client 端需引入的 Starter. -

-

- - - - - - - - - LICENSE - - - - - -

- -## 为什么写这个项目? - -[美团线程池文章](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html "美团线程池文章") 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能 - -在开源平台找了挺多动态线程池项目,从功能性以及健壮性而言,个人感觉不满足企业级应用 - -因为对动态线程池比较感兴趣,加上想写一个有意义的项目,所以决定自己来造一个轻量级的轮子 +image -想给项目起一个简单易记的名字,类似于 Eureka、Nacos、Redis;后和朋友商量,决定以动物命名:**Hippo4J** +# 动态可观测线程池框架,提高线上运行保障能力 -![](https://user-images.githubusercontent.com/77398366/139702684-17595e6e-a743-4a33-a0be-0626967f32f5.png) +[![Gitee](https://gitee.com/mabaiwancn/hippo4j/badge/star.svg?theme=gvp)](https://gitee.com/mabaiwancn/hippo4j) [![GitHub](https://img.shields.io/github/stars/opengoofy/hippo4j)](https://github.com/opengoofy/hippo4j) [![OpenIssue](http://isitmaintained.com/badge/open/opengoofy/hippo4j.svg)](https://github.com/opengoofy/hippo4j/issues) [![Contributors](https://img.shields.io/github/contributors/opengoofy/hippo4j?color=3ba272)](https://github.com/opengoofy/hippo4j/graphs/contributors) [![License](https://img.shields.io/github/license/opengoofy/hippo4j?color=5470c6)](https://github.com/opengoofy/hippo4j/blob/develop/LICENSE) -## 它解决了什么问题? +------- -线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理 +## 什么是 Hippo-4J -虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决 +Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。 -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023160830084.png) +- 🏗 全局管控 - 管理应用线程池实例; -如果线程池的配置涉及到上述问题,那么就有可能需要发布业务系统来解决;如果发布后参数仍不合理,继续发布...... +- ⚡️ 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等; -Hippo4J 很好解决了这个问题,它将业务中所有线程池统一管理,遇到上述问题不需要发布系统就可以替换线程池参数 +- 🐳 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长; -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023142726818.png) +- 👀 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示; -## 它有什么特性? +- 👐 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务; -应用系统中线程池并不容易管理。参考美团的设计,Hippo4J 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作 +- 👯‍♀️ 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-core-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-server-start); -举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目 +- 🛠 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更; -| 模块 | 模块名称 | 注释 | -| --------------------------- | ---------- | ---------------------------------------- | -| hippo4j-auth | 用户权限 | 用户、角色、权限等功能 | -| hippo4j-common | 公共模块 | - | -| hippo4j-config | 配置中心 | 提供线程池准实时更新功能 | -| hippo4j-console | 控制台 | 对接前端项目 | -| hippo4j-discovery | 注册中心 | 提供线程池项目实例注册、续约、下线等功能 | -| hippo4j-spring-boot-starter | Starter | 客户端依赖组件 | -| hippo4j-example | 示例项目 | - | -| hippo4j-server | 服务端 | Server 集成各组件 | -| hippo4j-tools | 抽象工具类 | GitHub 变更监控、操作日志等组件 | +- 🌈 中间件适配 - Apache RocketMQ、Dubbo、RabbitMQ、Hystrix 消费线程池运行时数据查看和线程数变更。 -Hippo4J 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等 +> 看完有收获,右上角帮忙点个小星星,开源作者为爱发电也不容易 🤣 -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023101844619.png) +## 快速开始 -## 如何运行 Demo? +对于本地演示目的,请参阅 [Quick start](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-server-start) -目前动态线程池功能已经完成,可以直接把代码拉到本地运行。导入 [Hippo4J 初始化 SQL 语句](./hippo4j-server/src/main/resources/hippo_manager.sql) +演示环境: +- http://console.hippo4j.cn/index.html +- 用户名/密码:hippo4j/hippo4j -1. 启动 `hippo4j-server` 模块下 ServerApplication 应用类 -2. 启动 `hippo4j-example` 模块下 ExampleApplication 应用类 +## 安全检测 -> 🌟   Hippo4J 已集成前端项目,详情参考 [Run Console](http://hippox.cn/zh-cn/docs/run/runConsole.html) +[![OSCS Status](https://www.oscs1024.com/platform/badge/opengoofy/hippo4j.svg?size=large)](https://www.murphysec.com/dr/s285JA1FVHD7tayWLt) -通过接口修改线程池中的配置。HTTP POST 路径:http://localhost:6691/v1/cs/configs ,Body 请求体如下: +## 联系我 -```json -{ - "ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改", - "tenantId": "prescription", - "itemId": "dynamic-threadpool-example", - "tpId": "message-produce", - "coreSize": 10, - "maxSize": 15, - "queueType": 9, - "capacity": 100, - "keepAliveTime": 10, - "rejectedType": 3, - "isAlarm": 0, - "capacityAlarm": 81, - "livenessAlarm": 82 -} -``` +图片加载不出来,访问 [官网站点](https://hippo4j.cn/docs/user_docs/other/group) -接口调用成功后,观察 dynamic-threadpool-example 控制台日志输出,日志输出包括不限于此信息即为成功 +![image](https://user-images.githubusercontent.com/77398366/180110548-7a05b74d-0316-4066-96f4-1c9331638633.png) -```tex -[🔥 MESSAGE-PRODUCE] Changed thread pool. coreSize :: [11=>10], maxSize :: [15=>15], queueType :: [9=>9] -capacity :: [100=>100], keepAliveTime :: [10000=>10000], rejectedType :: [7=>7] -``` +## 开发者 -现阶段已集成钉钉消息推送,后续会持续接入企业微信、邮箱、飞书、短信等通知渠道。可以通过添加钉钉群体验消息推送,群号:31764717 +感谢所有为 Hippo-4J 做出贡献的开发者! - - - - - -
- -
- 配置变更 -

-
- -
- 报警通知 -

-
+ -项目代码功能还在持续开发,初定发布 1.0.0 RELEASE 完成以下功能。部署了 Server 服务,只需要引入 Starter 组件到业务系统中,即可完成动态修改、监控、报警等特性 +## 我们的荣誉 -## 查看源码能收获什么? +Hippo-4J 获得了一些宝贵的荣誉,这属于每一位对 Hippo-4J 做出过贡献的成员,谢谢各位的付出。 -目前还没有发布 Release 版本,小伙伴可以阅读框架源码,查看框架中好的设计理念或者编码技巧 +image -在项目开发过程中,借鉴了 Nacos、Eureka、Seata、ShardingSphere 等中间件项目的优雅设计 +## 友情链接 -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211023143632685.png) - -## Github Stars 趋势 - -如果小伙伴查看源码设计有所收获,辛苦点个 🚀 Star ,方便后续查看 - -[![Stargazers over time](https://starchart.cc/acmenlt/dynamic-threadpool.svg)](https://starchart.cc/acmenlt/dynamic-threadpool) - -## 致谢 - -Hippo4J 项目基于或参考以下项目: - -1. [Nacos](https://github.com/alibaba/nacos):an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. -2. [Eureka](https://github.com/Netflix/Eureka):AWS Service registry for resilient mid-tier load balancing and failover. -3. [ShardingSphere](https://github.com/apache/shardingsphere):Build criterion and ecosystem above multi-model databases. -4. [mzt-biz-log](https://github.com/mouzt/mzt-biz-log):支持 Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件. -5. [equator](https://github.com/dadiyang/equator):一个用于比较两个对象的所有属性是否全部相等,并且可以获取所有不相等的属性的比对器. - -## 最后 - -小编是个有代码洁癖的程序员,项目中的代码开发完全遵守阿里巴巴代码规约,也推荐大家使用,培养好的编码习惯 - -对于这个项目,是否有什么不一样看法,欢迎在 Issue 一起沟通交流;或者添加小编微信进交流群 - - - - - - -
- -
- -

-
- -
- -

-
+- [HertzBeat](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需Agent, 强大自定义监控能力。 +- [JavaGuide](https://github.com/Snailclimb/JavaGuide):一份涵盖大部分 Java 程序员所需要掌握的核心知识。 +- [toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的 Java 学习指南。 +- [Guide-Rpc-Framework](https://github.com/Snailclimb/guide-rpc-framework):一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架。 +- [Austin](https://github.com/ZhongFuCheng3y/austin):消息推送平台,支持短信、邮件、微信公众号、企业微信、钉钉等多种消息类型。 diff --git a/dev-support/hippo4j_spotless_formatter.xml b/dev-support/hippo4j_spotless_formatter.xml new file mode 100644 index 00000000..5adb0996 --- /dev/null +++ b/dev-support/hippo4j_spotless_formatter.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev-support/license-header b/dev-support/license-header new file mode 100644 index 00000000..6a9c0641 --- /dev/null +++ b/dev-support/license-header @@ -0,0 +1,17 @@ +/* + * 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. + */ + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..03c9d56e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,15 @@ + +## 启动 + +> 依赖 node 版本 16+ + +```shell script +npm i +npm run start +``` + +## 部署 + +```shell script +GIT_SSH_COMMAND="ssh -i ~/.ssh/hippo4j" USE_SSH=true docusaurus deploy +``` diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 00000000..e00595da --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/blog/2022-06-06-hippo4j/index.md b/docs/blog/2022-06-06-hippo4j/index.md new file mode 100644 index 00000000..6f2d833b --- /dev/null +++ b/docs/blog/2022-06-06-hippo4j/index.md @@ -0,0 +1,145 @@ +--- +slug: Hippo-4J发布1.3.0版本 +title: Hippo-4J发布1.3.0版本 +authors: [xiaomage] +tags: [hippo4j, release, 1.3.0] +--- + +大家好,我是 **小马哥**。 + +Hippo-4J 距离上一个版本 1.2.1 已经过去一个月的时间。在此期间,由 **8 位贡献者** 提交了 **170+ commits**,正式发布 **1.3.0** 版本。 + +注:这是一个 **兼容历史版本** 的重大升级。 + +## HIPPO-4J 1.3.0 + +### Feature + +1. 添加 RabbitMQ 线程池监控及动态变更 +2. 添加 RocketMQ 线程池监控及动态变更 +3. 添加 Dubbo 线程池监控及动态变更 +4. 添加 SpringCloud Stream RocketMQ 消费线程池监控及动态变更 + +### Refactor + +1. 重构容器线程池查询及修改功能 +2. 优化配置中心触发监听后,所执行的数据变更逻辑 + +### Optimize + +1. 前端控制台删除无用组件 +2. 服务端页面字段未显示中文 +3. 控制台 UI 优化 +4. 修改线程池实例后实时刷新列表参数 +5. 容器线程池编辑仅限 Admin 权限 +6. SpringBoot Starter 变更包路径 + +### BUG + +1. 修复 SpringBoot Nacos 动态刷新不生效 +2. 报警配置 alarm=false 不配置通知报警平台和接收人报错 + +## 三方框架线程池适配 + +Hippo-4J 1.3.0 最大的功能发布就是开发出了 **适配三方框架的基础框架**。 + +目前已完成 **Dubbo、RabbitMQ、RocketMQ、RocketMQSpringCloudStream** 的线程池适配,后续还会接入 **Kafka、Hystrix** 等框架或中间件的线程池适配。 + +### 引入适配三方框架 Jar 包 + +引入 Hippo-4J server 或 core 的 maven jar 坐标后,还需要引入对应的框架适配 jar: + +```xml + + cn.hippo4j + + hippo4j-spring-boot-starter-adapter-dubbo + + hippo4j-spring-boot-starter-adapter-rabbitmq + + hippo4j-spring-boot-starter-adapter-rocketmq + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + 1.3.0 + +``` + +如果想觉得引入多个 jar 包繁琐,可以仅需引入一个全量包,Hippo-4J 框架底层会根据各中间件的条件,判断加载具体线程池适配器。 + +```xml + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-all + 1.3.0 + +``` + +### HIPPO-4J Server + +Hippo-4J server 引入上述适配 jar 包后,即可在 Hippo-4J server 的控制台进行查看及修改三方框架线程池。 + +![图1 线程池适配列表](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220531194810047.png) + + + +点击编辑即可修改该 Java 应用对应的框架底层线程池。 + +![图2 修改三方线程池](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220605152549732.png) + + + +点击 **全部修改** 按钮可以修改当前组下所有应用实例的线程池配置。 + +修改成功后,应用控制台打印以下日志,即为修改成功。 + +```java +[input] RocketMQ consumption thread pool parameter change. coreSize :: 1 => 10, maximumSize :: 1 => 10 +``` + +### HIPPO-4J Core + +Hippo-4J core 除了依赖上述适配 Jar 包外,还需要在配置中心添加以下配置项。 + +```yaml +spring: + dynamic: + thread-pool: + # 省略其它配置 + adapter-executors: + # threadPoolKey 代表线程池标识 + - threadPoolKey: 'input' + # mark 为三方线程池框架类型,参见文初已支持框架集合 + mark: 'RocketMQSpringCloudStream' + corePoolSize: 10 + maximumPoolSize: 10 +``` + +## Gitee GVP + +Hippo-4J 获得了一些宝贵的荣誉,这属于每一位对 Hippo-4J 做出过贡献的成员。 + +![图3 GVP 证书](https://images-machen.oss-cn-beijing.aliyuncs.com/170607238-7308c9be-1d63-46a6-852c-eef2e4cf7405.jpeg) + + + +感谢所有为 Hippo-4J 做出贡献的开发者! + +https://github.com/opengoofy/hippo4j/graphs/contributors + +![图4 Hippo-4J 开发者](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220605151136276.png) + + + +## 最后总结 + +开源不易,如果各位小伙伴看了 Hippo-4J 框架后有所收获,希望能帮忙在 Github、Gitee 点个 star,谢谢。 + +**Github**:https://github.com/opengoofy/hippo4j + +**Gitee**:https://gitee.com/mabaiwancn/hippo4j + +目前已有 **10+** 公司在生产环境使用 Hippo-4J,如果贵公司使用了 Hippo-4J,请在下方 Issue 登记,谢谢。 + +**Issue**:https://github.com/opengoofy/hippo4j/issues/13 + +登记使用不会对公司有任何影响,仅为了扩大 Hippo-4J 影响力,帮助它能走得更远。 diff --git a/docs/blog/authors.yml b/docs/blog/authors.yml new file mode 100644 index 00000000..0edbc8d9 --- /dev/null +++ b/docs/blog/authors.yml @@ -0,0 +1,5 @@ +xiaomage: + name: 小马哥 + title: hippo4j 作者 + url: https://github.com/mabaiwan + image_url: https://avatars.githubusercontent.com/u/77398366?v=4 diff --git a/docs/deploy.sh b/docs/deploy.sh new file mode 100644 index 00000000..ec009c0a --- /dev/null +++ b/docs/deploy.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env sh + +# 确保脚本抛出遇到的错误 +set -e + +# 生成静态文件 +npm run build + +# 进入生成的文件夹 +cd build/ + +echo 'hippo4j.cn' > CNAME + +git init +git add -A +git commit -m "auto commit" + +# github +git branch -m master main +GIT_SSH_COMMAND="ssh -i ~/.ssh/hippo4j" git remote add origin git@github.com:hippo4j/hippo4j.github.io.git +GIT_SSH_COMMAND="ssh -i ~/.ssh/hippo4j" git push -u origin main -f + +cd - +rm -rf build/ diff --git a/docs/docs/community/_category_.json b/docs/docs/community/_category_.json new file mode 100644 index 00000000..bcd256c9 --- /dev/null +++ b/docs/docs/community/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "社区", + "position": 1, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/community/contributor.md b/docs/docs/community/contributor.md new file mode 100644 index 00000000..e5ce5c9a --- /dev/null +++ b/docs/docs/community/contributor.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 1 +--- + +# 开发者指南 + + +为了让您的 id 显示在 contributor 列表中,别忘了以下设置: + +```shell +git config --global user.name "username" +git config --global user.email "github账号邮箱" +``` + +## 开发者列表 + +您可以在 [Hippo4J](https://github.com/opengoofy/hippo4j/graphs/contributors) 和 [Hippo4J Console](https://github.com/opengoofy/hippo4j-console) 的贡献列表中找到全部的贡献者名单。 + + diff --git a/docs/docs/community/developer.md b/docs/docs/community/developer.md new file mode 100644 index 00000000..3c9c9f45 --- /dev/null +++ b/docs/docs/community/developer.md @@ -0,0 +1,13 @@ +--- +sidebar_position: 2 +--- + +# 核心开发者 + + + + + + + +

马称

陆宽
diff --git a/docs/docs/community/powered-by.md b/docs/docs/community/powered-by.md new file mode 100644 index 00000000..fc94c050 --- /dev/null +++ b/docs/docs/community/powered-by.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 3 +--- + +# 采用公司 + +## 登记 + +欢迎采用了 Hippo4J 的公司在此登记,非常感谢大家对 Hippo4J 的关注和支持,这是我们前进最大的动力。 + +请按公司名 + 首页的格式在 [此处](https://github.com/opengoofy/hippo4j/issues/13) 登记。 + +## 谁在使用 Hippo4J + +共计 14+ 家公司生产接入 Hippo4J。按照公司登记时间排序。 + +- [身边云](https://serviceshare.com) +- [Medbanks](https://www.medbanks.cn) +- [北京智合联创科技有限公司](http://www.zhlc.com.cn) +- [神州数码](http://www.digitalchina.com) +- [payermax](https://www.payermax.com/) +- [轻松到家](http://www.uyess.com/index.html) +- [某商业银行股份有限公司](https://github.com/opengoofy/hippo4j/issues/13) +- [某国际物流信息股份有限公司](https://github.com/opengoofy/hippo4j/issues/13) +- [萨科(深圳)科技有限公司](https://www.lbdj.com/) +- [广东天枢新能源科技有限公司](https://gd-tianshu.com/) +- [FitTime](http://fittime.com/) +- [百强国际物流](https://github.com/opengoofy/hippo4j/issues/13) +- [海南某深圳分公司](https://github.com/opengoofy/hippo4j/issues/13) +- [众合云科(51社保)](https://home.101hr.com/) \ No newline at end of file diff --git a/docs/docs/community/sponsor.md b/docs/docs/community/sponsor.md new file mode 100644 index 00000000..c1f19fb3 --- /dev/null +++ b/docs/docs/community/sponsor.md @@ -0,0 +1,28 @@ +--- +sidebar_position: 4 +--- + + +# 支持开源 + +如果您正在使用这个项目并感觉良好,或者是想支持我继续开发,您可以通过如下 `任意` 方式支持我: + +1. Github star 并分享动态线程池框架 [hippo4j](https://github.com/longtai-cn/hippo4j) :rocket: +2. 通过以下二维码 一次性捐款。 我多半会买一杯 ~~咖啡~~ 茶。:tea: + +谢谢! :heart: + +| 微信赞赏 | 支付宝 | +| :---: | :---: | +| ![](https://images-machen.oss-cn-beijing.aliyuncs.com/IMG_6719_2.jpg?x-oss-process=image/resize,h_180,w_180) | ![](https://images-machen.oss-cn-beijing.aliyuncs.com/IMG_6720_3.jpg?x-oss-process=image/resize,h_180,w_180) | + +### 致谢 + +感谢给予支持的朋友,您的支持是我前进的动力 🎉 + + +| | ID | 赞赏金额 | 时间 | 备注 | +| ---- | ------- | ---- | ---------- | ------------------------------------ | +| 1 | Easy 点 | 66.00 | 2022-04-09 | 好货好技术当加赏 | +| 2 | 孙大圣 | 26.6 | 2022-03-23 | 学习一下😁😁 | +| 3 | 六月飞雪 | 30.00 | 2021-12-30 | 代码设计很优雅的一款框架,继续加油! | diff --git a/docs/docs/user_docs/dev_manual/_category_.json b/docs/docs/user_docs/dev_manual/_category_.json new file mode 100644 index 00000000..11f12432 --- /dev/null +++ b/docs/docs/user_docs/dev_manual/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "开发者手册", + "position": 5, + "link": { + "type": "generated-index", + "description": "Hippo4J 留给使用者能够扩展的知识点。" + } +} diff --git a/docs/docs/user_docs/dev_manual/blocking-queue-custom.md b/docs/docs/user_docs/dev_manual/blocking-queue-custom.md new file mode 100644 index 00000000..3ab0d33c --- /dev/null +++ b/docs/docs/user_docs/dev_manual/blocking-queue-custom.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +--- + +# 阻塞队列自定义 + +同拒绝策略自定义。 \ No newline at end of file diff --git a/docs/docs/user_docs/dev_manual/rejected-policy-custom.md b/docs/docs/user_docs/dev_manual/rejected-policy-custom.md new file mode 100644 index 00000000..041adef8 --- /dev/null +++ b/docs/docs/user_docs/dev_manual/rejected-policy-custom.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 0 +--- + +# 拒绝策略自定义 + +Hippo4J 通过 SPI 的方式对拒绝策略进行扩展,可以让用户在 Hippo4J 中完成自定义拒绝策略实现。 + +## Hippo4J Server 拒绝策略扩展 + +自定义拒绝策略,实现 `CustomRejectedExecutionHandler` 接口,示例如下: + +```java +public class ErrorLogRejectedExecutionHandler implements CustomRejectedExecutionHandler { + + @Override + public Integer getType() { + return 12; + } + + @Override + public RejectedExecutionHandler generateRejected() { + return new CustomErrorLogRejectedExecutionHandler(); + } + + public static class CustomErrorLogRejectedExecutionHandler implements RejectedExecutionHandler { + + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + Logger logger = LoggerFactory.getLogger(this.getClass()); + logger.error("线程池抛出拒绝策略"); + } + } +} +``` + +创建 `src/main/resources/META-INF/services` 目录,创建 SPI 自定义拒绝策略文件 `cn.hippo4j.core.spi.CustomRejectedExecutionHandler`。 + +`cn.hippo4j.core.spi.CustomRejectedExecutionHandler` 文件内仅放一行自定义拒绝策略全限定名即可,示例: + +```text +cn.hippo4j.example.core.handler.ErrorLogRejectedExecutionHandler +``` + +创建、修改线程池页面选择 `CustomRejectedPolicy(自定义 SPI 策略)`。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220801213735751.png) + +拒绝策略触发时,完成上述代码效果,仅打印异常日志提示。 + +```text +2022-08-01 21:27:49.515 ERROR 48928 --- [ateHandler.test] r$CustomErrorLogRejectedExecutionHandler : 线程池抛出拒绝策略 +``` + +:::tip +具体参考 `hippo4j-example/hippo4j-spring-boot-starter-example` 模块。 +::: diff --git a/docs/docs/user_docs/getting-started/_category_.json b/docs/docs/user_docs/getting-started/_category_.json new file mode 100644 index 00000000..72b1e151 --- /dev/null +++ b/docs/docs/user_docs/getting-started/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "快速开始", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/user_docs/getting-started/difference.md b/docs/docs/user_docs/getting-started/difference.md new file mode 100644 index 00000000..f3707fb8 --- /dev/null +++ b/docs/docs/user_docs/getting-started/difference.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 0 +--- + +# hippo4j 的两种使用模式 + +1.1.0 版本发布后,Hippo-4J 分为两种使用模式:轻量级依赖配置中心以及无中间件依赖版本。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220319154626314.png) + +### hippo4j-core + +**轻量级动态线程池管理**,依赖 Apollo、Nacos、Zookeeper 等三方配置中心(任选其一)完成线程池参数动态变更,支持运行时报警、监控等功能。 + +> 监控功能配置详见:[线程池监控](/docs/user_docs/getting-started/hippo4j-core-monitor) + +![](./img/grafana-monitor.jpg) + +### hippo4j-server + +**部署 hippo4j-server 服务**,通过可视化 Web 界面完成线程池的创建、变更以及查看,不依赖三方中间件。 + +相比较 hippo4j-core,功能会更强大,但同时也引入了一定的复杂性。需要部署一个 Java 服务,以及依赖 MySQL 数据库。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/1644032018254-min.gif) + + + +### 使用总结 + +| | hippo4j-core | hippo4j-server | +| ---- | ---------------------------------------------------- | ------------------------------------------------------------ | +| 依赖 | Nacos、Apollo、Zookeeper 配置中心(任选其一) | 部署 Hippo-4J Server(内部无依赖中间件) | +| 使用 | 配置中心补充线程池相关参数 | Hippo-4J Server Web 控制台添加线程池记录 | +| 功能 | 包含基础功能:参数动态化、运行时监控、报警等 | 基础功能之外扩展控制台界面、线程池堆栈查看、线程池运行信息实时查看、历史运行信息查看、线程池配置集群个性化等 | + +使用建议:根据公司情况选择,如果基本功能可以满足使用,选择 hippo4j-core 使用即可;如果希望更多的功能,可以选择 hippo4j-server。 + +**两者在进行替换的时候,无需修改业务代码**。 diff --git a/docs/docs/user_docs/getting-started/hippo4j-adapter.md b/docs/docs/user_docs/getting-started/hippo4j-adapter.md new file mode 100644 index 00000000..3608bd9b --- /dev/null +++ b/docs/docs/user_docs/getting-started/hippo4j-adapter.md @@ -0,0 +1,66 @@ +--- +sidebar_position: 6 +--- + +# hippo4j 三方框架线程池适配 + +Hippo4J 目前已支持的三方框架线程池列表: + +- Dubbo +- Hystrix +- RabbitMQ +- RocketMQ +- RocketMQSpringCloudStream + +引入 Hippo4J Server 或 Core 的 Maven Jar 坐标后,还需要引入对应的框架适配 Jar: + +```xml + + cn.hippo4j + + hippo4j-spring-boot-starter-adapter-dubbo + + hippo4j-spring-boot-starter-adapter-hystrix + + hippo4j-spring-boot-starter-adapter-rabbitmq + + hippo4j-spring-boot-starter-adapter-rocketmq + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + 1.3.1 + +``` + +如果想省事,仅需引入一个全量包,框架底层会根据条件判断加载具体线程池适配器。 + +```xml + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-all + 1.3.1 + +``` + +## Hippo4J Server + +Hippo4J Server 仅需要引入上述 Jar 包,即可在 Hippo4J Server 的控制台进行查看及修改三方框架线程池。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220531194810047.png) + +## Hippo4J Core + +Hippo4J Core 除了依赖上述适配 Jar 包外,还需要在配置中心添加以下配置项。 + +```yaml +spring: + dynamic: + thread-pool: + # 省略其它配置 + adapter-executors: + # threadPoolKey 代表线程池标识 + - threadPoolKey: 'input' + # mark 为三方线程池框架类型,参见文初已支持框架集合 + mark: 'RocketMQSpringCloudStream' + corePoolSize: 10 + maximumPoolSize: 10 +``` diff --git a/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md b/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md new file mode 100644 index 00000000..26c10f1c --- /dev/null +++ b/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +--- + +# hippo4j core 线程池监控 + +已完成 hippo4j-core 的 [接入工作](/docs/user_docs/getting-started/hippo4j-core-start) 。 + +## 安装 Grafana + Prometheus + +```shell +docker run -d -p 9090:9090 --name prometheus prom/prometheus +``` + +```shell +docker run -d -p 3000:3000 --name=grafana grafana/grafana +``` + +访问 grafana 地址,[http://localhost:3000](http://localhost:3000) 用户名密码:`admin` + +## 线程池监控 + +引入 actuator。spring 2.x 一般都有版本指定,所以这里不用写版本号。 + +```xml + + io.micrometer + micrometer-registry-prometheus + + + + org.springframework.boot + spring-boot-starter-actuator + +``` + +添加相关配置。 + +```yaml +management: + metrics: + export: + prometheus: + enabled: true + server: + port: 29999 # 自选 + endpoints: + web: + exposure: + include: '*' # 测试使用,开启了所有端点,生产环境不建议 * +spring: + dynamic: + thread-pool: + collect-type: metric +``` + +Prometheus 配置任务,配置成功后需重启。 + +```yaml +- job_name: 'dynamic-thread-pool-job' + scrape_interval: 5s + metrics_path: '/actuator/prometheus' + static_configs: + - targets: ['127.0.0.1:29999'] # 如果是 docker 部署,这里需要写本机的 IP +``` + +Grafana 导入数据源。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220328231812090.png) + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220328231849537.png) + +Grafana DashBoard 配置。 + +关注公众号 `龙台的技术笔记`,回复:`监控`,获取 DashBoard JSON。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/43_65f6020ed111b6bb3808ec338576bd6b.png) + + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220327171957444.png) + +获取到 JSON 文件后,导入至 Grafana。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220327171125638.png) + +即可使用 Hippo4j 线程池监控大屏。 + +![](./img/grafana-monitor.jpg) diff --git a/docs/docs/user_docs/getting-started/hippo4j-core-start.md b/docs/docs/user_docs/getting-started/hippo4j-core-start.md new file mode 100644 index 00000000..aeba5ced --- /dev/null +++ b/docs/docs/user_docs/getting-started/hippo4j-core-start.md @@ -0,0 +1,221 @@ +--- +sidebar_position: 1 +--- + +# hippo4j core 接入 + +Nacos、Apollo、Zookeeper 配置中心任选其一。 + +## hippo4j 配置 + +```xml + + cn.hippo4j + hippo4j-core-spring-boot-starter + 1.3.1 + +``` + +启动类上添加注解 @EnableDynamicThreadPool。 + +```java +@SpringBootApplication +@EnableDynamicThreadPool +public class ExampleApplication { + public static void main(String[] args) { + SpringApplication.run(ExampleApplication.class, args); + } +} +``` + +SpringBoot 应用配置文件添加: + +```yaml +server: + port: 8090 + servlet: + context-path: /example + +spring: + profiles: + active: dev + + dynamic: + thread-pool: + enable: true # 是否开启动态线程池 + banner: true # 是否打印 banner + collect: true # 是否开启线程池数据采集,对接 Prometheus + notify-platforms: # 通知报警平台,⚠️ 请替换为自己创建的群机器人 + - platform: 'WECHAT' # 企业微信 + token: 1d307bfa-815f-4662-a2e5-99415e947bb8 + - platform: 'DING' # 钉钉 + token: 56417ebba6a27ca352f0de77a2ae9da66d01f39610b5ee8a6033c60ef9071c55 + secret: SEC40943de20b51e993b47e9a55490a168f1c9e00bdb4f0fb15b1d9e4b58f8b05f3 # 加签 + - platform: 'LARK' # 飞书 + token: 2cbf2808-3839-4c26-a04d-fd201dd51f9e + nacos: # nacos apollo 任选其一 + data-id: xxx + group: xxx + apollo: + namespace: xxxx + config-file-type: yml # 配置中心文件格式 + # tomcat: + # jetty: + undertow: # 三种容器线程池,任选其一 + core-pool-size: 100 + maximum-pool-size: 200 + keep-alive-time: 1000 + # 全局通知配置 + alarm: true # 是否报警 + check-state-interval: 3000 # 检查线程池状态,是否达到报警条件,单位毫秒 + active-alarm: 80 # 活跃度报警阈值;假设线程池最大线程数 10,当线程数达到 8 发起报警 + capacity-alarm: 80 # 容量报警阈值;假设阻塞队列容量 100,当容量达到 80 发起报警 + alarm-interval: 8 # 报警间隔,同一线程池下同一报警纬度,在 interval 时间内只会报警一次,单位秒 + receive: xxx # 企业微信填写用户 ID(填写其它将无法达到 @ 效果)、钉钉填手机号、飞书填 ou_ 开头唯一 ID + # 线程池配置 + executors: + - thread-pool-id: 'message-consume' # 线程池标识 + core-pool-size: 1 # 核心线程数 + maximum-pool-size: 1 # 最大线程数 + queue-capacity: 1 # 阻塞队列大小 + execute-time-out: 1000 # 执行超时时间,超过此时间发起报警 + blocking-queue: 'LinkedBlockingQueue' # 阻塞队列名称,参考 QueueTypeEnum,支持 SPI + rejected-handler: 'AbortPolicy' # 拒绝策略名称,参考 RejectedPolicies,支持 SPI + keep-alive-time: 1024 # 线程存活时间,单位秒 + allow-core-thread-time-out: true # 是否允许核心线程超时 + thread-name-prefix: 'message-consume' # 线程名称前缀 + notify: # 通知配置,线程池中通知配置如果存在,则会覆盖全局通知配置 + is-alarm: true # 是否报警 + active-alarm: 80 # 活跃度报警阈值;假设线程池最大线程数 10,当线程数达到 8 发起报警 + capacity-alarm: 80 # 容量报警阈值;假设阻塞队列容量 100,当容量达到 80 发起报警 + interval: 8 # 报警间隔,同一线程池下同一报警纬度,在 interval 时间内只会报警一次,单位分钟 + receive: xxx # 企业微信填写用户 ID(填写其它将无法达到 @ 效果)、钉钉填手机号、飞书填 ou_ 开头唯一 ID + - thread-pool-id: 'message-produce' + core-pool-size: 1 + maximum-pool-size: 1 + queue-capacity: 1 + execute-time-out: 1000 + blocking-queue: 'LinkedBlockingQueue' + rejected-handler: 'AbortPolicy' + keep-alive-time: 1024 + allow-core-thread-time-out: true + thread-name-prefix: 'message-consume' + notify: + is-alarm: true + active-alarm: 80 + capacity-alarm: 80 + interval: 8 + receive: xxx +``` + +## ThreadPoolExecutor 适配 + +添加线程池配置类,通过 `@DynamicThreadPool` 注解修饰。`threadPoolId` 为服务端创建的线程池 ID。 + +```java +package cn.hippo4j.example; + +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import java.util.concurrent.ThreadPoolExecutor; + +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageConsumeDynamicExecutor() { + String threadPoolId = "message-consume"; + ThreadPoolExecutor messageConsumeDynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .dynamicPool() + .build(); + return messageConsumeDynamicExecutor; + } + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageProduceDynamicExecutor() { + String threadPoolId = "message-produce"; + ThreadPoolExecutor messageProduceDynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .dynamicPool() + .build(); + return messageProduceDynamicExecutor; + } + +} +``` + +通过 ThreadPoolBuilder 构建动态线程池,只有 threadFactory、threadPoolId 为必填项,其它参数会从配置中心拉取。 + +项目中使用上述定义的动态线程池,如下所示: + +```java +@Resource +private ThreadPoolExecutor messageConsumeDynamicExecutor; + +messageConsumeDynamicExecutor.execute(() -> xxx); + +@Resource +private ThreadPoolExecutor messageProduceDynamicExecutor; + +messageProduceDynamicExecutor.execute(() -> xxx); +``` + +## ThreadPoolTaskExecutor 适配 + +Spring 针对 JDK 线程池提供了增强版的 `ThreadPoolTaskExecutor`,Hippo4J 对此进行了适配。 + +```java +package cn.hippo4j.example; + +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockIngQueue; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor dynamicThreadPoolExecutor() { + String threadPoolId = "message-consume"; + ThreadPoolExecutor dynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .corePoolSize(5) + .maxPoolNum(10) + .workQueue(new ResizableCapacityLinkedBlockIngQueue(1024)) + .rejected(new ThreadPoolExecutor.AbortPolicy()) + .keepAliveTime(6000, TimeUnit.MILLISECONDS) + // 等待终止毫秒 + .awaitTerminationMillis(5000) + // 线程任务装饰器 + .taskDecorator((task) -> { + String placeholderVal = MDC.get("xxx"); + return () -> { + try { + MDC.put("xxx", placeholderVal); + task.run(); + } finally { + MDC.clear(); + } + }; + }) + .dynamicPool() + .build(); + return dynamicExecutor; + } + +} +``` diff --git a/docs/docs/user_docs/getting-started/hippo4j-server-config.md b/docs/docs/user_docs/getting-started/hippo4j-server-config.md new file mode 100644 index 00000000..93b8108b --- /dev/null +++ b/docs/docs/user_docs/getting-started/hippo4j-server-config.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 4 +--- + +# hippo4j server 服务端配置 + +`hippo4j.core.clean-history-data-enable` + +是否开启线程池历史数据清洗,默认开启。 + +`hippo4j.core.clean-history-data-period` + +线程池历史数据保留时间,默认值:30,单位分钟。 + +服务端会保留这个配置时间的数据,超过这个时间则会被清理。比如按照默认值 30 分钟来说,12:00 收集到的数据,12:30 就会被清理删除。 + +`hippo4j.core.monitor.report-type` + +客户端监控上报服务端类型,可选值:http、netty,默认 http。服务端开启 netty 配置后,需要在客户端对应开启才可生效。用来应对大量动态线程池监控场景。 diff --git a/docs/docs/user_docs/getting-started/hippo4j-server-start.md b/docs/docs/user_docs/getting-started/hippo4j-server-start.md new file mode 100644 index 00000000..859776b1 --- /dev/null +++ b/docs/docs/user_docs/getting-started/hippo4j-server-start.md @@ -0,0 +1,181 @@ +--- +sidebar_position: 3 +--- + +# hippo4j server 接入 + +部署服务端,参考 [部署手册](/docs/user_docs/ops/hippo4j-server-deploy)。 + +服务端创建 [租户、项目](/docs/user_docs/other/issue#租户和项目在-hippo4j-中是什么意思) 和线程池记录。 + +需要注意,项目 ID 需要与配置文件 `{application.name}` 保持一致。 + +:::tip +租户、项目、线程池 ID 如果由多个词组成,建议以 - 进行分割。比如:message-center。 +::: + +## Hippo4J 配置 + +SpringBoot Pom 引入 Hippo4j Starter Jar。 + +```xml + + cn.hippo4j + hippo4j-spring-boot-starter + 1.3.1 + +``` + +启动类上添加注解 `@EnableDynamicThreadPool`。 + +```java +@SpringBootApplication +@EnableDynamicThreadPool +public class ExampleApplication { + public static void main(String[] args) { + SpringApplication.run(ExampleApplication.class, args); + } +} +``` + +SpringBoot 应用配置文件添加: + +```yaml +spring: + profiles: + active: dev + application: + # 服务端创建的项目 id 需要与 application.name 保持一致 + name: dynamic-threadpool-example + dynamic: + thread-pool: + # 服务端地址 + server-addr: http://localhost:6691 + # 用户名 + username: admin + # 密码 + password: 123456 + # 租户 id, 对应 tenant 表 + namespace: prescription + # 项目 id, 对应 item 表 + item-id: ${spring.application.name} +``` + +## ThreadPoolExecutor 适配 + +添加线程池配置类,通过 `@DynamicThreadPool` 注解修饰。`threadPoolId` 为服务端创建的线程池 ID。 + +```java +package cn.hippo4j.example; + +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockIngQueue; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageConsumeDynamicExecutor() { + String threadPoolId = "message-consume"; + ThreadPoolExecutor messageConsumeDynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .dynamicPool() + .build(); + return messageConsumeDynamicExecutor; + } + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageProduceDynamicExecutor() { + String threadPoolId = "message-produce"; + ThreadPoolExecutor messageProduceDynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .dynamicPool() + .build(); + return messageProduceDynamicExecutor; + } + +} +``` + +通过 ThreadPoolBuilder 构建动态线程池,只有 threadFactory、threadPoolId 为必填项,其它参数会从 hippo4j-server 服务拉取。 + +:::tip +创建线程池时建议填充实际的参数。如果在连接 Hippo4J Server 端失败时,会使用填充配置创建线程池。 +::: + +项目中使用上述定义的动态线程池,如下所示: + +```java +@Resource +private ThreadPoolExecutor messageConsumeDynamicExecutor; + +messageConsumeDynamicExecutor.execute(() -> xxx); + +@Resource +private ThreadPoolExecutor messageProduceDynamicExecutor; + +messageProduceDynamicExecutor.execute(() -> xxx); +``` + +## ThreadPoolTaskExecutor 适配 + +Spring 针对 JDK 线程池提供了增强版的 `ThreadPoolTaskExecutor`,Hippo4J 对此进行了适配。 + +```java +package cn.hippo4j.example; + +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockIngQueue; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor dynamicThreadPoolExecutor() { + String threadPoolId = "message-consume"; + ThreadPoolExecutor dynamicExecutor = ThreadPoolBuilder.builder() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .corePoolSize(5) + .maxPoolNum(10) + .workQueue(new ResizableCapacityLinkedBlockIngQueue(1024)) + .rejected(new ThreadPoolExecutor.AbortPolicy()) + .keepAliveTime(6000, TimeUnit.MILLISECONDS) + // 等待终止毫秒 + .awaitTerminationMillis(5000) + // 线程任务装饰器 + .taskDecorator((task) -> { + String placeholderVal = MDC.get("xxx"); + return () -> { + try { + MDC.put("xxx", placeholderVal); + task.run(); + } finally { + MDC.clear(); + } + }; + }) + .dynamicPool() + .build(); + return dynamicExecutor; + } + +} +``` diff --git a/docs/docs/user_docs/getting-started/img/docsVersionDropdown.png b/docs/docs/user_docs/getting-started/img/docsVersionDropdown.png new file mode 100644 index 00000000..97e41646 Binary files /dev/null and b/docs/docs/user_docs/getting-started/img/docsVersionDropdown.png differ diff --git a/docs/docs/user_docs/getting-started/img/grafana-monitor.jpg b/docs/docs/user_docs/getting-started/img/grafana-monitor.jpg new file mode 100644 index 00000000..336bd980 Binary files /dev/null and b/docs/docs/user_docs/getting-started/img/grafana-monitor.jpg differ diff --git a/docs/docs/user_docs/getting-started/img/localeDropdown.png b/docs/docs/user_docs/getting-started/img/localeDropdown.png new file mode 100644 index 00000000..e257edc1 Binary files /dev/null and b/docs/docs/user_docs/getting-started/img/localeDropdown.png differ diff --git a/docs/docs/user_docs/intro.md b/docs/docs/user_docs/intro.md new file mode 100644 index 00000000..51652b6e --- /dev/null +++ b/docs/docs/user_docs/intro.md @@ -0,0 +1,66 @@ +--- +sidebar_position: 1 +--- + +# 简介 + +## 动态可观测线程池框架 + +Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。 + +- 🏗 全局管控 - 管理应用线程池实例; + +- ⚡️ 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等; + +- 🐳 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长; + +- 👀 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示; + +- 👐 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务; + +- 👯‍♀️ 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-core-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-server-start); + +- 🛠 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更; + +- 🌈 中间件适配 - Apache RocketMQ、Dubbo、RabbitMQ、Hystrix 消费线程池运行时数据查看和线程数变更。 + +> 看完有收获,GitHub 右上角帮忙点个小星星,开源作者为爱发电也不容易 🤣 + +## 快速开始 + +对于本地演示目的,请参阅 [Quick start](getting-started/hippo4j-server-start) + +演示环境: +- [http://console.hippo4j.cn/index.html](http://console.hippo4j.cn/index.html) +- 用户/密码:hippo4j/hippo4j + +## 联系我 + +![image](https://user-images.githubusercontent.com/77398366/169202380-6c068acd-700a-41fa-8823-e01c92bb5e88.png) + +## 开发者 + +感谢所有为 Hippo-4J 做出贡献的开发者! + + + +## 我们的荣誉 + +Hippo-4J 获得了一些宝贵的荣誉,这属于每一位对 Hippo-4J 做出过贡献的成员,谢谢各位的付出。 + +![](https://user-images.githubusercontent.com/77398366/170607238-7308c9be-1d63-46a6-852c-eef2e4cf7405.JPG) + +## Stars 趋势 + +![](https://starchart.cc/longtai-cn/hippo4j.svg) + +## 友情链接 + +- [HertzBeat](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需Agent, 强大自定义监控能力。 +- [toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程等核心知识点。 + +## 鸣谢 + +Hippo4J 项目基于或参考以下项目:[Nacos](https://github.com/alibaba/nacos)、[Eureka](https://github.com/Netflix/Eureka)。 + +感谢 JetBrains 提供的免费开源 License diff --git a/docs/docs/user_docs/ops/_category_.json b/docs/docs/user_docs/ops/_category_.json new file mode 100644 index 00000000..d5b7d1e8 --- /dev/null +++ b/docs/docs/user_docs/ops/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "运维指南", + "position": 4, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/user_docs/ops/hippo4j-server-deploy.md b/docs/docs/user_docs/ops/hippo4j-server-deploy.md new file mode 100644 index 00000000..a3b16dc9 --- /dev/null +++ b/docs/docs/user_docs/ops/hippo4j-server-deploy.md @@ -0,0 +1,44 @@ +--- +sidebar_position: 1 +--- + +# hippo4j server 部署 + + +[RELEASE](https://github.com/longtai-cn/hippo4j/releases) 页面下载对应版本并进行解压。 + +## 初始化 + +修改数据库相关信息。 + +```txt +/conf/application.properties +``` + +数据库执行 SQL 脚本。 + +```txt +/conf/hippo4j_manager.sql +``` + +## 直接运行 + +Mac Linux 启动执行。 + +```txt +sh ./bin/startup.sh +``` + +Windows 启动执行。 + +```txt +bin/startup.cmd +``` + +## 访问控制台 + +启动成功后,访问链接。用户名密码:admin 123456 + +```txt +localhost:6691/index.html +``` diff --git a/docs/docs/user_docs/other/_category_.json b/docs/docs/user_docs/other/_category_.json new file mode 100644 index 00000000..a74d7432 --- /dev/null +++ b/docs/docs/user_docs/other/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "其它", + "position": 6, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/user_docs/other/group.md b/docs/docs/user_docs/other/group.md new file mode 100644 index 00000000..702d98b1 --- /dev/null +++ b/docs/docs/user_docs/other/group.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 1 +--- + +# 加群沟通 + + +对于这个项目,是否有什么不一样看法,欢迎在 Issue 一起沟通交流;或者添加小编微信进交流群。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/64E583A0-B1DD-49A3-9AEC-8D246E9D5C12.PNG?x-oss-process=image/resize,h_500,w_800) + + + + diff --git a/docs/docs/user_docs/other/issue.md b/docs/docs/user_docs/other/issue.md new file mode 100644 index 00000000..90121b14 --- /dev/null +++ b/docs/docs/user_docs/other/issue.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +--- + +# 常见问题 + + +- 租户和项目在 Hippo4J 中是什么意思 +- 示例项目为什么会有跨域请求 +- 更新代码后运行时服务端SQL报错 +- okHttp3 call.timeout() 方法不存在 +- 生产环境如何不启用动态线程池 +- Server 端宕机会影响 Client 运行么 +- Hippo4J 的发布方式是怎样的?如何选择正确的版本 +- 群机器人接受不到通知报警 +- 设置线程池参数优先级问题 +- 线程池实例中修改队列容量参数问题 + +## 租户和项目在 Hippo4J 中是什么意思 + +Hippo4J 按照租户、项目、线程池的维度划分。 + +举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目。 + +## 示例项目为什么会有跨域请求 + +~~正常大家在部署时,服务端项目和客户端都在同一网络下,进行内网通信,是没有问题的。~~ + +~~因为示例项目中,服务端部署在外网,而客户端注册到服务端 IP 是内网的,所以不通。~~ + +~~涉及功能:线程池实例-查看、编辑,容器线程池。~~ + +1.2.0 版本后,服务端访问客户端已变成,浏览器访问服务端,服务端转发客户端的形式完成调用,跨域问题已解决。 + +## 更新代码后运行时服务端SQL报错 + +如果更新代码运行功能出错,大概率是因为项目新增或修改了表结构。如版本升级迭代涉及数据库表变更,会额外提供 SQL 变更文件。 + +如若第一次使用,初始化 SQL 脚本地址:[hippo4j_manager.sql](https://github.com/longtai-cn/hippo4j/blob/develop/hippo4j-server/conf/hippo4j_manager.sql)。 + +> 友情提示:每次执行数据库表或数据变更时,一定要保持提前备份的好习惯。 + +## okHttp3 call.timeout() 方法不存在 + +请确保 okHttp3 依赖版本号 >= 3.12.0 + +```xml + + com.squareup.okhttp3 + okhttp + 3.12.0 + +``` + +## 生产环境如何不启用动态线程池 + +测试环境已经引入 Hippo4J,暂时不打算上线生产环境。 + +生产环境指定配置 `spring.dynamic.thread-pool.enable=false`,测试环境和生产环境配置就会隔离。 + +## Server 端宕机会影响 Client 运行么 + +不会。Client 端包含对 Server 端的健康检查机制,Server 端不可用时会停止交互,检查到可用时重新建立连接交互。 + +## Hippo4J 的发布方式是怎样的?如何选择正确的版本 + +Hippo4J 发布时可能会涉及到两端发布,分别是 Server 和 Starter。如无特殊说明,**每一次的版本升级将兼容上一版本代码**。 + +- 如涉及 Server 发布,会在 [发布列表页面](https://github.com/longtai-cn/hippo4j/releases) 创建最新的发行版本; +- 如涉及 Starter 发布,将直接推送 Starter Jar 至中央仓库,Server 包版本不变。 + +## 群机器人接受不到通知报警 + +如果是钉钉机器人,需在机器人配置自定义关键字,才可发送成功。如下所示: + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220530200133377.png?x-oss-process=image/resize,h_500,w_800) + +如果使用 hippo4j-server,请检查在 hippo4j-server 添加的报警通知记录,是否在客户端项目启动前,因为客户端只有在启动时会去 hippo4j-server 拉取报警通知记录。 + +重启客户端项目,会重新拉取最新报警推送配置,问题解决。 + +## 设置线程池参数优先级问题 +- 当使用`@DynamicThreadPool`进行修饰的方法中和在管理界面设置中同时存在的话,则管理界面设置的优先级最高; +- 如果连接service端失败的话,使用`@DynamicThreadPool`进行修饰设置的优先级最高。 + +## 线程池实例中修改队列容量参数问题 + +在线程池管理中添加时,只有当选择队列类型为`ResizableCapacityLinkedBlockingQueue`时,后续再进行修改容量大小时才会实时的刷新修改成功。 \ No newline at end of file diff --git a/docs/docs/user_docs/user_guide/_category_.json b/docs/docs/user_docs/user_guide/_category_.json new file mode 100644 index 00000000..b97e89dc --- /dev/null +++ b/docs/docs/user_docs/user_guide/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "用户手册", + "position": 2, + "link": { + "type": "generated-index", + "description": "帮助想要了解 Hippo4J 的用户快速掌握核心开发理念。" + } +} diff --git a/docs/docs/user_docs/user_guide/alarm.md b/docs/docs/user_docs/user_guide/alarm.md new file mode 100644 index 00000000..067da316 --- /dev/null +++ b/docs/docs/user_docs/user_guide/alarm.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 4 +--- + +# 参数变更 & 报警通知 + + +:::tip +现阶段已集成钉钉、企业微信、飞书的消息推送,后续会持续接入邮箱、短信和自定义通知渠道。 +::: + + +## 创建通知 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220109000449862.png) + +**通知平台** + +- DING:钉钉平台; + +- LARK:飞书平台; + +- WECHAT:企业微信。 + +**通知类型** + +- CONFIG:线程池配置变更推送; + +- ALARM:线程池运行报警推送。 + +**Token** + +获取 DING、LARK、WECHAT 机器人 Token。 + +**报警间隔** + +- CONFIG 类型通知没有报警间隔; + +- ALARM 类型设置报警间隔后,某一节点下的同一线程池指定间隔只会发送一次报警通知。 + +**接收者** + +```tex +多个接收者使用英文逗号 , 分割 (注意不要有空格) +DING:填写手机号 +WECHART:填写user_id会以@的消息发给用户,填写姓名则是普通的@,如:龙台 +LARK:填写ou_开头用户唯一标识会以@的消息发给用户,填写手机号则是普通的@ +``` + +## 钉钉平台 + +| 配置变更 | 报警通知 | +| :---: | :---: | +| ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211013122816688.png) | ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211013113649068.png) | + + +### 自定义关键词 + +添加钉钉机器人后,需在机器人配置自定义关键字,才可发送成功。如下所示: + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220530200133377.png?x-oss-process=image/resize,h_500,w_800) + +## 企业微信 + +| 配置变更 | 报警通知 | +| :---: | :---: | +| ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211203213443242.png) | ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211203213512019.png) | + +## 飞书平台 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220304081729347.png) + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220304081507907.png) diff --git a/docs/docs/user_docs/user_guide/frame.md b/docs/docs/user_docs/user_guide/frame.md new file mode 100644 index 00000000..175c0ba8 --- /dev/null +++ b/docs/docs/user_docs/user_guide/frame.md @@ -0,0 +1,48 @@ +--- +sidebar_position: 1 +--- + +# 为什么写这个框架 + +[美团线程池文章](https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html "美团线程池文章") 介绍中,因为业务对线程池参数没有合理配置,触发过几起生产事故,进而引发了一系列思考。最终决定封装线程池动态参数调整,扩展线程池监控以及消息报警等功能。 + +在开源平台找了挺多动态线程池项目,从功能性以及健壮性而言,个人感觉不满足企业级应用。 + +因为对动态线程池比较感兴趣,加上想写一个有意义的项目,所以决定自己来造一个轻量级的轮子。 + +想给项目起一个简单易记的名字,类似于 Eureka、Nacos、Redis;后和朋友商量,决定命名:**Hippo4J**。 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/动态线程池功能架构-1.jpg) + +## 它解决了什么问题 + +线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理。 + +虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决。 + +- **原生线程池创建时无法合理评估参数问题**。比如功能使用到线程池,遇到突发流量洪峰,频繁拒绝任务。Hippo4J 提供动态修改参数功能,**避免修改线程池参数后重启线上应用**; +- 当线程池运行过程中无法再接受新的任务,此时你想知道 **线程池内线程都在做什么**?Hippo4J 提供查看线程池堆栈功能; +- 某接口频繁超时,内部依赖线程池执行,想要 **查看过去一段时间线程池运行参数情况**。Hippo4J 提供历史数据图表查看功能; +- **原生线程池无任务报警策略**。Hippo4J 内置四种报警策略,分别是:活跃度报警、队列容量报警、拒绝策略报警和运行时间过长报警。 + +Hippo4J 很好解决了这些问题,它将业务中所有线程池统一管理,增强原生线程池系列功能。 + +## 它有什么特性 + +应用系统中线程池并不容易管理。参考美团的设计,Hippo4J 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作。 + +举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目。 + +Hippo4J 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等。 + +- `hippo4j-adapter`:适配对第三方框架中的线程池进行监控,如 Dubbo、RocketMQ、Hystrix 等; +- `hippo4j-auth`:用户、角色、权限等; +- `hippo4j-common`:多个模块公用代码实现; +- `hippo4j-config`:提供线程池准实时参数更新功能; +- `hippo4j-console`:对接 Web 前端项目; +- `hippo4j-core`:核心的依赖,包括配置、核心包装类等; +- `hippo4j-discovery`:提供线程池项目实例注册、续约、下线等功能; +- `hippo4j-example` :示例工程; +- `hippo4j-server` :聚合 Server 端发布需要的模块; +- `hippo4j-spring-boot`:负责与 Server 端交互的依赖组件; +- `hippo4j-tool` :操作日志等组件代码。 diff --git a/docs/docs/user_docs/user_guide/framework.md b/docs/docs/user_docs/user_guide/framework.md new file mode 100644 index 00000000..6403dec0 --- /dev/null +++ b/docs/docs/user_docs/user_guide/framework.md @@ -0,0 +1,64 @@ +--- +sidebar_position: 2 +--- + +# 架构设计介绍 + +简单来说,Hippo4J 从部署的角度上分为两种角色:Server 端和 Client 端。 + +Server 端是 Hippo4J 项目打包出的 Java 进程,功能包括用户权限、线程池监控以及执行持久化的动作。 + +Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar 包负责与 Server 端进行交互。 + +比如拉取 Server 端线程池数据、动态更新线程池配置以及采集上报线程池运行时数据等。 + +## 基础组件 + +### 配置中心(Config) + +配置中心位于 Server 端,它的主要作用是监控 Server 端线程池配置变更,实时通知到 Client 实例执行线程池变更流程。 + +代码设计基于 Nacos 1.x 版本的 **长轮询以及异步 Servlet 机制** 实现。 + + +### 注册中心(Discovery) + +负责管理 Client 端(单机或集群)注册到 Server 端的实例,包括不限于**实例注册、续约、过期剔除** 等操作,代码基于 Eureka 源码实现。 + +上面的配置中心很容易理解,动态线程池参数变更的根本。但是注册中心是用来做什么的? + +注册中心管理 Client 端注册的实例,通过这些实例可以 **实时获取线程池的运行时参数信息**。 + +目前的设计是如此,不排除后续基于 Discovery 做更多的扩展。 + + +### 控制台(Console) + +对接前端项目,包括不限于以下模块管理: + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211107122504126.png) + + +### 抽象工具(Tools) + +顾名思义就是将某些工具单独抽象出来,并以 Module 的形式进行展现,这样的拆分方式有两点好处:**一是更符合职责分离特性,二是需要用到某块功能**,做到拿来即用。 + + +log-record-tool:基于 [mzt-biz-log](https://github.com/mouzt/mzt-biz-log "mzt-biz-log") 的操作日志变更记录组件。 + + +## 消息通知(Notify) + +Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等。 + +目前 Notify 已经接入了钉钉、企业微信和飞书,后续持续集成邮件、短信等通知渠道;并且,Notify 模块提供了消息事件的 SPI 方案,可以接受三方自定义的推送。 + + +## Hippo4j-Spring-Boot-Starter + +熟悉 SpringBoot 的小伙伴对 Starter 应该不会陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在应用内,负责与 Server 端完成交互。 + +## 功能架构 + +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20211105230953626.png) + diff --git a/docs/docs/user_docs/user_guide/quick-start.md b/docs/docs/user_docs/user_guide/quick-start.md new file mode 100644 index 00000000..487f3dd4 --- /dev/null +++ b/docs/docs/user_docs/user_guide/quick-start.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 3 +--- + +# 快速开始 + +:::tip +Hippo4J 支持两种运行模式,依赖配置中心(Hippo4J-Core)或 Hippo4J Server,下文描述接入 Hippo4J Server,[Hippo4J-Core 接入参考此处](/docs/user_docs/getting-started/hippo4j-core-start.md) 。 +::: + +## 如何运行 Demo + +Clone Hippo4J [源代码](https://github.com/longtai-cn/hippo4j),导入初始化 SQL 语句并运行示例程序。 + +1. 导入 [Hippo4J 初始化 SQL 语句](https://github.com/longtai-cn/hippo4j/blob/develop/hippo4j-server/conf/hippo4j_manager.sql); +2. 启动 [Hippo4J-Server](https://github.com/longtai-cn/hippo4j/tree/develop/hippo4j-server) 模块下 ServerApplication 应用类; +3. 启动 [Hippo4J-spring-boot-starter-example](https://github.com/opengoofy/hippo4j/tree/develop/hippo4j-example/hippo4j-spring-boot-starter-example) 模块下 Hippo4JServerExampleApplication 应用类; + + +通过接口修改线程池中的配置。HTTP POST 路径:`http://localhost:6691/hippo4j/v1/cs/configs`,Body 请求体如下: + +```json +{ + "ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改", + "tenantId": "prescription", + "itemId": "dynamic-threadpool-example", + "tpId": "message-produce", + "coreSize": 10, + "maxSize": 15, + "queueType": 9, + "capacity": 100, + "keepAliveTime": 10, + "rejectedType": 3, + "isAlarm": 0, + "capacityAlarm": 90, + "livenessAlarm": 90 +} +``` + + +接口调用成功后,观察 Hippo4j-Example 控制台日志输出,日志输出包括不限于此信息即为成功。 + +```tex +[🔥 MESSAGE-PRODUCE] Changed thread pool. +coreSize :: [2 => 10], maxSize :: [10 => 15], queueType :: [ArrayBlockingQueue => ResizableCapacityLinkedBlockIngQueue], capacity :: [200 => 200], keepAliveTime :: [25 => 10], rejectedType :: [AbortPolicy => DiscardPolicy] +``` + +:::tip +也可以通过 Server 控制台访问,路径:`http://localhost:6691/index.html`。 + +默认用户名密码:admin / 123456 +::: + + +另外,当 Client 集群部署时,可以选择修改所有实例或某一实例。 + +修改请求路径:`http://localhost:6691/hippo4j/v1/cs/configs?identify=xxx`,Body 体同上。 + +`identify`:代表客户端唯一标识,参数不传或为空,会修改该线程池 Client 集群下所有线程池实例参数。 + +线程池参数动态变更通知,或线程池运行时报警,详情参考 [通知报警](/docs/user_docs/user_guide/alarm.md)。 + diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 00000000..4294cffc --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,181 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'HIPPO-4J 文档', + tagline: '动态可观测线程池框架,为业务系统提高线上运行保障能力', + url: 'https://hippo4j.cn', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/hippo4j_favicon.ico', + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'hippo4j', // Usually your GitHub org/user name. + projectName: 'hippo4j.github.io', // Usually your repo name. + deploymentBranch: "main", + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'zh-CN', + locales: ['zh-CN'], + }, + + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + sidebarCollapsed: false, + /*editUrl: 'https://github.com/longtai-cn',*/ + }, + blog: { + showReadingTime: true, + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + }, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + autoCollapseCategories: true, + announcementBar: { + id: 'announcementBar-1', // Increment on change + // content: `⭐️ If you like hippo4j, give it a star on Gitee, thanks.`, + content: `⭐️ 如果您喜欢 hippo4j,请在 GiteeGitHub 上给它一个 star,谢谢!`, + // content: `👉 《小马哥的代码实战课》官方知识星球来啦!!!`, + }, + navbar: { + title: '4J', + logo: { + alt: 'HIPPO-4J 动态可观测线程池框架', + src: 'img/web.png', + }, + items: [ + { + type: 'docSidebar', + docId: 'intro', + position: 'left', + sidebarId: 'user_docs', + label: '文档', + }, + { + type: 'docSidebar', + docId: 'contributor', + position: 'left', + sidebarId: 'community', + label: '社区', + }, + {to: '/blog', label: '博客', position: 'left'}, + /*{ + type: 'docSidebar', + docId: 'intro', + position: 'left', + sidebarId: 'sponsor', + hideable: true, + label: '支持开源', + },*/ + { + href: 'https://xiaomage.info/knowledge-planet', + label: '🥇知识星球', + position: 'right', + }, + /* 国际化 */ + /*{type: 'localeDropdown', position: 'right'},*/ + { + href: 'http://console.hippo4j.cn/index.html', + label: '控制台样例', + position: 'right', + }, + /*{ + href: 'https://gitee.com/mabaiwancn/hippo4j', + label: 'Gitee', + position: 'right', + },*/ + { + href: 'https://github.com/opengoofy/hippo4j', + className: 'header-github-link', + 'aria-label': 'GitHub repository', + position: 'right', + }, + + /*{ + href: 'https://github.com/opengoofy/hippo4j', + label: 'GitHub', + position: 'right', + },*/ + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: '简介', + to: '/docs/user_docs/intro', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: '加群沟通', + href: 'https://hippo4j.cn/docs/user_docs/other/group', + }, + { + label: '微信公众号', + href: 'https://mp.weixin.qq.com/s/diVHYvwiuYH9aWpZDPc27g', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Gitee', + href: 'https://gitee.com/mabaiwancn/hippo4j', + }, + { + label: 'GitHub', + href: 'https://github.com/opengoofy/hippo4j', + }, + { + label: '公司登记', + href: 'https://github.com/opengoofy/hippo4j/issues/13', + }, + ], + }, + ], + copyright: `Copyright © 2021-2022 小马哥版权所有 京ICP备2021038095号-2 +`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + additionalLanguages: ['java'], + }, + }), +}; + +module.exports = config; diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..0b2167aa --- /dev/null +++ b/docs/package.json @@ -0,0 +1,40 @@ +{ + "name": "website", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "2.0.0-beta.21", + "@docusaurus/preset-classic": "2.0.0-beta.21", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.1.1", + "prism-react-renderer": "^1.3.3", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.0.0-beta.21" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 00000000..112da355 --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,50 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + user_docs: [ + { + type: 'autogenerated', + dirName: 'user_docs', + }, + ], + community: [ + { + type: 'autogenerated', + dirName: 'community', + }, + ], + + sponsor: [ + { + type: 'autogenerated', + dirName: 'sponsor', + }, + ], + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/docs/src/components/HomepageFeatures/index.js b/docs/src/components/HomepageFeatures/index.js new file mode 100644 index 00000000..59e97a95 --- /dev/null +++ b/docs/src/components/HomepageFeatures/index.js @@ -0,0 +1,61 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; + +const FeatureList = [ + { + title: '动态变更', + Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, + description: ( + <> + 应用运行时动态变更线程池参数,包括不限于核心、最大线程、阻塞队列大小和拒绝策略等;支持应用集群线程池配置差异化 + + ), + }, + { + title: '自定义报警', + Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, + description: ( + <> + 应用线程池运行时埋点,提供四种报警维度,线程池过载、阻塞队列容量、运行超长以及拒绝策略报警,并支持自定义时间内不重复报警 + + ), + }, + { + title: '运行监控', + Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, + description: ( + <> + 支持自定义时长的线程池运行数据采集存储,并提供可视化大屏监控运行指标;同时也支持 Prometheus 采集监控,帮助排查以及确定线程池问题 + + ), + }, +]; + +function Feature({Svg, title, description}) { + return ( +
+
+ +
+
+

{title}

+

{description}

+
+
+ ); +} + +export default function HomepageFeatures() { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 00000000..b248eb2e --- /dev/null +++ b/docs/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,11 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 00000000..9b09dfb2 --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,211 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +:root { + /* + See css var + hsl color palette technique: + https://blog.maximeheckel.com/posts/the-power-of-composition-with-css-variables/ + */ + --site-primary-hue-saturation: 167 68%; + --site-primary-hue-saturation-light: 167 56%; /* do we really need this extra one? */ + --site-color-favorite-background: #f6fdfd; + --site-color-tooltip: #fff; + --site-color-tooltip-background: #353738; + --site-color-svg-icon-favorite: #e9669e; + --site-color-checkbox-checked-bg: hsl(167deg 56% 73% / 25%); + --site-color-feedback-background: #fff; +} + +html[data-theme='dark'] { + --site-color-feedback-background: #f0f8ff; + --site-color-favorite-background: #1d1e1e; + --site-color-checkbox-checked-bg: hsl(167deg 56% 73% / 10%); +} + +[data-theme='light'] { + --ifm-color-primary: hsl(var(--site-primary-hue-saturation) 30%); + --ifm-color-primary-dark: hsl(var(--site-primary-hue-saturation) 26%); + --ifm-color-primary-darker: hsl(var(--site-primary-hue-saturation) 23%); + --ifm-color-primary-darkest: hsl(var(--site-primary-hue-saturation) 17%); + + --ifm-color-primary-light: hsl(var(--site-primary-hue-saturation-light) 39%); + --ifm-color-primary-lighter: hsl( + var(--site-primary-hue-saturation-light) 47% + ); + --ifm-color-primary-lightest: hsl( + var(--site-primary-hue-saturation-light) 58% + ); +} + +[data-theme='dark'] { + --ifm-color-primary: hsl(var(--site-primary-hue-saturation) 45%); + --ifm-color-primary-dark: hsl(var(--site-primary-hue-saturation) 41%); + --ifm-color-primary-darker: hsl(var(--site-primary-hue-saturation) 38%); + --ifm-color-primary-darkest: hsl(var(--site-primary-hue-saturation) 32%); + + --ifm-color-primary-light: hsl(var(--site-primary-hue-saturation-light) 54%); + --ifm-color-primary-lighter: hsl( + var(--site-primary-hue-saturation-light) 62% + ); + --ifm-color-primary-lightest: hsl( + var(--site-primary-hue-saturation-light) 73% + ); +} + +.docusaurus-highlight-code-line { + background-color: rgb(0 0 0 / 10%); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +[data-theme='dark'] .docusaurus-highlight-code-line { + background-color: rgb(66 66 66 / 30%); +} + +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link::before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; +} + +[data-theme='dark'] .header-github-link::before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; +} + +.footer--dark { + --ifm-footer-background-color: #2b3137; +} + +.unique-tabs .tabs__item { + line-height: 16px; + margin-right: 8px; +} + +.unique-tabs .tabs__item--active { + border: 0; + color: #fff; + border-radius: var(--ifm-global-radius); + background-color: var(--ifm-tabs-color-active); +} + +[data-theme='light'] .themedDocusaurus [fill='#FFFF50'] { + fill: greenyellow; +} + +[data-theme='dark'] .themedDocusaurus [fill='#FFFF50'] { + fill: seagreen; +} + +[data-theme='light'] .DocSearch { + /* --docsearch-primary-color: var(--ifm-color-primary); */ + /* --docsearch-text-color: var(--ifm-font-color-base); */ + --docsearch-muted-color: var(--ifm-color-emphasis-700); + --docsearch-container-background: rgb(94 100 112 / 70%); + /* Modal */ + --docsearch-modal-background: var(--ifm-color-secondary-lighter); + /* Search box */ + --docsearch-searchbox-background: var(--ifm-color-secondary); + --docsearch-searchbox-focus-background: var(--ifm-color-white); + /* Hit */ + --docsearch-hit-color: var(--ifm-font-color-base); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--ifm-color-white); + /* Footer */ + --docsearch-footer-background: var(--ifm-color-white); +} + +[data-theme='dark'] .DocSearch { + --docsearch-text-color: var(--ifm-font-color-base); + --docsearch-muted-color: var(--ifm-color-secondary-darkest); + --docsearch-container-background: rgb(47 55 69 / 70%); + /* Modal */ + --docsearch-modal-background: var(--ifm-background-color); + /* Search box */ + --docsearch-searchbox-background: var(--ifm-background-color); + --docsearch-searchbox-focus-background: var(--ifm-color-black); + /* Hit */ + --docsearch-hit-color: var(--ifm-font-color-base); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--ifm-color-emphasis-100); + /* Footer */ + --docsearch-footer-background: var(--ifm-background-surface-color); + --docsearch-key-gradient: linear-gradient( + -26.5deg, + var(--ifm-color-emphasis-200) 0%, + var(--ifm-color-emphasis-100) 100% + ); +} + +div[class^='announcementBar_'] { + --site-announcement-bar-stripe-color1: hsl( + var(--site-primary-hue-saturation) 85% + ); + --site-announcement-bar-stripe-color2: hsl( + var(--site-primary-hue-saturation) 95% + ); + background: repeating-linear-gradient( + 35deg, + var(--site-announcement-bar-stripe-color1), + var(--site-announcement-bar-stripe-color1) 20px, + var(--site-announcement-bar-stripe-color2) 10px, + var(--site-announcement-bar-stripe-color2) 40px + ); + font-weight: bold; +} + +.red > a { + color: red; +} + +.screen-reader-only { + border: 0; + clip: rect(0 0 0 0); + clip-path: polygon(0 0, 0 0, 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} + +[data-theme='light'] img[src$='#gh-dark-mode-only'], +[data-theme='dark'] img[src$='#gh-light-mode-only'] { + display: none; +} + +/* Used to test CSS insertion order */ +.test-marker-site-custom-css-unique-rule { + content: 'site-custom-css-unique-rule'; +} + +@media only screen and (max-width: 996px) { + .video-container { + position: relative; + overflow: hidden; + width: 100%; + max-width: 560px; + margin: 0 auto; + padding-top: 56.25%; + } + + .video-container iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js new file mode 100644 index 00000000..557e5928 --- /dev/null +++ b/docs/src/pages/index.js @@ -0,0 +1,41 @@ +import React from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Layout from '@theme/Layout'; +import HomepageFeatures from '@site/src/components/HomepageFeatures'; + +import styles from './index.module.css'; + +function HomepageHeader() { + const {siteConfig} = useDocusaurusContext(); + return ( +
+
+

{siteConfig.title}

+

{siteConfig.tagline}

+
+ + 快速开始 - 5min ⏱️ + +
+
+
+ ); +} + +export default function Home() { + const {siteConfig} = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); +} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css new file mode 100644 index 00000000..9f71a5da --- /dev/null +++ b/docs/src/pages/index.module.css @@ -0,0 +1,23 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 996px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md new file mode 100644 index 00000000..9756c5b6 --- /dev/null +++ b/docs/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/static/img/docusaurus.png b/docs/static/img/docusaurus.png new file mode 100644 index 00000000..f458149e Binary files /dev/null and b/docs/static/img/docusaurus.png differ diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 00000000..c01d54bc Binary files /dev/null and b/docs/static/img/favicon.ico differ diff --git a/docs/static/img/favicon.png b/docs/static/img/favicon.png new file mode 100644 index 00000000..3fd750f5 Binary files /dev/null and b/docs/static/img/favicon.png differ diff --git a/docs/static/img/hippo4j_favicon.ico b/docs/static/img/hippo4j_favicon.ico new file mode 100644 index 00000000..264e6fc6 Binary files /dev/null and b/docs/static/img/hippo4j_favicon.ico differ diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg new file mode 100644 index 00000000..9db6d0d0 --- /dev/null +++ b/docs/static/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/static/img/undraw_docusaurus_mountain.svg b/docs/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 00000000..af961c49 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_react.svg b/docs/static/img/undraw_docusaurus_react.svg new file mode 100644 index 00000000..94b5cf08 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_tree.svg b/docs/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 00000000..d9161d33 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/web.png b/docs/static/img/web.png new file mode 100644 index 00000000..6c9d3b00 Binary files /dev/null and b/docs/static/img/web.png differ diff --git a/hippo4j-adapter/hippo4j-adapter-base/pom.xml b/hippo4j-adapter/hippo4j-adapter-base/pom.xml new file mode 100644 index 00000000..fd7520c7 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-base + hippo4j-adapter-base + + + + cn.hippo4j + hippo4j-common + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapter.java new file mode 100644 index 00000000..20b39602 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapter.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import java.util.List; + +/** + * Adapt to the thread pool of the third-party framework. + */ +public interface ThreadPoolAdapter { + + /** + * Framework thread pool identification. + * + * @return + */ + String mark(); + + /** + * Get the core parameters of the framework thread pool. + * + * @param identify Thread pool unique id + * @return + */ + ThreadPoolAdapterState getThreadPoolState(String identify); + + /** + * Get the core parameters of the framework thread pool. + * + * @return + */ + default List getThreadPoolStates() { + return null; + } + + /** + * Modify the core parameters of the framework thread pool. + * + * @param threadPoolAdapterParameter Thread pool parameters to be modified + * @return + */ + boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter); +} diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java new file mode 100644 index 00000000..0688192d --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterBeanContainer.java @@ -0,0 +1,41 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import com.google.common.collect.Maps; +import org.springframework.beans.factory.InitializingBean; + +import java.util.Map; + +/** + * Thread-pool adapter bean container. + */ +public class ThreadPoolAdapterBeanContainer implements InitializingBean { + + /** + * Store three-party thread pool framework bean instances. + */ + public static final Map THREAD_POOL_ADAPTER_BEAN_CONTAINER = Maps.newConcurrentMap(); + + @Override + public void afterPropertiesSet() throws Exception { + Map threadPoolAdapterMap = ApplicationContextHolder.getBeansOfType(ThreadPoolAdapter.class); + threadPoolAdapterMap.forEach((key, val) -> THREAD_POOL_ADAPTER_BEAN_CONTAINER.put(val.mark(), val)); + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterCacheConfig.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterCacheConfig.java new file mode 100644 index 00000000..07b2c73c --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterCacheConfig.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import lombok.Data; + +import java.util.List; + +/** + * Thread-pool adapter cache config. + */ +@Data +public class ThreadPoolAdapterCacheConfig { + + /** + * Mark + */ + private String mark; + + /** + * Tenant item key + */ + private String tenantItemKey; + + /** + * Client identify + */ + private String clientIdentify; + + /** + * Active + */ + private String active; + + /** + * Client address + */ + private String clientAddress; + + /** + * Thread-pool adapter states + */ + private List threadPoolAdapterStates; +} diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterParameter.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterParameter.java new file mode 100644 index 00000000..c68129eb --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterParameter.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import lombok.Data; + +/** + * Thread pool adapter parameter info. + */ +@Data +public class ThreadPoolAdapterParameter { + + /** + * Mark + */ + private String mark; + + /** + * Thread-pool key + */ + private String threadPoolKey; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; +} diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterRegisterAction.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterRegisterAction.java new file mode 100644 index 00000000..0d380f15 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterRegisterAction.java @@ -0,0 +1,43 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import java.util.List; +import java.util.Map; + +/** + * Provide registration for each adaptation + */ +public interface ThreadPoolAdapterRegisterAction { + + /** + * Get thread pool adapter cache configs. + * + * @param threadPoolAdapterMap + * @return List + */ + List getThreadPoolAdapterCacheConfigs(Map threadPoolAdapterMap); + + /** + * Do register. + * + * @param cacheConfigList + * @return + */ + void doRegister(List cacheConfigList); +} diff --git a/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterState.java b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterState.java new file mode 100644 index 00000000..b46c6c26 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-base/src/main/java/cn/hippo4j/adapter/base/ThreadPoolAdapterState.java @@ -0,0 +1,67 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.base; + +import lombok.Data; + +/** + * Thread pool adapter state info. + */ +@Data +public class ThreadPoolAdapterState { + + /** + * Thread-pool keu + */ + private String threadPoolKey; + + /** + * Active + */ + private String active; + + /** + * identify + */ + private String identify; + + /** + * Client address + */ + private String clientAddress; + + /** + * Core size + */ + private Integer coreSize; + + /** + * Maximum size + */ + private Integer maximumSize; + + /** + * Blocking queue type + */ + private String blockingQueueType; + + /** + * Blocking queue capacity + */ + private Integer blockingQueueCapacity; +} diff --git a/hippo4j-adapter/hippo4j-adapter-dubbo/pom.xml b/hippo4j-adapter/hippo4j-adapter-dubbo/pom.xml new file mode 100644 index 00000000..2cd81f52 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-dubbo/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-dubbo + + + 3.0.5 + + + + + cn.hippo4j + hippo4j-adapter-base + + + + org.apache.dubbo + dubbo + ${dubbo.version} + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java new file mode 100644 index 00000000..e747d9ad --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-dubbo/src/main/java/cn/hippo4j/adapter/dubbo/DubboThreadPoolAdapter.java @@ -0,0 +1,118 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.dubbo; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.toolkit.ReflectUtil; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.common.Version; +import org.apache.dubbo.common.extension.ExtensionLoader; +import org.apache.dubbo.common.store.DataStore; +import org.apache.dubbo.common.threadpool.manager.ExecutorRepository; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * Dubbo thread-pool adapter. + */ +@Slf4j +public class DubboThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private final Map DUBBO_PROTOCOL_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return "Dubbo"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState threadPoolAdapterState = new ThreadPoolAdapterState(); + ThreadPoolExecutor executor = DUBBO_PROTOCOL_EXECUTOR.get(identify); + if (executor == null) { + log.warn("[{}] Dubbo consuming thread pool not found.", identify); + return threadPoolAdapterState; + } + threadPoolAdapterState.setThreadPoolKey(identify); + threadPoolAdapterState.setCoreSize(executor.getCorePoolSize()); + threadPoolAdapterState.setMaximumSize(executor.getMaximumPoolSize()); + return threadPoolAdapterState; + } + + @Override + public List getThreadPoolStates() { + List threadPoolAdapterStates = new ArrayList<>(); + DUBBO_PROTOCOL_EXECUTOR.forEach((kel, val) -> threadPoolAdapterStates.add(getThreadPoolState(String.valueOf(val)))); + return threadPoolAdapterStates; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + String threadPoolKey = threadPoolAdapterParameter.getThreadPoolKey(); + ThreadPoolExecutor executor = DUBBO_PROTOCOL_EXECUTOR.get(threadPoolAdapterParameter.getThreadPoolKey()); + if (executor == null) { + log.warn("[{}] Dubbo consuming thread pool not found.", threadPoolKey); + return false; + } + int originalCoreSize = executor.getCorePoolSize(); + int originalMaximumPoolSize = executor.getMaximumPoolSize(); + executor.setCorePoolSize(threadPoolAdapterParameter.getCorePoolSize()); + executor.setMaximumPoolSize(threadPoolAdapterParameter.getMaximumPoolSize()); + log.info("[{}] Dubbo consumption thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, executor.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, executor.getMaximumPoolSize())); + return true; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + boolean is2xVersion = false; + String poolKey = ExecutorService.class.getName(); + if (Version.getIntVersion(Version.getVersion()) < 3000000) { + is2xVersion = true; + } + try { + if (is2xVersion) { + DataStore dataStore = ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension(); + Map executors = dataStore.get(poolKey); + executors.forEach((key, value) -> DUBBO_PROTOCOL_EXECUTOR.put(key, (ThreadPoolExecutor) value)); + return; + } + ExecutorRepository executorRepository = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension(); + ConcurrentMap> data = + (ConcurrentMap>) ReflectUtil.getFieldValue(executorRepository, "data"); + ConcurrentMap executorServiceMap = data.get(poolKey); + executorServiceMap.forEach((key, value) -> DUBBO_PROTOCOL_EXECUTOR.put(String.valueOf(key), (ThreadPoolExecutor) value)); + } catch (Exception ex) { + log.error("Failed to get Dubbo {}.X protocol thread pool", is2xVersion ? "2" : "3", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/pom.xml b/hippo4j-adapter/hippo4j-adapter-hystrix/pom.xml new file mode 100644 index 00000000..7387777a --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-hystrix + + + + cn.hippo4j + hippo4j-adapter-base + + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + ${spring-cloud-starter-netflix-hystrix.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java new file mode 100644 index 00000000..34e01088 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/HystrixThreadPoolAdapter.java @@ -0,0 +1,239 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.hystrix; + +import cn.hippo4j.adapter.base.*; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.netflix.hystrix.HystrixThreadPool; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * hystrix thread-pool adapter. + */ +@Slf4j +public class HystrixThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private static final String THREAD_POOL_FIELD = "threadPool"; + + private static final String THREAD_POOLS_FIELD = "threadPools"; + + private final Map HYSTRIX_CONSUME_EXECUTOR = Maps.newHashMap(); + + private ThreadPoolAdapterScheduler threadPoolAdapterScheduler; + + public HystrixThreadPoolAdapter(ThreadPoolAdapterScheduler threadPoolAdapterScheduler) { + this.threadPoolAdapterScheduler = threadPoolAdapterScheduler; + } + + @Override + public String mark() { + return "Hystrix"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState result = new ThreadPoolAdapterState(); + ThreadPoolExecutor threadPoolExecutor = HYSTRIX_CONSUME_EXECUTOR.get(identify); + if (threadPoolExecutor != null) { + result.setThreadPoolKey(identify); + result.setCoreSize(threadPoolExecutor.getCorePoolSize()); + result.setMaximumSize(threadPoolExecutor.getMaximumPoolSize()); + return result; + } + log.warn("[{}] Hystrix thread pool not found.", identify); + return result; + } + + @Override + public List getThreadPoolStates() { + List threadPoolAdapterStates = new ArrayList<>(); + HYSTRIX_CONSUME_EXECUTOR.forEach((kel, val) -> threadPoolAdapterStates.add(getThreadPoolState(kel))); + return threadPoolAdapterStates; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + String threadPoolKey = threadPoolAdapterParameter.getThreadPoolKey(); + ThreadPoolExecutor threadPoolExecutor = HYSTRIX_CONSUME_EXECUTOR.get(threadPoolKey); + if (threadPoolExecutor == null) { + log.warn("[{}] Hystrix thread pool not found.", threadPoolKey); + return false; + } + int originalCoreSize = threadPoolExecutor.getCorePoolSize(); + int originalMaximumPoolSize = threadPoolExecutor.getMaximumPoolSize(); + threadPoolExecutor.setCorePoolSize(threadPoolAdapterParameter.getCorePoolSize()); + threadPoolExecutor.setMaximumPoolSize(threadPoolAdapterParameter.getMaximumPoolSize()); + log.info("[{}] Hystrix thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, threadPoolExecutor.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, threadPoolExecutor.getMaximumPoolSize())); + return true; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + ScheduledExecutorService scheduler = threadPoolAdapterScheduler.getScheduler(); + int taskIntervalSeconds = threadPoolAdapterScheduler.getTaskIntervalSeconds(); + // Periodically update the Hystrix thread pool. + HystrixThreadPoolRefreshTask hystrixThreadPoolRefreshTask = new HystrixThreadPoolRefreshTask(scheduler, taskIntervalSeconds); + scheduler.schedule(hystrixThreadPoolRefreshTask, taskIntervalSeconds, TimeUnit.SECONDS); + // Periodically refresh registration. + ThreadPoolAdapterRegisterAction threadPoolAdapterRegisterAction = ApplicationContextHolder.getBean(ThreadPoolAdapterRegisterAction.class); + Map beansOfType = ApplicationContextHolder.getBeansOfType(this.getClass()); + Map map = Maps.newHashMap(beansOfType); + ThreadPoolAdapterRegisterTask threadPoolAdapterRegisterTask = new ThreadPoolAdapterRegisterTask(scheduler, taskIntervalSeconds, map, threadPoolAdapterRegisterAction); + scheduler.schedule(threadPoolAdapterRegisterTask, threadPoolAdapterScheduler.getTaskIntervalSeconds(), TimeUnit.SECONDS); + } + + public void hystrixThreadPoolRefresh() { + try { + Class factoryClass = HystrixThreadPool.Factory.class; + Field threadPoolsField = factoryClass.getDeclaredField(THREAD_POOLS_FIELD); + threadPoolsField.setAccessible(true); + ConcurrentHashMap threadPools = + (ConcurrentHashMap) threadPoolsField.get(factoryClass); + if (CollectionUtil.isNotEmpty(threadPools)) { + for (Map.Entry stringHystrixThreadPoolEntry : threadPools.entrySet()) { + String key = stringHystrixThreadPoolEntry.getKey(); + HystrixThreadPool value = stringHystrixThreadPoolEntry.getValue(); + if (value instanceof HystrixThreadPool.HystrixThreadPoolDefault) { + HystrixThreadPool.HystrixThreadPoolDefault hystrixThreadPoolDefault = + (HystrixThreadPool.HystrixThreadPoolDefault) value; + Class hystrixThreadPoolDefaultClass = hystrixThreadPoolDefault.getClass(); + Field threadPoolField = hystrixThreadPoolDefaultClass.getDeclaredField(THREAD_POOL_FIELD); + threadPoolField.setAccessible(true); + ThreadPoolExecutor threadPoolExecutor = + (ThreadPoolExecutor) threadPoolField.get(hystrixThreadPoolDefault); + HYSTRIX_CONSUME_EXECUTOR.put(key, threadPoolExecutor); + } + } + } + } catch (Exception ex) { + log.error("Failed to get Hystrix thread pool.", ex); + } + } + + private boolean compareThreadPoolAdapterCacheConfigs(List newThreadPoolAdapterCacheConfigs, + List oldThreadPoolAdapterCacheConfigs) { + boolean registerFlag = false; + Map> newThreadPoolAdapterCacheConfigMap = + newThreadPoolAdapterCacheConfigs.stream().collect(Collectors.toMap( + ThreadPoolAdapterCacheConfig::getMark, ThreadPoolAdapterCacheConfig::getThreadPoolAdapterStates, (k1, k2) -> k2)); + Map> oldThreadPoolAdapterCacheConfigMap = + oldThreadPoolAdapterCacheConfigs.stream().collect(Collectors.toMap( + ThreadPoolAdapterCacheConfig::getMark, ThreadPoolAdapterCacheConfig::getThreadPoolAdapterStates, (k1, k2) -> k2)); + for (Map.Entry> entry : newThreadPoolAdapterCacheConfigMap.entrySet()) { + String key = entry.getKey(); + List newValue = entry.getValue(); + List oldValue = oldThreadPoolAdapterCacheConfigMap.get(key); + if (oldValue == null) { + registerFlag = true; + break; + } else { + if (newValue.size() != oldValue.size()) { + registerFlag = true; + break; + } + } + } + return registerFlag; + } + + /** + * Hystrix Thread Pool Refresh Task + */ + class HystrixThreadPoolRefreshTask implements Runnable { + + private ScheduledExecutorService scheduler; + + private int taskIntervalSeconds; + + public HystrixThreadPoolRefreshTask(ScheduledExecutorService scheduler, int taskIntervalSeconds) { + this.scheduler = scheduler; + this.taskIntervalSeconds = taskIntervalSeconds; + } + + @Override + public void run() { + try { + hystrixThreadPoolRefresh(); + } finally { + if (!scheduler.isShutdown()) { + scheduler.schedule(this, taskIntervalSeconds, TimeUnit.MILLISECONDS); + } + } + } + } + + class ThreadPoolAdapterRegisterTask implements Runnable { + + private ScheduledExecutorService scheduler; + + private int taskIntervalSeconds; + + Map threadPoolAdapterMap; + + ThreadPoolAdapterRegisterAction threadPoolAdapterRegisterAction; + + private List cacheConfigList = Lists.newArrayList(); + + public ThreadPoolAdapterRegisterTask(ScheduledExecutorService scheduler, int taskIntervalSeconds, + Map threadPoolAdapterMap, + ThreadPoolAdapterRegisterAction threadPoolAdapterRegisterAction) { + this.scheduler = scheduler; + this.taskIntervalSeconds = taskIntervalSeconds; + this.threadPoolAdapterMap = threadPoolAdapterMap; + this.threadPoolAdapterRegisterAction = threadPoolAdapterRegisterAction; + } + + @Override + public void run() { + try { + List newThreadPoolAdapterCacheConfigs = threadPoolAdapterRegisterAction.getThreadPoolAdapterCacheConfigs(threadPoolAdapterMap); + boolean registerFlag = compareThreadPoolAdapterCacheConfigs(newThreadPoolAdapterCacheConfigs, cacheConfigList); + cacheConfigList = newThreadPoolAdapterCacheConfigs; + if (registerFlag) { + threadPoolAdapterRegisterAction.doRegister(cacheConfigList); + } + } catch (Exception ex) { + log.error("Register task error.", ex); + } finally { + if (!scheduler.isShutdown()) { + scheduler.schedule(this, taskIntervalSeconds, TimeUnit.MILLISECONDS); + } + } + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java new file mode 100644 index 00000000..c3063b7e --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-hystrix/src/main/java/cn/hippo4j/adapter/hystrix/ThreadPoolAdapterScheduler.java @@ -0,0 +1,51 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.hystrix; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +/** + * thread pool adapter schedule. + */ +@Slf4j +public class ThreadPoolAdapterScheduler { + + private static final int TASK_INTERVAL_SECONDS = 10; + + private final ScheduledExecutorService scheduler; + + public ThreadPoolAdapterScheduler() { + scheduler = new ScheduledThreadPoolExecutor(2, + new ThreadFactoryBuilder() + .setNameFormat("threadPoolAdapter") + .setDaemon(true) + .build()); + } + + public ScheduledExecutorService getScheduler() { + return scheduler; + } + + public int getTaskIntervalSeconds() { + return TASK_INTERVAL_SECONDS; + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-kafka/pom.xml b/hippo4j-adapter/hippo4j-adapter-kafka/pom.xml new file mode 100644 index 00000000..e2fa58e1 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-kafka/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-kafka + + + + cn.hippo4j + hippo4j-adapter-base + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-kafka/src/main/java/cn/hippo4j/adapter/kafka/KafkaThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-kafka/src/main/java/cn/hippo4j/adapter/kafka/KafkaThreadPoolAdapter.java new file mode 100644 index 00000000..e27ced8a --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-kafka/src/main/java/cn/hippo4j/adapter/kafka/KafkaThreadPoolAdapter.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.kafka; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; + +/** + * Kafka thread-pool adapter. + */ +@Slf4j +public class KafkaThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + @Override + public String mark() { + return "Kafka"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + return null; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + return false; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-rabbitmq/pom.xml b/hippo4j-adapter/hippo4j-adapter-rabbitmq/pom.xml new file mode 100644 index 00000000..6a3d337f --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-rabbitmq/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-rabbitmq + + + + cn.hippo4j + hippo4j-adapter-base + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java new file mode 100644 index 00000000..a8d8e97b --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-rabbitmq/src/main/java/cn/hippo4j/adapter/rabbitmq/RabbitMQThreadPoolAdapter.java @@ -0,0 +1,117 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.rabbitmq; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.toolkit.ReflectUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * RabbitMQ thread-pool adapter. + */ +@Slf4j +@RequiredArgsConstructor +public class RabbitMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private static final String RABBITMQ = "RabbitMQ"; + + private static final String FiledName = "executorService"; + + /** + * TODO Configurable name + */ + private static final String RABBITMQ_EXECUTOR_SERVICE = "Rabbitmq_Executor_Service"; + + private final AbstractConnectionFactory abstractConnectionFactory; + + private final Map RABBITMQ_THREAD_POOL_TASK_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return RABBITMQ; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState threadPoolAdapterState = new ThreadPoolAdapterState(); + ThreadPoolExecutor threadPoolTaskExecutor = RABBITMQ_THREAD_POOL_TASK_EXECUTOR.get(identify); + threadPoolAdapterState.setThreadPoolKey(identify); + if (Objects.nonNull(threadPoolTaskExecutor)) { + threadPoolAdapterState.setCoreSize(threadPoolTaskExecutor.getCorePoolSize()); + threadPoolAdapterState.setMaximumSize(threadPoolTaskExecutor.getMaximumPoolSize()); + } + return threadPoolAdapterState; + } + + @Override + public List getThreadPoolStates() { + List adapterStateList = Lists.newArrayList(); + RABBITMQ_THREAD_POOL_TASK_EXECUTOR.forEach( + (key, val) -> adapterStateList.add(getThreadPoolState(key))); + return adapterStateList; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + String threadPoolKey = threadPoolAdapterParameter.getThreadPoolKey(); + ThreadPoolExecutor threadPoolTaskExecutor = RABBITMQ_THREAD_POOL_TASK_EXECUTOR.get(threadPoolKey); + if (Objects.nonNull(threadPoolTaskExecutor)) { + int originalCoreSize = threadPoolTaskExecutor.getCorePoolSize(); + int originalMaximumPoolSize = threadPoolTaskExecutor.getMaximumPoolSize(); + threadPoolTaskExecutor.setMaximumPoolSize(threadPoolAdapterParameter.getMaximumPoolSize()); + threadPoolTaskExecutor.setCorePoolSize(threadPoolAdapterParameter.getCorePoolSize()); + log.info("[{}] Rabbitmq consumption thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, threadPoolAdapterParameter.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, threadPoolAdapterParameter.getMaximumPoolSize())); + return true; + } + log.warn("[{}] Rabbitmq consuming thread pool not found.", threadPoolKey); + return false; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + ExecutorService executor = (ExecutorService) ReflectUtil.getFieldValue(abstractConnectionFactory, FiledName); + if (Objects.nonNull(executor)) { + if (executor instanceof ThreadPoolExecutor) { + ThreadPoolExecutor threadPoolTaskExecutor = (ThreadPoolExecutor) executor; + RABBITMQ_THREAD_POOL_TASK_EXECUTOR.put(RABBITMQ_EXECUTOR_SERVICE, threadPoolTaskExecutor); + log.info("Rabbitmq executor name {}", RABBITMQ_EXECUTOR_SERVICE); + } else { + log.warn("Custom thread pools only support ThreadPoolExecutor"); + } + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-rocketmq/pom.xml b/hippo4j-adapter/hippo4j-adapter-rocketmq/pom.xml new file mode 100644 index 00000000..35417071 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-rocketmq/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-rocketmq + + + + cn.hippo4j + hippo4j-adapter-base + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + ${rocketmq.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java new file mode 100644 index 00000000..d1f7b093 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-rocketmq/src/main/java/cn/hippo4j/adapter/rocketmq/RocketMQThreadPoolAdapter.java @@ -0,0 +1,110 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.rocketmq; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.ReflectUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.impl.consumer.ConsumeMessageService; +import org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * RocketMQ thread-pool adapter. + */ +@Slf4j +public class RocketMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private final Map ROCKET_MQ_CONSUME_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return "RocketMQ"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState result = new ThreadPoolAdapterState(); + ThreadPoolExecutor rocketMQConsumeExecutor = ROCKET_MQ_CONSUME_EXECUTOR.get(identify); + if (rocketMQConsumeExecutor != null) { + result.setThreadPoolKey(identify); + result.setCoreSize(rocketMQConsumeExecutor.getCorePoolSize()); + result.setMaximumSize(rocketMQConsumeExecutor.getMaximumPoolSize()); + return result; + } + log.warn("[{}] RocketMQ consuming thread pool not found.", identify); + return result; + } + + @Override + public List getThreadPoolStates() { + List adapterStateList = Lists.newArrayList(); + ROCKET_MQ_CONSUME_EXECUTOR.forEach( + (key, val) -> adapterStateList.add(getThreadPoolState(key))); + return adapterStateList; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + String threadPoolKey = threadPoolAdapterParameter.getThreadPoolKey(); + ThreadPoolExecutor rocketMQConsumeExecutor = ROCKET_MQ_CONSUME_EXECUTOR.get(threadPoolKey); + if (rocketMQConsumeExecutor != null) { + int originalCoreSize = rocketMQConsumeExecutor.getCorePoolSize(); + int originalMaximumPoolSize = rocketMQConsumeExecutor.getMaximumPoolSize(); + rocketMQConsumeExecutor.setCorePoolSize(threadPoolAdapterParameter.getCorePoolSize()); + rocketMQConsumeExecutor.setMaximumPoolSize(threadPoolAdapterParameter.getMaximumPoolSize()); + log.info("[{}] RocketMQ consumption thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, rocketMQConsumeExecutor.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, rocketMQConsumeExecutor.getMaximumPoolSize())); + return true; + } + log.warn("[{}] RocketMQ consuming thread pool not found.", threadPoolKey); + return false; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + Map containerMap = + ApplicationContextHolder.getBeansOfType(DefaultRocketMQListenerContainer.class); + try { + for (DefaultRocketMQListenerContainer container : containerMap.values()) { + DefaultMQPushConsumer defaultMQPushConsumer = container.getConsumer(); + if (defaultMQPushConsumer != null) { + ConsumeMessageService consumeMessageService = defaultMQPushConsumer.getDefaultMQPushConsumerImpl().getConsumeMessageService(); + ThreadPoolExecutor consumeExecutor = (ThreadPoolExecutor) ReflectUtil.getFieldValue(consumeMessageService, "consumeExecutor"); + ROCKET_MQ_CONSUME_EXECUTOR.put(container.getConsumerGroup(), consumeExecutor); + } + } + } catch (Exception ex) { + log.error("Failed to get RocketMQ thread pool.", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/pom.xml b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/pom.xml new file mode 100644 index 00000000..a87c277e --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-spring-cloud-stream-kafka + + + + cn.hippo4j + hippo4j-adapter-base + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaThreadPoolAdapter.java new file mode 100644 index 00000000..4cc49356 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaThreadPoolAdapter.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.springcloud.stream.kafka; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; + +import java.util.List; + +/** + * Spring cloud stream kafka thread-pool adapter. + */ +@Slf4j +public class SpringCloudStreamKafkaThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + @Override + public String mark() { + return "KafkaSpringCloudStream"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + return null; + } + + @Override + public List getThreadPoolStates() { + return null; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + return false; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/pom.xml b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/pom.xml new file mode 100644 index 00000000..aea88167 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-spring-cloud-stream-rocketmq + + + + cn.hippo4j + hippo4j-adapter-base + + + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + ${spring-cloud-starter-stream-rocketmq.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java new file mode 100644 index 00000000..926f0ee8 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQThreadPoolAdapter.java @@ -0,0 +1,125 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.springcloud.stream.rocketmq; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.ReflectUtil; +import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer; +import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; +import org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService; +import org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.cloud.stream.binder.Binding; +import org.springframework.cloud.stream.binder.DefaultBinding; +import org.springframework.cloud.stream.binding.InputBindingLifecycle; +import org.springframework.context.ApplicationListener; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * Spring cloud stream rocketMQ thread-pool adapter. + */ +@Slf4j +public class SpringCloudStreamRocketMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return "RocketMQSpringCloudStream"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState result = new ThreadPoolAdapterState(); + ThreadPoolExecutor rocketMQConsumeExecutor = ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.get(identify); + if (rocketMQConsumeExecutor != null) { + result.setThreadPoolKey(identify); + result.setCoreSize(rocketMQConsumeExecutor.getCorePoolSize()); + result.setMaximumSize(rocketMQConsumeExecutor.getMaximumPoolSize()); + return result; + } + log.warn("[{}] RocketMQ consuming thread pool not found.", identify); + return result; + } + + @Override + public List getThreadPoolStates() { + List adapterStateList = Lists.newArrayList(); + ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.forEach( + (key, val) -> adapterStateList.add(getThreadPoolState(key))); + return adapterStateList; + } + + @Override + public boolean updateThreadPool(ThreadPoolAdapterParameter threadPoolAdapterParameter) { + String threadPoolKey = threadPoolAdapterParameter.getThreadPoolKey(); + ThreadPoolExecutor rocketMQConsumeExecutor = ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.get(threadPoolKey); + if (rocketMQConsumeExecutor != null) { + int originalCoreSize = rocketMQConsumeExecutor.getCorePoolSize(); + int originalMaximumPoolSize = rocketMQConsumeExecutor.getMaximumPoolSize(); + rocketMQConsumeExecutor.setCorePoolSize(threadPoolAdapterParameter.getCorePoolSize()); + rocketMQConsumeExecutor.setMaximumPoolSize(threadPoolAdapterParameter.getMaximumPoolSize()); + log.info("[{}] RocketMQ consumption thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, rocketMQConsumeExecutor.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, rocketMQConsumeExecutor.getMaximumPoolSize())); + return true; + } + log.warn("[{}] RocketMQ consuming thread pool not found.", threadPoolKey); + return false; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + InputBindingLifecycle bindingLifecycle = ApplicationContextHolder.getBean(InputBindingLifecycle.class); + Collection> inputBindings = Optional.ofNullable(ReflectUtil.getFieldValue(bindingLifecycle, "inputBindings")).map(each -> (Collection>) each).orElse(null); + if (CollectionUtil.isEmpty(inputBindings)) { + log.info("InputBindings record not found."); + } + try { + for (Binding each : inputBindings) { + String bindingName = each.getBindingName(); + DefaultBinding defaultBinding = (DefaultBinding) each; + RocketMQInboundChannelAdapter lifecycle = (RocketMQInboundChannelAdapter) ReflectUtil.getFieldValue(defaultBinding, "lifecycle"); + RocketMQListenerBindingContainer rocketMQListenerContainer = (RocketMQListenerBindingContainer) ReflectUtil.getFieldValue(lifecycle, "rocketMQListenerContainer"); + DefaultMQPushConsumer consumer = rocketMQListenerContainer.getConsumer(); + DefaultMQPushConsumerImpl defaultMQPushConsumerImpl = consumer.getDefaultMQPushConsumerImpl(); + ConsumeMessageConcurrentlyService consumeMessageService = (ConsumeMessageConcurrentlyService) defaultMQPushConsumerImpl.getConsumeMessageService(); + ThreadPoolExecutor consumeExecutor = (ThreadPoolExecutor) ReflectUtil.getFieldValue(consumeMessageService, "consumeExecutor"); + ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.put(bindingName, consumeExecutor); + } + } catch (Exception ex) { + log.error("Failed to get input-bindings thread pool.", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/pom.xml b/hippo4j-adapter/hippo4j-adapter-web/pom.xml new file mode 100644 index 00000000..cc42538b --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-web + + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat-embed-core.version} + true + + + + org.springframework.boot + spring-boot-starter-tomcat + true + + + + org.springframework.boot + spring-boot-starter-jetty + true + + + + org.springframework.boot + spring-boot-starter-undertow + true + + + + org.projectlombok + lombok + + + + org.springframework.boot + spring-boot-starter + + + + cn.hippo4j + hippo4j-core + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/AbstractWebThreadPoolService.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/AbstractWebThreadPoolService.java new file mode 100644 index 00000000..69600265 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/AbstractWebThreadPoolService.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.web.context.WebServerApplicationContext; +import org.springframework.boot.web.server.WebServer; +import org.springframework.context.ApplicationContext; + +import java.util.concurrent.Executor; + +/** + * Abstract web thread pool service. + */ +@Slf4j +public abstract class AbstractWebThreadPoolService implements WebThreadPoolService, ApplicationRunner { + + /** + * Thread pool executor. + */ + protected volatile Executor executor; + + /** + * Get web thread pool by server. + * + * @param webServer + * @return + */ + protected abstract Executor getWebThreadPoolByServer(WebServer webServer); + + @Override + public Executor getWebThreadPool() { + if (executor == null) { + synchronized (AbstractWebThreadPoolService.class) { + if (executor == null) { + ApplicationContext applicationContext = ApplicationContextHolder.getInstance(); + WebServer webServer = ((WebServerApplicationContext) applicationContext).getWebServer(); + executor = getWebThreadPoolByServer(webServer); + } + } + } + return executor; + } + + @Override + public void run(ApplicationArguments args) { + try { + getWebThreadPool(); + } catch (Exception ignored) { + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/JettyWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/JettyWebThreadPoolHandler.java new file mode 100644 index 00000000..28b48de8 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/JettyWebThreadPoolHandler.java @@ -0,0 +1,99 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.constant.ChangeThreadPoolConstants; +import cn.hippo4j.common.model.ThreadPoolBaseInfo; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.ReflectUtil; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.jetty.util.thread.QueuedThreadPool; +import org.springframework.boot.web.embedded.jetty.JettyWebServer; +import org.springframework.boot.web.server.WebServer; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executor; + +/** + * Jetty web thread pool handler. + */ +@Slf4j +public class JettyWebThreadPoolHandler extends AbstractWebThreadPoolService { + + @Override + protected Executor getWebThreadPoolByServer(WebServer webServer) { + JettyWebServer jettyWebServer = (JettyWebServer) webServer; + return jettyWebServer.getServer().getThreadPool(); + } + + @Override + public ThreadPoolBaseInfo simpleInfo() { + ThreadPoolBaseInfo poolBaseInfo = new ThreadPoolBaseInfo(); + QueuedThreadPool queuedThreadPool = (QueuedThreadPool) executor; + poolBaseInfo.setCoreSize(queuedThreadPool.getMinThreads()); + poolBaseInfo.setMaximumSize(queuedThreadPool.getMaxThreads()); + BlockingQueue jobs = (BlockingQueue) ReflectUtil.getFieldValue(queuedThreadPool, "_jobs"); + int queueCapacity = jobs.remainingCapacity() + jobs.size(); + poolBaseInfo.setQueueCapacity(queueCapacity); + poolBaseInfo.setQueueType(jobs.getClass().getSimpleName()); + poolBaseInfo.setKeepAliveTime((long) queuedThreadPool.getIdleTimeout()); + poolBaseInfo.setRejectedName("RejectedExecutionException"); + return poolBaseInfo; + } + + @Override + public ThreadPoolParameter getWebThreadPoolParameter() { + ThreadPoolParameterInfo parameterInfo = null; + try { + parameterInfo = new ThreadPoolParameterInfo(); + QueuedThreadPool jettyExecutor = (QueuedThreadPool) executor; + int minThreads = jettyExecutor.getMinThreads(); + int maxThreads = jettyExecutor.getMaxThreads(); + parameterInfo.setCoreSize(minThreads); + parameterInfo.setMaxSize(maxThreads); + } catch (Exception ex) { + log.error("Failed to get the jetty thread pool parameter.", ex); + } + return parameterInfo; + } + + @Override + public ThreadPoolRunStateInfo getWebRunStateInfo() { + return null; + } + + @Override + public void updateWebThreadPool(ThreadPoolParameterInfo threadPoolParameterInfo) { + try { + QueuedThreadPool jettyExecutor = (QueuedThreadPool) executor; + int minThreads = jettyExecutor.getMinThreads(); + int maxThreads = jettyExecutor.getMaxThreads(); + Integer coreSize = threadPoolParameterInfo.corePoolSizeAdapt(); + Integer maxSize = threadPoolParameterInfo.maximumPoolSizeAdapt(); + jettyExecutor.setMinThreads(coreSize); + jettyExecutor.setMaxThreads(maxSize); + log.info("[Jetty] Changed web thread pool. corePoolSize: [{}], maximumPoolSize: [{}]", + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, minThreads, jettyExecutor.getMinThreads()), + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, maxThreads, jettyExecutor.getMaxThreads())); + } catch (Exception ex) { + log.error("Failed to modify the jetty thread pool parameter.", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java new file mode 100644 index 00000000..6df99c55 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/TomcatWebThreadPoolHandler.java @@ -0,0 +1,179 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.constant.ChangeThreadPoolConstants; +import cn.hippo4j.common.model.ThreadPoolBaseInfo; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.CalculateUtil; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; +import cn.hutool.core.date.DateUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; +import org.springframework.boot.web.server.WebServer; + +import java.util.Date; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Tomcat web thread pool handler. + */ +@Slf4j +@RequiredArgsConstructor +public class TomcatWebThreadPoolHandler extends AbstractWebThreadPoolService { + + private final AtomicBoolean cacheFlag = new AtomicBoolean(Boolean.FALSE); + + private static String EXCEPTION_MESSAGE; + + private final AbstractThreadPoolRuntime webThreadPoolRunStateHandler; + + @Override + protected Executor getWebThreadPoolByServer(WebServer webServer) { + if (cacheFlag.get()) { + log.warn("Exception getting Tomcat thread pool. Exception message: {}", EXCEPTION_MESSAGE); + return null; + } + Executor tomcatExecutor = null; + try { + tomcatExecutor = ((TomcatWebServer) webServer).getTomcat().getConnector().getProtocolHandler().getExecutor(); + } catch (Exception ex) { + cacheFlag.set(Boolean.TRUE); + EXCEPTION_MESSAGE = ex.getMessage(); + log.error("Failed to get Tomcat thread pool. Message: {}", EXCEPTION_MESSAGE); + } + return tomcatExecutor; + } + + @Override + public ThreadPoolBaseInfo simpleInfo() { + ThreadPoolBaseInfo poolBaseInfo = new ThreadPoolBaseInfo(); + org.apache.tomcat.util.threads.ThreadPoolExecutor tomcatThreadPoolExecutor = (org.apache.tomcat.util.threads.ThreadPoolExecutor) executor; + int corePoolSize = tomcatThreadPoolExecutor.getCorePoolSize(); + int maximumPoolSize = tomcatThreadPoolExecutor.getMaximumPoolSize(); + long keepAliveTime = tomcatThreadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS); + BlockingQueue blockingQueue = tomcatThreadPoolExecutor.getQueue(); + int queueSize = blockingQueue.size(); + int remainingCapacity = blockingQueue.remainingCapacity(); + int queueCapacity = queueSize + remainingCapacity; + String rejectedExecutionHandlerName = executor instanceof ThreadPoolExecutor ? ((ThreadPoolExecutor) executor).getRejectedExecutionHandler().getClass().getSimpleName() + : tomcatThreadPoolExecutor.getRejectedExecutionHandler().getClass().getSimpleName(); + poolBaseInfo.setCoreSize(corePoolSize); + poolBaseInfo.setMaximumSize(maximumPoolSize); + poolBaseInfo.setKeepAliveTime(keepAliveTime); + poolBaseInfo.setQueueType(blockingQueue.getClass().getSimpleName()); + poolBaseInfo.setQueueCapacity(queueCapacity); + poolBaseInfo.setRejectedName(rejectedExecutionHandlerName); + return poolBaseInfo; + } + + @Override + public ThreadPoolParameter getWebThreadPoolParameter() { + ThreadPoolParameterInfo parameterInfo = new ThreadPoolParameterInfo(); + try { + org.apache.tomcat.util.threads.ThreadPoolExecutor tomcatThreadPoolExecutor = (org.apache.tomcat.util.threads.ThreadPoolExecutor) executor; + int minThreads = tomcatThreadPoolExecutor.getCorePoolSize(); + int maxThreads = tomcatThreadPoolExecutor.getMaximumPoolSize(); + long keepAliveTime = tomcatThreadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS); + parameterInfo.setCoreSize(minThreads); + parameterInfo.setMaxSize(maxThreads); + parameterInfo.setKeepAliveTime((int) keepAliveTime); + } catch (Exception ex) { + log.error("Failed to get the tomcat thread pool parameter.", ex); + } + return parameterInfo; + } + + @Override + public ThreadPoolRunStateInfo getWebRunStateInfo() { + if (executor instanceof ThreadPoolExecutor) { + return webThreadPoolRunStateHandler.getPoolRunState(null, executor); + } + ThreadPoolRunStateInfo runStateInfo = new ThreadPoolRunStateInfo(); + org.apache.tomcat.util.threads.ThreadPoolExecutor tomcatThreadPoolExecutor = (org.apache.tomcat.util.threads.ThreadPoolExecutor) executor; + // 核心线程数 + int corePoolSize = tomcatThreadPoolExecutor.getCorePoolSize(); + // 最大线程数 + int maximumPoolSize = tomcatThreadPoolExecutor.getMaximumPoolSize(); + // 线程池当前线程数 (有锁) + int poolSize = tomcatThreadPoolExecutor.getPoolSize(); + // 活跃线程数 (有锁) + int activeCount = tomcatThreadPoolExecutor.getActiveCount(); + // 同时进入池中的最大线程数 (有锁) + int largestPoolSize = tomcatThreadPoolExecutor.getLargestPoolSize(); + // 线程池中执行任务总数量 (有锁) + long completedTaskCount = tomcatThreadPoolExecutor.getCompletedTaskCount(); + // 当前负载 + String currentLoad = CalculateUtil.divide(activeCount, maximumPoolSize) + ""; + // 峰值负载 + String peakLoad = CalculateUtil.divide(largestPoolSize, maximumPoolSize) + ""; + BlockingQueue queue = tomcatThreadPoolExecutor.getQueue(); + // 队列元素个数 + int queueSize = queue.size(); + // 队列类型 + String queueType = queue.getClass().getSimpleName(); + // 队列剩余容量 + int remainingCapacity = queue.remainingCapacity(); + // 队列容量 + int queueCapacity = queueSize + remainingCapacity; + runStateInfo.setCoreSize(corePoolSize); + runStateInfo.setPoolSize(poolSize); + runStateInfo.setMaximumSize(maximumPoolSize); + runStateInfo.setActiveSize(activeCount); + runStateInfo.setCurrentLoad(currentLoad); + runStateInfo.setPeakLoad(peakLoad); + runStateInfo.setQueueType(queueType); + runStateInfo.setQueueSize(queueSize); + runStateInfo.setQueueCapacity(queueCapacity); + runStateInfo.setQueueRemainingCapacity(remainingCapacity); + runStateInfo.setLargestPoolSize(largestPoolSize); + runStateInfo.setCompletedTaskCount(completedTaskCount); + runStateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + runStateInfo.setTimestamp(System.currentTimeMillis()); + String rejectedExecutionHandlerName = executor instanceof ThreadPoolExecutor ? ((ThreadPoolExecutor) executor).getRejectedExecutionHandler().getClass().getSimpleName() + : tomcatThreadPoolExecutor.getRejectedExecutionHandler().getClass().getSimpleName(); + runStateInfo.setRejectedName(rejectedExecutionHandlerName); + return webThreadPoolRunStateHandler.supplement(runStateInfo); + } + + @Override + public void updateWebThreadPool(ThreadPoolParameterInfo threadPoolParameterInfo) { + try { + org.apache.tomcat.util.threads.ThreadPoolExecutor tomcatThreadPoolExecutor = (org.apache.tomcat.util.threads.ThreadPoolExecutor) executor; + int originalCoreSize = tomcatThreadPoolExecutor.getCorePoolSize(); + int originalMaximumPoolSize = tomcatThreadPoolExecutor.getMaximumPoolSize(); + long originalKeepAliveTime = tomcatThreadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS); + tomcatThreadPoolExecutor.setCorePoolSize(threadPoolParameterInfo.corePoolSizeAdapt()); + tomcatThreadPoolExecutor.setMaximumPoolSize(threadPoolParameterInfo.maximumPoolSizeAdapt()); + tomcatThreadPoolExecutor.setKeepAliveTime(threadPoolParameterInfo.getKeepAliveTime(), TimeUnit.SECONDS); + log.info("[Tomcat] Changed web thread pool. corePoolSize: [{}], maximumPoolSize: [{}], keepAliveTime: [{}]", + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalCoreSize, threadPoolParameterInfo.corePoolSizeAdapt()), + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalMaximumPoolSize, threadPoolParameterInfo.maximumPoolSizeAdapt()), + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalKeepAliveTime, threadPoolParameterInfo.getKeepAliveTime())); + } catch (Exception ex) { + log.error("Failed to modify the Tomcat thread pool parameter.", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java new file mode 100644 index 00000000..bfdc5b7d --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/UndertowWebThreadPoolHandler.java @@ -0,0 +1,163 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.constant.ChangeThreadPoolConstants; +import cn.hippo4j.common.model.ThreadPoolBaseInfo; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.CalculateUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hutool.core.date.DateUtil; +import io.undertow.Undertow; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.web.embedded.undertow.UndertowWebServer; +import org.springframework.boot.web.server.WebServer; +import org.springframework.util.ReflectionUtils; +import org.xnio.Options; +import org.xnio.XnioWorker; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Date; +import java.util.Objects; +import java.util.concurrent.Executor; + +/** + * Undertow web thread pool handler. + */ +@Slf4j +public class UndertowWebThreadPoolHandler extends AbstractWebThreadPoolService { + + private static final String UNDERTOW_NAME = "undertow"; + + @Override + protected Executor getWebThreadPoolByServer(WebServer webServer) { + // There is no need to consider reflection performance because the fetch is a singleton. + UndertowWebServer undertowWebServer = (UndertowWebServer) webServer; + Field undertowField = ReflectionUtils.findField(UndertowWebServer.class, UNDERTOW_NAME); + ReflectionUtils.makeAccessible(undertowField); + + Undertow undertow = (Undertow) ReflectionUtils.getField(undertowField, undertowWebServer); + return Objects.isNull(undertow) ? null : undertow.getWorker(); + } + + @Override + public ThreadPoolBaseInfo simpleInfo() { + ThreadPoolBaseInfo poolBaseInfo = new ThreadPoolBaseInfo(); + XnioWorker xnioWorker = (XnioWorker) executor; + try { + int coreSize = xnioWorker.getOption(Options.WORKER_TASK_CORE_THREADS); + int maximumPoolSize = xnioWorker.getOption(Options.WORKER_TASK_MAX_THREADS); + int keepAliveTime = xnioWorker.getOption(Options.WORKER_TASK_KEEPALIVE); + poolBaseInfo.setCoreSize(coreSize); + poolBaseInfo.setMaximumSize(maximumPoolSize); + poolBaseInfo.setKeepAliveTime((long) keepAliveTime); + poolBaseInfo.setRejectedName("-"); + poolBaseInfo.setQueueType("-"); + } catch (Exception ex) { + log.error("The undertow container failed to get thread pool parameters.", ex); + } + return poolBaseInfo; + } + + @Override + public ThreadPoolParameter getWebThreadPoolParameter() { + ThreadPoolParameterInfo parameterInfo = null; + try { + parameterInfo = new ThreadPoolParameterInfo(); + XnioWorker xnioWorker = (XnioWorker) executor; + int minThreads = xnioWorker.getOption(Options.WORKER_TASK_CORE_THREADS); + int maxThreads = xnioWorker.getOption(Options.WORKER_TASK_MAX_THREADS); + int keepAliveTime = xnioWorker.getOption(Options.WORKER_TASK_KEEPALIVE); + parameterInfo.setCoreSize(minThreads); + parameterInfo.setMaxSize(maxThreads); + parameterInfo.setKeepAliveTime(keepAliveTime); + } catch (Exception ex) { + log.error("Failed to get the undertow thread pool parameter.", ex); + } + return parameterInfo; + } + + @Override + public ThreadPoolRunStateInfo getWebRunStateInfo() { + ThreadPoolRunStateInfo stateInfo = new ThreadPoolRunStateInfo(); + XnioWorker xnioWorker = (XnioWorker) executor; + Field field = ReflectionUtils.findField(XnioWorker.class, "taskPool"); + ReflectionUtils.makeAccessible(field); + Object fieldObject = ReflectionUtils.getField(field, xnioWorker); + // 核心线程数 + Method getCorePoolSize = ReflectionUtils.findMethod(fieldObject.getClass(), "getCorePoolSize"); + ReflectionUtils.makeAccessible(getCorePoolSize); + int corePoolSize = (int) ReflectionUtils.invokeMethod(getCorePoolSize, fieldObject); + // 最大线程数 + Method getMaximumPoolSize = ReflectionUtils.findMethod(fieldObject.getClass(), "getMaximumPoolSize"); + ReflectionUtils.makeAccessible(getMaximumPoolSize); + int maximumPoolSize = (int) ReflectionUtils.invokeMethod(getMaximumPoolSize, fieldObject); + // 线程池当前线程数 (有锁) + Method getPoolSize = ReflectionUtils.findMethod(fieldObject.getClass(), "getPoolSize"); + ReflectionUtils.makeAccessible(getPoolSize); + int poolSize = (int) ReflectionUtils.invokeMethod(getPoolSize, fieldObject); + // 活跃线程数 (有锁) + Method getActiveCount = ReflectionUtils.findMethod(fieldObject.getClass(), "getActiveCount"); + ReflectionUtils.makeAccessible(getActiveCount); + int activeCount = (int) ReflectionUtils.invokeMethod(getActiveCount, fieldObject); + activeCount = Math.max(activeCount, 0); + // 当前负载 + String currentLoad = CalculateUtil.divide(activeCount, maximumPoolSize) + ""; + // 峰值负载 + // 没有峰值记录,直接使用当前数据 + String peakLoad = CalculateUtil.divide(activeCount, maximumPoolSize) + ""; + stateInfo.setCoreSize(corePoolSize); + stateInfo.setPoolSize(poolSize); + stateInfo.setMaximumSize(maximumPoolSize); + stateInfo.setActiveSize(activeCount); + stateInfo.setCurrentLoad(currentLoad); + stateInfo.setPeakLoad(peakLoad); + long rejectCount = fieldObject instanceof DynamicThreadPoolExecutor + ? ((DynamicThreadPoolExecutor) fieldObject).getRejectCountNum() + : -1L; + stateInfo.setRejectCount(rejectCount); + stateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + stateInfo.setTimestamp(System.currentTimeMillis()); + return stateInfo; + } + + @Override + public void updateWebThreadPool(ThreadPoolParameterInfo threadPoolParameterInfo) { + try { + XnioWorker xnioWorker = (XnioWorker) executor; + Integer coreSize = threadPoolParameterInfo.corePoolSizeAdapt(); + Integer maxSize = threadPoolParameterInfo.maximumPoolSizeAdapt(); + Integer keepAliveTime = threadPoolParameterInfo.getKeepAliveTime(); + int originalCoreSize = xnioWorker.getOption(Options.WORKER_TASK_CORE_THREADS); + int originalMaximumPoolSize = xnioWorker.getOption(Options.WORKER_TASK_MAX_THREADS); + int originalKeepAliveTime = xnioWorker.getOption(Options.WORKER_TASK_KEEPALIVE); + xnioWorker.setOption(Options.WORKER_TASK_CORE_THREADS, coreSize); + xnioWorker.setOption(Options.WORKER_TASK_MAX_THREADS, maxSize); + xnioWorker.setOption(Options.WORKER_TASK_KEEPALIVE, keepAliveTime); + log.info("[Undertow] Changed web thread pool. corePoolSize: [{}], maximumPoolSize: [{}], keepAliveTime: [{}]", + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalCoreSize, coreSize), + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalMaximumPoolSize, maxSize), + String.format(ChangeThreadPoolConstants.CHANGE_DELIMITER, originalKeepAliveTime, keepAliveTime)); + } catch (Exception ex) { + log.error("Failed to modify the undertow thread pool parameter.", ex); + } + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolHandlerChoose.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolHandlerChoose.java new file mode 100644 index 00000000..f88f4d54 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolHandlerChoose.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.web.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; + +/** + * Web thread pool handler choose. + */ +@Slf4j +public class WebThreadPoolHandlerChoose { + + /** + * Choose the web thread pool service bean. + * + * @return + */ + public WebThreadPoolService choose() { + WebThreadPoolService webThreadPoolService; + try { + webThreadPoolService = ApplicationContextHolder.getBean(WebThreadPoolService.class); + } catch (Exception ex) { + throw new ServiceException("Web thread pool service bean not found.", ex); + } + return webThreadPoolService; + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java new file mode 100644 index 00000000..b5442300 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolRunStateHandler.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.ByteConvertUtil; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; +import cn.hutool.core.util.StrUtil; +import cn.hutool.system.RuntimeInfo; +import lombok.extern.slf4j.Slf4j; + +/** + * Web thread pool run state handler. + */ +@Slf4j +public class WebThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { + + @Override + public ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo poolRunStateInfo) { + RuntimeInfo runtimeInfo = new RuntimeInfo(); + String memoryProportion = StrUtil.builder( + "已分配: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), + " / 最大可用: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory())).toString(); + poolRunStateInfo.setCurrentLoad(poolRunStateInfo.getCurrentLoad() + "%"); + poolRunStateInfo.setPeakLoad(poolRunStateInfo.getPeakLoad() + "%"); + poolRunStateInfo.setMemoryProportion(memoryProportion); + poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); + return poolRunStateInfo; + } +} diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolService.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolService.java new file mode 100644 index 00000000..7bc7e2ad --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebThreadPoolService.java @@ -0,0 +1,66 @@ +/* + * 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. + */ + +package cn.hippo4j.adapter.web; + +import cn.hippo4j.common.model.ThreadPoolBaseInfo; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; + +import java.util.concurrent.Executor; + +/** + * Web thread pool service. + */ +public interface WebThreadPoolService { + + /** + * Get web thread pool. + * + * @return Tomcat、Jetty、Undertow ThreadPoolExecutor + */ + Executor getWebThreadPool(); + + /** + * Simple info. + * + * @return + */ + ThreadPoolBaseInfo simpleInfo(); + + /** + * Get web thread pool parameter. + * + * @return + */ + ThreadPoolParameter getWebThreadPoolParameter(); + + /** + * Get web run state info. + * + * @return + */ + ThreadPoolRunStateInfo getWebRunStateInfo(); + + /** + * Update web thread pool. + * + * @param threadPoolParameterInfo + */ + void updateWebThreadPool(ThreadPoolParameterInfo threadPoolParameterInfo); +} diff --git a/hippo4j-adapter/pom.xml b/hippo4j-adapter/pom.xml new file mode 100644 index 00000000..ce2bd837 --- /dev/null +++ b/hippo4j-adapter/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-all + ${revision} + + hippo4j-adapter + pom + + + hippo4j-adapter-base + hippo4j-adapter-dubbo + hippo4j-adapter-kafka + hippo4j-adapter-rabbitmq + hippo4j-adapter-rocketmq + hippo4j-adapter-hystrix + hippo4j-adapter-spring-cloud-stream-rocketmq + hippo4j-adapter-spring-cloud-stream-kafka + hippo4j-adapter-web + + diff --git a/hippo4j-auth/.gitignore b/hippo4j-auth/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-auth/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-auth/pom.xml b/hippo4j-auth/pom.xml index 69d59712..c44bcffb 100644 --- a/hippo4j-auth/pom.xml +++ b/hippo4j-auth/pom.xml @@ -2,15 +2,12 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-auth - jar true @@ -68,7 +65,7 @@ cn.hippo4j hippo4j-common + ${revision} - diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/GlobalSecurityConfig.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/GlobalSecurityConfig.java index 3565fed3..61c202e9 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/GlobalSecurityConfig.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/config/GlobalSecurityConfig.java @@ -1,11 +1,31 @@ +/* + * 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. + */ + package cn.hippo4j.auth.config; import cn.hippo4j.auth.constant.Constants; import cn.hippo4j.auth.filter.JWTAuthenticationFilter; import cn.hippo4j.auth.filter.JWTAuthorizationFilter; +import cn.hippo4j.auth.security.JwtTokenManager; import cn.hippo4j.auth.service.impl.UserDetailsServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.BeanIds; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -23,10 +43,7 @@ import javax.annotation.Resource; import java.util.stream.Stream; /** - * 安全配置. - * - * @author chen.ma - * @date 2021/11/9 21:10 + * Global security config. */ @Configuration @EnableWebSecurity @@ -36,6 +53,9 @@ public class GlobalSecurityConfig extends WebSecurityConfigurerAdapter { @Resource private UserDetailsService userDetailsService; + @Resource + private JwtTokenManager tokenManager; + @Bean public UserDetailsService customUserService() { return new UserDetailsServiceImpl(); @@ -46,6 +66,12 @@ public class GlobalSecurityConfig extends WebSecurityConfigurerAdapter { return new BCryptPasswordEncoder(); } + @Bean(name = BeanIds.AUTHENTICATION_MANAGER) + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + @Bean public CorsConfigurationSource corsConfigurationSource() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); @@ -70,23 +96,13 @@ public class GlobalSecurityConfig extends WebSecurityConfigurerAdapter { .anyRequest().authenticated() .and() .addFilter(new JWTAuthenticationFilter(authenticationManager())) - .addFilter(new JWTAuthorizationFilter(authenticationManager())) + .addFilter(new JWTAuthorizationFilter(tokenManager, authenticationManager())) .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); } @Override public void configure(WebSecurity web) throws Exception { - String[] ignores = Stream - .of( - "/v1/cs/apps/renew/**", - "/v1/cs/apps/remove/**", - "/v1/cs/apps/register/**", - "/v1/cs/configs/**", - "/v1/cs/listener/**", - "/v1/cs/notify/list/config/**" - ) - .toArray(String[]::new); + String[] ignores = Stream.of("/hippo4j/v1/cs/auth/users/apply/token/**", "/hippo4j/v1/cs/configs/**").toArray(String[]::new); web.ignoring().antMatchers(ignores); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/constant/Constants.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/constant/Constants.java index 8c866aeb..59139763 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/constant/Constants.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/constant/Constants.java @@ -1,10 +1,24 @@ +/* + * 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. + */ + package cn.hippo4j.auth.constant; /** * Constants. - * - * @author chen.ma - * @date 2021/11/9 22:24 */ public class Constants { @@ -12,4 +26,5 @@ public class Constants { public static final String SPLIT_COMMA = ","; + public static final long TOKEN_VALIDITY_IN_SECONDS = 18000L; } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java index 4b6ac669..f6456ba8 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthenticationFilter.java @@ -1,14 +1,32 @@ +/* + * 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. + */ + package cn.hippo4j.auth.filter; -import cn.hutool.json.JSONUtil; -import com.fasterxml.jackson.databind.ObjectMapper; import cn.hippo4j.auth.model.biz.user.JwtUser; import cn.hippo4j.auth.model.biz.user.LoginUser; import cn.hippo4j.auth.toolkit.JwtTokenUtil; import cn.hippo4j.auth.toolkit.ReturnT; import cn.hippo4j.common.web.base.Results; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -26,38 +44,40 @@ import java.util.HashMap; import java.util.Map; import static cn.hippo4j.auth.constant.Constants.SPLIT_COMMA; +import static cn.hippo4j.common.constant.Constants.BASE_PATH; +import static cn.hippo4j.common.constant.Constants.MAP_INITIAL_CAPACITY; /** * JWT authentication filter. - * - * @author chen.ma - * @date 2021/11/9 22:21 */ @Slf4j public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter { - private AuthenticationManager authenticationManager; + private final AuthenticationManager authenticationManager; - private ThreadLocal rememberMe = new ThreadLocal(); + private final ThreadLocal rememberMe = new ThreadLocal(); public JWTAuthenticationFilter(AuthenticationManager authenticationManager) { this.authenticationManager = authenticationManager; - super.setFilterProcessesUrl("/v1/cs/auth/login"); + super.setFilterProcessesUrl(BASE_PATH + "/auth/login"); } @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { - // 从输入流中获取到登录的信息 + // Get logged in information from the input stream. + Authentication authenticate = null; try { LoginUser loginUser = new ObjectMapper().readValue(request.getInputStream(), LoginUser.class); rememberMe.set(loginUser.getRememberMe()); - return authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken(loginUser.getUsername(), loginUser.getPassword(), new ArrayList<>()) - ); - } catch (IOException e) { - logger.error("attemptAuthentication error :{}", e); - return null; + authenticate = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(loginUser.getUsername(), loginUser.getPassword(), new ArrayList())); + } catch (BadCredentialsException e) { + log.warn("BadCredentialsException:{}", e.getMessage()); + } catch (Exception e) { + log.error("attemptauthentication error:", e); + } finally { + return authenticate; } } @@ -66,28 +86,29 @@ public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilte HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException { - JwtUser jwtUser = (JwtUser) authResult.getPrincipal(); - boolean isRemember = rememberMe.get() == 1; - - String role = ""; - Collection authorities = jwtUser.getAuthorities(); - for (GrantedAuthority authority : authorities) { - role = authority.getAuthority(); + try { + JwtUser jwtUser = (JwtUser) authResult.getPrincipal(); + boolean isRemember = rememberMe.get() == 1; + String role = ""; + Collection authorities = jwtUser.getAuthorities(); + for (GrantedAuthority authority : authorities) { + role = authority.getAuthority(); + } + String token = JwtTokenUtil.createToken(jwtUser.getId(), jwtUser.getUsername(), role, isRemember); + response.setHeader("token", JwtTokenUtil.TOKEN_PREFIX + token); + response.setCharacterEncoding("UTF-8"); + Map maps = new HashMap(MAP_INITIAL_CAPACITY); + maps.put("data", JwtTokenUtil.TOKEN_PREFIX + token); + maps.put("roles", role.split(SPLIT_COMMA)); + response.getWriter().write(JSONUtil.toJsonStr(Results.success(maps))); + } finally { + rememberMe.remove(); } - - String token = JwtTokenUtil.createToken(jwtUser.getId(), jwtUser.getUsername(), role, isRemember); - response.setHeader("token", JwtTokenUtil.TOKEN_PREFIX + token); - response.setCharacterEncoding("UTF-8"); - Map maps = new HashMap<>(); - maps.put("data", JwtTokenUtil.TOKEN_PREFIX + token); - maps.put("roles", role.split(SPLIT_COMMA)); - response.getWriter().write(JSONUtil.toJsonStr(Results.success(maps))); } @Override - protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException { + protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException { response.setCharacterEncoding("UTF-8"); response.getWriter().write(JSONUtil.toJsonStr(new ReturnT(-1, "Server Error"))); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java index 47b57537..5f46ffe9 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/filter/JWTAuthorizationFilter.java @@ -1,13 +1,33 @@ +/* + * 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. + */ + package cn.hippo4j.auth.filter; +import cn.hippo4j.auth.security.JwtTokenManager; import cn.hippo4j.auth.toolkit.JwtTokenUtil; +import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.UserContext; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.common.web.exception.ServiceException; -import com.alibaba.fastjson.JSON; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; @@ -19,47 +39,67 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; +import static cn.hippo4j.common.constant.Constants.ACCESS_TOKEN; +import static cn.hippo4j.common.web.exception.ErrorCodeEnum.LOGIN_TIMEOUT; + /** * JWT authorization filter. - * - * @author chen.ma - * @date 2021/11/9 22:21 */ @Slf4j public class JWTAuthorizationFilter extends BasicAuthenticationFilter { - public JWTAuthorizationFilter(AuthenticationManager authenticationManager) { + private final JwtTokenManager tokenManager; + + public JWTAuthorizationFilter(JwtTokenManager tokenManager, AuthenticationManager authenticationManager) { super(authenticationManager); + this.tokenManager = tokenManager; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { + // Token when verifying client interaction. + String accessToken = request.getParameter(ACCESS_TOKEN); + if (StrUtil.isNotBlank(accessToken)) { + tokenManager.validateToken(accessToken); + Authentication authentication = this.tokenManager.getAuthentication(accessToken); + SecurityContextHolder.getContext().setAuthentication(authentication); + chain.doFilter(request, response); + return; + } + // If there is no Authorization information in the request header, it will be released directly. String tokenHeader = request.getHeader(JwtTokenUtil.TOKEN_HEADER); - // 如果请求头中没有 Authorization 信息则直接放行 if (tokenHeader == null || !tokenHeader.startsWith(JwtTokenUtil.TOKEN_PREFIX)) { chain.doFilter(request, response); return; } - // 如果请求头中有 Token, 则进行解析, 并且设置认证信息 + + // If there is a Token in the request header, it is parsed and the authentication information is set. try { SecurityContextHolder.getContext().setAuthentication(getAuthentication(tokenHeader)); } catch (Exception ex) { - // 返回 Json 形式的错误信息 response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); - response.getWriter().write(JSON.toJSONString(Results.failure("-1", ex.getMessage()))); + String resultStatus = "-1"; + if (ex instanceof ServiceException) { + ServiceException serviceException = (ServiceException) ex; + resultStatus = serviceException.errorCode.getCode(); + } + response.getWriter().write(JSONUtil.toJSONString(Results.failure(resultStatus, ex.getMessage()))); response.getWriter().flush(); return; } - - super.doFilterInternal(request, response, chain); + try { + super.doFilterInternal(request, response, chain); + } finally { + UserContext.clear(); + } } /** - * Token 中获取用户信息并新建一个 Token. + * Obtain user information from Token and create a new Token. * * @param tokenHeader * @return @@ -68,20 +108,16 @@ public class JWTAuthorizationFilter extends BasicAuthenticationFilter { String token = tokenHeader.replace(JwtTokenUtil.TOKEN_PREFIX, ""); boolean expiration = JwtTokenUtil.isExpiration(token); if (expiration) { - throw new ServiceException("登录时间过长,请退出重新登录"); + throw new ServiceException(LOGIN_TIMEOUT); } - String username = JwtTokenUtil.getUsername(token); - UserContext.setUserName(username); - + String userRole = JwtTokenUtil.getUserRole(token); + UserContext.setUserInfo(username, userRole); String role = JwtTokenUtil.getUserRole(token); if (username != null) { return new UsernamePasswordAuthenticationToken(username, null, - Collections.singleton(new SimpleGrantedAuthority(role)) - ); + Collections.singleton(new SimpleGrantedAuthority(role))); } - return null; } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/PermissionMapper.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/PermissionMapper.java index f0977313..72e15e10 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/PermissionMapper.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/PermissionMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Permission mapper. - * - * @author chen.ma - * @date 2021/10/30 22:34 */ @Mapper public interface PermissionMapper extends BaseMapper { diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/RoleMapper.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/RoleMapper.java index 0286d0cc..abff1ad5 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/RoleMapper.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/RoleMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Role mapper. - * - * @author chen.ma - * @date 2021/10/30 22:55 */ @Mapper public interface RoleMapper extends BaseMapper { diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/UserMapper.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/UserMapper.java index 317c6023..40286f0e 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/UserMapper.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/mapper/UserMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.mapper; import cn.hippo4j.auth.model.UserInfo; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * User mapper. - * - * @author chen.ma - * @date 2021/10/30 21:42 */ @Mapper public interface UserMapper extends BaseMapper { diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/PermissionInfo.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/PermissionInfo.java index 79fe8926..93e05f6f 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/PermissionInfo.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/PermissionInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model; import com.baomidou.mybatisplus.annotation.*; @@ -7,9 +24,6 @@ import java.util.Date; /** * Permission info. - * - * @author chen.ma - * @date 2021/10/30 22:33 */ @Data @TableName("permission") @@ -18,7 +32,7 @@ public class PermissionInfo { /** * id */ - @TableId + @TableId(type = IdType.AUTO) private Long id; /** @@ -54,5 +68,4 @@ public class PermissionInfo { @TableLogic @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/RoleInfo.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/RoleInfo.java index 27af8e83..85ab766b 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/RoleInfo.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/RoleInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model; import com.baomidou.mybatisplus.annotation.*; @@ -7,9 +24,6 @@ import java.util.Date; /** * Role info. - * - * @author chen.ma - * @date 2021/10/30 22:54 */ @Data @TableName("role") @@ -18,7 +32,7 @@ public class RoleInfo { /** * id */ - @TableId + @TableId(type = IdType.AUTO) private Long id; /** @@ -49,5 +63,4 @@ public class RoleInfo { @TableLogic @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/UserInfo.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/UserInfo.java index 2375172a..994ae605 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/UserInfo.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/UserInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model; import com.baomidou.mybatisplus.annotation.*; @@ -7,9 +24,6 @@ import java.util.Date; /** * User info. - * - * @author chen.ma - * @date 2021/10/30 21:37 */ @Data @TableName("user") @@ -18,7 +32,7 @@ public class UserInfo { /** * id */ - @TableId + @TableId(type = IdType.AUTO) private Long id; /** @@ -54,5 +68,4 @@ public class UserInfo { @TableLogic @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionQueryPageReqDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionQueryPageReqDTO.java index 30e0b42c..2f4d05b9 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionQueryPageReqDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionQueryPageReqDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.permission; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -5,9 +22,6 @@ import lombok.Data; /** * Permission query page. - * - * @author chen.ma - * @date 2021/10/30 21:47 */ @Data public class PermissionQueryPageReqDTO extends Page { @@ -15,5 +29,4 @@ public class PermissionQueryPageReqDTO extends Page { public PermissionQueryPageReqDTO(long current, long size) { super(current, size); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionRespDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionRespDTO.java index 4d0bc92b..1ee6303f 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionRespDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/permission/PermissionRespDTO.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.permission; import lombok.Data; /** * Permission resp dto. - * - * @author chen.ma - * @date 2021/10/30 22:21 */ @Data public class PermissionRespDTO { @@ -25,5 +39,4 @@ public class PermissionRespDTO { * action */ private String action; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleQueryPageReqDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleQueryPageReqDTO.java index ae93f7e1..8fc764f4 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleQueryPageReqDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleQueryPageReqDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.role; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -5,9 +22,6 @@ import lombok.Data; /** * Role query page. - * - * @author chen.ma - * @date 2021/10/30 21:47 */ @Data public class RoleQueryPageReqDTO extends Page { @@ -15,5 +29,4 @@ public class RoleQueryPageReqDTO extends Page { public RoleQueryPageReqDTO(long current, long size) { super(current, size); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleRespDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleRespDTO.java index 2adffbcb..2b15bdc3 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleRespDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/role/RoleRespDTO.java @@ -1,24 +1,37 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.role; import lombok.Data; /** * Role resp dto. - * - * @author chen.ma - * @date 2021/10/30 22:49 */ @Data public class RoleRespDTO { /** - * role + * Role */ private String role; /** - * userName + * User name */ private String userName; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/JwtUser.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/JwtUser.java index d2b655d2..d2eabed0 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/JwtUser.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/JwtUser.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.user; import lombok.Data; @@ -8,9 +25,6 @@ import java.util.Collection; /** * Jwt user. - * - * @author chen.ma - * @date 2021/11/9 22:34 */ @Data public class JwtUser implements UserDetails { @@ -54,5 +68,4 @@ public class JwtUser implements UserDetails { public boolean isEnabled() { return true; } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/LoginUser.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/LoginUser.java index ad2184a8..0c15778c 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/LoginUser.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/LoginUser.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.user; import lombok.Data; /** * Login user. - * - * @author chen.ma - * @date 2021/11/9 22:41 */ @Data public class LoginUser { @@ -25,5 +39,4 @@ public class LoginUser { * rememberMe */ private Integer rememberMe; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserQueryPageReqDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserQueryPageReqDTO.java index 595a3a68..f4a5ec23 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserQueryPageReqDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserQueryPageReqDTO.java @@ -1,20 +1,35 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.user; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; +import lombok.experimental.Accessors; /** * User query page. - * - * @author chen.ma - * @date 2021/10/30 21:47 */ @Data +@Accessors(chain = true) public class UserQueryPageReqDTO extends Page { /** * userName */ private String userName; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserReqDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserReqDTO.java index 82b602cd..4dd3586c 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserReqDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserReqDTO.java @@ -1,15 +1,31 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.user; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; +import lombok.experimental.Accessors; /** * User req dto. - * - * @author chen.ma - * @date 2021/11/11 20:30 */ @Data +@Accessors(chain = true) public class UserReqDTO extends Page { /** @@ -26,5 +42,4 @@ public class UserReqDTO extends Page { * role */ private String role; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserRespDTO.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserRespDTO.java index a82f68f3..168c640d 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserRespDTO.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/model/biz/user/UserRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.model.biz.user; import com.fasterxml.jackson.annotation.JsonFormat; @@ -7,9 +24,6 @@ import java.util.Date; /** * User resp dto. - * - * @author chen.ma - * @date 2021/10/30 21:51 */ @Data public class UserRespDTO { @@ -35,5 +49,4 @@ public class UserRespDTO { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtModified; - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/AuthManager.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/AuthManager.java new file mode 100644 index 00000000..765104d4 --- /dev/null +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/AuthManager.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.auth.security; + +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.expression.AccessException; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.AuthenticationException; +import org.springframework.stereotype.Component; + +/** + * Auth manager. + */ +@Component +@AllArgsConstructor +public class AuthManager { + + private final JwtTokenManager jwtTokenManager; + + private final AuthenticationManager authenticationManager; + + /** + * Resolve token from user. + * + * @param userName + * @param rawPassword + * @return + * @throws AccessException + */ + @SneakyThrows + public String resolveTokenFromUser(String userName, String rawPassword) { + try { + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(userName, rawPassword); + authenticationManager.authenticate(authenticationToken); + } catch (AuthenticationException e) { + throw new AccessException("Unknown user."); + } + return jwtTokenManager.createToken(userName); + } +} diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java new file mode 100644 index 00000000..84160cc9 --- /dev/null +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/security/JwtTokenManager.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.auth.security; + +import cn.hutool.core.util.StrUtil; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.userdetails.User; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; + +import static cn.hippo4j.auth.constant.Constants.TOKEN_VALIDITY_IN_SECONDS; +import static cn.hippo4j.auth.toolkit.JwtTokenUtil.SECRET; +import static cn.hippo4j.common.constant.Constants.AUTHORITIES_KEY; + +/** + * Jwt token manager. + */ +@Component +public class JwtTokenManager { + + public String createToken(String userName) { + long now = System.currentTimeMillis(); + Date validity; + validity = new Date(now + TOKEN_VALIDITY_IN_SECONDS * 1000L); + Claims claims = Jwts.claims().setSubject(userName); + return Jwts.builder().setClaims(claims).setExpiration(validity) + .signWith(SignatureAlgorithm.HS512, SECRET).compact(); + } + + public void validateToken(String token) { + Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token); + } + + /** + * Get auth Info. + * + * @param token token + * @return auth info + */ + public Authentication getAuthentication(String token) { + Claims claims = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody(); + List authorities = AuthorityUtils + .commaSeparatedStringToAuthorityList((String) claims.get(AUTHORITIES_KEY)); + User principal = new User(claims.getSubject(), StrUtil.EMPTY, authorities); + return new UsernamePasswordAuthenticationToken(principal, StrUtil.EMPTY, authorities); + } +} diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/PermissionService.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/PermissionService.java index 922c0576..dff771a3 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/PermissionService.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/PermissionService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service; import cn.hippo4j.auth.model.biz.permission.PermissionRespDTO; @@ -5,14 +22,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; /** * Permission service. - * - * @author chen.ma - * @date 2021/10/30 22:13 */ public interface PermissionService { /** - * 分页查询权限列表. + * Paging query permission list. * * @param pageNo * @param pageSize @@ -21,7 +35,7 @@ public interface PermissionService { IPage listPermission(int pageNo, int pageSize); /** - * 新增权限. + * Add permission. * * @param role * @param resource @@ -30,12 +44,11 @@ public interface PermissionService { void addPermission(String role, String resource, String action); /** - * 删除权限. + * Remove permission. * * @param role * @param resource * @param action */ void deletePermission(String role, String resource, String action); - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/RoleService.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/RoleService.java index 2b212e4c..5f155909 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/RoleService.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/RoleService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -7,14 +24,11 @@ import java.util.List; /** * Role service. - * - * @author chen.ma - * @date 2021/10/30 22:45 */ public interface RoleService { /** - * 分页查询角色列表. + * Paging query role list. * * @param pageNo * @param pageSize @@ -23,7 +37,7 @@ public interface RoleService { IPage listRole(int pageNo, int pageSize); /** - * 新增角色. + * Add role. * * @param role * @param userName @@ -31,7 +45,7 @@ public interface RoleService { void addRole(String role, String userName); /** - * 删除角色. + * Delete role. * * @param role * @param userName @@ -39,11 +53,10 @@ public interface RoleService { void deleteRole(String role, String userName); /** - * 根据角色模糊搜索. + * Fuzzy search by role. * * @param role * @return */ List getRoleLike(String role); - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/UserService.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/UserService.java index 9e92ffa2..6f98b582 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/UserService.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/UserService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service; import cn.hippo4j.auth.model.biz.user.UserQueryPageReqDTO; @@ -9,14 +26,11 @@ import java.util.List; /** * User service. - * - * @author chen.ma - * @date 2021/10/30 21:34 */ public interface UserService { /** - * 分页查询用户列表. + * Paging query user list. * * @param reqDTO * @return @@ -24,32 +38,39 @@ public interface UserService { IPage listUser(UserQueryPageReqDTO reqDTO); /** - * 新增用户. + * New users. * * @param reqDTO */ void addUser(UserReqDTO reqDTO); /** - * 修改用户. + * Modify user. * * @param reqDTO */ void updateUser(UserReqDTO reqDTO); /** - * 删除用户. + * Delete users. * * @param userName */ void deleteUser(String userName); /** - * 根据用户名模糊搜索. + * Fuzzy search by username. * * @param userName * @return */ List getUserLikeUsername(String userName); + /** + * Get user details. + * + * @param reqDTO + * @return + */ + UserRespDTO getUser(UserReqDTO reqDTO); } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java index ddbf36f4..b53b1c6a 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/PermissionServiceImpl.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service.impl; import cn.hippo4j.auth.mapper.PermissionMapper; @@ -16,9 +33,6 @@ import org.springframework.stereotype.Service; /** * Permission service impl. - * - * @author chen.ma - * @date 2021/10/30 22:32 */ @Service @AllArgsConstructor @@ -44,7 +58,6 @@ public class PermissionServiceImpl implements PermissionService { if (existPermissionInfo != null) { throw new RuntimeException("权限重复"); } - PermissionInfo insertPermission = new PermissionInfo(); insertPermission.setRole(role); insertPermission.setResource(resource); @@ -58,8 +71,6 @@ public class PermissionServiceImpl implements PermissionService { .eq(StrUtil.isNotBlank(role), PermissionInfo::getRole, role) .eq(StrUtil.isNotBlank(resource), PermissionInfo::getResource, resource) .eq(StrUtil.isNotBlank(action), PermissionInfo::getAction, action); - permissionMapper.delete(updateWrapper); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java index 04b7b59a..dd45b56c 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/RoleServiceImpl.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service.impl; import cn.hippo4j.auth.mapper.RoleMapper; @@ -21,9 +38,6 @@ import java.util.stream.Collectors; /** * Role service impl. - * - * @author chen.ma - * @date 2021/10/30 22:53 */ @Service @AllArgsConstructor @@ -37,7 +51,6 @@ public class RoleServiceImpl implements RoleService { public IPage listRole(int pageNo, int pageSize) { RoleQueryPageReqDTO queryPage = new RoleQueryPageReqDTO(pageNo, pageSize); IPage selectPage = roleMapper.selectPage(queryPage, null); - return selectPage.convert(each -> BeanUtil.toBean(each, RoleRespDTO.class)); } @@ -49,7 +62,6 @@ public class RoleServiceImpl implements RoleService { if (roleInfo != null) { throw new RuntimeException("角色名重复"); } - RoleInfo insertRole = new RoleInfo(); insertRole.setRole(role); insertRole.setUserName(userName); @@ -63,12 +75,10 @@ public class RoleServiceImpl implements RoleService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleInfo.class).eq(RoleInfo::getUserName, userName); roleStrList = roleMapper.selectList(queryWrapper).stream().map(RoleInfo::getRole).collect(Collectors.toList()); } - LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(RoleInfo.class) .eq(StrUtil.isNotBlank(role), RoleInfo::getRole, role) .eq(StrUtil.isNotBlank(userName), RoleInfo::getUserName, userName); roleMapper.delete(updateWrapper); - roleStrList.forEach(each -> permissionService.deletePermission(each, "", "")); } @@ -77,11 +87,8 @@ public class RoleServiceImpl implements RoleService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(RoleInfo.class) .like(RoleInfo::getRole, role) .select(RoleInfo::getRole); - List roleInfos = roleMapper.selectList(queryWrapper); List roleNames = roleInfos.stream().map(RoleInfo::getRole).collect(Collectors.toList()); - return roleNames; } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserDetailsServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserDetailsServiceImpl.java index 5a1c1fc9..19688fd1 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserDetailsServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserDetailsServiceImpl.java @@ -1,9 +1,27 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service.impl; import cn.hippo4j.auth.mapper.UserMapper; import cn.hippo4j.auth.model.UserInfo; import cn.hippo4j.auth.model.biz.user.JwtUser; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -11,14 +29,13 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import javax.annotation.Resource; import java.util.Collections; +import java.util.Objects; import java.util.Set; /** * User details service impl. - * - * @author chen.ma - * @date 2021/11/9 22:26 */ +@Slf4j public class UserDetailsServiceImpl implements UserDetailsService { @Resource @@ -27,16 +44,16 @@ public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { UserInfo userInfo = userMapper.selectOne(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUserName, userName)); - + if (Objects.isNull(userInfo)) { + log.warn("User {} not found", userName); + throw new UsernameNotFoundException(userName); + } JwtUser jwtUser = new JwtUser(); jwtUser.setId(userInfo.getId()); jwtUser.setUsername(userName); jwtUser.setPassword(userInfo.getPassword()); - Set authorities = Collections.singleton(new SimpleGrantedAuthority(userInfo.getRole() + "")); jwtUser.setAuthorities(authorities); - return jwtUser; } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java index c29db6a9..f94df6a2 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/service/impl/UserServiceImpl.java @@ -1,30 +1,48 @@ +/* + * 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. + */ + package cn.hippo4j.auth.service.impl; import cn.hippo4j.auth.mapper.UserMapper; import cn.hippo4j.auth.model.UserInfo; import cn.hippo4j.auth.model.biz.user.UserQueryPageReqDTO; +import cn.hippo4j.auth.model.biz.user.UserReqDTO; import cn.hippo4j.auth.model.biz.user.UserRespDTO; import cn.hippo4j.auth.service.RoleService; import cn.hippo4j.auth.service.UserService; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.common.web.exception.ServiceException; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import cn.hippo4j.auth.model.biz.user.UserReqDTO; import lombok.AllArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** * User service impl. - * - * @author chen.ma - * @date 2021/10/30 21:40 */ @Service @AllArgsConstructor @@ -38,8 +56,9 @@ public class UserServiceImpl implements UserService { @Override public IPage listUser(UserQueryPageReqDTO reqDTO) { - IPage selectPage = userMapper.selectPage(reqDTO, null); - + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class) + .eq(StringUtil.isNotBlank(reqDTO.getUserName()), UserInfo::getUserName, reqDTO.getUserName()); + IPage selectPage = userMapper.selectPage(reqDTO, queryWrapper); return selectPage.convert(each -> BeanUtil.toBean(each, UserRespDTO.class)); } @@ -51,7 +70,6 @@ public class UserServiceImpl implements UserService { if (existUserInfo != null) { throw new RuntimeException("用户名重复"); } - reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); UserInfo insertUser = BeanUtil.toBean(reqDTO, UserInfo.class); userMapper.insert(insertUser); @@ -63,7 +81,6 @@ public class UserServiceImpl implements UserService { reqDTO.setPassword(bCryptPasswordEncoder.encode(reqDTO.getPassword())); } UserInfo updateUser = BeanUtil.toBean(reqDTO, UserInfo.class); - LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserInfo.class) .eq(UserInfo::getUserName, reqDTO.getUserName()); userMapper.update(updateUser, updateWrapper); @@ -74,7 +91,6 @@ public class UserServiceImpl implements UserService { LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(UserInfo.class) .eq(UserInfo::getUserName, userName); userMapper.delete(updateWrapper); - // roleService.deleteRole("", userName); } @Override @@ -82,11 +98,18 @@ public class UserServiceImpl implements UserService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class) .like(UserInfo::getUserName, userName) .select(UserInfo::getUserName); - List userInfos = userMapper.selectList(queryWrapper); List userNames = userInfos.stream().map(UserInfo::getUserName).collect(Collectors.toList()); - return userNames; } + @Override + public UserRespDTO getUser(UserReqDTO reqDTO) { + Wrapper queryWrapper = Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUserName, reqDTO.getUserName()); + UserInfo userInfo = userMapper.selectOne(queryWrapper); + UserRespDTO respUser = Optional.ofNullable(userInfo) + .map(each -> BeanUtil.toBean(each, UserRespDTO.class)) + .orElseThrow(() -> new ServiceException("查询无此用户, 可以尝试清空缓存或退出登录.")); + return respUser; + } } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/JwtTokenUtil.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/JwtTokenUtil.java index 191fe222..c78af646 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/JwtTokenUtil.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/JwtTokenUtil.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.toolkit; import cn.hippo4j.auth.constant.Constants; @@ -11,37 +28,36 @@ import java.util.Date; import java.util.HashMap; import java.util.List; +import static cn.hippo4j.common.constant.Constants.MAP_INITIAL_CAPACITY; + /** - * Jwt token util. - * - * @author chen.ma - * @date 2021/11/9 22:43 + * JWT token util. */ public class JwtTokenUtil { public static final String TOKEN_HEADER = "Authorization"; public static final String TOKEN_PREFIX = "Bearer "; - private static final String SECRET = "Hippo4J_admin"; - private static final String ISS = "admin"; + public static final String SECRET = "SecretKey039245678901232039487623456783092349288901402967890140939827"; + public static final String ISS = "admin"; /** - * 角色的 Key + * Character key. */ private static final String ROLE_CLAIMS = "rol"; /** - * 过期时间是 3600 秒, 既 24 小时 + * Expiration time is 3600 seconds, which is 24 hours. */ private static final long EXPIRATION = 86400L; /** - * 选择了记住我之后的过期时间为 7 天 + * 7 days after selecting Remember me. */ private static final long EXPIRATION_REMEMBER = 7 * EXPIRATION; /** - * 创建 Token. + * Create Token. * * @param id * @param username @@ -51,7 +67,7 @@ public class JwtTokenUtil { */ public static String createToken(Long id, String username, String role, boolean isRememberMe) { long expiration = isRememberMe ? EXPIRATION_REMEMBER : EXPIRATION; - HashMap map = new HashMap<>(); + HashMap map = new HashMap(MAP_INITIAL_CAPACITY); map.put(ROLE_CLAIMS, role); return Jwts.builder() .signWith(SignatureAlgorithm.HS512, SECRET) @@ -64,7 +80,7 @@ public class JwtTokenUtil { } /** - * Token 中获取用户名. + * Get the username from Token. * * @param token * @return @@ -75,7 +91,7 @@ public class JwtTokenUtil { } /** - * Token 中获取用户名. + * Get the username from Token. * * @param token * @return @@ -86,7 +102,7 @@ public class JwtTokenUtil { } /** - * 获取用户角色. + * Get user role. * * @param token * @return @@ -96,7 +112,7 @@ public class JwtTokenUtil { } /** - * 是否已过期. + * Has it expired. * * @param token * @return @@ -110,10 +126,6 @@ public class JwtTokenUtil { } private static Claims getTokenBody(String token) { - return Jwts.parser() - .setSigningKey(SECRET) - .parseClaimsJws(token) - .getBody(); + return Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody(); } - } diff --git a/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/ReturnT.java b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/ReturnT.java index f46e4de8..ccc1ab1c 100644 --- a/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/ReturnT.java +++ b/hippo4j-auth/src/main/java/cn/hippo4j/auth/toolkit/ReturnT.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.auth.toolkit; import lombok.Data; @@ -7,9 +24,6 @@ import java.io.Serializable; /** * ReturnT. - * - * @author chen.ma - * @date 2021/11/10 00:00 */ @Data @NoArgsConstructor @@ -36,5 +50,4 @@ public class ReturnT implements Serializable { this.code = SUCCESS_CODE; this.content = content; } - } diff --git a/hippo4j-common/.gitignore b/hippo4j-common/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-common/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml index 2227b407..70cca0a9 100644 --- a/hippo4j-common/pom.xml +++ b/hippo4j-common/pom.xml @@ -2,34 +2,76 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-common - jar - ${project.artifactId} - ${project.artifactId} + + 5.2.21.RELEASE + 5.2.15.RELEASE + 5.2.21.RELEASE + 5.2.22.RELEASE + 2.12.6.1 + - org.springframework.boot - spring-boot-starter + org.springframework + spring-context + ${spring-context.version} + + + + org.springframework + spring-web + ${spring-web.version} + + + + org.springframework + spring-beans + ${spring-beans.version} + + + + org.springframework + spring-core + ${spring-core.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson-databind.version} - com.alibaba - fastjson + org.springframework.boot + spring-boot-starter org.projectlombok lombok + + + org.springframework.boot + spring-boot-starter-json + + + + com.google.guava + guava + + + + cn.hutool + hutool-all + @@ -48,7 +90,6 @@ - org.apache.maven.plugins maven-javadoc-plugin @@ -63,5 +104,4 @@ - diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java new file mode 100644 index 00000000..a99e1a8d --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ClientCloseHookExecute.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.common.api; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * Client close hook execute. + */ +public interface ClientCloseHookExecute { + + /** + * Client close hook function execution. + * + * @param req + */ + void closeHook(ClientCloseHookReq req); + + @Data + @Accessors(chain = true) + class ClientCloseHookReq { + + /** + * appName + */ + private String appName; + + /** + * instanceId + */ + private String instanceId; + + /** + * groupKey + */ + private String groupKey; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/api/JsonFacade.java b/hippo4j-common/src/main/java/cn/hippo4j/common/api/JsonFacade.java new file mode 100644 index 00000000..eb72bfb9 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/JsonFacade.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.common.api; + +import java.util.List; + +/** + * Json facade. + */ +public interface JsonFacade { + + /** + * To JSON string. + * + * @param object + * @return + */ + String toJSONString(Object object); + + /** + * Parse object. + * + * @param text + * @param clazz + * @param + * @return + */ + T parseObject(String text, Class clazz); + + /** + * Parse array. + * + * @param text + * @param clazz + * @param + * @return + */ + List parseArray(String text, Class clazz); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadDetailState.java b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadDetailState.java new file mode 100644 index 00000000..1fdd66f5 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadDetailState.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.common.api; + +import cn.hippo4j.common.model.ThreadDetailStateInfo; + +import java.util.List; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Get thread status in thread pool. + */ +public interface ThreadDetailState { + + /** + * Get thread status in thread pool. + * + * @param threadPoolId + * @return + */ + List getThreadDetailStateInfo(String threadPoolId); + + /** + * Get thread status in thread pool. + * + * @param threadPoolExecutor + * @return + */ + List getThreadDetailStateInfo(ThreadPoolExecutor threadPoolExecutor); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadPoolDynamicRefresh.java b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadPoolDynamicRefresh.java new file mode 100644 index 00000000..2221044c --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/ThreadPoolDynamicRefresh.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package cn.hippo4j.common.api; + +import java.util.Map; + +/** + * Thread-pool dynamic refresh. + */ +public interface ThreadPoolDynamicRefresh { + + /** + * Dynamic refresh. + * + * @param content + */ + void dynamicRefresh(String content); + + /** + * Dynamic refresh. + * + * @param content + * @param newValueChangeMap + */ + default void dynamicRefresh(String content, Map newValueChangeMap) { + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/config/ApplicationContextHolder.java b/hippo4j-common/src/main/java/cn/hippo4j/common/config/ApplicationContextHolder.java index 574366ec..5c2eb3fe 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/config/ApplicationContextHolder.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/config/ApplicationContextHolder.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.config; import org.springframework.beans.BeansException; @@ -9,9 +26,6 @@ import java.util.Map; /** * Application context holder. - * - * @author chen.ma - * @date 2021/6/20 18:49 */ public class ApplicationContextHolder implements ApplicationContextAware { @@ -76,5 +90,4 @@ public class ApplicationContextHolder implements ApplicationContextAware { public static ApplicationContext getInstance() { return CONTEXT; } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java new file mode 100644 index 00000000..959d4af1 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.common.constant; + +/** + * Change thread-pool constants. + */ +public class ChangeThreadPoolConstants { + + public static final String CHANGE_THREAD_POOL_TEXT = "Dynamic thread pool change parameter: [{}]" + + "\n corePoolSize: [{}]" + + "\n maximumPoolSize: [{}]" + + "\n blockingQueueType: [{}]" + + "\n capacity: [{}]" + + "\n keepAliveTime: [{}]" + + "\n executeTimeOut: [{}]" + + "\n rejectedType: [{}]" + + "\n allowCoreThreadTimeOut: [{}]"; + + public static final String CHANGE_DELIMITER = "%s => %s"; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/Constants.java b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/Constants.java index 437618b6..fb80954e 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/Constants.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/Constants.java @@ -1,12 +1,24 @@ -package cn.hippo4j.common.constant; +/* + * 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. + */ -import java.util.UUID; +package cn.hippo4j.common.constant; /** * Constants. - * - * @author chen.ma - * @date 2021/6/16 23:01 */ public class Constants { @@ -18,10 +30,18 @@ public class Constants { public static final String GROUP_KEY = "groupKey"; + public static final String AUTHORITIES_KEY = "auth"; + + public static final String ACCESS_TOKEN = "accessToken"; + + public static final String TOKEN_TTL = "tokenTtl"; + public static final String DEFAULT_NAMESPACE_ID = "public"; public static final String NULL = ""; + public static final String UP = "UP"; + public static final String ENCODE = "UTF-8"; public static final int CONFIG_LONG_POLL_TIMEOUT = 30000; @@ -32,14 +52,26 @@ public class Constants { public static final String GENERAL_SPLIT_SYMBOL = ","; + public static final String IDENTIFY_SLICER_SYMBOL = "_"; + public static final String LONG_POLLING_LINE_SEPARATOR = "\r\n"; - public static final String BASE_PATH = "/v1/cs"; + public static final String BASE_PATH = "/hippo4j/v1/cs"; public static final String CONFIG_CONTROLLER_PATH = BASE_PATH + "/configs"; public static final String LISTENER_PATH = CONFIG_CONTROLLER_PATH + "/listener"; + public static final String MONITOR_PATH = BASE_PATH + "/monitor"; + + public static final String REGISTER_ADAPTER_BASE_PATH = BASE_PATH + "/adapter/thread-pool"; + + public static final String REGISTER_ADAPTER_PATH = REGISTER_ADAPTER_BASE_PATH + "/register"; + + public static final String REGISTER_DYNAMIC_THREAD_POOL_PATH = CONFIG_CONTROLLER_PATH + "/register"; + + public static final String HEALTH_CHECK_PATH = BASE_PATH + "/health/check"; + public static final String PROBE_MODIFY_REQUEST = "Listening-Configs"; public static final String LONG_PULLING_TIMEOUT = "Long-Pulling-Timeout"; @@ -48,10 +80,10 @@ public class Constants { public static final String LONG_PULLING_CLIENT_IDENTIFICATION = "Long-Pulling-Client-Identification"; - public static final String CLIENT_IDENTIFICATION_VALUE = UUID.randomUUID().toString(); - public static final String LISTENING_CONFIGS = "Listening-Configs"; + public static final String WEIGHT_CONFIGS = "Weight-Configs"; + public static final String GROUP_KEY_DELIMITER = "+"; public static final String GROUP_KEY_DELIMITER_TRANSLATION = "\\+"; @@ -62,4 +94,15 @@ public class Constants { public static final int MAP_INITIAL_CAPACITY = 16; + public static final int HEALTH_CHECK_INTERVAL = 5; + + public static final int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors(); + + public static final String DEFAULT_GROUP = "default group"; + + public static final String UNKNOWN = "unknown"; + + public static final String EXECUTE_TIMEOUT_TRACE = "executeTimeoutTrace"; + + public static final int HTTP_EXECUTE_TIMEOUT = 5000; } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/Builder.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/Builder.java new file mode 100644 index 00000000..358a6ee1 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/builder/Builder.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +package cn.hippo4j.common.design.builder; + +import java.io.Serializable; + +/** + * Builder pattern interface definition. + */ +public interface Builder extends Serializable { + + T build(); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java new file mode 100644 index 00000000..530f33df --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/AbstractSubjectCenter.java @@ -0,0 +1,146 @@ +/* + * 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. + */ + +package cn.hippo4j.common.design.observer; + +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Send observer notification. + */ +@Slf4j +public class AbstractSubjectCenter { + + private static final Map> OBSERVERS_MAP = new ConcurrentHashMap(); + + /** + * Register observer. + * + * @param observer + */ + public static void register(Observer observer) { + register(SubjectType.SPRING_CONTENT_REFRESHED.name(), observer); + } + + /** + * Register observer. + * + * @param subjectType + * @param observer + */ + public static void register(SubjectType subjectType, Observer observer) { + register(subjectType.name(), observer); + } + + /** + * Register observer. + * + * @param subject + * @param observer + */ + public static void register(String subject, Observer observer) { + if (StringUtil.isBlank(subject) || observer == null) { + log.warn("Register observer. A string whose subject or observer is empty or empty."); + return; + } + + List observers = OBSERVERS_MAP.get(subject); + if (CollectionUtil.isEmpty(observers)) { + observers = new ArrayList(); + } + + observers.add(observer); + OBSERVERS_MAP.put(subject, observers); + } + + /** + * Remove observer. + * + * @param observer + */ + public static void remove(Observer observer) { + remove(SubjectType.SPRING_CONTENT_REFRESHED.name(), observer); + } + + /** + * Remove observer. + * + * @param subject + * @param observer + */ + public static void remove(String subject, Observer observer) { + List observers; + if (StringUtil.isBlank(subject) || CollectionUtil.isEmpty((observers = OBSERVERS_MAP.get(subject))) || observer == null) { + log.warn("Remove observer. A string whose subject or observer is empty or empty."); + return; + } + + observers.remove(observer); + } + + /** + * Notify. + * + * @param subjectType + * @param observerMessage + */ + public static void notify(SubjectType subjectType, ObserverMessage observerMessage) { + notify(subjectType.name(), observerMessage); + } + + /** + * Notify. + * + * @param subject + * @param observerMessage + */ + public static void notify(String subject, ObserverMessage observerMessage) { + List observers = OBSERVERS_MAP.get(subject); + if (CollectionUtil.isEmpty(observers)) { + log.warn("Under the subject, there is no observer group."); + return; + } + + observers.parallelStream().forEach(each -> { + try { + each.accept(observerMessage); + } catch (Exception ex) { + log.error("Notification subject: {} observer exception", subject); + } + }); + } + + public enum SubjectType { + + /** + * Spring content refreshed. + */ + SPRING_CONTENT_REFRESHED, + + /** + * Clear config cache. + */ + CLEAR_CONFIG_CACHE + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/Observer.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/Observer.java new file mode 100644 index 00000000..08b99581 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/Observer.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.common.design.observer; + +/** + * Observer. + */ +public interface Observer { + + /** + * Receive notification. + * + * @param observerMessage + */ + void accept(ObserverMessage observerMessage); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/ObserverMessage.java b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/ObserverMessage.java new file mode 100644 index 00000000..912b6b64 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/design/observer/ObserverMessage.java @@ -0,0 +1,26 @@ +/* + * 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. + */ + +package cn.hippo4j.common.design.observer; + +/** + * Message notifying observer. + */ +public interface ObserverMessage { + + T message(); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/enums/DelEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/enums/DelEnum.java new file mode 100644 index 00000000..70267d32 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/enums/DelEnum.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.common.enums; + +/** + * Del enum. + */ +public enum DelEnum { + + /** + * Normal state + */ + NORMAL("0"), + + /** + * Deleted state + */ + DELETE("1"); + + private final String statusCode; + + DelEnum(String statusCode) { + this.statusCode = statusCode; + } + + public String getCode() { + return this.statusCode; + } + + public Integer getIntCode() { + return Integer.parseInt(this.statusCode); + } + + @Override + public String toString() { + return statusCode; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/enums/EnableEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/enums/EnableEnum.java new file mode 100644 index 00000000..15e74c4f --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/enums/EnableEnum.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.common.enums; + +import java.util.Objects; + +/** + * Enable enum. + */ +public enum EnableEnum { + + /** + * True. + */ + YES("1"), + + /** + * False. + */ + NO("0"); + + private final String statusCode; + + EnableEnum(String statusCode) { + this.statusCode = statusCode; + } + + public String getCode() { + return this.statusCode; + } + + public Integer getIntCode() { + return Integer.parseInt(this.statusCode); + } + + @Override + public String toString() { + return statusCode; + } + + public static boolean getBool(Integer intStatusCode) { + return Objects.equals(intStatusCode, EnableEnum.YES.getIntCode()) ? true : false; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java index cebe8a40..d38ccaed 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ExecutorFactory.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.executor; import java.util.concurrent.Executors; @@ -6,9 +23,6 @@ import java.util.concurrent.ThreadFactory; /** * Executor factory. - * - * @author chen.ma - * @date 2021/6/23 18:35 */ public class ExecutorFactory { @@ -24,5 +38,4 @@ public class ExecutorFactory { return executorService; } } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java index 0670aa95..9960b789 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/ThreadPoolManager.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.executor; import java.util.HashMap; @@ -9,10 +26,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; /** - * Thread Pool Manager. - * - * @author chen.ma - * @date 2021/6/23 18:36 + * Thread-pool manager. */ public class ThreadPoolManager { @@ -42,7 +56,6 @@ public class ThreadPoolManager { lockers.put(tenantId, new Object()); } } - final Object monitor = lockers.get(tenantId); synchronized (monitor) { Map> map = resourcesManager.get(tenantId); @@ -59,5 +72,4 @@ public class ThreadPoolManager { map.get(group).add(executor); } } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/function/Matcher.java b/hippo4j-common/src/main/java/cn/hippo4j/common/function/Matcher.java new file mode 100644 index 00000000..918ec3ee --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/function/Matcher.java @@ -0,0 +1,27 @@ +/* + * 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. + */ + +package cn.hippo4j.common.function; + +/** + * Matcher. + */ +@FunctionalInterface +public interface Matcher { + + boolean match(T t); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/function/NoArgsConsumer.java b/hippo4j-common/src/main/java/cn/hippo4j/common/function/NoArgsConsumer.java index c8fe64ae..878691ec 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/function/NoArgsConsumer.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/function/NoArgsConsumer.java @@ -1,17 +1,27 @@ +/* + * 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. + */ + package cn.hippo4j.common.function; /** - * 无参消费者. - * - * @author chen.ma - * @date 2021/11/9 00:06 + * No args consumer. */ @FunctionalInterface public interface NoArgsConsumer { - /** - * 方法执行 - */ void accept(); - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/GlobalRemotePoolInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/GlobalRemotePoolInfo.java index a9f64620..f704c49b 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/GlobalRemotePoolInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/GlobalRemotePoolInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.model; import lombok.Getter; @@ -7,9 +24,6 @@ import java.io.Serializable; /** * Global remote pool info. - * - * @author chen.ma - * @date 2021/6/23 21:08 */ @Getter @Setter @@ -81,5 +95,4 @@ public class GlobalRemotePoolInfo implements Serializable { * content */ private String content; - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java index 370b208b..7a527889 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/InstanceInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.model; import lombok.Data; @@ -8,9 +25,6 @@ import lombok.extern.slf4j.Slf4j; /** * Instance info. - * - * @author chen.ma - * @date 2021/7/13 22:10 */ @Slf4j @Getter @@ -38,6 +52,8 @@ public class InstanceInfo { private String identify; + private String active; + private volatile String vipAddress; private volatile String secureVipAddress; @@ -99,14 +115,29 @@ public class InstanceInfo { public enum InstanceStatus { + /** + * UP + */ UP, + /** + * DOWN + */ DOWN, + /** + * STARTING + */ STARTING, + /** + * OUT_OF_SERVICE + */ OUT_OF_SERVICE, + /** + * UNKNOWN + */ UNKNOWN; public static InstanceStatus toEnum(String s) { @@ -123,10 +154,19 @@ public class InstanceInfo { } public enum ActionType { + /** + * ADDED + */ ADDED, + /** + * MODIFIED + */ MODIFIED, + /** + * DELETED + */ DELETED } @@ -141,8 +181,5 @@ public class InstanceInfo { private String lastDirtyTimestamp; private String status; - } - } - diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ManyThreadPoolRunStateInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ManyThreadPoolRunStateInfo.java new file mode 100644 index 00000000..385e5a21 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ManyThreadPoolRunStateInfo.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.Data; + +/** + * Many pool run state info. + */ +@Data +public class ManyThreadPoolRunStateInfo extends ThreadPoolRunStateInfo { + + /** + * identify + */ + private String identify; + + /** + * active + */ + private String active; + + /** + * state + */ + private String state; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameterInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameterInfo.java deleted file mode 100644 index de9d4a15..00000000 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameterInfo.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.hippo4j.common.model; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * Thread pool parameter info. - * - * @author chen.ma - * @date 2021/6/16 23:18 - */ -@Data -@Accessors(chain = true) -public class PoolParameterInfo implements PoolParameter, Serializable { - - private static final long serialVersionUID = -7123935122108553864L; - - /** - * tenantId - */ - private String tenantId; - - /** - * itemId - */ - private String itemId; - - /** - * tpId - */ - private String tpId; - - /** - * content - */ - private String content; - - /** - * coreSize - */ - private Integer coreSize; - - /** - * maxSize - */ - private Integer maxSize; - - /** - * queueType - */ - private Integer queueType; - - /** - * capacity - */ - private Integer capacity; - - /** - * keepAliveTime - */ - private Integer keepAliveTime; - - /** - * rejectedType - */ - private Integer rejectedType; - - /** - * isAlarm - */ - private Integer isAlarm; - - /** - * capacityAlarm - */ - private Integer capacityAlarm; - - /** - * livenessAlarm - */ - private Integer livenessAlarm; - -} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java deleted file mode 100644 index e47be3d0..00000000 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java +++ /dev/null @@ -1,108 +0,0 @@ -package cn.hippo4j.common.model; - -import lombok.Getter; -import lombok.Setter; - -import java.io.Serializable; - -/** - * Pool run state info. - * - * @author chen.ma - * @date 2021/7/7 18:57 - */ -@Getter -@Setter -public class PoolRunStateInfo implements Serializable { - - /** - * currentLoad - */ - private String currentLoad; - - /** - * peakLoad - */ - private String peakLoad; - - /** - * tpId - */ - private String tpId; - - /** - * coreSize - */ - private Integer coreSize; - - /** - * maximumSize - */ - private Integer maximumSize; - - /** - * poolSize - */ - private Integer poolSize; - - /** - * activeSize - */ - private Integer activeSize; - - /** - * The maximum number of threads that enter the thread pool at the same time - */ - private Integer largestPoolSize; - - /** - * queueType - */ - private String queueType; - - /** - * queueCapacity - */ - private Integer queueCapacity; - - /** - * queueSize - */ - private Integer queueSize; - - /** - * queueRemainingCapacity - */ - private Integer queueRemainingCapacity; - - /** - * completedTaskCount - */ - private Long completedTaskCount; - - /** - * rejectCount - */ - private Integer rejectCount; - - /** - * host - */ - private String host; - - /** - * memoryProportion - */ - private String memoryProportion; - - /** - * freeMemory - */ - private String freeMemory; - - /** - * clientLastRefreshTime - */ - private String clientLastRefreshTime; - -} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadDetailStateInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadDetailStateInfo.java new file mode 100644 index 00000000..b8777540 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadDetailStateInfo.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * Thread detail state info. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class ThreadDetailStateInfo { + + /** + * threadId + */ + private Long threadId; + + /** + * threadName + */ + private String threadName; + + /** + * threadStatus + */ + private String threadStatus; + + /** + * threadStack + */ + private List threadStack; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolBaseInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolBaseInfo.java new file mode 100644 index 00000000..8fba9dd0 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolBaseInfo.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * Thread-pool base info. + */ +@Data +@Accessors(chain = true) +public class ThreadPoolBaseInfo { + + /** + * coreSize + */ + private Integer coreSize; + + /** + * maximumSize + */ + private Integer maximumSize; + + /** + * queueType + */ + private String queueType; + + /** + * queueCapacity + */ + private Integer queueCapacity; + + /** + * rejectedName + */ + private String rejectedName; + + /** + * keepAliveTime + */ + private Long keepAliveTime; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java similarity index 51% rename from hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameter.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java index e90cddc6..f990b56c 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolParameter.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.common.model; /** - * Pool parameter. - * - * @author chen.ma - * @date 2021/6/24 16:04 + * Thread-pool parameter. */ -public interface PoolParameter { +public interface ThreadPoolParameter { /** * tenantId @@ -92,4 +106,10 @@ public interface PoolParameter { */ Integer getLivenessAlarm(); + /** + * allowCoreThreadTimeOut + * + * @return + */ + Integer getAllowCoreThreadTimeOut(); } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameterInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameterInfo.java new file mode 100644 index 00000000..8a6a5ef8 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameterInfo.java @@ -0,0 +1,129 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Thread pool parameter info. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class ThreadPoolParameterInfo implements ThreadPoolParameter, Serializable { + + private static final long serialVersionUID = -7123935122108553864L; + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Thread-pool id + */ + private String tpId; + + /** + * Content + */ + private String content; + + /** + * Core size + */ + @Deprecated + private Integer coreSize; + + /** + * Max size + */ + @Deprecated + private Integer maxSize; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Queue type + */ + private Integer queueType; + + /** + * Capacity + */ + private Integer capacity; + + /** + * Keep alive time + */ + private Integer keepAliveTime; + + /** + * Rejected type + */ + private Integer rejectedType; + + /** + * Is alarm + */ + private Integer isAlarm; + + /** + * Capacity alarm + */ + private Integer capacityAlarm; + + /** + * Liveness alarm + */ + private Integer livenessAlarm; + + /** + * Allow core thread timeout + */ + private Integer allowCoreThreadTimeOut; + + public Integer corePoolSizeAdapt() { + return this.corePoolSize == null ? this.coreSize : this.corePoolSize; + } + + public Integer maximumPoolSizeAdapt() { + return this.maximumPoolSize == null ? this.maxSize : this.maximumPoolSize; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolRunStateInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolRunStateInfo.java new file mode 100644 index 00000000..f1b04ae3 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolRunStateInfo.java @@ -0,0 +1,119 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * Pool run state info. + */ +@Getter +@Setter +public class ThreadPoolRunStateInfo extends ThreadPoolBaseInfo implements Serializable { + + /** + * currentLoad + */ + private String currentLoad; + + /** + * peakLoad + */ + private String peakLoad; + + /** + * tpId + */ + private String tpId; + + /** + * activeCount + */ + private Integer activeCount; + + /** + * poolSize + */ + private Integer poolSize; + + /** + * activeSize + */ + private Integer activeSize; + + /** + * The maximum number of threads that enter the thread pool at the same time + */ + private Integer largestPoolSize; + + /** + * queueSize + */ + private Integer queueSize; + + /** + * queueRemainingCapacity + */ + private Integer queueRemainingCapacity; + + /** + * completedTaskCount + */ + private Long completedTaskCount; + + /** + * rejectCount + */ + private Long rejectCount; + + /** + * host + */ + private String host; + + /** + * memoryProportion + */ + private String memoryProportion; + + /** + * freeMemory + */ + private String freeMemory; + + /** + * clientLastRefreshTime + */ + private String clientLastRefreshTime; + + /** + * timestamp + */ + private Long timestamp; + + public Integer getSimpleCurrentLoad() { + return Integer.parseInt(getCurrentLoad().replace("%", "")); + } + + public Integer getSimplePeakLoad() { + return Integer.parseInt(getPeakLoad().replace("%", "")); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/TokenInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/TokenInfo.java new file mode 100644 index 00000000..8dfe3587 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/TokenInfo.java @@ -0,0 +1,41 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Token info. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TokenInfo { + + /** + * accessToken + */ + private String accessToken; + + /** + * tokenTtl + */ + private Long tokenTtl; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterParameter.java new file mode 100644 index 00000000..85d8bd9b --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterParameter.java @@ -0,0 +1,94 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model.register; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Dynamic thread-pool register parameter. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolRegisterParameter { + + /** + * Thread-pool id + * Empty or empty strings are not allowed, and `+` signs are not allowed + */ + private String threadPoolId; + + /** + * Content + */ + private String content; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Queue type + */ + private Integer queueType; + + /** + * Capacity + */ + private Integer capacity; + + /** + * Keep alive time + */ + private Integer keepAliveTime; + + /** + * Rejected type + */ + private Integer rejectedType; + + /** + * Is alarm + */ + private Integer isAlarm; + + /** + * Capacity alarm + */ + private Integer capacityAlarm; + + /** + * Liveness alarm + */ + private Integer livenessAlarm; + + /** + * Allow core thread timeout + */ + private Integer allowCoreThreadTimeOut; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterWrapper.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterWrapper.java new file mode 100644 index 00000000..cdbd455f --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/DynamicThreadPoolRegisterWrapper.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.common.model.register; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Dynamic thread-pool register wrapper. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolRegisterWrapper { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Update if exists + */ + private Boolean updateIfExists = Boolean.TRUE; + + /** + * Dynamic thread-pool register parameter + */ + private DynamicThreadPoolRegisterParameter dynamicThreadPoolRegisterParameter; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/AbstractMessage.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/AbstractMessage.java new file mode 100644 index 00000000..a96e8df8 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/AbstractMessage.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Base message. + */ +@Data +@NoArgsConstructor +public abstract class AbstractMessage implements Message { + + /** + * groupKey: tenant + item + tpId + identify + */ + private String groupKey; + + /** + * messageTypeEnum + */ + private MessageTypeEnum messageType; + + /** + * message + */ + private List messages; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/Message.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/Message.java new file mode 100644 index 00000000..87538dc3 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/Message.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +import java.io.Serializable; +import java.util.List; + +/** + * Abstract message monitoring interface. + */ +public interface Message extends Serializable { + + /** + * Get groupKey. + * + * @return + */ + String getGroupKey(); + + /** + * Get message type. + * + * @return + */ + MessageTypeEnum getMessageType(); + + /** + * Get messages. + * + * @return + */ + List getMessages(); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageRequest.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageRequest.java new file mode 100644 index 00000000..1778b9a7 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageRequest.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +import java.util.List; +import java.util.Map; + +/** + * Message request. + */ +public interface MessageRequest { + + /** + * Get content params. + * + * @return + */ + List> getContentParams(); + + /** + * Get response class. + * + * @return + */ + Class getResponseClass(); + + /** + * Get message type. + * + * @return + */ + MessageTypeEnum getMessageType(); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageTypeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageTypeEnum.java new file mode 100644 index 00000000..3bbfbed3 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageTypeEnum.java @@ -0,0 +1,34 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +/** + * Message type enum. + */ +public enum MessageTypeEnum { + + /** + * RUNTIME + */ + RUNTIME, + + /** + * DEFAULT + */ + DEFAULT +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageWrapper.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageWrapper.java new file mode 100644 index 00000000..464d6fe5 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/MessageWrapper.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * Message wrapper. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MessageWrapper implements MessageRequest, Serializable { + + /** + * contentParams + */ + private List> contentParams; + + /** + * responseClass + */ + private Class responseClass; + + /** + * getMessageType + */ + private MessageTypeEnum messageType; + + @Override + public List> getContentParams() { + return contentParams; + } + + @Override + public Class getResponseClass() { + return responseClass; + } + + @Override + public MessageTypeEnum getMessageType() { + return messageType; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/RuntimeMessage.java b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/RuntimeMessage.java new file mode 100644 index 00000000..444aaa01 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/monitor/RuntimeMessage.java @@ -0,0 +1,84 @@ +/* + * 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. + */ + +package cn.hippo4j.common.monitor; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Dynamic thread pool runtime data. + */ +@Data +@NoArgsConstructor +public class RuntimeMessage extends AbstractMessage { + + /** + * currentLoad + */ + private String currentLoad; + + /** + * peakLoad + */ + private String peakLoad; + + /** + * poolSize + */ + private Integer poolSize; + + /** + * The maximum number of threads that enter the thread pool at the same time + */ + private Integer largestPoolSize; + + /** + * activeSize + */ + private String activeSize; + + /** + * queueCapacity + */ + private Integer queueCapacity; + + /** + * queueSize + */ + private Integer queueSize; + + /** + * queueRemainingCapacity + */ + private String queueRemainingCapacity; + + /** + * completedTaskCount + */ + private Long completedTaskCount; + + /** + * rejectCount + */ + private Integer rejectCount; + + /** + * timestamp + */ + private Long timestamp; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ArrayUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ArrayUtil.java new file mode 100644 index 00000000..bf7d3bde --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ArrayUtil.java @@ -0,0 +1,114 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hippo4j.common.function.Matcher; + +import java.lang.reflect.Array; + +/** + * Array util. + */ +public class ArrayUtil { + + /** + * Is empty. + * + * @param array + * @param + * @return + */ + public static boolean isEmpty(T[] array) { + return array == null || array.length == 0; + } + + /** + * Is not empty. + * + * @param array + * @param + * @return + */ + public static boolean isNotEmpty(T[] array) { + return !isEmpty(array); + } + + /** + * First match. + * + * @param matcher + * @param array + * @param + * @return + */ + public static T firstMatch(Matcher matcher, T... array) { + if (!isEmpty(array)) { + for (final T val : array) { + if (matcher.match(val)) { + return val; + } + } + } + return null; + } + + /** + * Add all. + * + * @param array1 + * @param array2 + * @param + * @return + */ + public static T[] addAll(final T[] array1, @SuppressWarnings("unchecked") final T... array2) { + if (array1 == null) { + return clone(array2); + } else if (array2 == null) { + return clone(array1); + } + final Class type1 = array1.getClass().getComponentType(); + @SuppressWarnings("unchecked") + final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length); + System.arraycopy(array1, 0, joinedArray, 0, array1.length); + try { + System.arraycopy(array2, 0, joinedArray, array1.length, array2.length); + } catch (final ArrayStoreException ase) { + final Class type2 = array2.getClass().getComponentType(); + if (!type1.isAssignableFrom(type2)) { + throw new IllegalArgumentException("Cannot store " + type2.getName() + " in an array of " + + type1.getName(), ase); + } + throw ase; + } + return joinedArray; + } + + /** + * Clone. + * + * @param array + * @param + * @return + */ + public static T[] clone(final T[] array) { + if (array == null) { + return null; + } + return array.clone(); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java index 5ce48ec9..1bff8abf 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Assert.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; import org.springframework.util.CollectionUtils; @@ -8,9 +25,6 @@ import java.util.Map; /** * Assert. - * - * @author chen.ma - * @date 2021/6/29 09:36 */ public class Assert { diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java new file mode 100644 index 00000000..7d98a0fa --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/BooleanUtil.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hutool.core.util.StrUtil; + +import java.util.HashSet; +import java.util.Set; + +/** + * Boolean util. + */ +public class BooleanUtil { + + private static final Set TREE_SET = new HashSet(3); + + static { + TREE_SET.add("true"); + TREE_SET.add("yes"); + TREE_SET.add("1"); + } + + /** + * To boolean. + * + * @param valueStr + * @return + */ + public static boolean toBoolean(String valueStr) { + if (StrUtil.isNotBlank(valueStr)) { + valueStr = valueStr.trim().toLowerCase(); + return TREE_SET.contains(valueStr); + } + return false; + } + + /** + * Is true. + * + * @param bool + * @return + */ + public static boolean isTrue(Boolean bool) { + return Boolean.TRUE.equals(bool); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java new file mode 100644 index 00000000..b181692f --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +/** + * Byte conversion tool class + */ +public class ByteConvertUtil { + + public static String getPrintSize(long size) { + long covertNum = 1024; + if (size < covertNum) { + return size + "B"; + } else { + size = size / covertNum; + } + if (size < covertNum) { + return size + "KB"; + } else { + size = size / covertNum; + } + if (size < covertNum) { + size = size * 100; + return (size / 100) + "." + (size % 100) + "MB"; + } else { + size = size * 100 / covertNum; + return (size / 100) + "." + (size % 100) + "GB"; + } + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java new file mode 100644 index 00000000..b5c8a132 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CalculateUtil.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +/** + * Calculate util. + * + * @author chen.ma + * @date 2021/8/15 14:29 + */ +public class CalculateUtil { + + public static int divide(int num1, int num2) { + return ((int) (Double.parseDouble(num1 + "") / Double.parseDouble(num2 + "") * 100)); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java new file mode 100644 index 00000000..61f263cd --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/CollectionUtil.java @@ -0,0 +1,125 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Collection util. + */ +public class CollectionUtil { + + /** + * Get first. + * + * @param iterable + * @param + * @return + */ + public static T getFirst(Iterable iterable) { + Iterator iterator; + if (iterable != null && (iterator = iterable.iterator()) != null && iterator.hasNext()) { + return iterator.next(); + } + + return null; + } + + /** + * Is empty. + * + * @param list + * @return + */ + public static boolean isEmpty(List list) { + return list == null || list.isEmpty(); + } + + /** + * Is not empty. + * + * @param list + * @return + */ + public static boolean isNotEmpty(List list) { + return !isEmpty(list); + } + + /** + * Is empty. + * + * @param map + * @return + */ + public static boolean isEmpty(Map map) { + return map == null || map.isEmpty(); + } + + /** + * Is not empty. + * + * @param map + * @return + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * Is empty. + * + * @param iterator + * @return + */ + public static boolean isEmpty(Iterator iterator) { + return null == iterator || false == iterator.hasNext(); + } + + /** + * Is not empty. + * + * @param iterator + * @return + */ + public static boolean isNotEmpty(Iterator iterator) { + return !isEmpty(iterator); + } + + /** + * Is empty. + * + * @param collection + * @return + */ + public static boolean isEmpty(Collection collection) { + return collection == null || collection.isEmpty(); + } + + /** + * Is not empty. + * + * @param collection + * @return + */ + public static boolean isNotEmpty(Collection collection) { + return !isEmpty(collection); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ConditionUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ConditionUtil.java index da44380a..c9d79fb1 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ConditionUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ConditionUtil.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; import cn.hippo4j.common.function.NoArgsConsumer; /** * Condition util. - * - * @author chen.ma - * @date 2021/11/6 22:40 */ public class ConditionUtil { @@ -17,5 +31,4 @@ public class ConditionUtil { falseConsumer.accept(); } } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ContentUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ContentUtil.java index 82f78eea..5a79cce6 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ContentUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ContentUtil.java @@ -1,21 +1,34 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; import cn.hippo4j.common.constant.Constants; -import com.alibaba.fastjson.JSON; -import cn.hippo4j.common.model.PoolParameter; -import cn.hippo4j.common.model.PoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; /** * Content util. - * - * @author chen.ma - * @date 2021/6/24 16:13 */ public class ContentUtil { - public static String getPoolContent(PoolParameter parameter) { - PoolParameterInfo poolInfo = new PoolParameterInfo(); - poolInfo.setTenantId(parameter.getTenantId()) + public static String getPoolContent(ThreadPoolParameter parameter) { + ThreadPoolParameterInfo threadPoolParameterInfo = new ThreadPoolParameterInfo(); + threadPoolParameterInfo.setTenantId(parameter.getTenantId()) .setItemId(parameter.getItemId()) .setTpId(parameter.getTpId()) .setCoreSize(parameter.getCoreSize()) @@ -26,11 +39,12 @@ public class ContentUtil { .setIsAlarm(parameter.getIsAlarm()) .setCapacityAlarm(parameter.getCapacityAlarm()) .setLivenessAlarm(parameter.getLivenessAlarm()) + .setAllowCoreThreadTimeOut(parameter.getAllowCoreThreadTimeOut()) .setRejectedType(parameter.getRejectedType()); - return JSON.toJSONString(poolInfo); + return JSONUtil.toJSONString(threadPoolParameterInfo); } - public static String getGroupKey(PoolParameter parameter) { + public static String getGroupKey(ThreadPoolParameter parameter) { StringBuilder stringBuilder = new StringBuilder(); String resultStr = stringBuilder.append(parameter.getTpId()) .append(Constants.GROUP_KEY_DELIMITER) @@ -45,13 +59,10 @@ public class ContentUtil { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < parameters.length; i++) { stringBuilder.append(parameters[i]); - if (i < parameters.length - 1) { stringBuilder.append(Constants.GROUP_KEY_DELIMITER); } } - return stringBuilder.toString(); } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java new file mode 100644 index 00000000..8868d0c7 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/FileUtil.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import lombok.SneakyThrows; +import org.springframework.core.io.ClassPathResource; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +/** + * File util; + */ +public class FileUtil { + + @SneakyThrows + public static String readUtf8String(String path) { + String resultReadStr; + ClassPathResource classPathResource = new ClassPathResource(path); + try ( + InputStream inputStream = classPathResource.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(inputStream); + ByteArrayOutputStream buf = new ByteArrayOutputStream()) { + int result = bis.read(); + while (result != -1) { + buf.write((byte) result); + result = bis.read(); + } + resultReadStr = buf.toString("UTF-8"); + } + return resultReadStr; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/GroupKey.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/GroupKey.java index 62f24d26..b082690d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/GroupKey.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/GroupKey.java @@ -1,13 +1,29 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; import cn.hippo4j.common.constant.Constants; import org.springframework.util.StringUtils; +import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER; + /** * Group key. - * - * @author chen.ma - * @date 2021/6/24 21:12 */ public class GroupKey { @@ -19,6 +35,16 @@ public class GroupKey { return doGetKey(dataId, group, datumStr); } + public static String getKey(String... params) { + StringBuilder groupKey = new StringBuilder(); + groupKey.append(params[0]).append(GROUP_KEY_DELIMITER); + for (int i = 1; i < params.length - 1; i++) { + groupKey.append(params[i]).append(GROUP_KEY_DELIMITER); + } + groupKey.append(params[params.length]); + return groupKey.toString(); + } + public static String getKeyTenant(String dataId, String group, String tenant) { return doGetKey(dataId, group, tenant); } @@ -26,13 +52,12 @@ public class GroupKey { private static String doGetKey(String dataId, String group, String datumStr) { StringBuilder sb = new StringBuilder(); urlEncode(dataId, sb); - sb.append('+'); + sb.append(GROUP_KEY_DELIMITER); urlEncode(group, sb); if (!StringUtils.isEmpty(datumStr)) { - sb.append('+'); + sb.append(GROUP_KEY_DELIMITER); urlEncode(datumStr, sb); } - return sb.toString(); } @@ -52,5 +77,4 @@ public class GroupKey { } } } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JSONUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JSONUtil.java new file mode 100644 index 00000000..33dbe282 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JSONUtil.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hippo4j.common.api.JsonFacade; + +import java.util.List; + +/** + * JSON util. + */ +public class JSONUtil { + + private static final JsonFacade JSON_FACADE = new JacksonHandler(); + + public static String toJSONString(Object object) { + if (object == null) { + return null; + } + + return JSON_FACADE.toJSONString(object); + } + + public static T parseObject(String text, Class clazz) { + if (StringUtil.isBlank(text)) { + return null; + } + + return JSON_FACADE.parseObject(text, clazz); + } + + public static List parseArray(String text, Class clazz) { + if (StringUtil.isBlank(text)) { + return null; + } + + return JSON_FACADE.parseArray(text, clazz); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JacksonHandler.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JacksonHandler.java new file mode 100644 index 00000000..4e0a4676 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JacksonHandler.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hippo4j.common.api.JsonFacade; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.type.CollectionType; +import lombok.SneakyThrows; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +/** + * Jackson util. + */ +public class JacksonHandler implements JsonFacade { + + private static ObjectMapper MAPPER = new ObjectMapper(); + + static { + MAPPER.enable(JsonGenerator.Feature.IGNORE_UNKNOWN); + String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + MAPPER.setDateFormat(new SimpleDateFormat(dateTimeFormat)); + MAPPER.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); + MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + } + + @Override + @SneakyThrows + public String toJSONString(Object object) { + return MAPPER.writeValueAsString(object); + } + + @Override + @SneakyThrows + public T parseObject(String text, Class clazz) { + JavaType javaType = MAPPER.getTypeFactory().constructType(clazz); + return MAPPER.readValue(text, javaType); + } + + @Override + @SneakyThrows + public List parseArray(String text, Class clazz) { + CollectionType collectionType = MAPPER.getTypeFactory().constructCollectionType(ArrayList.class, clazz); + return MAPPER.readValue(text, collectionType); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java index 50a89cb0..2586f90d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Md5Util.java @@ -1,8 +1,24 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; import cn.hippo4j.common.constant.Constants; -import cn.hippo4j.common.model.PoolParameter; -import org.springframework.util.StringUtils; +import cn.hippo4j.common.model.ThreadPoolParameter; import java.io.IOException; import java.net.URLEncoder; @@ -12,9 +28,6 @@ import java.util.List; /** * MD5 util. - * - * @author chen.ma - * @date 2021/6/22 17:55 */ public class Md5Util { @@ -51,16 +64,14 @@ public class Md5Util { public static String encodeHexString(byte[] bytes) { int l = bytes.length; char[] out = new char[l << 1]; - for (int i = 0, j = 0; i < l; i++) { out[j++] = DIGITS_LOWER[(0xF0 & bytes[i]) >>> 4]; out[j++] = DIGITS_LOWER[0x0F & bytes[i]]; } - return new String(out); } - public static String getTpContentMd5(PoolParameter config) { + public static String getTpContentMd5(ThreadPoolParameter config) { return Md5Util.md5Hex(ContentUtil.getPoolContent(config), "UTF-8"); } @@ -68,9 +79,7 @@ public class Md5Util { if (null == changedGroupKeys) { return ""; } - StringBuilder sb = new StringBuilder(); - for (String groupKey : changedGroupKeys) { String[] dataIdGroupId = GroupKey.parseKey(groupKey); sb.append(dataIdGroupId[0]); @@ -78,16 +87,19 @@ public class Md5Util { sb.append(dataIdGroupId[1]); // if have tenant, then set it if (dataIdGroupId.length == 3) { - if (!StringUtils.isEmpty(dataIdGroupId[2])) { + if (StringUtil.isNotBlank(dataIdGroupId[2])) { + sb.append(Constants.WORD_SEPARATOR); + sb.append(dataIdGroupId[2]); + } + } else if (dataIdGroupId.length == 4) { + if (StringUtil.isNotBlank(dataIdGroupId[2])) { sb.append(Constants.WORD_SEPARATOR); sb.append(dataIdGroupId[2]); } } sb.append(Constants.LINE_SEPARATOR); } - // To encode WORD_SEPARATOR and LINE_SEPARATOR invisible characters, encoded value is %02 and %01 return URLEncoder.encode(sb.toString(), "UTF-8"); } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java new file mode 100644 index 00000000..671f61b5 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java @@ -0,0 +1,75 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hippo4j.common.monitor.AbstractMessage; +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import lombok.SneakyThrows; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Message convert. + */ +public class MessageConvert { + + /** + * {@link Message} to {@link MessageWrapper}. + * + * @param message + * @return + */ + public static MessageWrapper convert(Message message) { + MessageWrapper wrapper = new MessageWrapper(); + wrapper.setResponseClass(message.getClass()); + wrapper.setMessageType(message.getMessageType()); + List> messageMapList = new ArrayList(); + List messages = message.getMessages(); + messages.forEach(each -> { + String eachVal = JSONUtil.toJSONString(each); + Map mapObj = JSONUtil.parseObject(eachVal, Map.class); + messageMapList.add(mapObj); + }); + wrapper.setContentParams(messageMapList); + return wrapper; + } + + /** + * {@link MessageWrapper} to {@link Message}. + * + * @param messageWrapper + * @return + */ + @SneakyThrows + public static Message convert(MessageWrapper messageWrapper) { + AbstractMessage message = (AbstractMessage) messageWrapper.getResponseClass().newInstance(); + List> contentParams = messageWrapper.getContentParams(); + List messages = new ArrayList(); + contentParams.forEach(each -> { + String eachVal = JSONUtil.toJSONString(each); + Message messageObj = JSONUtil.parseObject(eachVal, messageWrapper.getResponseClass()); + messages.add(messageObj); + }); + message.setMessages(messages); + message.setMessageType(messageWrapper.getMessageType()); + return message; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java new file mode 100644 index 00000000..56b58ed2 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java @@ -0,0 +1,142 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.exceptions.UtilException; +import cn.hutool.core.util.ClassUtil; + +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Reflect util. + */ +public class ReflectUtil { + + private static final Map, Field[]> FIELDS_CACHE = new ConcurrentHashMap(); + + public static Object getFieldValue(Object obj, String fieldName) { + if (null == obj || StringUtil.isBlank(fieldName)) { + return null; + } + Field field = getField(obj instanceof Class ? (Class) obj : obj.getClass(), fieldName); + return getFieldValue(obj, field); + } + + public static Object getFieldValue(Object obj, Field field) { + if (null == field) { + return null; + } + if (obj instanceof Class) { + obj = null; + } + setAccessible(field); + Object result; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + String exceptionMsg = String.format("IllegalAccess for %s.%s", field.getDeclaringClass(), field.getName()); + throw new RuntimeException(exceptionMsg, e); + } + return result; + } + + public static T setAccessible(T accessibleObject) { + if (null != accessibleObject && false == accessibleObject.isAccessible()) { + accessibleObject.setAccessible(true); + } + return accessibleObject; + } + + public static Field getField(Class beanClass, String name) throws SecurityException { + final Field[] fields = getFields(beanClass); + return ArrayUtil.firstMatch((field) -> name.equals(getFieldName(field)), fields); + } + + public static Field[] getFields(Class beanClass) throws SecurityException { + Field[] allFields = FIELDS_CACHE.get(beanClass); + if (null != allFields) { + return allFields; + } + allFields = getFieldsDirectly(beanClass, true); + FIELDS_CACHE.put(beanClass, allFields); + return allFields; + } + + public static Field[] getFieldsDirectly(Class beanClass, boolean withSuperClassFields) throws SecurityException { + Assert.notNull(beanClass); + Field[] allFields = null; + Class searchType = beanClass; + Field[] declaredFields; + while (searchType != null) { + declaredFields = searchType.getDeclaredFields(); + if (null == allFields) { + allFields = declaredFields; + } else { + int length = allFields.length; + allFields = Arrays.copyOf(allFields, length + declaredFields.length); + for (int i = 1; i < declaredFields.length; i++) { + allFields[length + i] = declaredFields[i - 1]; + } + } + searchType = withSuperClassFields ? searchType.getSuperclass() : null; + } + + return allFields; + } + + public static String getFieldName(Field field) { + if (null == field) { + return null; + } + return field.getName(); + } + + public static void setFieldValue(Object obj, String fieldName, Object value) throws UtilException { + cn.hutool.core.lang.Assert.notNull(obj); + cn.hutool.core.lang.Assert.notBlank(fieldName); + final Field field = getField((obj instanceof Class) ? (Class) obj : obj.getClass(), fieldName); + cn.hutool.core.lang.Assert.notNull(field, "Field [{}] is not exist in [{}]", fieldName, obj.getClass().getName()); + setFieldValue(obj, field, value); + } + + public static void setFieldValue(Object obj, Field field, Object value) throws UtilException { + cn.hutool.core.lang.Assert.notNull(field, "Field in [{}] not exist !", obj); + final Class fieldType = field.getType(); + if (null != value) { + if (false == fieldType.isAssignableFrom(value.getClass())) { + final Object targetValue = Convert.convert(fieldType, value); + if (null != targetValue) { + value = targetValue; + } + } + } else { + value = ClassUtil.getDefaultValue(fieldType); + } + setAccessible(field); + try { + field.set(obj instanceof Class ? null : obj, value); + } catch (IllegalAccessException e) { + throw new UtilException(e, "IllegalAccess for {}.{}", obj, field.getName()); + } + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java new file mode 100644 index 00000000..4e5ef959 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/Singleton.java @@ -0,0 +1,82 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +/** + * Singleton object container. + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class Singleton { + + private static final ConcurrentHashMap SINGLE_OBJECT_POOL = new ConcurrentHashMap(); + + /** + * Get a singleton object by key. + * + * @param key + * @param + * @return + */ + public static T get(String key) { + Object result = SINGLE_OBJECT_POOL.get(key); + return result == null ? null : (T) result; + } + + /** + * Get a singleton object by key. + * + *

When empty, build a singleton object through supplier and put it into the container. + * + * @param key + * @param supplier + * @param + * @return + */ + public static T get(String key, Supplier supplier) { + Object result = SINGLE_OBJECT_POOL.get(key); + if (result == null && (result = supplier.get()) != null) { + SINGLE_OBJECT_POOL.put(key, result); + } + return result != null ? (T) result : null; + } + + /** + * Object into container. + * + * @param value + */ + public static void put(Object value) { + put(value.getClass().getName(), value); + } + + /** + * Object into container. + * + * @param key + * @param value + */ + public static void put(String key, Object value) { + SINGLE_OBJECT_POOL.put(key, value); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java new file mode 100644 index 00000000..13bdb67c --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -0,0 +1,161 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +/** + * String util. + */ +public class StringUtil { + + public static final String EMPTY = ""; + + public static final char UNDERLINE = '_'; + + /** + * Is blank. + * + * @param str + * @return + */ + public static boolean isBlank(CharSequence str) { + int length; + if ((str == null) || ((length = str.length()) == 0)) { + return true; + } + for (int i = 0; i < length; i++) { + char c = str.charAt(i); + boolean charNotBlank = Character.isWhitespace(c) || Character.isSpaceChar(c) || c == '\ufeff' || c == '\u202a'; + if (charNotBlank == false) { + return false; + } + } + return true; + } + + /** + * Is empty. + * + * @param str + * @return + */ + public static boolean isEmpty(CharSequence str) { + return str == null || str.length() == 0; + } + + /** + * Is not empty. + * + * @param str + * @return + */ + public static boolean isNotEmpty(CharSequence str) { + return !isEmpty(str); + } + + /** + * Is not blank. + * + * @param str + * @return + */ + public static boolean isNotBlank(CharSequence str) { + return isBlank(str) == false; + } + + /** + * Is all not empty. + * + * @param args + * @return + */ + public static boolean isAllNotEmpty(CharSequence... args) { + return false == hasEmpty(args); + } + + /** + * Has empty. + * + * @param strList + * @return + */ + public static boolean hasEmpty(CharSequence... strList) { + if (ArrayUtil.isEmpty(strList)) { + return true; + } + + for (CharSequence str : strList) { + if (isEmpty(str)) { + return true; + } + } + return false; + } + + /** + * To underline case. + * + * @param str + * @return + */ + public static String toUnderlineCase(CharSequence str) { + return toSymbolCase(str, UNDERLINE); + } + + /** + * To symbol case. + * + * @param str + * @param symbol + * @return + */ + public static String toSymbolCase(CharSequence str, char symbol) { + if (str == null) { + return null; + } + + final int length = str.length(); + final StringBuilder sb = new StringBuilder(); + char c; + for (int i = 0; i < length; i++) { + c = str.charAt(i); + final Character preChar = (i > 0) ? str.charAt(i - 1) : null; + if (Character.isUpperCase(c)) { + final Character nextChar = (i < str.length() - 1) ? str.charAt(i + 1) : null; + if (null != preChar && Character.isUpperCase(preChar)) { + sb.append(c); + } else if (null != nextChar && Character.isUpperCase(nextChar)) { + if (null != preChar && symbol != preChar) { + sb.append(symbol); + } + sb.append(c); + } else { + if (null != preChar && symbol != preChar) { + sb.append(symbol); + } + sb.append(Character.toLowerCase(c)); + } + } else { + if (sb.length() > 0 && Character.isUpperCase(sb.charAt(sb.length() - 1)) && symbol != c) { + sb.append(symbol); + } + sb.append(c); + } + } + return sb.toString(); + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ThreadUtil.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ThreadUtil.java new file mode 100644 index 00000000..faf39c49 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ThreadUtil.java @@ -0,0 +1,55 @@ +/* + * 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. + */ + +package cn.hippo4j.common.toolkit; + +/** + * Thread util. + */ +public class ThreadUtil { + + /** + * New thread. + * + * @param runnable + * @param name + * @param isDaemon + * @return {@link Thread} + */ + public static Thread newThread(Runnable runnable, String name, boolean isDaemon) { + Thread t = new Thread(null, runnable, name); + t.setDaemon(isDaemon); + return t; + } + + /** + * Suspend the current thread. + * + * @param millis + * @return + */ + public static boolean sleep(long millis) { + if (millis > 0) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + return false; + } + } + return true; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java index 8cb19ed5..5b433671 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/UserContext.java @@ -1,21 +1,58 @@ +/* + * 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. + */ + package cn.hippo4j.common.toolkit; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Optional; + /** * User context (Transition scheme). - * - * @author chen.ma - * @date 2021/11/17 21:13 */ public class UserContext { - private static String username; + private static final ThreadLocal USER_THREAD_LOCAL = new ThreadLocal(); - public static void setUserName(String username) { - UserContext.username = username; + public static void setUserInfo(String username, String userRole) { + USER_THREAD_LOCAL.set(new User(username, userRole)); } public static String getUserName() { - return username; + return Optional.ofNullable(USER_THREAD_LOCAL.get()).map(User::getUsername).orElse(""); } + public static String getUserRole() { + return Optional.ofNullable(USER_THREAD_LOCAL.get()).map(User::getUserRole).orElse(""); + } + + public static void clear() { + USER_THREAD_LOCAL.remove(); + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + static class User { + + private String username; + + private String userRole; + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java index e9909d59..73237e14 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Result.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.common.web.base; import lombok.Data; @@ -7,9 +24,6 @@ import java.io.Serializable; /** * Result. - * - * @author chen.ma - * @date 2021/3/19 16:12 */ @Data @Accessors(chain = true) @@ -17,16 +31,32 @@ public class Result implements Serializable { private static final long serialVersionUID = -4408341719434417427L; + /** + * Correct return code. + */ public static final String SUCCESS_CODE = "0"; + /** + * Return code. + */ private String code; + /** + * Message. + */ private String message; + /** + * Response data. + */ private T data; + /** + * Is success. + * + * @return + */ public boolean isSuccess() { return SUCCESS_CODE.equals(code); } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java index 2adc23bb..f3dd8402 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/base/Results.java @@ -1,13 +1,30 @@ +/* + * 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. + */ + package cn.hippo4j.common.web.base; +import cn.hippo4j.common.web.exception.AbstractException; +import cn.hippo4j.common.web.exception.ErrorCode; import cn.hippo4j.common.web.exception.ErrorCodeEnum; -import cn.hippo4j.common.web.exception.ServiceException; + +import java.util.Optional; /** * Results. - * - * @author chen.ma - * @date 2021/3/19 16:12 */ public final class Results { @@ -22,9 +39,17 @@ public final class Results { .setData(data); } - public static Result failure(ServiceException serviceException) { - return new Result().setCode(ErrorCodeEnum.SERVICE_ERROR.getCode()) - .setMessage(serviceException.getMessage()); + public static Result failure() { + return failure(ErrorCodeEnum.SERVICE_ERROR.getCode(), ErrorCodeEnum.SERVICE_ERROR.getMessage()); + } + + public static Result failure(AbstractException abstractException) { + String errorCode = Optional.ofNullable(abstractException.getErrorCode()) + .map(ErrorCode::getCode) + .orElse(ErrorCodeEnum.SERVICE_ERROR.getCode()); + + return new Result().setCode(errorCode) + .setMessage(abstractException.getMessage()); } public static Result failure(Throwable throwable) { @@ -32,16 +57,13 @@ public final class Results { .setMessage(throwable.getMessage()); } - public static Result failure(String code, String message) { - return new Result() - .setCode(code) - .setMessage(message); + public static Result failure(ErrorCode errorCode) { + return failure(errorCode.getCode(), errorCode.getMessage()); } - public static Result failure(ErrorCodeEnum errorCode) { - return new Result() - .setCode(errorCode.getCode()) - .setMessage(errorCode.getMessage()); + public static Result failure(String code, String message) { + return new Result() + .setCode(code) + .setMessage(message); } - } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java new file mode 100644 index 00000000..22ccaec5 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/AbstractException.java @@ -0,0 +1,34 @@ +/* + * 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. + */ + +package cn.hippo4j.common.web.exception; + +import lombok.Getter; + +/** + * Abstract exception. + */ +public class AbstractException extends RuntimeException { + + @Getter + public final ErrorCode errorCode; + + public AbstractException(String message, Throwable throwable, ErrorCode errorCode) { + super(message, throwable); + this.errorCode = errorCode; + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java new file mode 100644 index 00000000..4f220641 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCode.java @@ -0,0 +1,38 @@ +/* + * 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. + */ + +package cn.hippo4j.common.web.exception; + +/** + * Error code abstract interface. + */ +public interface ErrorCode { + + /** + * Get code. + * + * @return + */ + String getCode(); + + /** + * Get message. + * + * @return + */ + String getMessage(); +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java index 85924109..63116639 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ErrorCodeEnum.java @@ -1,14 +1,32 @@ +/* + * 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. + */ + package cn.hippo4j.common.web.exception; /** * Error code enum. - * - * @author chen.ma - * @date 2021/3/19 16:07 */ -public enum ErrorCodeEnum { +public enum ErrorCodeEnum implements ErrorCode { + /** + * UNKNOWN_ERROR + */ UNKNOWN_ERROR { + @Override public String getCode() { return "1"; @@ -20,7 +38,11 @@ public enum ErrorCodeEnum { } }, + /** + * VALIDATION_ERROR + */ VALIDATION_ERROR { + @Override public String getCode() { return "2"; @@ -32,7 +54,11 @@ public enum ErrorCodeEnum { } }, + /** + * SERVICE_ERROR + */ SERVICE_ERROR { + @Override public String getCode() { return "3"; @@ -44,7 +70,11 @@ public enum ErrorCodeEnum { } }, + /** + * NOT_FOUND + */ NOT_FOUND { + @Override public String getCode() { return "404"; @@ -54,10 +84,21 @@ public enum ErrorCodeEnum { public String getMessage() { return "NOT_FOUND"; } - }; + }, - public abstract String getCode(); + /** + * LOGIN_TIMEOUT + */ + LOGIN_TIMEOUT { - public abstract String getMessage(); + @Override + public String getCode() { + return "A000004"; + } + @Override + public String getMessage() { + return "登录时间过长, 请退出重新登录"; + } + } } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java index 9527812a..79d03838 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/web/exception/ServiceException.java @@ -1,47 +1,67 @@ +/* + * 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. + */ + package cn.hippo4j.common.web.exception; -import lombok.Data; import lombok.EqualsAndHashCode; /** * Service exception. - * - * @author chen.ma - * @date 2021/3/19 16:14 */ -@Data @EqualsAndHashCode(callSuper = true) -public class ServiceException extends RuntimeException { +public class ServiceException extends AbstractException { - private static final long serialVersionUID = -8667394300356618037L; + public ServiceException() { + this(ErrorCodeEnum.SERVICE_ERROR); + } - private String detail; + public ServiceException(ErrorCode errorCode) { + this(errorCode.getMessage(), null, errorCode); + } public ServiceException(String message) { - super(message); + this(message, null, ErrorCodeEnum.SERVICE_ERROR); } - public ServiceException(String message, String detail) { - super(message); - this.detail = detail; + public ServiceException(Throwable cause) { + this(cause, cause.getMessage()); } public ServiceException(String message, Throwable cause) { - super(message, cause); - this.detail = cause.getMessage(); + this(message, cause, ErrorCodeEnum.SERVICE_ERROR); + } + + public ServiceException(Throwable cause, String message) { + this(message, cause, ErrorCodeEnum.SERVICE_ERROR); } - public ServiceException(String message, String detail, Throwable cause) { - super(message, cause); - this.detail = detail; + public ServiceException(Throwable cause, ErrorCode errorCode) { + this(errorCode.getMessage(), cause, errorCode); + } + + public ServiceException(String message, Throwable cause, ErrorCode errorCode) { + super(message, cause, errorCode); } @Override public String toString() { return "ServiceException{" + - "message='" + getMessage() + "'," + - "detail='" + getDetail() + "'" + + "code='" + errorCode.getCode() + "'," + + "message='" + errorCode.getMessage() + "'" + '}'; } - } diff --git a/hippo4j-config/.gitignore b/hippo4j-config/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-config/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-config/pom.xml b/hippo4j-config/pom.xml index 2c187126..a183212c 100644 --- a/hippo4j-config/pom.xml +++ b/hippo4j-config/pom.xml @@ -2,18 +2,12 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-config - jar - - ${project.artifactId} - ${project.artifactId} true @@ -49,11 +43,7 @@ cn.hippo4j hippo4j-common - - - - com.alibaba - fastjson + ${revision} @@ -68,8 +58,17 @@ cn.hippo4j - log-record-tool + hippo4j-adapter-base - + + io.netty + netty-all + + + + org.hibernate.validator + hibernate-validator + + diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/config/CommonConfig.java b/hippo4j-config/src/main/java/cn/hippo4j/config/config/CommonConfig.java index 63e5d14a..b8ec6643 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/config/CommonConfig.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/config/CommonConfig.java @@ -1,21 +1,53 @@ +/* + * 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. + */ + package cn.hippo4j.config.config; import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import static cn.hippo4j.common.constant.Constants.AVAILABLE_PROCESSORS; /** * Common config. - * - * @author chen.ma - * @date 2021/7/19 21:03 */ @Configuration public class CommonConfig { @Bean - public ApplicationContextHolder simpleApplicationContextHolder() { + @ConditionalOnMissingBean + public ApplicationContextHolder hippo4JApplicationContextHolder() { return new ApplicationContextHolder(); } + @Bean + @Primary + public ThreadPoolTaskExecutor monitorThreadPoolTaskExecutor() { + ThreadPoolTaskExecutor monitorThreadPool = new ThreadPoolTaskExecutor(); + monitorThreadPool.setThreadNamePrefix("server.monitor.executor."); + monitorThreadPool.setCorePoolSize(AVAILABLE_PROCESSORS); + monitorThreadPool.setMaxPoolSize(AVAILABLE_PROCESSORS << 1); + monitorThreadPool.setQueueCapacity(4096); + monitorThreadPool.setAllowCoreThreadTimeOut(true); + monitorThreadPool.setAwaitTerminationMillis(5000); + return monitorThreadPool; + } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/config/MyMetaObjectHandler.java b/hippo4j-config/src/main/java/cn/hippo4j/config/config/MyMetaObjectHandler.java index 8f28c75c..0a1a2771 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/config/MyMetaObjectHandler.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/config/MyMetaObjectHandler.java @@ -1,6 +1,23 @@ +/* + * 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. + */ + package cn.hippo4j.config.config; -import cn.hippo4j.config.enums.DelEnum; +import cn.hippo4j.common.enums.DelEnum; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; @@ -10,9 +27,6 @@ import java.util.Date; /** * Meta object handler. - * - * @author chen.ma - * @date 2021/7/1 22:43 */ @Slf4j @Component @@ -22,13 +36,11 @@ public class MyMetaObjectHandler implements MetaObjectHandler { public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "gmtCreate", Date.class, new Date()); this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date()); - this.strictInsertFill(metaObject, "delFlag", Integer.class, DelEnum.NORMAL.getIntCode()); } @Override public void updateFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date()); + this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date()); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/config/MybatisPlusConfig.java b/hippo4j-config/src/main/java/cn/hippo4j/config/config/MybatisPlusConfig.java index 2e7c5b92..82455fdd 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/config/MybatisPlusConfig.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/config/MybatisPlusConfig.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.config; import com.baomidou.mybatisplus.annotation.DbType; @@ -8,9 +25,6 @@ import org.springframework.context.annotation.Configuration; /** * Mybatis plus config. - * - * @author chen.ma - * @date 2021/6/29 20:22 */ @Configuration public class MybatisPlusConfig { @@ -21,5 +35,4 @@ public class MybatisPlusConfig { interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/config/NettyServerConfig.java b/hippo4j-config/src/main/java/cn/hippo4j/config/config/NettyServerConfig.java new file mode 100644 index 00000000..92fdea43 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/config/NettyServerConfig.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.config.config; + +import cn.hippo4j.config.netty.MonitorNettyServer; +import cn.hippo4j.config.service.biz.HisRunDataService; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Netty server config. + */ +@Configuration +@ConditionalOnProperty(name = "hippo4j.core.monitor.report-type", havingValue = "netty") +public class NettyServerConfig { + + @Bean + public EventLoopGroup bossGroup() { + return new NioEventLoopGroup(); + } + + @Bean + public EventLoopGroup workGroup() { + return new NioEventLoopGroup(); + } + + @Bean + @SuppressWarnings("all") + public MonitorNettyServer monitorNettyServer(ServerBootstrapProperties serverBootstrapProperties, + HisRunDataService hisRunDataService, + EventLoopGroup bossGroup, + EventLoopGroup workGroup) { + return new MonitorNettyServer(serverBootstrapProperties, hisRunDataService, bossGroup, workGroup); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/config/ServerBootstrapProperties.java b/hippo4j-config/src/main/java/cn/hippo4j/config/config/ServerBootstrapProperties.java new file mode 100644 index 00000000..d8d855f7 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/config/ServerBootstrapProperties.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.config.config; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * Server bootstrap properties. + */ +@Slf4j +@Getter +@Setter +@Configuration +@ConfigurationProperties(prefix = ServerBootstrapProperties.PREFIX) +public class ServerBootstrapProperties { + + public final static String PREFIX = "hippo4j.core"; + + /** + * Whether to start the background task of cleaning up thread pool history data. + */ + private Boolean cleanHistoryDataEnable = Boolean.TRUE; + + /** + * Regularly clean up the historical running data of thread pool. unit: minute. + */ + private Integer cleanHistoryDataPeriod = 30; + + /** + * Netty server port. + */ + private String nettyServerPort = "8899"; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java index 620d5d3b..5c0fe84f 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ConfigController.java @@ -1,14 +1,32 @@ +/* + * 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. + */ + package cn.hippo4j.config.controller; +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.model.ConfigAllInfo; import cn.hippo4j.config.model.ConfigInfoBase; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigServletInner; -import cn.hippo4j.config.toolkit.Md5ConfigUtil; import cn.hippo4j.config.service.biz.ConfigService; -import cn.hippo4j.common.constant.Constants; -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.toolkit.Md5ConfigUtil; import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.SneakyThrows; @@ -22,9 +40,6 @@ import java.util.Map; /** * Server configuration controller. - * - * @author chen.ma - * @date 2021/6/20 13:53 */ @RestController @AllArgsConstructor @@ -36,19 +51,18 @@ public class ConfigController { private final ConfigServletInner configServletInner; @GetMapping - public Result detailConfigInfo( - @RequestParam("tpId") String tpId, - @RequestParam("itemId") String itemId, - @RequestParam(value = "namespace") String namespace) { - - ConfigAllInfo configAllInfo = configService.findConfigAllInfo(tpId, itemId, namespace); + public Result detailConfigInfo(@RequestParam("tpId") String tpId, + @RequestParam("itemId") String itemId, + @RequestParam("namespace") String namespace, + @RequestParam(value = "instanceId", required = false) String instanceId) { + ConfigAllInfo configAllInfo = configService.findConfigRecentInfo(tpId, itemId, namespace, instanceId); return Results.success(configAllInfo); } @PostMapping public Result publishConfig(@RequestParam(value = "identify", required = false) String identify, @RequestBody ConfigAllInfo config) { - configService.insertOrUpdate(identify, config); + configService.insertOrUpdate(identify, true, config); return Results.success(true); } @@ -56,21 +70,17 @@ public class ConfigController { @PostMapping("/listener") public void listener(HttpServletRequest request, HttpServletResponse response) { request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); - String probeModify = request.getParameter(Constants.LISTENING_CONFIGS); if (StringUtils.isEmpty(probeModify)) { throw new IllegalArgumentException("invalid probeModify"); } - probeModify = URLDecoder.decode(probeModify, Constants.ENCODE); - Map clientMd5Map; try { clientMd5Map = Md5ConfigUtil.getClientMd5Map(probeModify); } catch (Throwable e) { throw new IllegalArgumentException("invalid probeModify"); } - configServletInner.doPollingConfig(request, response, clientMd5Map, probeModify.length()); } @@ -80,8 +90,12 @@ public class ConfigController { if (StrUtil.isNotBlank(groupKey)) { ConfigCacheService.removeConfigCache(groupKey); } - return Results.success(); } + @PostMapping("/register") + public Result register(@RequestBody DynamicThreadPoolRegisterWrapper registerWrapper) { + configService.register(registerWrapper); + return Results.success(); + } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/MonitorController.java b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/MonitorController.java new file mode 100644 index 00000000..29c64afa --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/MonitorController.java @@ -0,0 +1,75 @@ +/* + * 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. + */ + +package cn.hippo4j.config.controller; + +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.common.toolkit.MessageConvert; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.model.biz.monitor.MonitorActiveRespDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorQueryReqDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO; +import cn.hippo4j.config.monitor.QueryMonitorExecuteChoose; +import cn.hippo4j.config.service.biz.HisRunDataService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Monitor controller. + */ +@Slf4j +@RestController +@AllArgsConstructor +@RequestMapping(Constants.BASE_PATH + "/monitor") +public class MonitorController { + + private final HisRunDataService hisRunDataService; + + private final QueryMonitorExecuteChoose queryMonitorExecuteChoose; + + private final ThreadPoolTaskExecutor monitorThreadPoolTaskExecutor; + + @GetMapping + public Result> queryMonitor(MonitorQueryReqDTO reqDTO) { + List monitorRespList = hisRunDataService.query(reqDTO); + return Results.success(monitorRespList); + } + + @PostMapping("/info") + public Result queryInfoThreadPoolMonitor(@RequestBody MonitorQueryReqDTO reqDTO) { + MonitorActiveRespDTO monitorRespList = hisRunDataService.queryInfoThreadPoolMonitor(reqDTO); + return Results.success(monitorRespList); + } + + @PostMapping("/last/task/count") + public Result queryThreadPoolLastTaskCount(@RequestBody MonitorQueryReqDTO reqDTO) { + MonitorRespDTO resultDTO = hisRunDataService.queryThreadPoolLastTaskCount(reqDTO); + return Results.success(resultDTO); + } + + @PostMapping + public Result dataCollect(@RequestBody MessageWrapper messageWrapper) { + return hisRunDataService.dataCollect(messageWrapper); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ThreadPoolAdapterController.java b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ThreadPoolAdapterController.java new file mode 100644 index 00000000..112630e4 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/controller/ThreadPoolAdapterController.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package cn.hippo4j.config.controller; + +import cn.hippo4j.adapter.base.ThreadPoolAdapterCacheConfig; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.service.ThreadPoolAdapterService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static cn.hippo4j.common.constant.Constants.REGISTER_ADAPTER_PATH; + +/** + * Thread-pool adapter controller. + */ +@RestController +@AllArgsConstructor +public class ThreadPoolAdapterController { + + private final ThreadPoolAdapterService threadPoolAdapterService; + + @PostMapping(REGISTER_ADAPTER_PATH) + public Result registerAdapterThreadPool(@RequestBody List requestParameter) { + threadPoolAdapterService.register(requestParameter); + return Results.success(); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/enums/DelEnum.java b/hippo4j-config/src/main/java/cn/hippo4j/config/enums/DelEnum.java deleted file mode 100644 index df1af116..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/enums/DelEnum.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.hippo4j.config.enums; - -/** - * Del enum. - * - * @author chen.ma - * @date 2021/3/26 18:45 - */ -public enum DelEnum { - - /** - * Normal state - */ - NORMAL("0"), - - /** - * Deleted state - */ - DELETE("1"); - - private final String statusCode; - - DelEnum(String statusCode) { - this.statusCode = statusCode; - } - - public String getCode() { - return this.statusCode; - } - - public Integer getIntCode() { - return Integer.parseInt(this.statusCode); - } - - @Override - public String toString() { - return statusCode; - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractEvent.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractEvent.java new file mode 100644 index 00000000..3c35831a --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractEvent.java @@ -0,0 +1,40 @@ +/* + * 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. + */ + +package cn.hippo4j.config.event; + +import java.io.Serializable; +import java.util.concurrent.atomic.AtomicLong; + +/** + * An abstract class for event. + */ +public abstract class AbstractEvent implements Serializable { + + private static final AtomicLong SEQUENCE = new AtomicLong(0); + + private final long sequence = SEQUENCE.getAndIncrement(); + + /** + * Event sequence number, which can be used to handle the sequence of events. + * + * @return sequence num, It's best to make sure it's monotone. + */ + public long sequence() { + return sequence; + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractSlowEvent.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractSlowEvent.java new file mode 100644 index 00000000..48fa70e5 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/event/AbstractSlowEvent.java @@ -0,0 +1,29 @@ +/* + * 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. + */ + +package cn.hippo4j.config.event; + +/** + * Slow event. + */ +public abstract class AbstractSlowEvent extends AbstractEvent { + + @Override + public long sequence() { + return 0; + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/ConfigDataChangeEvent.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/ConfigDataChangeEvent.java index 2e3ba3aa..0c3cd1e1 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/event/ConfigDataChangeEvent.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/event/ConfigDataChangeEvent.java @@ -1,14 +1,28 @@ +/* + * 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. + */ + package cn.hippo4j.config.event; import org.springframework.util.StringUtils; /** * Config data change event. - * - * @author chen.ma - * @date 2021/6/24 23:35 */ -public class ConfigDataChangeEvent extends Event { +public class ConfigDataChangeEvent extends AbstractEvent { public final String tenantId; @@ -22,11 +36,9 @@ public class ConfigDataChangeEvent extends Event { if (StringUtils.isEmpty(tenantId) || StringUtils.isEmpty(itemId) || StringUtils.isEmpty(tpId)) { throw new IllegalArgumentException("DataId is null or group is null"); } - this.tenantId = tenantId; this.itemId = itemId; this.tpId = tpId; this.lastModifiedTs = gmtModified; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/Event.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/Event.java deleted file mode 100644 index c4e8f133..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/event/Event.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.hippo4j.config.event; - -import java.io.Serializable; -import java.util.concurrent.atomic.AtomicLong; - -/** - * An abstract class for event. - * - * @author chen.ma - * @date 2021/6/23 18:59 - */ -public abstract class Event implements Serializable { - - private static final AtomicLong SEQUENCE = new AtomicLong(0); - - private final long sequence = SEQUENCE.getAndIncrement(); - - /** - * Event sequence number, which can be used to handle the sequence of events. - * - * @return sequence num, It's best to make sure it's monotone. - */ - public long sequence() { - return sequence; - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/LocalDataChangeEvent.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/LocalDataChangeEvent.java index 1cb5a639..652d2daa 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/event/LocalDataChangeEvent.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/event/LocalDataChangeEvent.java @@ -1,20 +1,34 @@ +/* + * 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. + */ + package cn.hippo4j.config.event; /** * Local data change event. - * - * @author chen.ma - * @date 2021/6/23 19:13 */ -public class LocalDataChangeEvent extends Event { +public class LocalDataChangeEvent extends AbstractEvent { /** - * 租户+项目+线程池 + * Tenant + Item + Thread-pool */ public final String groupKey; /** - * 客户端实例唯一标识 + * Client instance unique identifier */ public final String identify; @@ -22,5 +36,4 @@ public class LocalDataChangeEvent extends Event { this.identify = identify; this.groupKey = groupKey; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/event/SlowEvent.java b/hippo4j-config/src/main/java/cn/hippo4j/config/event/SlowEvent.java deleted file mode 100644 index deab7c80..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/event/SlowEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hippo4j.config.event; - -/** - * Slow event. - * - * @author chen.ma - * @date 2021/6/23 19:05 - */ -public abstract class SlowEvent extends Event { - - @Override - public long sequence() { - return 0; - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInfoMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInfoMapper.java index 7a319c85..32184624 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInfoMapper.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInfoMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.mapper; import cn.hippo4j.config.model.ConfigAllInfo; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Config info mapper. - * - * @author chen.ma - * @date 2021/6/29 22:44 */ @Mapper public interface ConfigInfoMapper extends BaseMapper { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInstanceMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInstanceMapper.java new file mode 100644 index 00000000..39eecfa9 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ConfigInstanceMapper.java @@ -0,0 +1,29 @@ +/* + * 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. + */ + +package cn.hippo4j.config.mapper; + +import cn.hippo4j.config.model.ConfigInstanceInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * Config instance mapper. + */ +@Mapper +public interface ConfigInstanceMapper extends BaseMapper { +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/DashboardMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/DashboardMapper.java new file mode 100644 index 00000000..d4957d95 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/DashboardMapper.java @@ -0,0 +1,27 @@ +/* + * 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. + */ + +package cn.hippo4j.config.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * Dashboard mapper. + */ +@Mapper +public interface DashboardMapper { +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/HisRunDataMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/HisRunDataMapper.java new file mode 100644 index 00000000..7918828a --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/HisRunDataMapper.java @@ -0,0 +1,100 @@ +/* + * 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. + */ + +package cn.hippo4j.config.mapper; + +import cn.hippo4j.config.model.HisRunDataInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import lombok.Data; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * His run data mapper. + */ +@Mapper +public interface HisRunDataMapper extends BaseMapper { + + /** + * Query thread pool task sum ranking. + * + * @param startTime + * @param endTime + * @return + */ + @Select("SELECT " + + "tenant_id, item_id, tp_id, max(completed_task_count) as max_completed_task_count " + + "FROM his_run_data " + + "where timestamp between #{startTime} and #{endTime} " + + "group by tenant_id, item_id, tp_id " + + "order by max_completed_task_count desc " + + "limit 8") + List queryThreadPoolTaskSumRanking(@Param("startTime") Long startTime, @Param("endTime") Long endTime); + + /** + * Query thread pool task sum ranking. + * + * @param startTime + * @param endTime + * @return + */ + @Select("SELECT " + + "tenant_id, item_id, tp_id, max(queue_size) as max_queue_size, max(reject_count) as max_reject_count, max(completed_task_count) as max_completed_task_count " + + "FROM his_run_data " + + "where timestamp between #{startTime} and #{endTime} " + + "group by tenant_id, item_id, tp_id " + + "order by max_completed_task_count desc " + + "limit 4") + List queryThreadPoolMaxRanking(@Param("startTime") Long startTime, @Param("endTime") Long endTime); + + @Data + class ThreadPoolTaskRanking { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Tp id + */ + private String tpId; + + /** + * Max completed task count + */ + private Long maxCompletedTaskCount; + + /** + * Max queue size + */ + private Long maxQueueSize; + + /** + * Max reject count + */ + private Long maxRejectCount; + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ItemInfoMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ItemInfoMapper.java index b8915728..6fbe8617 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ItemInfoMapper.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/ItemInfoMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Item info mapper. - * - * @author chen.ma - * @date 2021/6/29 21:53 */ @Mapper public interface ItemInfoMapper extends BaseMapper { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/LogRecordMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/LogRecordMapper.java deleted file mode 100644 index e64d6749..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/LogRecordMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.hippo4j.config.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; -import org.apache.ibatis.annotations.Mapper; - -/** - * Log record mapper. - * - * @author chen.ma - * @date 2021/10/24 21:01 - */ -@Mapper -public interface LogRecordMapper extends BaseMapper { -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/NotifyInfoMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/NotifyInfoMapper.java index a683848b..04f5fe5c 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/NotifyInfoMapper.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/NotifyInfoMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.mapper; import cn.hippo4j.config.model.NotifyInfo; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Notify info mapper. - * - * @author chen.ma - * @date 2021/11/17 22:04 */ @Mapper public interface NotifyInfoMapper extends BaseMapper { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/OperationLogMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/OperationLogMapper.java new file mode 100644 index 00000000..2c9d60ea --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/OperationLogMapper.java @@ -0,0 +1,29 @@ +/* + * 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. + */ + +package cn.hippo4j.config.mapper; + +import cn.hippo4j.config.model.LogRecordInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * Operation log mapper. + */ +@Mapper +public interface OperationLogMapper extends BaseMapper { +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/TenantInfoMapper.java b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/TenantInfoMapper.java index ff3cb1e7..f6da4213 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/TenantInfoMapper.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/mapper/TenantInfoMapper.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -6,9 +23,6 @@ import org.apache.ibatis.annotations.Mapper; /** * Tenant info mapper. - * - * @author chen.ma - * @date 2021/6/29 22:44 */ @Mapper public interface TenantInfoMapper extends BaseMapper { diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/CacheItem.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/CacheItem.java index 8f7af161..c397fed3 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/CacheItem.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/CacheItem.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; import cn.hippo4j.common.toolkit.Md5Util; @@ -9,9 +26,6 @@ import lombok.Setter; /** * Cache item. - * - * @author chen.ma - * @date 2021/6/24 21:23 */ @Getter @Setter @@ -41,5 +55,4 @@ public class CacheItem { this.md5 = Md5Util.getTpContentMd5(configAllInfo); this.groupKey = SingletonRepository.DataIdGroupIdCache.getSingleton(groupKey); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigAllInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigAllInfo.java index 7792cfc9..5c8f74e3 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigAllInfo.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigAllInfo.java @@ -1,46 +1,60 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.annotation.JSONField; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.toolkit.JSONUtil; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; -import cn.hippo4j.common.model.PoolParameter; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.util.Date; /** * Config all info. - * - * @author chen.ma - * @date 2021/6/20 15:14 */ @Data @TableName("config") -public class ConfigAllInfo extends ConfigInfo implements PoolParameter { +public class ConfigAllInfo extends ConfigInfo implements ThreadPoolParameter { private static final long serialVersionUID = -2417394244017463665L; /** * desc */ - @JSONField(serialize = false) + @JsonIgnore @TableField(exist = false, fill = FieldFill.UPDATE) private String desc; /** * gmtCreate */ - @JSONField(serialize = false) + @JsonIgnore @TableField(fill = FieldFill.INSERT) private Date gmtCreate; /** * gmtModified */ - @JSONField(serialize = false) + @JsonIgnore @TableField(fill = FieldFill.INSERT_UPDATE) private Date gmtModified; @@ -48,13 +62,12 @@ public class ConfigAllInfo extends ConfigInfo implements PoolParameter { * delFlag */ @TableLogic - @JSONField(serialize = false) + @JsonIgnore @TableField(fill = FieldFill.INSERT) private Integer delFlag; @Override public String toString() { - return JSON.toJSONString(this); + return JSONUtil.toJSONString(this); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfo.java index df96539e..7bafc089 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfo.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfo.java @@ -1,16 +1,29 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; import lombok.Data; /** * Config info. - * - * @author chen.ma - * @date 2021/6/20 15:59 */ @Data public class ConfigInfo extends ConfigInfoBase { private static final long serialVersionUID = -3504960832191834675L; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfoBase.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfoBase.java index ba11acce..60eddf3d 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfoBase.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInfoBase.java @@ -1,17 +1,32 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; -import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.io.Serializable; /** * Config info base. - * - * @author chen.ma - * @date 2021/6/20 14:05 */ @Data public class ConfigInfoBase implements Serializable { @@ -42,11 +57,13 @@ public class ConfigInfoBase implements Serializable { /** * coreSize */ + @JsonAlias("corePoolSize") private Integer coreSize; /** * maxSize */ + @JsonAlias("maximumPoolSize") private Integer maxSize; /** @@ -84,16 +101,20 @@ public class ConfigInfoBase implements Serializable { */ private Integer livenessAlarm; + /** + * allowCoreThreadTimeOut + */ + private Integer allowCoreThreadTimeOut; + /** * MD5 */ - @JSONField(serialize = false) + @JsonIgnore private String md5; /** * content */ - @JSONField(serialize = false) + @JsonIgnore private String content; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInstanceInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInstanceInfo.java new file mode 100644 index 00000000..7d4b52a1 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ConfigInstanceInfo.java @@ -0,0 +1,73 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * Config instance info. + */ +@Data +@TableName("inst_config") +public class ConfigInstanceInfo { + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * tenantId + */ + private String tenantId; + + /** + * itemId + */ + private String itemId; + + /** + * tpId + */ + private String tpId; + + /** + * instanceId + */ + private String instanceId; + + /** + * MD5 + */ + private String md5; + + /** + * content + */ + private String content; + + /** + * gmtCreate + */ + @TableField(fill = FieldFill.INSERT) + private Date gmtCreate; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/HisRunDataInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/HisRunDataInfo.java new file mode 100644 index 00000000..80c9f758 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/HisRunDataInfo.java @@ -0,0 +1,119 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * His run data info. + */ +@Data +@TableName("his_run_data") +public class HisRunDataInfo { + + /** + * id + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 租户id + */ + private String tenantId; + + /** + * 项目id + */ + private String itemId; + + /** + * 实例id + */ + private String instanceId; + + /** + * 线程池id + */ + private String tpId; + + /** + * 当前负载 + */ + private Long currentLoad; + + /** + * 峰值负载 + */ + private Long peakLoad; + + /** + * 线程数 + */ + private Long poolSize; + + /** + * 活跃线程数 + */ + private Long activeSize; + + /** + * 队列容量 + */ + private Long queueCapacity; + + /** + * 队列元素 + */ + private Long queueSize; + + /** + * 队列剩余容量 + */ + private Long queueRemainingCapacity; + + /** + * 已完成任务计数 + */ + private Long completedTaskCount; + + /** + * 拒绝次数 + */ + private Long rejectCount; + + /** + * 时间戳 + */ + private Long timestamp; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date gmtCreate; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date gmtModified; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ItemInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ItemInfo.java index cedb767e..90995085 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/ItemInfo.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/ItemInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; import com.baomidou.mybatisplus.annotation.*; @@ -7,9 +24,6 @@ import java.util.Date; /** * Item info. - * - * @author chen.ma - * @date 2021/6/29 21:53 */ @Data @TableName("item") @@ -64,5 +78,4 @@ public class ItemInfo { @TableLogic @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/LogRecordInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/LogRecordInfo.java new file mode 100644 index 00000000..5edef209 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/LogRecordInfo.java @@ -0,0 +1,85 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Log record info. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName("log_record_info") +public class LogRecordInfo { + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * Tenant + */ + private String tenant; + + /** + * Biz key + */ + private String bizKey; + + /** + * Biz no + */ + private String bizNo; + + /** + * Operator + */ + private String operator; + + /** + * Action + */ + private String action; + + /** + * Category + */ + private String category; + + /** + * Detail + */ + private String detail; + + /** + * Create time + */ + private Date createTime; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/NotifyInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/NotifyInfo.java index 0fde98f0..aaabc6e8 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/NotifyInfo.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/NotifyInfo.java @@ -1,17 +1,29 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.util.Date; /** - * 通知管理. - * - * @author chen.ma - * @date 2021/11/17 22:03 + * Notify info. */ @Data @TableName("notify") @@ -20,6 +32,7 @@ public class NotifyInfo { /** * id */ + @TableId(type = IdType.AUTO) private Long id; /** @@ -85,5 +98,4 @@ public class NotifyInfo { */ @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/TenantInfo.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/TenantInfo.java index 077df416..768d988b 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/TenantInfo.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/TenantInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model; import com.baomidou.mybatisplus.annotation.*; @@ -7,9 +24,6 @@ import java.util.Date; /** * Tenant info. - * - * @author chen.ma - * @date 2021/6/29 22:04 */ @Data @TableName("tenant") @@ -58,5 +72,4 @@ public class TenantInfo { */ @TableField(fill = FieldFill.INSERT) private Integer delFlag; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterReqDTO.java new file mode 100644 index 00000000..e55b4571 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterReqDTO.java @@ -0,0 +1,69 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model.biz.adapter; + +import lombok.Data; + +import java.util.List; + +/** + * Thread-pool adapter req DTO. + */ +@Data +public class ThreadPoolAdapterReqDTO { + + /** + * Mark + */ + private String mark; + + /** + * Tenant + */ + private String tenant; + + /** + * Item + */ + private String item; + + /** + * Thread pool key + */ + private String threadPoolKey; + + /** + * Identify + */ + private String identify; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Client address list + */ + private List clientAddressList; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterRespDTO.java new file mode 100644 index 00000000..bf13e0d4 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/adapter/ThreadPoolAdapterRespDTO.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model.biz.adapter; + +import lombok.Data; + +/** + * Thread-pool adapter resp DTO. + */ +@Data +public class ThreadPoolAdapterRespDTO { + + /** + * Identify + */ + private String identify; + + /** + * Active + */ + private String active; + + /** + * Client address + */ + private String clientAddress; + + /** + * Thread pool key + */ + private String threadPoolKey; + + /** + * Core size + */ + private Integer coreSize; + + /** + * Maximum size + */ + private Integer maximumSize; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemQueryReqDTO.java index bec92e4a..570125d9 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemQueryReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemQueryReqDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.item; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -5,31 +22,32 @@ import lombok.Data; /** * Item query req dto. - * - * @author chen.ma - * @date 2021/6/29 22:28 */ @Data public class ItemQueryReqDTO extends Page { /** - * tenantId + * Tenant id */ private String tenantId; /** - * itemId + * Item id */ private String itemId; /** - * itemName + * Item name */ private String itemName; /** - * owner + * Owner */ private String owner; + /** + * Desc + */ + private Boolean desc; } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemRespDTO.java index 303db8ee..706c56b9 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.item; import com.fasterxml.jackson.annotation.JsonFormat; @@ -7,9 +24,6 @@ import java.util.Date; /** * Item resp dto. - * - * @author chen.ma - * @date 2021/6/29 21:15 */ @Data public class ItemRespDTO { @@ -20,38 +34,38 @@ public class ItemRespDTO { private Integer id; /** - * tenantId + * Tenant id */ private String tenantId; /** - * itemId + * Item id */ private String itemId; /** - * itemName + * Item name */ private String itemName; /** - * itemDesc + * Item desc */ private String itemDesc; /** - * owner + * Owner */ private String owner; /** - * gmtCreate + * Gmt create */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtCreate; /** - * gmtModified + * Gmt modified */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtModified; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemSaveReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemSaveReqDTO.java index 25acbdca..e7b92784 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemSaveReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemSaveReqDTO.java @@ -1,39 +1,56 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.item; import lombok.Data; +import javax.validation.constraints.Pattern; + /** * Item save req dto. - * - * @author chen.ma - * @date 2021/6/29 22:05 */ @Data public class ItemSaveReqDTO { /** - * tenantId + * Tenant id */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String tenantId; /** - * itemId + * Item id */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String itemId; /** - * itemName + * Item name */ private String itemName; /** - * itemDesc + * Item desc */ private String itemDesc; /** - * owner + * Owner */ private String owner; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemUpdateReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemUpdateReqDTO.java index 455c44d2..1d85d6d6 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemUpdateReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/item/ItemUpdateReqDTO.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.item; import lombok.Data; /** * Item update req dto. - * - * @author chen.ma - * @date 2021/6/29 22:05 */ @Data public class ItemUpdateReqDTO { @@ -20,5 +34,4 @@ public class ItemUpdateReqDTO { private String itemDesc; private String owner; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordQueryReqDTO.java index 2bbb7518..757a840b 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordQueryReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordQueryReqDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.log; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -5,26 +22,22 @@ import lombok.Data; /** * 日志记录查询. - * - * @author chen.ma - * @date 2021/11/17 21:43 */ @Data public class LogRecordQueryReqDTO extends Page { /** - * 业务标识 + * Biz no */ private String bizNo; /** - * 业务类型 + * Category */ private String category; /** - * 操作人 + * Operator */ private String operator; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordRespDTO.java index c904b893..ac881619 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/log/LogRecordRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.log; import com.fasterxml.jackson.annotation.JsonFormat; @@ -6,36 +23,33 @@ import lombok.Data; import java.util.Date; /** - * 日志记录返回. - * - * @author chen.ma - * @date 2021/11/17 21:37 + * Log record resp DTO. */ @Data public class LogRecordRespDTO { /** - * 业务标识 + * Biz no */ private String bizNo; /** - * 日志内容 + * Action */ private String action; /** - * 操作人 + * Operator */ private String operator; /** - * 业务类型 + * Category */ private String category; /** - * gmtCreate + * Gmt create */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java new file mode 100644 index 00000000..83c4b6b2 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorActiveRespDTO.java @@ -0,0 +1,78 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model.biz.monitor; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Monitor active resp dto. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MonitorActiveRespDTO { + + /** + * Times + */ + private List times; + + /** + * Pool size list + */ + private List poolSizeList; + + /** + * Active size list + */ + private List activeSizeList; + + /** + * Queue size list + */ + private List queueSizeList; + + /** + * Completed task count list + */ + private List completedTaskCountList; + + /** + * Reject count list + */ + private List rejectCountList; + + /** + * Queue remaining capacity list + */ + private List queueRemainingCapacityList; + + /** + * Current load list + */ + private List currentLoadList; + + /** + * Queue capacity list + */ + private List queueCapacityList; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java new file mode 100644 index 00000000..f5e4e119 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorQueryReqDTO.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model.biz.monitor; + +import lombok.Data; + +/** + * Monitor query req DTO. + */ +@Data +public class MonitorQueryReqDTO { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Thread-pool id + */ + private String tpId; + + /** + * Instance id + */ + private String instanceId; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorRespDTO.java new file mode 100644 index 00000000..3c2215ee --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/monitor/MonitorRespDTO.java @@ -0,0 +1,92 @@ +/* + * 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. + */ + +package cn.hippo4j.config.model.biz.monitor; + +import lombok.Data; + +/** + * Monitor resp DTO. + */ +@Data +public class MonitorRespDTO { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Instance id + */ + private String instanceId; + + /** + * Completed task count + */ + private String completedTaskCount; + + /** + * Thread-pool id + */ + private String tpId; + + /** + * Current load + */ + private String currentLoad; + + /** + * Peak load + */ + private String peakLoad; + + /** + * Pool size + */ + private String poolSize; + + /** + * Active size + */ + private String activeSize; + + /** + * Queue capacity + */ + private String queueCapacity; + + /** + * Queue size + */ + private String queueSize; + + /** + * Queue remaining capacity + */ + private String queueRemainingCapacity; + + /** + * Reject count + */ + private String rejectCount; +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyListRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyListRespDTO.java index ce34d053..f22fff9d 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyListRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyListRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.notify; import cn.hippo4j.config.model.NotifyInfo; @@ -8,22 +25,18 @@ import java.util.List; /** * Notify list resp dto. - * - * @author chen.ma - * @date 2021/11/17 22:53 */ @Data @AllArgsConstructor public class NotifyListRespDTO { /** - * 通知 Key + * Notify key */ private String notifyKey; /** - * 通知配置 + * Notify list */ private List notifyList; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyQueryReqDTO.java index c9b14954..259bd0bb 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyQueryReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyQueryReqDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.notify; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -6,32 +23,28 @@ import lombok.Data; import java.util.List; /** - * Notify query req dto. - * - * @author chen.ma - * @date 2021/11/17 22:52 + * Notify query req DTO. */ @Data public class NotifyQueryReqDTO extends Page { /** - * groupKeys + * Group keys */ private List groupKeys; /** - * 租户id + * Tenant id */ private String tenantId; /** - * 项目id + * Item id */ private String itemId; /** - * 线程池id + * Thread-pool id */ private String tpId; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyReqDTO.java index f97aa15e..3c5a41b4 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyReqDTO.java @@ -1,9 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.notify; import lombok.Data; /** - * 消息通知入参实体. + * Notify req DTO. * * @author chen.ma * @date 2021/11/18 20:15 @@ -12,53 +29,62 @@ import lombok.Data; public class NotifyReqDTO { /** - * id + * ID */ private String id; /** - * 租户id + * Ids + */ + private String ids; + + /** + * Tenant id */ private String tenantId; /** - * 项目id + * Item id */ private String itemId; /** - * 线程池id + * Thread-pool id */ private String tpId; /** - * 通知平台 + * Platform */ private String platform; /** - * 通知类型 + * Config type */ - private String type; + private Boolean configType; /** - * 密钥 + * Alarm type + */ + private Boolean alarmType; + + /** + * Secret key */ private String secretKey; /** - * 报警间隔 + * Interval */ private Integer interval; /** - * 接收者 + * Receives */ private String receives; /** - * 是否启用 + * Enable */ private Integer enable; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyRespDTO.java index c3cf7771..b10c7899 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/notify/NotifyRespDTO.java @@ -1,64 +1,107 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.notify; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import java.util.Date; + /** - * 消息通知返回. - * - * @author chen.ma - * @date 2021/11/18 20:07 + * Notify resp DTO. */ @Data public class NotifyRespDTO { /** - * id + * ID */ private String id; /** - * 租户id + * Ids + */ + private String ids; + + /** + * Tenant id */ private String tenantId; /** - * 项目id + * Item id */ private String itemId; /** - * 线程池id + * Thread-pool id */ private String tpId; /** - * 通知平台 + * Platform */ private String platform; /** - * 通知类型 + * Type */ private String type; /** - * 密钥 + * Config type + */ + private Boolean configType; + + /** + * Alarm type + */ + private Boolean alarmType; + + /** + * Secret key */ private String secretKey; /** - * 报警间隔 + * Interval */ private Integer interval; /** - * 接收者 + * Receives */ private String receives; /** - * 是否启用 + * Enable */ private Integer enable; + /** + * gmtCreate + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date gmtCreate; + + /** + * gmtModified + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date gmtModified; } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantQueryReqDTO.java index bd76dc6c..aeb674f4 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantQueryReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantQueryReqDTO.java @@ -1,30 +1,48 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.tenant; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; /** - * Tenant query req dto. - * - * @author chen.ma - * @date 2021/6/29 22:28 + * Tenant query req DTO. */ @Data public class TenantQueryReqDTO extends Page { /** - * tenantId + * Tenant id */ private String tenantId; /** - * tenantName + * Tenant name */ private String tenantName; /** - * owner + * Owner */ private String owner; + /** + * Desc + */ + private Boolean desc; } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantRespDTO.java index 0c9982c7..aec3e3be 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.tenant; import com.fasterxml.jackson.annotation.JsonFormat; @@ -6,10 +23,7 @@ import lombok.Data; import java.util.Date; /** - * Tenant resp dto. - * - * @author chen.ma - * @date 2021/6/29 21:16 + * Tenant resp DTO. */ @Data public class TenantRespDTO { @@ -20,33 +34,33 @@ public class TenantRespDTO { private Integer id; /** - * tenantId + * Tenant id */ private String tenantId; /** - * tenantName + * Tenant name */ private String tenantName; /** - * tenantDesc + * Tenant desc */ private String tenantDesc; /** - * owner + * Owner */ private String owner; /** - * gmtCreate + * Gmt create */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtCreate; /** - * gmtModified + * Gmt modified */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtModified; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantSaveReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantSaveReqDTO.java index de6d0540..d857746e 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantSaveReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantSaveReqDTO.java @@ -1,34 +1,51 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.tenant; import lombok.Data; +import javax.validation.constraints.Pattern; + /** - * Tenant save req dto. - * - * @author chen.ma - * @date 2021/6/29 20:40 + * Tenant save req DTO. */ @Data public class TenantSaveReqDTO { /** - * tenantId + * Tenant id */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String tenantId; /** - * tenantName + * Tenant mame */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String tenantName; /** - * tenantDesc + * Tenant desc */ private String tenantDesc; /** - * owner + * Owner */ private String owner; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantUpdateReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantUpdateReqDTO.java index 884b54b8..48630991 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantUpdateReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/tenant/TenantUpdateReqDTO.java @@ -1,45 +1,58 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.tenant; -import com.alibaba.fastjson.JSON; +import cn.hippo4j.common.toolkit.JSONUtil; import lombok.Data; /** - * Tenant save req dto. - * - * @author chen.ma - * @date 2021/6/29 20:40 + * Tenant save req DTO. */ @Data public class TenantUpdateReqDTO { /** - * id + * ID */ private Long id; /** - * tenantId + * Tenant id */ private String tenantId; /** - * tenantName + * Tenant name */ private String tenantName; /** - * tenantDesc + * Tenant desc */ private String tenantDesc; /** - * owner + * Owner */ private String owner; @Override public String toString() { - return JSON.toJSONString(this); + return JSONUtil.toJSONString(this); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolDelReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolDelReqDTO.java index b4e8b18e..3c638c9b 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolDelReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolDelReqDTO.java @@ -1,29 +1,42 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.threadpool; import lombok.Data; /** * ThreadPool del req dto. - * - * @author chen.ma - * @date 2021/11/11 21:40 */ @Data public class ThreadPoolDelReqDTO { /** - * tenantId + * Tenant id */ private String tenantId; /** - * itemId + * Item id */ private String itemId; /** - * tpId + * Thread-pool id */ private String tpId; - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolQueryReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolQueryReqDTO.java index 19027869..1864cfc4 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolQueryReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolQueryReqDTO.java @@ -1,30 +1,48 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.threadpool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; /** - * Thread pool query req dto. - * - * @author chen.ma - * @date 2021/6/30 21:22 + * Thread pool query req DTO. */ @Data public class ThreadPoolQueryReqDTO extends Page { /** - * tenantId + * Tenant id */ private String tenantId; /** - * itemId + * Item id */ private String itemId; /** - * tpId + * Thread pool id */ private String tpId; + /** + * Desc + */ + private Boolean desc; } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolRespDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolRespDTO.java index 3c564e4f..3c4fa030 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolRespDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolRespDTO.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.threadpool; import com.fasterxml.jackson.annotation.JsonFormat; @@ -6,92 +23,94 @@ import lombok.Data; import java.util.Date; /** - * Thread pool resp dto. - * - * @author chen.ma - * @date 2021/6/30 21:23 + * Thread pool resp DTO. */ @Data public class ThreadPoolRespDTO { /** - * id + * ID */ private String id; /** - * tenantId + * Tenant id */ private String tenantId; /** - * itemId + * Iem id */ private String itemId; /** - * tpId + * Thread-pool id */ private String tpId; /** - * coreSize + * Core size */ private Integer coreSize; /** - * maxSize + * Max size */ private Integer maxSize; /** - * queueType + * Queue type */ private Integer queueType; /** - * queueName + * Queue name */ private String queueName; /** - * capacity + * Capacity */ private Integer capacity; /** - * keepAliveTime + * Keep alive time */ private Integer keepAliveTime; /** - * isAlarm + * Is alarm */ private Integer isAlarm; /** - * capacityAlarm + * Capacity alarm */ private Integer capacityAlarm; /** - * livenessAlarm + * Liveness alarm */ private Integer livenessAlarm; /** - * rejectedType + * Rejected type */ private Integer rejectedType; /** - * gmtCreate + * AllowCore thread timeout + */ + private Integer allowCoreThreadTimeOut; + + /** + * Gmt create */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtCreate; /** - * gmtModified + * Gmt modified */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date gmtModified; diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolSaveOrUpdateReqDTO.java b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolSaveOrUpdateReqDTO.java index f54c9330..fe25cdaf 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolSaveOrUpdateReqDTO.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/model/biz/threadpool/ThreadPoolSaveOrUpdateReqDTO.java @@ -1,74 +1,97 @@ +/* + * 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. + */ + package cn.hippo4j.config.model.biz.threadpool; import lombok.Data; +import javax.validation.constraints.Pattern; + /** - * Thread pool save or update req dto. - * - * @author chen.ma - * @date 2021/6/30 21:23 + * Thread pool save or update req DTO. */ @Data public class ThreadPoolSaveOrUpdateReqDTO { /** - * tenantId + * TenantId */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String tenantId; /** - * TpId + * Thread-pool id */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String tpId; /** - * ItemId + * Item id */ + @Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号") private String itemId; /** - * coreSize + * Core size */ private Integer coreSize; /** - * maxSize + * Max size */ private Integer maxSize; /** - * queueType + * Queue type */ private Integer queueType; /** - * capacity + * Capacity */ private Integer capacity; /** - * keepAliveTime + * Keep alive time */ private Integer keepAliveTime; /** - * isAlarm + * Is alarm */ private Integer isAlarm; /** - * capacityAlarm + * Capacity alarm */ private Integer capacityAlarm; /** - * livenessAlarm + * Liveness alarm */ private Integer livenessAlarm; /** - * rejectedType + * Rejected type */ private Integer rejectedType; + /** + * Allow core thread timeout + */ + private Integer allowCoreThreadTimeOut; } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/AbstractMonitorDataExecuteStrategy.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/AbstractMonitorDataExecuteStrategy.java new file mode 100644 index 00000000..ae0dc032 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/AbstractMonitorDataExecuteStrategy.java @@ -0,0 +1,40 @@ +/* + * 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. + */ + +package cn.hippo4j.config.monitor; + +import cn.hippo4j.common.monitor.Message; + +/** + * Abstract monitor data execute strategy. + */ +public abstract class AbstractMonitorDataExecuteStrategy { + + /** + * Mark. + * + * @return + */ + public abstract String mark(); + + /** + * Execute. + * + * @param message + */ + public abstract void execute(T message); +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/DefaultMonitorDataResolver.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/DefaultMonitorDataResolver.java new file mode 100644 index 00000000..97b909ac --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/DefaultMonitorDataResolver.java @@ -0,0 +1,41 @@ +/* + * 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. + */ + +package cn.hippo4j.config.monitor; + +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Default monitor data resolver. + */ +@Slf4j +@Component +public class DefaultMonitorDataResolver extends AbstractMonitorDataExecuteStrategy { + + @Override + public String mark() { + return MessageTypeEnum.DEFAULT.name(); + } + + @Override + public void execute(Message message) { + log.warn("There is no suitable monitoring data storage actuator."); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java new file mode 100644 index 00000000..5aedb340 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/QueryMonitorExecuteChoose.java @@ -0,0 +1,81 @@ +/* + * 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. + */ + +package cn.hippo4j.config.monitor; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageTypeEnum; +import com.google.common.collect.Maps; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * Query monitor execute choose. + */ +@Component +public class QueryMonitorExecuteChoose implements CommandLineRunner { + + /** + * Storage monitoring data execution container. + */ + private Map monitorDataExecuteStrategyChooseMap = Maps.newHashMap(); + + /** + * Choose by {@link cn.hippo4j.common.monitor.MessageTypeEnum}. + * + * @param messageTypeEnum {@link cn.hippo4j.common.monitor.MessageTypeEnum} + * @return + */ + public AbstractMonitorDataExecuteStrategy choose(MessageTypeEnum messageTypeEnum) { + return choose(messageTypeEnum.name()); + } + + /** + * Choose by mark type. + * + * @param markType {@link cn.hippo4j.common.monitor.MessageTypeEnum#name()} + * @return + */ + public AbstractMonitorDataExecuteStrategy choose(String markType) { + AbstractMonitorDataExecuteStrategy executeStrategy = monitorDataExecuteStrategyChooseMap.get(markType); + if (executeStrategy == null) { + executeStrategy = monitorDataExecuteStrategyChooseMap.get(MessageTypeEnum.DEFAULT.name()); + } + return executeStrategy; + } + + /** + * Choose and execute. + * + * @param message {@link Message} + */ + public void chooseAndExecute(Message message) { + MessageTypeEnum messageType = message.getMessageType(); + AbstractMonitorDataExecuteStrategy executeStrategy = choose(messageType); + executeStrategy.execute(message); + } + + @Override + public void run(String... args) throws Exception { + Map monitorDataExecuteStrategyMap = + ApplicationContextHolder.getBeansOfType(AbstractMonitorDataExecuteStrategy.class); + monitorDataExecuteStrategyMap.values().forEach(each -> monitorDataExecuteStrategyChooseMap.put(each.mark(), each)); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/RuntimeDataResolver.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/RuntimeDataResolver.java new file mode 100644 index 00000000..eb089f56 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/RuntimeDataResolver.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.config.monitor; + +import cn.hippo4j.common.monitor.MessageTypeEnum; +import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.config.service.biz.HisRunDataService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Runtime data resolver. + */ +@Slf4j +@Component +@AllArgsConstructor +public class RuntimeDataResolver extends AbstractMonitorDataExecuteStrategy { + + private final HisRunDataService hisRunDataService; + + @Override + public String mark() { + return MessageTypeEnum.RUNTIME.name(); + } + + @Override + public void execute(RuntimeMessage message) { + hisRunDataService.save(message); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java new file mode 100644 index 00000000..6aa4df3f --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/monitor/TimeCleanHistoryDataTask.java @@ -0,0 +1,71 @@ +/* + * 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. + */ + +package cn.hippo4j.config.monitor; + +import cn.hippo4j.common.executor.ExecutorFactory; +import cn.hippo4j.config.config.ServerBootstrapProperties; +import cn.hippo4j.config.model.HisRunDataInfo; +import cn.hippo4j.config.service.biz.HisRunDataService; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import static cn.hippo4j.common.constant.Constants.DEFAULT_GROUP; + +/** + * Regularly clean up the historical running data of thread pool. + */ +@Component +@RequiredArgsConstructor +public class TimeCleanHistoryDataTask implements Runnable, InitializingBean { + + @NonNull + private final ServerBootstrapProperties properties; + + @NonNull + private final HisRunDataService hisRunDataService; + + private ScheduledExecutorService cleanHistoryDataExecutor; + + @Override + public void run() { + Date currentDate = new Date(); + DateTime offsetMinuteDateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(HisRunDataInfo.class) + .le(HisRunDataInfo::getTimestamp, offsetMinuteDateTime.getTime()); + hisRunDataService.remove(queryWrapper); + } + + @Override + public void afterPropertiesSet() throws Exception { + if (properties.getCleanHistoryDataEnable()) { + cleanHistoryDataExecutor = ExecutorFactory.Managed + .newSingleScheduledExecutorService(DEFAULT_GROUP, r -> new Thread(r, "clean-history-data")); + cleanHistoryDataExecutor.scheduleWithFixedDelay(this, 0, 1, TimeUnit.MINUTES); + } + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/netty/MonitorNettyServer.java b/hippo4j-config/src/main/java/cn/hippo4j/config/netty/MonitorNettyServer.java new file mode 100644 index 00000000..8ad536ef --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/netty/MonitorNettyServer.java @@ -0,0 +1,89 @@ +/* + * 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. + */ + +package cn.hippo4j.config.netty; + +import cn.hippo4j.config.config.ServerBootstrapProperties; +import cn.hippo4j.config.service.biz.HisRunDataService; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.codec.serialization.ClassResolvers; +import io.netty.handler.codec.serialization.ObjectDecoder; +import io.netty.handler.codec.serialization.ObjectEncoder; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +/** + * Netty monitor netty server. + */ +@Slf4j +@AllArgsConstructor +public class MonitorNettyServer { + + private ServerBootstrapProperties serverBootstrapProperties; + + private HisRunDataService hisRunDataService; + + private EventLoopGroup bossGroup; + + private EventLoopGroup workGroup; + + @PostConstruct + public void nettyServerInit() { + new Thread(() -> { + try { + ServerBootstrap serverBootstrap = new ServerBootstrap(); + serverBootstrap.group(bossGroup, workGroup) + .channel(NioServerSocketChannel.class) + .handler(new LoggingHandler(LogLevel.INFO)) + // BossGroup the Thread group is responsible for connection events. + // WorkGroup the thread group is responsible for read and write events. + .childHandler(new ChannelInitializer() { + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new ObjectEncoder()); + pipeline.addLast(new ObjectDecoder(Integer.MAX_VALUE, + ClassResolvers.cacheDisabled(null))); + pipeline.addLast(new ServerHandler(hisRunDataService)); + } + }); + ChannelFuture channelFuture = serverBootstrap.bind(Integer.parseInt(serverBootstrapProperties.getNettyServerPort())).sync(); + channelFuture.channel().closeFuture().sync(); + } catch (Exception e) { + log.error("nettyServerInit error", e); + } + }, "nettyServerInit thread").start(); + } + + @PreDestroy + public void destroy() { + bossGroup.shutdownGracefully(); + workGroup.shutdownGracefully(); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/netty/ServerHandler.java b/hippo4j-config/src/main/java/cn/hippo4j/config/netty/ServerHandler.java new file mode 100644 index 00000000..a6a75a1e --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/netty/ServerHandler.java @@ -0,0 +1,40 @@ +/* + * 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. + */ + +package cn.hippo4j.config.netty; + +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.config.service.biz.HisRunDataService; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * Server handler. + */ +@Slf4j +@AllArgsConstructor +public class ServerHandler extends SimpleChannelInboundHandler { + + private HisRunDataService hisRunDataService; + + @Override + protected void channelRead0(ChannelHandlerContext ctx, MessageWrapper msg) throws Exception { + hisRunDataService.dataCollect(msg); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java index 1de56d31..6c2860ff 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultPublisher.java @@ -1,8 +1,25 @@ +/* + * 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. + */ + package cn.hippo4j.config.notify; +import cn.hippo4j.config.event.AbstractEvent; import cn.hutool.core.collection.ConcurrentHashSet; -import cn.hippo4j.config.notify.listener.Subscriber; -import cn.hippo4j.config.event.Event; +import cn.hippo4j.config.notify.listener.AbstractSubscriber; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; @@ -13,16 +30,13 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; /** * The default event publisher implementation. - * - * @author chen.ma - * @date 2021/6/23 19:06 */ @Slf4j public class DefaultPublisher extends Thread implements EventPublisher { - protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); + protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); - private BlockingQueue queue; + private BlockingQueue queue; private volatile boolean initialized = false; @@ -36,7 +50,7 @@ public class DefaultPublisher extends Thread implements EventPublisher { .newUpdater(DefaultPublisher.class, Long.class, "lastEventSequence"); @Override - public void init(Class type, int bufferSize) { + public void init(Class type, int bufferSize) { setDaemon(true); setName("dynamic.thread-pool.publisher-" + type.getName()); this.queueMaxSize = bufferSize; @@ -64,7 +78,7 @@ public class DefaultPublisher extends Thread implements EventPublisher { private void openEventHandler() { try { int waitTimes = 60; - for (; ; ) { + for (;;) { if (shutdown || hasSubscriber() || waitTimes <= 0) { break; } @@ -75,30 +89,29 @@ public class DefaultPublisher extends Thread implements EventPublisher { } waitTimes--; } - - for (; ; ) { + for (;;) { if (shutdown) { break; } - final Event event = queue.take(); + final AbstractEvent event = queue.take(); receiveEvent(event); UPDATER.compareAndSet(this, lastEventSequence, Math.max(lastEventSequence, event.sequence())); } } catch (Throwable ex) { - log.error("Event listener exception :: {}", ex); + log.error("Event listener exception: {}", ex); } } @Override - public void addSubscriber(Subscriber subscriber) { + public void addSubscriber(AbstractSubscriber subscriber) { subscribers.add(subscriber); } @Override - public boolean publish(Event event) { + public boolean publish(AbstractEvent event) { boolean success = this.queue.offer(event); if (!success) { - log.warn("Unable to plug in due to interruption, synchronize sending time, event :: {}", event); + log.warn("Unable to plug in due to interruption, synchronize sending time, event: {}", event); receiveEvent(event); return true; } @@ -106,7 +119,7 @@ public class DefaultPublisher extends Thread implements EventPublisher { } @Override - public void notifySubscriber(Subscriber subscriber, Event event) { + public void notifySubscriber(AbstractSubscriber subscriber, AbstractEvent event) { final Runnable job = () -> subscriber.onEvent(event); final Executor executor = subscriber.executor(); @@ -117,7 +130,7 @@ public class DefaultPublisher extends Thread implements EventPublisher { try { job.run(); } catch (Throwable e) { - log.error("Event callback exception :: {}", e); + log.error("Event callback exception: {}", e); } } } @@ -126,10 +139,9 @@ public class DefaultPublisher extends Thread implements EventPublisher { return !CollectionUtils.isEmpty(subscribers); } - void receiveEvent(Event event) { - for (Subscriber subscriber : subscribers) { + void receiveEvent(AbstractEvent event) { + for (AbstractSubscriber subscriber : subscribers) { notifySubscriber(subscriber, event); } } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java index 903e1b82..b877bfbb 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/DefaultSharePublisher.java @@ -1,9 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.config.notify; +import cn.hippo4j.config.event.AbstractEvent; import cn.hutool.core.collection.ConcurrentHashSet; -import cn.hippo4j.config.notify.listener.Subscriber; -import cn.hippo4j.config.event.Event; -import cn.hippo4j.config.event.SlowEvent; +import cn.hippo4j.config.notify.listener.AbstractSubscriber; +import cn.hippo4j.config.event.AbstractSlowEvent; import java.util.Map; import java.util.Set; @@ -13,27 +30,23 @@ import java.util.concurrent.locks.ReentrantLock; /** * Default share publisher. - * - * @author chen.ma - * @date 2021/6/23 19:05 */ public class DefaultSharePublisher extends DefaultPublisher { - private final Map, Set> subMappings = new ConcurrentHashMap(); + private final Map, Set> subMappings = new ConcurrentHashMap(); - protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); + protected final ConcurrentHashSet subscribers = new ConcurrentHashSet(); private final Lock lock = new ReentrantLock(); - public void addSubscriber(Subscriber subscriber, Class subscribeType) { - Class subSlowEventType = (Class) subscribeType; + public void addSubscriber(AbstractSubscriber subscriber, Class subscribeType) { + Class subSlowEventType = (Class) subscribeType; subscribers.add(subscriber); - lock.lock(); try { - Set sets = subMappings.get(subSlowEventType); + Set sets = subMappings.get(subSlowEventType); if (sets == null) { - Set newSet = new ConcurrentHashSet(); + Set newSet = new ConcurrentHashSet(); newSet.add(subscriber); subMappings.put(subSlowEventType, newSet); return; @@ -43,5 +56,4 @@ public class DefaultSharePublisher extends DefaultPublisher { lock.unlock(); } } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/EventPublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/EventPublisher.java index 093c1ed5..858b30f2 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/EventPublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/EventPublisher.java @@ -1,13 +1,27 @@ +/* + * 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. + */ + package cn.hippo4j.config.notify; -import cn.hippo4j.config.notify.listener.Subscriber; -import cn.hippo4j.config.event.Event; +import cn.hippo4j.config.event.AbstractEvent; +import cn.hippo4j.config.notify.listener.AbstractSubscriber; /** * Event publisher. - * - * @author chen.ma - * @date 2021/6/23 18:58 */ public interface EventPublisher { @@ -17,14 +31,14 @@ public interface EventPublisher { * @param type * @param bufferSize */ - void init(Class type, int bufferSize); + void init(Class type, int bufferSize); /** * Add subscriber. * * @param subscriber */ - void addSubscriber(Subscriber subscriber); + void addSubscriber(AbstractSubscriber subscriber); /** * Publish. @@ -32,7 +46,7 @@ public interface EventPublisher { * @param event * @return */ - boolean publish(Event event); + boolean publish(AbstractEvent event); /** * Notify subscriber. @@ -40,6 +54,5 @@ public interface EventPublisher { * @param subscriber * @param event */ - void notifySubscriber(Subscriber subscriber, Event event); - + void notifySubscriber(AbstractSubscriber subscriber, AbstractEvent event); } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/NotifyCenter.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/NotifyCenter.java index 3e6e1e82..bd5d04fa 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/NotifyCenter.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/NotifyCenter.java @@ -1,11 +1,28 @@ +/* + * 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. + */ + package cn.hippo4j.config.notify; -import cn.hippo4j.config.notify.listener.SmartSubscriber; -import cn.hippo4j.config.notify.listener.Subscriber; +import cn.hippo4j.config.event.AbstractEvent; +import cn.hippo4j.config.notify.listener.AbstractSmartSubscriber; +import cn.hippo4j.config.notify.listener.AbstractSubscriber; import cn.hippo4j.config.toolkit.ClassUtil; import cn.hippo4j.config.toolkit.MapUtil; -import cn.hippo4j.config.event.Event; -import cn.hippo4j.config.event.SlowEvent; +import cn.hippo4j.config.event.AbstractSlowEvent; import lombok.extern.slf4j.Slf4j; import java.util.Map; @@ -14,9 +31,6 @@ import java.util.function.BiFunction; /** * Unified event notify center. - * - * @author chen.ma - * @date 2021/6/23 18:58 */ @Slf4j public class NotifyCenter { @@ -33,7 +47,7 @@ public class NotifyCenter { private static EventPublisher eventPublisher = new DefaultPublisher(); - private static BiFunction, Integer, EventPublisher> publisherFactory = null; + private static BiFunction, Integer, EventPublisher> publisherFactory = null; private final Map publisherMap = new ConcurrentHashMap(16); @@ -44,19 +58,18 @@ public class NotifyCenter { publisher.init(cls, buffer); return publisher; } catch (Throwable ex) { - log.error("Service class newInstance has error :: {}", ex); + log.error("Service class newInstance has error: {}", ex); throw new RuntimeException(ex); } }; - INSTANCE.sharePublisher = new DefaultSharePublisher(); - INSTANCE.sharePublisher.init(SlowEvent.class, shareBufferSize); + INSTANCE.sharePublisher.init(AbstractSlowEvent.class, shareBufferSize); } - public static void registerSubscriber(final Subscriber consumer) { - if (consumer instanceof SmartSubscriber) { - for (Class subscribeType : ((SmartSubscriber) consumer).subscribeTypes()) { - if (ClassUtil.isAssignableFrom(SlowEvent.class, subscribeType)) { + public static void registerSubscriber(final AbstractSubscriber consumer) { + if (consumer instanceof AbstractSmartSubscriber) { + for (Class subscribeType : ((AbstractSmartSubscriber) consumer).subscribeTypes()) { + if (ClassUtil.isAssignableFrom(AbstractSlowEvent.class, subscribeType)) { INSTANCE.sharePublisher.addSubscriber(consumer, subscribeType); } else { addSubscriber(consumer, subscribeType); @@ -64,17 +77,15 @@ public class NotifyCenter { } return; } - - final Class subscribeType = consumer.subscribeType(); - if (ClassUtil.isAssignableFrom(SlowEvent.class, subscribeType)) { + final Class subscribeType = consumer.subscribeType(); + if (ClassUtil.isAssignableFrom(AbstractSlowEvent.class, subscribeType)) { INSTANCE.sharePublisher.addSubscriber(consumer, subscribeType); return; } - addSubscriber(consumer, subscribeType); } - private static void addSubscriber(final Subscriber consumer, Class subscribeType) { + private static void addSubscriber(final AbstractSubscriber consumer, Class subscribeType) { final String topic = ClassUtil.getCanonicalName(subscribeType); synchronized (NotifyCenter.class) { MapUtil.computeIfAbsent(INSTANCE.publisherMap, topic, publisherFactory, subscribeType, ringBufferSize); @@ -83,22 +94,20 @@ public class NotifyCenter { publisher.addSubscriber(consumer); } - public static boolean publishEvent(final Event event) { + public static boolean publishEvent(final AbstractEvent event) { try { return publishEvent(event.getClass(), event); } catch (Throwable ex) { - log.error("There was an exception to the message publishing :: {}", ex); + log.error("There was an exception to the message publishing: {}", ex); return false; } } - private static boolean publishEvent(final Class eventType, final Event event) { - if (ClassUtil.isAssignableFrom(SlowEvent.class, eventType)) { + private static boolean publishEvent(final Class eventType, final AbstractEvent event) { + if (ClassUtil.isAssignableFrom(AbstractSlowEvent.class, eventType)) { return INSTANCE.sharePublisher.publish(event); } - final String topic = ClassUtil.getCanonicalName(eventType); - EventPublisher publisher = INSTANCE.publisherMap.get(topic); if (publisher != null) { return publisher.publish(event); @@ -107,16 +116,14 @@ public class NotifyCenter { return false; } - public static EventPublisher registerToPublisher(final Class eventType, final int queueMaxSize) { - if (ClassUtil.isAssignableFrom(SlowEvent.class, eventType)) { + public static EventPublisher registerToPublisher(final Class eventType, final int queueMaxSize) { + if (ClassUtil.isAssignableFrom(AbstractSlowEvent.class, eventType)) { return INSTANCE.sharePublisher; } - final String topic = ClassUtil.getCanonicalName(eventType); synchronized (NotifyCenter.class) { MapUtil.computeIfAbsent(INSTANCE.publisherMap, topic, publisherFactory, eventType, queueMaxSize); } return INSTANCE.publisherMap.get(topic); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSmartSubscriber.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSmartSubscriber.java new file mode 100644 index 00000000..38d74efb --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSmartSubscriber.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package cn.hippo4j.config.notify.listener; + +import cn.hippo4j.config.event.AbstractEvent; + +import java.util.List; + +/** + * Subscribers to multiple events can be listened to. + */ +public abstract class AbstractSmartSubscriber extends AbstractSubscriber { + + /** + * Subscribe types. + * + * @return + */ + public abstract List> subscribeTypes(); +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSubscriber.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSubscriber.java new file mode 100644 index 00000000..16357b47 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/AbstractSubscriber.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.config.notify.listener; + +import cn.hippo4j.config.event.AbstractEvent; + +import java.util.concurrent.Executor; + +/** + * An abstract subscriber class for subscriber interface. + */ +public abstract class AbstractSubscriber { + + /** + * Event callback. + * + * @param event + */ + public abstract void onEvent(T event); + + /** + * Type of this subscriber's subscription. + * + * @return + */ + public abstract Class subscribeType(); + + public Executor executor() { + return null; + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/SmartSubscriber.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/SmartSubscriber.java deleted file mode 100644 index 67214616..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/SmartSubscriber.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.hippo4j.config.notify.listener; - -import cn.hippo4j.config.event.Event; - -import java.util.List; - -/** - * Subscribers to multiple events can be listened to. - * - * @author chen.ma - * @date 2021/6/23 19:02 - */ -public abstract class SmartSubscriber extends Subscriber { - - /** - * Subscribe types. - * - * @return - */ - public abstract List> subscribeTypes(); - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/Subscriber.java b/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/Subscriber.java deleted file mode 100644 index 424c4b8a..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/notify/listener/Subscriber.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.hippo4j.config.notify.listener; - -import cn.hippo4j.config.event.Event; - -import java.util.concurrent.Executor; - -/** - * An abstract subscriber class for subscriber interface. - * - * @author chen.ma - * @date 2021/6/23 19:02 - */ -public abstract class Subscriber { - - /** - * Event callback. - * - * @param event - */ - public abstract void onEvent(T event); - - /** - * Type of this subscriber's subscription. - * - * @return - */ - public abstract Class subscribeType(); - - public Executor executor() { - return null; - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java index 1ba1bebf..194e1811 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigCacheService.java @@ -1,49 +1,73 @@ +/* + * 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. + */ + package cn.hippo4j.config.service; -import cn.hippo4j.config.notify.NotifyCenter; -import cn.hutool.core.collection.CollUtil; -import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.design.observer.AbstractSubjectCenter; +import cn.hippo4j.common.design.observer.Observer; +import cn.hippo4j.common.design.observer.ObserverMessage; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.toolkit.Md5Util; import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.model.CacheItem; import cn.hippo4j.config.model.ConfigAllInfo; +import cn.hippo4j.config.notify.NotifyCenter; +import cn.hippo4j.config.service.biz.ConfigService; import cn.hippo4j.config.toolkit.MapUtil; -import com.alibaba.fastjson.JSON; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER; +import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER_TRANSLATION; /** * Config cache service. - * - * @author chen.ma - * @date 2021/6/24 21:19 */ @Slf4j public class ConfigCacheService { - private static ConfigService configService = null; + private static ConfigService CONFIG_SERVICE; + + static { + AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.CLEAR_CONFIG_CACHE, new ClearConfigCache()); + } /** - * TODO: 数据结构、客户端停机时 remove 操作待重构 - *

- * key: message-produce+dynamic-threadpool-example+prescription+192.168.20.227:8088 + * key: message-produce+dynamic-threadpool-example+prescription+192.168.20.227:8088_xxx * val: - * key: 192.168.20.227:8088 + * key: 192.168.20.227:8088_xxx * val: {@link CacheItem} */ - private static final ConcurrentHashMap> CACHE = new ConcurrentHashMap(); + private static final ConcurrentHashMap> CLIENT_CONFIG_CACHE = new ConcurrentHashMap(); - public static boolean isUpdateData(String groupKey, String md5, String ip) { - String contentMd5 = ConfigCacheService.getContentMd5IsNullPut(groupKey, ip); + public static boolean isUpdateData(String groupKey, String md5, String clientIdentify) { + String contentMd5 = ConfigCacheService.getContentMd5IsNullPut(groupKey, clientIdentify); return Objects.equals(contentMd5, md5); } @@ -51,92 +75,122 @@ public class ConfigCacheService { * Get Md5. * * @param groupKey - * @param ip + * @param clientIdentify * @return */ - private synchronized static String getContentMd5IsNullPut(String groupKey, String ip) { - Map cacheItemMap = Optional.ofNullable(CACHE.get(groupKey)).orElse(Maps.newHashMap()); - + private synchronized static String getContentMd5IsNullPut(String groupKey, String clientIdentify) { + Map cacheItemMap = Optional.ofNullable(CLIENT_CONFIG_CACHE.get(groupKey)).orElse(Maps.newHashMap()); CacheItem cacheItem = null; - if (CollUtil.isNotEmpty(cacheItemMap) && (cacheItem = cacheItemMap.get(ip)) != null) { + if (CollUtil.isNotEmpty(cacheItemMap) && (cacheItem = cacheItemMap.get(clientIdentify)) != null) { return cacheItem.md5; } - - if (configService == null) { - configService = ApplicationContextHolder.getBean(ConfigService.class); + if (CONFIG_SERVICE == null) { + CONFIG_SERVICE = ApplicationContextHolder.getBean(ConfigService.class); } - String[] split = groupKey.split("\\+"); - - ConfigAllInfo config = configService.findConfigAllInfo(split[0], split[1], split[2]); - if (config != null && !StringUtils.isEmpty(config.getTpId())) { + String[] params = groupKey.split(GROUP_KEY_DELIMITER_TRANSLATION); + ConfigAllInfo config = CONFIG_SERVICE.findConfigRecentInfo(params); + if (config != null && StrUtil.isNotBlank(config.getTpId())) { cacheItem = new CacheItem(groupKey, config); - cacheItemMap.put(ip, cacheItem); - CACHE.put(groupKey, cacheItemMap); + cacheItemMap.put(clientIdentify, cacheItem); + CLIENT_CONFIG_CACHE.put(groupKey, cacheItemMap); } return (cacheItem != null) ? cacheItem.md5 : Constants.NULL; } public static String getContentMd5(String groupKey) { - if (configService == null) { - configService = ApplicationContextHolder.getBean(ConfigService.class); + if (CONFIG_SERVICE == null) { + CONFIG_SERVICE = ApplicationContextHolder.getBean(ConfigService.class); } - - String[] split = groupKey.split("\\+"); - ConfigAllInfo config = configService.findConfigAllInfo(split[0], split[1], split[2]); + String[] params = groupKey.split(GROUP_KEY_DELIMITER_TRANSLATION); + ConfigAllInfo config = CONFIG_SERVICE.findConfigRecentInfo(params); if (config == null || StringUtils.isEmpty(config.getTpId())) { - String errorMessage = String.format("config is null. tpId :: %s, itemId :: %s, tenantId :: %s", split[0], split[1], split[2]); + String errorMessage = String.format("config is null. tpId: %s, itemId: %s, tenantId: %s", params[0], params[1], params[2]); throw new RuntimeException(errorMessage); } - return Md5Util.getTpContentMd5(config); } - public static void updateMd5(String groupKey, String ip, String md5) { - CacheItem cache = makeSure(groupKey, ip); + public static void updateMd5(String groupKey, String identify, String md5) { + CacheItem cache = makeSure(groupKey, identify); if (cache.md5 == null || !cache.md5.equals(md5)) { cache.md5 = md5; - String[] split = groupKey.split("\\+"); - ConfigAllInfo config = configService.findConfigAllInfo(split[0], split[1], split[2]); + String[] params = groupKey.split(GROUP_KEY_DELIMITER_TRANSLATION); + ConfigAllInfo config = CONFIG_SERVICE.findConfigRecentInfo(params); cache.configAllInfo = config; cache.lastModifiedTs = System.currentTimeMillis(); - NotifyCenter.publishEvent(new LocalDataChangeEvent(ip, groupKey)); + NotifyCenter.publishEvent(new LocalDataChangeEvent(identify, groupKey)); } } public synchronized static CacheItem makeSure(String groupKey, String ip) { - Map ipCacheItemMap = CACHE.get(groupKey); - CacheItem item = ipCacheItemMap.get(ip); - if (null != item) { + Map ipCacheItemMap = CLIENT_CONFIG_CACHE.get(groupKey); + CacheItem item; + if (ipCacheItemMap != null && (item = ipCacheItemMap.get(ip)) != null) { return item; } - CacheItem tmp = new CacheItem(groupKey); Map cacheItemMap = Maps.newHashMap(); cacheItemMap.put(ip, tmp); - CACHE.putIfAbsent(groupKey, cacheItemMap); - + CLIENT_CONFIG_CACHE.putIfAbsent(groupKey, cacheItemMap); return tmp; } public static Map getContent(String identification) { - List identificationList = MapUtil.parseMapForFilter(CACHE, identification); + List identificationList = MapUtil.parseMapForFilter(CLIENT_CONFIG_CACHE, identification); Map returnStrCacheItemMap = Maps.newHashMap(); - identificationList.forEach(each -> returnStrCacheItemMap.putAll(CACHE.get(each))); + identificationList.forEach(each -> returnStrCacheItemMap.putAll(CLIENT_CONFIG_CACHE.get(each))); return returnStrCacheItemMap; } + public static synchronized Integer getTotal() { + AtomicInteger total = new AtomicInteger(); + CLIENT_CONFIG_CACHE.forEach((key, val) -> total.addAndGet(val.values().size())); + return total.get(); + } + + public static List getIdentifyList(String tenantId, String itemId, String threadPoolId) { + List identifyList = null; + String buildKey = Joiner.on(GROUP_KEY_DELIMITER).join(Lists.newArrayList(threadPoolId, itemId, tenantId)); + List keys = MapUtil.parseMapForFilter(CLIENT_CONFIG_CACHE, buildKey); + if (CollectionUtil.isNotEmpty(keys)) { + identifyList = new ArrayList(keys.size()); + for (String each : keys) { + String[] keyArray = each.split(GROUP_KEY_DELIMITER_TRANSLATION); + if (keyArray != null && keyArray.length > 2) { + identifyList.add(keyArray[3]); + } + } + } + return identifyList; + } + /** * Remove config cache. * - * @param groupKey 租户 + 项目 + IP + * @param groupKey tenant + item + IP */ - public synchronized static void removeConfigCache(String groupKey) { - // 模糊搜索 - List identificationList = MapUtil.parseMapForFilter(CACHE, groupKey); + public static void removeConfigCache(String groupKey) { + coarseRemove(groupKey); + } + + private synchronized static void coarseRemove(String coarse) { + // fuzzy search + List identificationList = MapUtil.parseMapForFilter(CLIENT_CONFIG_CACHE, coarse); for (String cacheMapKey : identificationList) { - Map removeCacheItem = CACHE.remove(cacheMapKey); - log.info("Remove invalidated config cache. config info :: {}", JSON.toJSONString(removeCacheItem)); + Map removeCacheItem = CLIENT_CONFIG_CACHE.remove(cacheMapKey); + log.info("Remove invalidated config cache. config info: {}", JSONUtil.toJSONString(removeCacheItem)); } } + /** + * This is an observer, clear config cache. + */ + static class ClearConfigCache implements Observer { + + @Override + public void accept(ObserverMessage observerMessage) { + log.info("Clean up the configuration cache. Key: {}", observerMessage.message()); + coarseRemove(observerMessage.message()); + } + } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigChangePublisher.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigChangePublisher.java index e65a7282..084c8925 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigChangePublisher.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigChangePublisher.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service; import cn.hippo4j.config.notify.NotifyCenter; @@ -5,9 +22,6 @@ import cn.hippo4j.config.event.LocalDataChangeEvent; /** * Config change publisher. - * - * @author chen.ma - * @date 2021/6/24 23:34 */ public class ConfigChangePublisher { @@ -19,5 +33,4 @@ public class ConfigChangePublisher { public static void notifyConfigChange(LocalDataChangeEvent event) { NotifyCenter.publishEvent(event); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java index 568b3bf2..bbe8ee51 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ConfigServletInner.java @@ -1,30 +1,81 @@ +/* + * 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. + */ + package cn.hippo4j.config.service; -import org.springframework.beans.factory.annotation.Autowired; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; +import static cn.hippo4j.common.constant.Constants.WEIGHT_CONFIGS; + /** * Config servlet inner. - * - * @author chen.ma - * @date 2021/6/22 23:13 */ @Service +@RequiredArgsConstructor public class ConfigServletInner { - @Autowired - private LongPollingService longPollingService; + @NonNull + private final LongPollingService longPollingService; + + private final Cache deWeightCache = CacheBuilder.newBuilder() + .maximumSize(1024) + .build(); + /** + * Poll configuration. + * + * @param request + * @param response + * @param clientMd5Map + * @param probeRequestSize + * @return + */ public String doPollingConfig(HttpServletRequest request, HttpServletResponse response, Map clientMd5Map, int probeRequestSize) { - if (LongPollingService.isSupportLongPolling(request)) { + if (LongPollingService.isSupportLongPolling(request) && weightVerification(request)) { longPollingService.addLongPollingClient(request, response, clientMd5Map, probeRequestSize); return HttpServletResponse.SC_OK + ""; } return HttpServletResponse.SC_OK + ""; } + /** + * Check whether the repeat request is repeated. + *

+ * When a user proposes to deploy in the company environment, the same request will be called repeatedly. + * This problem belongs to an extremely individual scenario. Since it cannot be reproduced, so first solve the problem in this way. + * + * @param request + * @return + */ + private boolean weightVerification(HttpServletRequest request) { + String clientIdentify = request.getParameter(WEIGHT_CONFIGS); + Long timeVal = deWeightCache.getIfPresent(clientIdentify); + if (timeVal == null) { + deWeightCache.put(clientIdentify, System.currentTimeMillis()); + return true; + } + return false; + } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java index 0386d1a2..918e6a3c 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/LongPollingService.java @@ -1,21 +1,39 @@ +/* + * 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. + */ + package cn.hippo4j.config.service; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.Md5Util; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.event.AbstractEvent; +import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.notify.NotifyCenter; -import cn.hippo4j.config.toolkit.Md5ConfigUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import cn.hippo4j.config.notify.listener.Subscriber; +import cn.hippo4j.config.notify.listener.AbstractSubscriber; import cn.hippo4j.config.toolkit.ConfigExecutor; import cn.hippo4j.config.toolkit.MapUtil; +import cn.hippo4j.config.toolkit.Md5ConfigUtil; import cn.hippo4j.config.toolkit.RequestUtil; -import cn.hippo4j.common.toolkit.Md5Util; -import cn.hippo4j.common.web.base.Results; -import cn.hippo4j.config.event.Event; -import cn.hippo4j.config.event.LocalDataChangeEvent; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import javax.servlet.AsyncContext; import javax.servlet.http.HttpServletRequest; @@ -30,9 +48,6 @@ import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER; /** * Long polling service. - * - * @author chen.ma - * @date 2021/6/22 23:14 */ @Slf4j @Service @@ -52,15 +67,12 @@ public class LongPollingService { public LongPollingService() { allSubs = new ConcurrentLinkedQueue(); - ConfigExecutor.scheduleLongPolling(new StatTask(), 0L, 30L, TimeUnit.SECONDS); - NotifyCenter.registerToPublisher(LocalDataChangeEvent.class, NotifyCenter.ringBufferSize); - - NotifyCenter.registerSubscriber(new Subscriber() { + NotifyCenter.registerSubscriber(new AbstractSubscriber() { @Override - public void onEvent(Event event) { + public void onEvent(AbstractEvent event) { if (isFixedPolling()) { // Ignore. } else { @@ -72,7 +84,7 @@ public class LongPollingService { } @Override - public Class subscribeType() { + public Class subscribeType() { return LocalDataChangeEvent.class; } }); @@ -82,7 +94,7 @@ public class LongPollingService { @Override public void run() { - log.info("Dynamic Thread Pool Long pulling client count :: {}", allSubs.size()); + log.info("Dynamic Thread Pool Long pulling client count: {}", allSubs.size()); } } @@ -102,49 +114,42 @@ public class LongPollingService { @Override public void run() { try { - for (Iterator iter = allSubs.iterator(); iter.hasNext(); ) { + for (Iterator iter = allSubs.iterator(); iter.hasNext();) { ClientLongPolling clientSub = iter.next(); - String identity = groupKey + GROUP_KEY_DELIMITER + identify; List parseMapForFilter = Lists.newArrayList(identity); if (StrUtil.isBlank(identify)) { parseMapForFilter = MapUtil.parseMapForFilter(clientSub.clientMd5Map, groupKey); } - parseMapForFilter.forEach(each -> { if (clientSub.clientMd5Map.containsKey(each)) { - getRetainIps().put(clientSub.ip, System.currentTimeMillis()); - ConfigCacheService.updateMd5(each, clientSub.ip, ConfigCacheService.getContentMd5(groupKey)); + getRetainIps().put(clientSub.clientIdentify, System.currentTimeMillis()); + ConfigCacheService.updateMd5(each, clientSub.clientIdentify, ConfigCacheService.getContentMd5(each)); iter.remove(); clientSub.sendResponse(Arrays.asList(groupKey)); } }); } } catch (Exception ex) { - log.error("Data change error :: {}", ex.getMessage(), ex); + log.error("Data change error: {}", ex.getMessage(), ex); } } } - public static boolean isSupportLongPolling(HttpServletRequest req) { - return null != req.getHeader(LONG_POLLING_HEADER); - } - - private static boolean isFixedPolling() { - return SwitchService.getSwitchBoolean(SwitchService.FIXED_POLLING, false); - } - - private static int getFixedPollingInterval() { - return SwitchService.getSwitchInteger(SwitchService.FIXED_POLLING_INTERVAL, FIXED_POLLING_INTERVAL_MS); - } - + /** + * Add long polling client. + * + * @param req + * @param rsp + * @param clientMd5Map + * @param probeRequestSize + */ public void addLongPollingClient(HttpServletRequest req, HttpServletResponse rsp, Map clientMd5Map, int probeRequestSize) { String str = req.getHeader(LONG_POLLING_HEADER); String appName = req.getHeader(CLIENT_APP_NAME_HEADER); String noHangUpFlag = req.getHeader(LongPollingService.LONG_POLLING_NO_HANG_UP_HEADER); int delayTime = SwitchService.getSwitchInteger(SwitchService.FIXED_DELAY_TIME, 500); - long timeout = Math.max(10000, Long.parseLong(str) - delayTime); if (isFixedPolling()) { timeout = Math.max(10000, getFixedPollingInterval()); @@ -158,15 +163,15 @@ public class LongPollingService { return; } } - - String ip = RequestUtil.getRemoteIp(req); - + String clientIdentify = RequestUtil.getClientIdentify(req); final AsyncContext asyncContext = req.startAsync(); asyncContext.setTimeout(0L); - - ConfigExecutor.executeLongPolling(new ClientLongPolling(asyncContext, clientMd5Map, ip, probeRequestSize, timeout, appName)); + ConfigExecutor.executeLongPolling(new ClientLongPolling(asyncContext, clientMd5Map, clientIdentify, probeRequestSize, timeout - delayTime, appName)); } + /** + * Regularly check the configuration for changes. + */ class ClientLongPolling implements Runnable { final AsyncContext asyncContext; @@ -175,7 +180,7 @@ public class LongPollingService { final long createTime; - final String ip; + final String clientIdentify; final String appName; @@ -185,10 +190,10 @@ public class LongPollingService { Future asyncTimeoutFuture; - public ClientLongPolling(AsyncContext asyncContext, Map clientMd5Map, String ip, int probeRequestSize, long timeout, String appName) { + public ClientLongPolling(AsyncContext asyncContext, Map clientMd5Map, String clientIdentify, int probeRequestSize, long timeout, String appName) { this.asyncContext = asyncContext; this.clientMd5Map = clientMd5Map; - this.ip = ip; + this.clientIdentify = clientIdentify; this.probeRequestSize = probeRequestSize; this.timeoutTime = timeout; this.appName = appName; @@ -199,9 +204,8 @@ public class LongPollingService { public void run() { asyncTimeoutFuture = ConfigExecutor.scheduleLongPolling(() -> { try { - getRetainIps().put(ClientLongPolling.this.ip, System.currentTimeMillis()); + getRetainIps().put(ClientLongPolling.this.clientIdentify, System.currentTimeMillis()); allSubs.remove(ClientLongPolling.this); - if (isFixedPolling()) { List changedGroups = Md5ConfigUtil.compareMd5((HttpServletRequest) asyncContext.getRequest(), clientMd5Map); if (changedGroups.size() > 0) { @@ -213,14 +217,17 @@ public class LongPollingService { sendResponse(null); } } catch (Exception ex) { - log.error("Long polling error :: {}", ex.getMessage(), ex); + log.error("Long polling error: {}", ex.getMessage(), ex); } - }, timeoutTime, TimeUnit.MILLISECONDS); - allSubs.add(this); } + /** + * Send response. + * + * @param changedGroups Changed thread pool group key + */ private void sendResponse(List changedGroups) { // Cancel time out task. if (null != asyncTimeoutFuture) { @@ -229,51 +236,96 @@ public class LongPollingService { generateResponse(changedGroups); } + /** + * Generate async response. + * + * @param changedGroups Changed thread pool group key + */ private void generateResponse(List changedGroups) { if (null == changedGroups) { // Tell web container to send http response. asyncContext.complete(); return; } - HttpServletResponse response = (HttpServletResponse) asyncContext.getResponse(); - try { - String respStr = Md5Util.compareMd5ResultString(changedGroups); - String resultStr = JSON.toJSONString(Results.success(respStr)); - + String respStr = buildRespStr(changedGroups); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); response.setHeader("Cache-Control", "no-cache,no-store"); response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().println(resultStr); - asyncContext.complete(); + response.getWriter().println(respStr); } catch (Exception ex) { - log.error(ex.toString(), ex); + log.error("Response client failed to return data.", ex); + } finally { asyncContext.complete(); } } - } public Map getRetainIps() { return retainIps; } + /** + * Generate sync response. + * + * @param response response + * @param changedGroups Changed thread pool group key + */ private void generateResponse(HttpServletResponse response, List changedGroups) { - if (!CollectionUtils.isEmpty(changedGroups)) { + if (CollUtil.isNotEmpty(changedGroups)) { try { - final String changedGroupKeStr = Md5ConfigUtil.compareMd5ResultString(changedGroups); - final String respString = JSON.toJSONString(Results.success(changedGroupKeStr)); + String respStr = buildRespStr(changedGroups); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); response.setHeader("Cache-Control", "no-cache,no-store"); response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().println(respString); + response.getWriter().println(respStr); } catch (Exception ex) { - log.error(ex.toString(), ex); + log.error("Response client failed to return data.", ex); } } } + /** + * Build resp str. + * + * @param changedGroups Changed thread pool group key + * @return + */ + @SneakyThrows + private String buildRespStr(List changedGroups) { + String changedGroupStr = Md5Util.compareMd5ResultString(changedGroups); + String respStr = JSONUtil.toJSONString(Results.success(changedGroupStr)); + return respStr; + } + + /** + * Is support long polling. + * + * @param req + * @return + */ + public static boolean isSupportLongPolling(HttpServletRequest req) { + return null != req.getHeader(LONG_POLLING_HEADER); + } + + /** + * Is fixed polling. + * + * @return + */ + private static boolean isFixedPolling() { + return SwitchService.getSwitchBoolean(SwitchService.FIXED_POLLING, false); + } + + /** + * Get fixed polling interval. + * + * @return + */ + private static int getFixedPollingInterval() { + return SwitchService.getSwitchInteger(SwitchService.FIXED_POLLING_INTERVAL, FIXED_POLLING_INTERVAL_MS); + } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/SwitchService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/SwitchService.java index d12c240a..879c2acf 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/SwitchService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/SwitchService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service; import lombok.extern.slf4j.Slf4j; @@ -8,9 +25,6 @@ import java.util.Map; /** * Switch service. - * - * @author chen.ma - * @date 2021/6/23 18:23 */ @Slf4j @Service @@ -47,5 +61,4 @@ public class SwitchService { } return rtn; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java new file mode 100644 index 00000000..4cc8beb8 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java @@ -0,0 +1,154 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service; + +import cn.hippo4j.adapter.base.ThreadPoolAdapterCacheConfig; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.design.observer.AbstractSubjectCenter; +import cn.hippo4j.common.design.observer.Observer; +import cn.hippo4j.common.design.observer.ObserverMessage; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterReqDTO; +import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.http.HttpUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT; +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; + +/** + * Thread-pool adapter service. + */ +@Slf4j +@Service +public class ThreadPoolAdapterService { + + /** + * Map>>> + */ + private static final Map>>> THREAD_POOL_ADAPTER_MAP = Maps.newConcurrentMap(); + + static { + AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.CLEAR_CONFIG_CACHE, new ClearThreadPoolAdapterCache()); + } + + public void register(List requestParameter) { + synchronized (ThreadPoolAdapterService.class) { + for (ThreadPoolAdapterCacheConfig each : requestParameter) { + String mark = each.getMark(); + Map>> actual = THREAD_POOL_ADAPTER_MAP.get(mark); + if (CollectionUtil.isEmpty(actual)) { + actual = Maps.newHashMap(); + THREAD_POOL_ADAPTER_MAP.put(mark, actual); + } + Map> tenantItemMap = actual.get(each.getTenantItemKey()); + if (CollectionUtil.isEmpty(tenantItemMap)) { + tenantItemMap = Maps.newHashMap(); + actual.put(each.getTenantItemKey(), tenantItemMap); + } + List threadPoolAdapterStates = each.getThreadPoolAdapterStates(); + for (ThreadPoolAdapterState adapterState : threadPoolAdapterStates) { + List adapterStateList = tenantItemMap.get(adapterState.getThreadPoolKey()); + if (CollectionUtil.isEmpty(adapterStateList)) { + adapterStateList = Lists.newArrayList(); + tenantItemMap.put(adapterState.getThreadPoolKey(), adapterStateList); + } + Optional first = adapterStateList.stream().filter(state -> Objects.equals(state.getClientAddress(), each.getClientAddress())).findFirst(); + if (!first.isPresent()) { + ThreadPoolAdapterState state = new ThreadPoolAdapterState(); + state.setClientAddress(each.getClientAddress()); + state.setIdentify(each.getClientIdentify()); + adapterStateList.add(state); + } + } + } + } + } + + public List query(ThreadPoolAdapterReqDTO requestParameter) { + List actual = Optional.ofNullable(THREAD_POOL_ADAPTER_MAP.get(requestParameter.getMark())) + .map(each -> each.get(requestParameter.getTenant() + IDENTIFY_SLICER_SYMBOL + requestParameter.getItem())) + .map(each -> each.get(requestParameter.getThreadPoolKey())) + .orElse(Lists.newArrayList()); + List addressList = actual.stream().map(ThreadPoolAdapterState::getClientAddress).collect(Collectors.toList()); + List result = new ArrayList<>(addressList.size()); + addressList.forEach(each -> { + String urlString = StrBuilder.create("http://", each, "/adapter/thread-pool/info").toString(); + Map param = Maps.newHashMap(); + param.put("mark", requestParameter.getMark()); + param.put("threadPoolKey", requestParameter.getThreadPoolKey()); + try { + String resultStr = HttpUtil.get(urlString, param, HTTP_EXECUTE_TIMEOUT); + if (StringUtil.isNotBlank(resultStr)) { + Result restResult = JSONUtil.parseObject(resultStr, Result.class); + result.add(restResult.getData()); + } + } catch (Throwable ex) { + log.error("Failed to get third-party thread pool data.", ex); + } + }); + return result; + } + + public Set queryThreadPoolKey(ThreadPoolAdapterReqDTO requestParameter) { + Map>> threadPoolAdapterStateMap = THREAD_POOL_ADAPTER_MAP.get(requestParameter.getMark()); + if (CollectionUtil.isNotEmpty(threadPoolAdapterStateMap)) { + String buildKey = requestParameter.getTenant() + IDENTIFY_SLICER_SYMBOL + requestParameter.getItem(); + Map> actual = threadPoolAdapterStateMap.get(buildKey); + if (CollectionUtil.isNotEmpty(actual)) { + return actual.keySet(); + } + } + return new HashSet(); + } + + public static void remove(String identify) { + synchronized (ThreadPoolAdapterService.class) { + THREAD_POOL_ADAPTER_MAP.values().forEach(each -> each.forEach((key, val) -> { + val.forEach((threadPoolKey, states) -> { + Iterator iterator = states.iterator(); + while (iterator.hasNext()) { + ThreadPoolAdapterState adapterState = iterator.next(); + if (Objects.equals(adapterState.getIdentify(), identify)) { + iterator.remove(); + } + } + }); + })); + } + } + + static class ClearThreadPoolAdapterCache implements Observer { + + @Override + public void accept(ObserverMessage observerMessage) { + log.info("Clean up the thread-pool adapter cache. Key: {}", observerMessage.message()); + remove(observerMessage.message()); + } + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ConfigService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ConfigService.java index 01edc3d9..e42efa93 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ConfigService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ConfigService.java @@ -1,12 +1,27 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; import cn.hippo4j.config.model.ConfigAllInfo; /** * Config service. - * - * @author chen.ma - * @date 2021/6/20 15:18 */ public interface ConfigService { @@ -20,12 +35,27 @@ public interface ConfigService { */ ConfigAllInfo findConfigAllInfo(String tpId, String itemId, String tenantId); + /** + * Find config recent info. + * + * @param params + * @return + */ + ConfigAllInfo findConfigRecentInfo(String... params); + /** * Insert or update. * * @param identify + * @param isChangeNotice * @param configAllInfo */ - void insertOrUpdate(String identify, ConfigAllInfo configAllInfo); + void insertOrUpdate(String identify, boolean isChangeNotice, ConfigAllInfo configAllInfo); + /** + * Register. + * + * @param registerWrapper + */ + void register(DynamicThreadPoolRegisterWrapper registerWrapper); } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/HisRunDataService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/HisRunDataService.java new file mode 100644 index 00000000..2c3a8294 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/HisRunDataService.java @@ -0,0 +1,73 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.biz; + +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.config.model.HisRunDataInfo; +import cn.hippo4j.config.model.biz.monitor.MonitorActiveRespDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorQueryReqDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * His run data service. + */ +public interface HisRunDataService extends IService { + + /** + * Query. + * + * @param reqDTO + * @return + */ + List query(MonitorQueryReqDTO reqDTO); + + /** + * Query active thread pool monitor. + * + * @param reqDTO + * @return + */ + MonitorActiveRespDTO queryInfoThreadPoolMonitor(MonitorQueryReqDTO reqDTO); + + /** + * Query thread pool last task count. + * + * @param reqDTO + * @return + */ + MonitorRespDTO queryThreadPoolLastTaskCount(MonitorQueryReqDTO reqDTO); + + /** + * Save. + * + * @param message + */ + void save(Message message); + + /** + * dataCollect. + * + * @param messageWrapper + */ + Result dataCollect(MessageWrapper messageWrapper); +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ItemService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ItemService.java index e6c411e5..13827314 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ItemService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ItemService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz; import cn.hippo4j.config.model.biz.item.ItemRespDTO; @@ -10,9 +27,6 @@ import java.util.List; /** * Item service. - * - * @author chen.ma - * @date 2021/6/29 21:57 */ public interface ItemService { @@ -62,5 +76,4 @@ public interface ItemService { * @param itemId */ void deleteItem(String tenantId, String itemId); - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/LogRecordBizService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/LogRecordBizService.java deleted file mode 100644 index ca0bae9c..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/LogRecordBizService.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.hippo4j.config.service.biz; - -import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; -import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; -import com.baomidou.mybatisplus.core.metadata.IPage; - -/** - * 操作日志. - * - * @author chen.ma - * @date 2021/11/17 21:41 - */ -public interface LogRecordBizService { - - /** - * 查询操作日志. - * - * @param pageQuery - * @return - */ - IPage queryPage(LogRecordQueryReqDTO pageQuery); - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/NotifyService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/NotifyService.java index c2fa944c..bfc764be 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/NotifyService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/NotifyService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz; import cn.hippo4j.config.model.biz.notify.NotifyListRespDTO; @@ -9,15 +26,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; /** - * 通知管理. - * - * @author chen.ma - * @date 2021/11/17 22:01 + * Notify service. */ public interface NotifyService { /** - * 查询通知配置集合. + * List notify config. * * @param reqDTO * @return @@ -25,7 +39,7 @@ public interface NotifyService { List listNotifyConfig(NotifyQueryReqDTO reqDTO); /** - * 分页查询. + * Query page. * * @param reqDTO * @return @@ -33,32 +47,31 @@ public interface NotifyService { IPage queryPage(NotifyQueryReqDTO reqDTO); /** - * 新增通知配置. + * Save. * * @param reqDTO */ void save(NotifyReqDTO reqDTO); /** - * 修改通知配置. + * Update. * * @param reqDTO */ void update(NotifyReqDTO reqDTO); /** - * 删除通知配置. + * Delete. * * @param reqDTO */ void delete(NotifyReqDTO reqDTO); /** - * 启用停用通知. + * Enable notify. * * @param id * @param status */ void enableNotify(String id, Integer status); - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/OperationLogService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/OperationLogService.java new file mode 100644 index 00000000..42bdf484 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/OperationLogService.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.biz; + +import cn.hippo4j.config.model.LogRecordInfo; +import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; +import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * Operation log. + */ +public interface OperationLogService { + + /** + * Query operation log. + * + * @param pageQuery + * @return + */ + IPage queryPage(LogRecordQueryReqDTO pageQuery); + + /** + * Record. + * + * @param requestParam + */ + void record(LogRecordInfo requestParam); +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/TenantService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/TenantService.java index d586b118..d0ac22f8 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/TenantService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/TenantService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz; import cn.hippo4j.config.model.biz.tenant.TenantQueryReqDTO; @@ -8,9 +25,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; /** * Tenant service. - * - * @author chen.ma - * @date 2021/6/29 21:59 */ public interface TenantService { @@ -58,5 +72,4 @@ public interface TenantService { * @param tenantId */ void deleteTenantById(String tenantId); - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ThreadPoolService.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ThreadPoolService.java index 55002e09..f0ea6bd3 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ThreadPoolService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/ThreadPoolService.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO; @@ -10,9 +27,6 @@ import java.util.List; /** * Thread pool service. - * - * @author chen.ma - * @date 2021/6/30 21:26 */ public interface ThreadPoolService { @@ -62,5 +76,4 @@ public interface ThreadPoolService { * @param isAlarm */ void alarmEnable(String id, Integer isAlarm); - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java index dae0553c..636b105e 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java @@ -1,37 +1,61 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz.impl; import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.common.toolkit.ConditionUtil; -import cn.hippo4j.common.toolkit.ContentUtil; -import cn.hippo4j.common.toolkit.Md5Util; +import cn.hippo4j.common.enums.DelEnum; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.toolkit.*; +import cn.hippo4j.common.web.exception.ServiceException; import cn.hippo4j.config.event.LocalDataChangeEvent; import cn.hippo4j.config.mapper.ConfigInfoMapper; +import cn.hippo4j.config.mapper.ConfigInstanceMapper; import cn.hippo4j.config.model.ConfigAllInfo; import cn.hippo4j.config.model.ConfigInfoBase; +import cn.hippo4j.config.model.ConfigInstanceInfo; +import cn.hippo4j.config.model.LogRecordInfo; +import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigChangePublisher; import cn.hippo4j.config.service.biz.ConfigService; -import cn.hippo4j.tools.logrecord.annotation.LogRecord; +import cn.hippo4j.config.service.biz.ItemService; +import cn.hippo4j.config.service.biz.OperationLogService; +import cn.hippo4j.config.service.biz.TenantService; +import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.SynchronousQueue; import java.util.stream.Collectors; import java.util.stream.Stream; +import static cn.hippo4j.config.service.ConfigCacheService.getContent; + /** * Config service impl. - * - * @author chen.ma - * @date 2021/6/20 15:21 */ @Slf4j @Service @@ -40,86 +64,181 @@ public class ConfigServiceImpl implements ConfigService { private final ConfigInfoMapper configInfoMapper; + private final ConfigInstanceMapper configInstanceMapper; + + private final OperationLogService operationLogService; + @Override public ConfigAllInfo findConfigAllInfo(String tpId, String itemId, String tenantId) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) - .eq(!StringUtils.isBlank(tpId), ConfigAllInfo::getTpId, tpId) - .eq(!StringUtils.isBlank(itemId), ConfigAllInfo::getItemId, itemId) - .eq(!StringUtils.isBlank(tenantId), ConfigAllInfo::getTenantId, tenantId); - + .eq(StrUtil.isNotBlank(tpId), ConfigAllInfo::getTpId, tpId) + .eq(StrUtil.isNotBlank(itemId), ConfigAllInfo::getItemId, itemId) + .eq(StrUtil.isNotBlank(tenantId), ConfigAllInfo::getTenantId, tenantId); ConfigAllInfo configAllInfo = configInfoMapper.selectOne(wrapper); return configAllInfo; } @Override - public void insertOrUpdate(String identify, ConfigAllInfo configInfo) { + public ConfigAllInfo findConfigRecentInfo(String... params) { + ConfigAllInfo resultConfig; + ConfigAllInfo configInstance = null; + String instanceId = params[3]; + if (StrUtil.isNotBlank(instanceId)) { + LambdaQueryWrapper instanceQueryWrapper = Wrappers.lambdaQuery(ConfigInstanceInfo.class) + .eq(ConfigInstanceInfo::getTpId, params[0]) + .eq(ConfigInstanceInfo::getItemId, params[1]) + .eq(ConfigInstanceInfo::getTenantId, params[2]) + .eq(ConfigInstanceInfo::getInstanceId, params[3]) + .orderByDesc(ConfigInstanceInfo::getGmtCreate) + .last("LIMIT 1"); + ConfigInstanceInfo instanceInfo = configInstanceMapper.selectOne(instanceQueryWrapper); + if (instanceInfo != null) { + String content = instanceInfo.getContent(); + configInstance = JSONUtil.parseObject(content, ConfigAllInfo.class); + configInstance.setContent(content); + configInstance.setGmtCreate(instanceInfo.getGmtCreate()); + configInstance.setMd5(Md5Util.getTpContentMd5(configInstance)); + } + } + ConfigAllInfo configAllInfo = findConfigAllInfo(params[0], params[1], params[2]); + if (configAllInfo == null && configInstance == null) { + throw new ServiceException("Thread pool configuration is not defined"); + } else if (configAllInfo != null && configInstance == null) { + resultConfig = configAllInfo; + } else if (configAllInfo == null && configInstance != null) { + resultConfig = configInstance; + } else { + if (configAllInfo.getGmtModified().before(configInstance.getGmtCreate())) { + resultConfig = configInstance; + } else { + resultConfig = configAllInfo; + } + } + return resultConfig; + } + + @Override + public void insertOrUpdate(String identify, boolean isChangeNotice, ConfigAllInfo configInfo) { + verification(identify); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) .eq(ConfigAllInfo::getTenantId, configInfo.getTenantId()) .eq(ConfigInfoBase::getItemId, configInfo.getItemId()) .eq(ConfigInfoBase::getTpId, configInfo.getTpId()); ConfigAllInfo existConfig = configInfoMapper.selectOne(queryWrapper); - ConfigServiceImpl configService = ApplicationContextHolder.getBean(this.getClass()); configInfo.setCapacity(getQueueCapacityByType(configInfo)); + ConditionUtil + .condition( + existConfig == null, + () -> configService.addConfigInfo(configInfo), + () -> configService.updateConfigInfo(identify, isChangeNotice, configInfo)); + if (isChangeNotice) { + ConfigChangePublisher.notifyConfigChange(new LocalDataChangeEvent(identify, ContentUtil.getGroupKey(configInfo))); + } + } - try { - ConditionUtil - .condition( - existConfig == null, - () -> configService.addConfigInfo(configInfo), - () -> configService.updateConfigInfo(configInfo) - ); - } catch (Exception ex) { - updateConfigInfo(configInfo); + @Override + public void register(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); + ConfigAllInfo configAllInfo = JSONUtil.parseObject(JSONUtil.toJSONString(registerParameter), ConfigAllInfo.class); + configAllInfo.setTenantId(registerWrapper.getTenantId()); + configAllInfo.setItemId(registerWrapper.getItemId()); + configAllInfo.setTpId(registerParameter.getThreadPoolId()); + TenantService tenantService = ApplicationContextHolder.getBean(TenantService.class); + ItemService itemService = ApplicationContextHolder.getBean(ItemService.class); + Assert.isTrue(tenantService.getTenantByTenantId(registerWrapper.getTenantId()) != null, "Tenant does not exist"); + Assert.isTrue(itemService.queryItemById(registerWrapper.getTenantId(), registerWrapper.getItemId()) != null, "Item does not exist"); + ConfigAllInfo existConfigAllInfo = findConfigAllInfo(configAllInfo.getTpId(), registerWrapper.getItemId(), registerWrapper.getTenantId()); + if (existConfigAllInfo == null) { + addConfigInfo(configAllInfo); + } else if (registerWrapper.getUpdateIfExists()) { + ConfigServiceImpl configService = ApplicationContextHolder.getBean(this.getClass()); + configService.updateConfigInfo(null, false, configAllInfo); } + } - ConfigChangePublisher.notifyConfigChange(new LocalDataChangeEvent(identify, ContentUtil.getGroupKey(configInfo))); + private void verification(String identify) { + if (StringUtil.isNotBlank(identify)) { + Map content = getContent(identify); + Assert.isTrue(CollectionUtil.isNotEmpty(content), "线程池实例不存在, 请尝试页面刷新"); + } } public Long addConfigInfo(ConfigAllInfo config) { config.setContent(ContentUtil.getPoolContent(config)); config.setMd5(Md5Util.getTpContentMd5(config)); - try { - if (SqlHelper.retBool(configInfoMapper.insert(config))) { - return config.getId(); + // Currently it is a single application, and it supports switching distributed locks during cluster deployment in the future. + synchronized (ConfigService.class) { + ConfigAllInfo configAllInfo = configInfoMapper.selectOne( + Wrappers.lambdaQuery(ConfigAllInfo.class) + .eq(ConfigAllInfo::getTpId, config.getTpId()) + .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL.getIntCode())); + Assert.isNull(configAllInfo, "线程池配置已存在"); + if (SqlHelper.retBool(configInfoMapper.insert(config))) { + return config.getId(); + } } } catch (Exception ex) { - log.error("[db-error] message :: {}", ex.getMessage(), ex); + log.error("[db-error] message: {}", ex.getMessage(), ex); throw ex; } - return null; } - @LogRecord( - bizNo = "{{#config.itemId}}_{{#config.tpId}}", - category = "THREAD_POOL_UPDATE", - success = "核心线程: {{#config.coreSize}}, 最大线程: {{#config.maxSize}}, 队列类型: {{#config.queueType}}, 队列容量: {{#config.capacity}}, 拒绝策略: {{#config.rejectedType}}", - detail = "{{#config.toString()}}" - ) - public void updateConfigInfo(ConfigAllInfo config) { + public void updateConfigInfo(String identify, boolean isChangeNotice, ConfigAllInfo config) { LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate(ConfigAllInfo.class) .eq(ConfigAllInfo::getTpId, config.getTpId()) .eq(ConfigAllInfo::getItemId, config.getItemId()) .eq(ConfigAllInfo::getTenantId, config.getTenantId()); - config.setGmtCreate(null); config.setContent(ContentUtil.getPoolContent(config)); config.setMd5(Md5Util.getTpContentMd5(config)); - + recordOperationLog(config); try { + // Create a temporary configuration of a thread pool configuration instance, + // which can also be used as a historical configuration, but it is aimed at a single node. + if (StringUtil.isNotBlank(identify)) { + ConfigInstanceInfo instanceInfo = BeanUtil.convert(config, ConfigInstanceInfo.class); + instanceInfo.setInstanceId(identify); + configInstanceMapper.insert(instanceInfo); + return; + } else if (StringUtil.isEmpty(identify) && isChangeNotice) { + List identifyList = ConfigCacheService.getIdentifyList(config.getTenantId(), config.getItemId(), config.getTpId()); + if (CollectionUtil.isNotEmpty(identifyList)) { + for (String each : identifyList) { + ConfigInstanceInfo instanceInfo = BeanUtil.convert(config, ConfigInstanceInfo.class); + instanceInfo.setInstanceId(each); + configInstanceMapper.insert(instanceInfo); + } + } + return; + } configInfoMapper.update(config, wrapper); } catch (Exception ex) { - log.error("[db-error] message :: {}", ex.getMessage(), ex); + log.error("[db-error] message: {}", ex.getMessage(), ex); throw ex; } } + private void recordOperationLog(ConfigAllInfo requestParam) { + LogRecordInfo logRecordInfo = LogRecordInfo.builder() + .bizKey(requestParam.getItemId() + "_" + requestParam.getTpId()) + .bizNo(requestParam.getItemId() + "_" + requestParam.getTpId()) + .operator(Optional.ofNullable(UserContext.getUserName()).orElse("-")) + .action(String.format("核心线程: %d, 最大线程: %d, 队列类型: %d, 队列容量: %d, 拒绝策略: %d", requestParam.getCoreSize(), requestParam.getMaxSize(), requestParam.getQueueType(), + requestParam.getCapacity(), requestParam.getRejectedType())) + .category("THREAD_POOL_UPDATE") + .detail(JSONUtil.toJSONString(requestParam)) + .createTime(new Date()) + .build(); + operationLogService.record(logRecordInfo); + } + /** - * 根据队列类型获取队列大小. - *

- * 不支持设置队列大小 {@link SynchronousQueue} {@link LinkedTransferQueue} + * Get queue size based on queue type. + * + *

不支持设置队列大小 {@link SynchronousQueue} {@link LinkedTransferQueue} * * @param config * @return @@ -134,14 +253,11 @@ public class ConfigServiceImpl implements ConfigService { queueCapacity = config.getCapacity(); break; } - List queueTypes = Stream.of(1, 2, 3, 6, 9).collect(Collectors.toList()); boolean setDefaultFlag = queueTypes.contains(config.getQueueType()) && (config.getCapacity() == null || Objects.equals(config.getCapacity(), 0)); if (setDefaultFlag) { queueCapacity = 1024; } - return queueCapacity; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java new file mode 100644 index 00000000..0466070a --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/HisRunDataServiceImpl.java @@ -0,0 +1,175 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.biz.impl; + +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.common.toolkit.GroupKey; +import cn.hippo4j.common.toolkit.MessageConvert; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.config.ServerBootstrapProperties; +import cn.hippo4j.config.mapper.HisRunDataMapper; +import cn.hippo4j.config.model.HisRunDataInfo; +import cn.hippo4j.config.model.biz.monitor.MonitorActiveRespDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorQueryReqDTO; +import cn.hippo4j.config.model.biz.monitor.MonitorRespDTO; +import cn.hippo4j.config.monitor.QueryMonitorExecuteChoose; +import cn.hippo4j.config.service.biz.HisRunDataService; +import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import lombok.AllArgsConstructor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import static cn.hutool.core.date.DatePattern.NORM_TIME_PATTERN; + +/** + * His run data service impl. + */ +@Service +@AllArgsConstructor +public class HisRunDataServiceImpl extends ServiceImpl implements HisRunDataService { + + private final ServerBootstrapProperties properties; + + private final QueryMonitorExecuteChoose queryMonitorExecuteChoose; + + private final ThreadPoolTaskExecutor monitorThreadPoolTaskExecutor; + + @Override + public List query(MonitorQueryReqDTO reqDTO) { + Date currentDate = new Date(); + DateTime dateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); + long startTime = dateTime.getTime(); + List hisRunDataInfos = this.lambdaQuery() + .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) + .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) + .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) + .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) + .between(HisRunDataInfo::getTimestamp, startTime, currentDate.getTime()) + .orderByAsc(HisRunDataInfo::getTimestamp) + .list(); + return BeanUtil.convert(hisRunDataInfos, MonitorRespDTO.class); + } + + @Override + public MonitorActiveRespDTO queryInfoThreadPoolMonitor(MonitorQueryReqDTO reqDTO) { + Date currentDate = new Date(); + DateTime dateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); + long startTime = dateTime.getTime(); + List hisRunDataInfos = this.lambdaQuery() + .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) + .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) + .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) + .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) + .between(HisRunDataInfo::getTimestamp, startTime, currentDate.getTime()) + .orderByAsc(HisRunDataInfo::getTimestamp) + .list(); + List times = Lists.newArrayList(); + List poolSizeList = Lists.newArrayList(); + List activeSizeList = Lists.newArrayList(); + List queueCapacityList = Lists.newArrayList(); + List queueSizeList = Lists.newArrayList(); + List completedTaskCountList = Lists.newArrayList(); + List rejectCountList = Lists.newArrayList(); + List queueRemainingCapacityList = Lists.newArrayList(); + List currentLoadList = Lists.newArrayList(); + long countTemp = 0L; + AtomicBoolean firstFlag = new AtomicBoolean(Boolean.TRUE); + for (HisRunDataInfo each : hisRunDataInfos) { + String time = DateUtil.format(new Date(each.getTimestamp()), NORM_TIME_PATTERN); + times.add(time); + poolSizeList.add(each.getPoolSize()); + activeSizeList.add(each.getActiveSize()); + queueSizeList.add(each.getQueueSize()); + rejectCountList.add(each.getRejectCount()); + queueRemainingCapacityList.add(each.getQueueRemainingCapacity()); + currentLoadList.add(each.getCurrentLoad()); + queueCapacityList.add(each.getQueueCapacity()); + if (firstFlag.get()) { + completedTaskCountList.add(0L); + firstFlag.set(Boolean.FALSE); + countTemp = each.getCompletedTaskCount(); + continue; + } + long completedTaskCount = each.getCompletedTaskCount(); + long countTask = completedTaskCount - countTemp; + completedTaskCountList.add(countTask); + countTemp = each.getCompletedTaskCount(); + } + return new MonitorActiveRespDTO(times, poolSizeList, activeSizeList, queueSizeList, completedTaskCountList, rejectCountList, queueRemainingCapacityList, currentLoadList, queueCapacityList); + } + + @Override + public MonitorRespDTO queryThreadPoolLastTaskCount(MonitorQueryReqDTO reqDTO) { + Date currentDate = new Date(); + DateTime dateTime = DateUtil.offsetMinute(currentDate, -properties.getCleanHistoryDataPeriod()); + long startTime = dateTime.getTime(); + HisRunDataInfo hisRunDataInfo = this.lambdaQuery() + .eq(HisRunDataInfo::getTenantId, reqDTO.getTenantId()) + .eq(HisRunDataInfo::getItemId, reqDTO.getItemId()) + .eq(HisRunDataInfo::getTpId, reqDTO.getTpId()) + .eq(HisRunDataInfo::getInstanceId, reqDTO.getInstanceId()) + .orderByDesc(HisRunDataInfo::getTimestamp) + .between(HisRunDataInfo::getTimestamp, startTime, currentDate.getTime()) + .last("LIMIT 1") + .one(); + return BeanUtil.convert(hisRunDataInfo, MonitorRespDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(Message message) { + List runtimeMessages = message.getMessages(); + List hisRunDataInfos = Lists.newArrayList(); + runtimeMessages.forEach(each -> { + HisRunDataInfo hisRunDataInfo = BeanUtil.convert(each, HisRunDataInfo.class); + String[] parseKey = GroupKey.parseKey(each.getGroupKey()); + hisRunDataInfo.setTpId(parseKey[0]); + hisRunDataInfo.setItemId(parseKey[1]); + hisRunDataInfo.setTenantId(parseKey[2]); + hisRunDataInfo.setInstanceId(parseKey[3]); + hisRunDataInfos.add(hisRunDataInfo); + }); + this.saveBatch(hisRunDataInfos); + } + + @Override + public Result dataCollect(MessageWrapper messageWrapper) { + Runnable task = () -> { + Message message = MessageConvert.convert(messageWrapper); + queryMonitorExecuteChoose.chooseAndExecute(message); + }; + try { + monitorThreadPoolTaskExecutor.execute(task); + } catch (Exception ex) { + log.error("Monitoring data insertion database task overflow.", ex); + } + return Results.success(); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java index 1ae40ff2..959955c5 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java @@ -1,7 +1,24 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz.impl; import cn.hippo4j.common.toolkit.Assert; -import cn.hippo4j.config.enums.DelEnum; +import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.config.mapper.ItemInfoMapper; import cn.hippo4j.config.model.ItemInfo; import cn.hippo4j.config.model.biz.item.ItemQueryReqDTO; @@ -26,9 +43,6 @@ import java.util.List; /** * Item service impl. - * - * @author chen.ma - * @date 2021/6/29 21:58 */ @Service @AllArgsConstructor @@ -44,8 +58,8 @@ public class ItemServiceImpl implements ItemService { .eq(!StringUtils.isEmpty(reqDTO.getItemId()), ItemInfo::getItemId, reqDTO.getItemId()) .eq(!StringUtils.isEmpty(reqDTO.getItemName()), ItemInfo::getItemName, reqDTO.getItemName()) .eq(!StringUtils.isEmpty(reqDTO.getTenantId()), ItemInfo::getTenantId, reqDTO.getTenantId()) - .eq(!StringUtils.isEmpty(reqDTO.getOwner()), ItemInfo::getOwner, reqDTO.getOwner()); - + .eq(!StringUtils.isEmpty(reqDTO.getOwner()), ItemInfo::getOwner, reqDTO.getOwner()) + .orderByDesc(reqDTO.getDesc() != null, ItemInfo::getGmtCreate); Page resultPage = itemInfoMapper.selectPage(reqDTO, wrapper); return resultPage.convert(each -> BeanUtil.convert(each, ItemRespDTO.class)); } @@ -56,7 +70,6 @@ public class ItemServiceImpl implements ItemService { .lambdaQuery(ItemInfo.class) .eq(ItemInfo::getTenantId, tenantId) .eq(ItemInfo::getItemId, itemId); - ItemInfo itemInfo = itemInfoMapper.selectOne(queryWrapper); ItemRespDTO result = BeanUtil.convert(itemInfo, ItemRespDTO.class); return result; @@ -67,7 +80,6 @@ public class ItemServiceImpl implements ItemService { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ItemInfo.class) .eq(!StringUtils.isEmpty(reqDTO.getItemId()), ItemInfo::getItemId, reqDTO.getItemId()) .eq(!StringUtils.isEmpty(reqDTO.getTenantId()), ItemInfo::getTenantId, reqDTO.getTenantId()); - List itemInfos = itemInfoMapper.selectList(wrapper); return BeanUtil.convert(itemInfos, ItemRespDTO.class); } @@ -76,16 +88,16 @@ public class ItemServiceImpl implements ItemService { public void saveItem(ItemSaveReqDTO reqDTO) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ItemInfo.class) .eq(ItemInfo::getItemId, reqDTO.getItemId()); - - ItemInfo existItemInfo = itemInfoMapper.selectOne(queryWrapper); - Assert.isNull(existItemInfo, "项目 ID 不允许重复."); - - ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class); - int insertResult = itemInfoMapper.insert(itemInfo); - - boolean retBool = SqlHelper.retBool(insertResult); - if (!retBool) { - throw new RuntimeException("Save error"); + // It is currently a single application, and it will support switching distributed locks during cluster deployment in the future. + synchronized (ItemService.class) { + ItemInfo existItemInfo = itemInfoMapper.selectOne(queryWrapper); + Assert.isNull(existItemInfo, "项目配置已存在."); + ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class); + int insertResult = itemInfoMapper.insert(itemInfo); + boolean retBool = SqlHelper.retBool(insertResult); + if (!retBool) { + throw new RuntimeException("Save error"); + } } } @@ -96,7 +108,6 @@ public class ItemServiceImpl implements ItemService { Wrappers.lambdaUpdate(ItemInfo.class) .eq(ItemInfo::getTenantId, reqDTO.getTenantId()) .eq(ItemInfo::getItemId, reqDTO.getItemId())); - boolean retBool = SqlHelper.retBool(updateResult); if (!retBool) { throw new RuntimeException("Update error."); @@ -107,19 +118,16 @@ public class ItemServiceImpl implements ItemService { public void deleteItem(String namespace, String itemId) { List itemList = threadPoolService.getThreadPoolByItemId(itemId); if (CollectionUtils.isNotEmpty(itemList)) { - throw new RuntimeException("The project contains a thread pool reference, and the deletion failed."); + throw new RuntimeException("项目包含线程池引用, 删除失败."); } - int updateResult = itemInfoMapper.update(new ItemInfo(), Wrappers.lambdaUpdate(ItemInfo.class) .eq(ItemInfo::getTenantId, namespace) .eq(ItemInfo::getItemId, itemId) .set(ItemInfo::getDelFlag, DelEnum.DELETE.getIntCode())); - boolean retBool = SqlHelper.retBool(updateResult); if (!retBool) { throw new RuntimeException("Delete error."); } } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordBizServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordBizServiceImpl.java deleted file mode 100644 index 553bc84b..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordBizServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.hippo4j.config.service.biz.impl; - -import cn.hippo4j.config.mapper.LogRecordMapper; -import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; -import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; -import cn.hippo4j.config.service.biz.LogRecordBizService; -import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; - -/** - * 操作日志. - * - * @author chen.ma - * @date 2021/11/17 21:50 - */ -@Service -@AllArgsConstructor -public class LogRecordBizServiceImpl implements LogRecordBizService { - - private final LogRecordMapper logRecordMapper; - - @Override - public IPage queryPage(LogRecordQueryReqDTO pageQuery) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(LogRecordInfo.class) - .eq(StrUtil.isNotBlank(pageQuery.getBizNo()), LogRecordInfo::getBizNo, pageQuery.getBizNo()) - .eq(StrUtil.isNotBlank(pageQuery.getCategory()), LogRecordInfo::getCategory, pageQuery.getCategory()) - .eq(StrUtil.isNotBlank(pageQuery.getOperator()), LogRecordInfo::getOperator, pageQuery.getOperator()) - .orderByDesc(LogRecordInfo::getCreateTime); - IPage selectPage = logRecordMapper.selectPage(pageQuery, queryWrapper); - return selectPage.convert(each -> BeanUtil.convert(each, LogRecordRespDTO.class)); - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordServiceImpl.java deleted file mode 100644 index 5e8a8158..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/LogRecordServiceImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.hippo4j.config.service.biz.impl; - -import cn.hippo4j.config.mapper.LogRecordMapper; -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; -import cn.hippo4j.tools.logrecord.service.LogRecordService; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; - -/** - * 操作日志保存数据库. - * - * @author chen.ma - * @date 2021/10/24 20:57 - */ -@Service -@AllArgsConstructor -public class LogRecordServiceImpl implements LogRecordService { - - private final LogRecordMapper logRecordMapper; - - @Override - public void record(LogRecordInfo logRecordInfo) { - logRecordMapper.insert(logRecordInfo); - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java index c48d5644..b555e13b 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/NotifyServiceImpl.java @@ -1,8 +1,25 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz.impl; +import cn.hippo4j.common.enums.EnableEnum; import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.common.web.exception.ServiceException; -import cn.hippo4j.config.enums.DelEnum; import cn.hippo4j.config.mapper.NotifyInfoMapper; import cn.hippo4j.config.model.NotifyInfo; import cn.hippo4j.config.model.biz.notify.NotifyListRespDTO; @@ -12,6 +29,7 @@ import cn.hippo4j.config.model.biz.notify.NotifyRespDTO; import cn.hippo4j.config.service.biz.NotifyService; import cn.hippo4j.config.toolkit.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hippo4j.common.toolkit.BooleanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -23,12 +41,10 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** - * 通知管理. - * - * @author chen.ma - * @date 2021/11/17 22:02 + * Notify service impl. */ @Service @AllArgsConstructor @@ -45,13 +61,11 @@ public class NotifyServiceImpl implements NotifyService { if (CollUtil.isNotEmpty(notifyInfos)) { notifyListRespList.add(new NotifyListRespDTO(StrUtil.builder(parseKey[0], "+", "CONFIG").toString(), notifyInfos)); } - List alarmInfos = listNotifyCommon("ALARM", parseKey); if (CollUtil.isNotEmpty(alarmInfos)) { notifyListRespList.add(new NotifyListRespDTO(StrUtil.builder(parseKey[0], "+", "ALARM").toString(), alarmInfos)); } }); - return notifyListRespList; } @@ -62,18 +76,35 @@ public class NotifyServiceImpl implements NotifyService { .eq(StrUtil.isNotBlank(reqDTO.getItemId()), NotifyInfo::getItemId, reqDTO.getItemId()) .eq(StrUtil.isNotBlank(reqDTO.getTpId()), NotifyInfo::getTpId, reqDTO.getTpId()) .orderByDesc(NotifyInfo::getGmtCreate); - IPage resultPage = notifyInfoMapper.selectPage(reqDTO, queryWrapper); - return resultPage.convert(each -> BeanUtil.convert(each, NotifyRespDTO.class)); + return resultPage.convert(each -> { + NotifyRespDTO convert = BeanUtil.convert(each, NotifyRespDTO.class); + convert.setConfigType(Objects.equals("CONFIG", each.getType())); + convert.setAlarmType(Objects.equals("ALARM", each.getType())); + return convert; + }); } @Override - public void save(NotifyReqDTO reqDTO) { - if (existNotify(reqDTO)) { - throw new ServiceException("新增通知报警配置重复."); + public void save(NotifyReqDTO requestParam) { + if (BooleanUtil.isTrue(requestParam.getConfigType())) { + existNotify("CONFIG", requestParam); } - - notifyInfoMapper.insert(BeanUtil.convert(reqDTO, NotifyInfo.class)); + if (BooleanUtil.isTrue(requestParam.getAlarmType())) { + existNotify("ALARM", requestParam); + } + List notifyInfos = Lists.newArrayList(); + if (BooleanUtil.isTrue(requestParam.getAlarmType())) { + NotifyInfo alarmNotifyInfo = BeanUtil.convert(requestParam, NotifyInfo.class); + alarmNotifyInfo.setType("ALARM"); + notifyInfos.add(alarmNotifyInfo); + } + if (BooleanUtil.isTrue(requestParam.getConfigType())) { + NotifyInfo configNotifyInfo = BeanUtil.convert(requestParam, NotifyInfo.class); + configNotifyInfo.setType("CONFIG"); + notifyInfos.add(configNotifyInfo); + } + notifyInfos.forEach(each -> notifyInfoMapper.insert(each)); } @Override @@ -81,7 +112,6 @@ public class NotifyServiceImpl implements NotifyService { NotifyInfo notifyInfo = BeanUtil.convert(reqDTO, NotifyInfo.class); LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(NotifyInfo.class) .eq(NotifyInfo::getId, reqDTO.getId()); - try { notifyInfoMapper.update(notifyInfo, updateWrapper); } catch (DuplicateKeyException ex) { @@ -93,7 +123,6 @@ public class NotifyServiceImpl implements NotifyService { public void delete(NotifyReqDTO reqDTO) { LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(NotifyInfo.class) .eq(NotifyInfo::getId, reqDTO.getId()); - notifyInfoMapper.delete(updateWrapper); } @@ -110,22 +139,22 @@ public class NotifyServiceImpl implements NotifyService { .eq(NotifyInfo::getTenantId, parseKey[2]) .eq(NotifyInfo::getItemId, parseKey[1]) .eq(NotifyInfo::getTpId, parseKey[0]) - .eq(NotifyInfo::getEnable, DelEnum.NORMAL) + .eq(NotifyInfo::getEnable, EnableEnum.YES.getIntCode()) .eq(NotifyInfo::getType, type); List notifyInfos = notifyInfoMapper.selectList(queryWrapper); return notifyInfos; } - private boolean existNotify(NotifyReqDTO reqDTO) { + private void existNotify(String type, NotifyReqDTO requestParam) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(NotifyInfo.class) - .eq(NotifyInfo::getTenantId, reqDTO.getTenantId()) - .eq(NotifyInfo::getItemId, reqDTO.getItemId()) - .eq(NotifyInfo::getTpId, reqDTO.getTpId()) - .eq(NotifyInfo::getPlatform, reqDTO.getPlatform()) - .eq(NotifyInfo::getType, reqDTO.getType()); - + .eq(NotifyInfo::getTenantId, requestParam.getTenantId()) + .eq(NotifyInfo::getItemId, requestParam.getItemId()) + .eq(NotifyInfo::getTpId, requestParam.getTpId()) + .eq(NotifyInfo::getPlatform, requestParam.getPlatform()) + .eq(NotifyInfo::getType, type); List existNotifyInfos = notifyInfoMapper.selectList(queryWrapper); - return CollUtil.isNotEmpty(existNotifyInfos); + if (CollUtil.isNotEmpty(existNotifyInfos)) { + throw new ServiceException(String.format("%s 新增通知报警配置重复", type)); + } } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java new file mode 100644 index 00000000..10276d72 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/OperationLogServiceImpl.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.biz.impl; + +import cn.hippo4j.config.mapper.OperationLogMapper; +import cn.hippo4j.config.model.LogRecordInfo; +import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; +import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; +import cn.hippo4j.config.service.biz.OperationLogService; +import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * Operation log service impl. + */ +@Service +@AllArgsConstructor +public class OperationLogServiceImpl implements OperationLogService { + + private final OperationLogMapper operationLogMapper; + + @Override + public IPage queryPage(LogRecordQueryReqDTO pageQuery) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(LogRecordInfo.class) + .eq(StrUtil.isNotBlank(pageQuery.getBizNo()), LogRecordInfo::getBizNo, pageQuery.getBizNo()) + .eq(StrUtil.isNotBlank(pageQuery.getCategory()), LogRecordInfo::getCategory, pageQuery.getCategory()) + .eq(StrUtil.isNotBlank(pageQuery.getOperator()), LogRecordInfo::getOperator, pageQuery.getOperator()) + .orderByDesc(LogRecordInfo::getCreateTime); + IPage selectPage = operationLogMapper.selectPage(pageQuery, queryWrapper); + return selectPage.convert(each -> BeanUtil.convert(each, LogRecordRespDTO.class)); + } + + @Override + public void record(LogRecordInfo requestParam) { + operationLogMapper.insert(requestParam); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java index 2d446ffc..f3a0baa6 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java @@ -1,7 +1,24 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz.impl; +import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.common.toolkit.Assert; -import cn.hippo4j.config.enums.DelEnum; import cn.hippo4j.config.mapper.TenantInfoMapper; import cn.hippo4j.config.model.TenantInfo; import cn.hippo4j.config.model.biz.item.ItemQueryReqDTO; @@ -13,7 +30,6 @@ import cn.hippo4j.config.model.biz.tenant.TenantUpdateReqDTO; import cn.hippo4j.config.service.biz.ItemService; import cn.hippo4j.config.service.biz.TenantService; import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hippo4j.tools.logrecord.annotation.LogRecord; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -28,9 +44,6 @@ import java.util.List; /** * Tenant service impl. - * - * @author chen.ma - * @date 2021/6/29 21:12 */ @Service @AllArgsConstructor @@ -49,7 +62,6 @@ public class TenantServiceImpl implements TenantService { public TenantRespDTO getTenantByTenantId(String tenantId) { LambdaQueryWrapper queryWrapper = Wrappers .lambdaQuery(TenantInfo.class).eq(TenantInfo::getTenantId, tenantId); - TenantInfo tenantInfo = tenantInfoMapper.selectOne(queryWrapper); TenantRespDTO result = BeanUtil.convert(tenantInfo, TenantRespDTO.class); return result; @@ -60,8 +72,8 @@ public class TenantServiceImpl implements TenantService { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(TenantInfo.class) .eq(!StringUtils.isEmpty(reqDTO.getTenantId()), TenantInfo::getTenantId, reqDTO.getTenantId()) .eq(!StringUtils.isEmpty(reqDTO.getTenantName()), TenantInfo::getTenantName, reqDTO.getTenantName()) - .eq(!StringUtils.isEmpty(reqDTO.getOwner()), TenantInfo::getOwner, reqDTO.getOwner()); - + .eq(!StringUtils.isEmpty(reqDTO.getOwner()), TenantInfo::getOwner, reqDTO.getOwner()) + .orderByDesc(reqDTO.getDesc() != null, TenantInfo::getGmtCreate); Page resultPage = tenantInfoMapper.selectPage(reqDTO, wrapper); return resultPage.convert(each -> BeanUtil.convert(each, TenantRespDTO.class)); } @@ -70,32 +82,24 @@ public class TenantServiceImpl implements TenantService { public void saveTenant(TenantSaveReqDTO reqDTO) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(TenantInfo.class) .eq(TenantInfo::getTenantId, reqDTO.getTenantId()); - - TenantInfo existTenantInfo = tenantInfoMapper.selectOne(queryWrapper); - Assert.isNull(existTenantInfo, "租户 ID 不允许重复."); - - TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class); - int insertResult = tenantInfoMapper.insert(tenantInfo); - - boolean retBool = SqlHelper.retBool(insertResult); - if (!retBool) { - throw new RuntimeException("Save Error."); + // Currently it is a single application, and it supports switching distributed locks during cluster deployment in the future. + synchronized (TenantService.class) { + TenantInfo existTenantInfo = tenantInfoMapper.selectOne(queryWrapper); + Assert.isNull(existTenantInfo, "租户配置已存在."); + TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class); + int insertResult = tenantInfoMapper.insert(tenantInfo); + boolean retBool = SqlHelper.retBool(insertResult); + if (!retBool) { + throw new RuntimeException("Save Error."); + } } } @Override - @LogRecord( - prefix = "item", - bizNo = "{{#reqDTO.tenantId}}_{{#reqDTO.tenantName}}", - category = "TENANT_UPDATE", - success = "更新租户, ID :: {{#reqDTO.id}}, 租户名称由 :: {TENANT{#reqDTO.id}} -> {{#reqDTO.tenantName}}", - detail = "{{#reqDTO.toString()}}" - ) public void updateTenant(TenantUpdateReqDTO reqDTO) { TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class); int updateResult = tenantInfoMapper.update(tenantInfo, Wrappers .lambdaUpdate(TenantInfo.class).eq(TenantInfo::getTenantId, reqDTO.getTenantId())); - boolean retBool = SqlHelper.retBool(updateResult); if (!retBool) { throw new RuntimeException("Update Error."); @@ -108,9 +112,8 @@ public class TenantServiceImpl implements TenantService { reqDTO.setTenantId(tenantId); List itemList = itemService.queryItem(reqDTO); if (CollectionUtils.isNotEmpty(itemList)) { - throw new RuntimeException("The line of business contains project references, and the deletion failed."); + throw new RuntimeException("租户包含项目引用, 删除失败."); } - int updateResult = tenantInfoMapper.update(new TenantInfo(), Wrappers.lambdaUpdate(TenantInfo.class) .eq(TenantInfo::getTenantId, tenantId) diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java index 0ff504ba..921b5c24 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ThreadPoolServiceImpl.java @@ -1,16 +1,36 @@ +/* + * 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. + */ + package cn.hippo4j.config.service.biz.impl; -import cn.hippo4j.config.enums.DelEnum; +import cn.hippo4j.common.enums.DelEnum; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.UserContext; import cn.hippo4j.config.mapper.ConfigInfoMapper; import cn.hippo4j.config.model.ConfigAllInfo; +import cn.hippo4j.config.model.LogRecordInfo; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolDelReqDTO; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO; import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO; import cn.hippo4j.config.service.biz.ConfigService; +import cn.hippo4j.config.service.biz.OperationLogService; import cn.hippo4j.config.service.biz.ThreadPoolService; import cn.hippo4j.config.toolkit.BeanUtil; -import cn.hippo4j.tools.logrecord.annotation.LogRecord; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; @@ -18,13 +38,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; +import java.util.Optional; /** * Thread pool service impl. - * - * @author chen.ma - * @date 2021/6/30 21:26 */ @Service @AllArgsConstructor @@ -34,6 +53,8 @@ public class ThreadPoolServiceImpl implements ThreadPoolService { private final ConfigInfoMapper configInfoMapper; + private final OperationLogService operationLogService; + @Override public IPage queryThreadPoolPage(ThreadPoolQueryReqDTO reqDTO) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) @@ -41,8 +62,7 @@ public class ThreadPoolServiceImpl implements ThreadPoolService { .eq(!StringUtils.isBlank(reqDTO.getItemId()), ConfigAllInfo::getItemId, reqDTO.getItemId()) .eq(!StringUtils.isBlank(reqDTO.getTpId()), ConfigAllInfo::getTpId, reqDTO.getTpId()) .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL) - .orderByDesc(ConfigAllInfo::getGmtCreate); - + .orderByDesc(reqDTO.getDesc() != null, ConfigAllInfo::getGmtCreate); return configInfoMapper.selectPage(reqDTO, wrapper).convert(each -> BeanUtil.convert(each, ThreadPoolRespDTO.class)); } @@ -56,38 +76,42 @@ public class ThreadPoolServiceImpl implements ThreadPoolService { public List getThreadPoolByItemId(String itemId) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) .eq(ConfigAllInfo::getItemId, itemId); - List selectList = configInfoMapper.selectList(queryWrapper); return BeanUtil.convert(selectList, ThreadPoolRespDTO.class); } @Override public void saveOrUpdateThreadPoolConfig(String identify, ThreadPoolSaveOrUpdateReqDTO reqDTO) { - configService.insertOrUpdate(identify, BeanUtil.convert(reqDTO, ConfigAllInfo.class)); + configService.insertOrUpdate(identify, false, BeanUtil.convert(reqDTO, ConfigAllInfo.class)); } - @LogRecord( - bizNo = "{{#reqDTO.itemId}}_{{#reqDTO.tpId}}", - category = "THREAD_POOL_DELETE", - success = "删除线程池: {{#reqDTO.tpId}}", - detail = "{{#reqDTO.toString()}}" - ) @Override - public void deletePool(ThreadPoolDelReqDTO reqDTO) { + public void deletePool(ThreadPoolDelReqDTO requestParam) { configInfoMapper.delete( Wrappers.lambdaUpdate(ConfigAllInfo.class) - .eq(ConfigAllInfo::getTenantId, reqDTO.getTenantId()) - .eq(ConfigAllInfo::getItemId, reqDTO.getItemId()) - .eq(ConfigAllInfo::getTpId, reqDTO.getTpId()) - ); + .eq(ConfigAllInfo::getTenantId, requestParam.getTenantId()) + .eq(ConfigAllInfo::getItemId, requestParam.getItemId()) + .eq(ConfigAllInfo::getTpId, requestParam.getTpId())); + recordOperationLog(requestParam); + } + + private void recordOperationLog(ThreadPoolDelReqDTO requestParam) { + LogRecordInfo logRecordInfo = LogRecordInfo.builder() + .bizKey(requestParam.getItemId() + "_" + requestParam.getTpId()) + .bizNo(requestParam.getItemId() + "_" + requestParam.getTpId()) + .operator(Optional.ofNullable(UserContext.getUserName()).orElse("-")) + .action("删除线程池: " + requestParam.getTpId()) + .category("THREAD_POOL_DELETE") + .detail(JSONUtil.toJSONString(requestParam)) + .createTime(new Date()) + .build(); + operationLogService.record(logRecordInfo); } @Override public void alarmEnable(String id, Integer isAlarm) { ConfigAllInfo configAllInfo = configInfoMapper.selectById(id); configAllInfo.setIsAlarm(isAlarm); - // TODO: 是否报警变更, 虽然通知了客户端, 但是并没有在客户端实时生效, 需要考虑一个好的场景思路 - configService.insertOrUpdate(null, configAllInfo); + configService.insertOrUpdate(null, false, configAllInfo); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java new file mode 100644 index 00000000..d67ab517 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/ClientCloseHookRemoveConfigCache.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.handler; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.config.service.ConfigCacheService; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Client close hook remove config cache. + */ +@Slf4j +@Component +public class ClientCloseHookRemoveConfigCache implements ClientCloseHookExecute { + + @Override + public void closeHook(ClientCloseHookReq requestParam) { + log.info("Remove Config Cache, Execute client hook function. Request: {}", JSONUtil.toJSONString(requestParam)); + try { + String groupKey = requestParam.getGroupKey(); + if (StrUtil.isNotBlank(groupKey)) { + ConfigCacheService.removeConfigCache(groupKey); + } + } catch (Exception ex) { + log.error("Failed to remove config cache hook.", ex); + } + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/CustomOperatorGetServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/CustomOperatorGetServiceImpl.java deleted file mode 100644 index 55529d88..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/CustomOperatorGetServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.hippo4j.config.service.handler; - -import cn.hippo4j.common.toolkit.UserContext; -import cn.hippo4j.tools.logrecord.model.Operator; -import cn.hippo4j.tools.logrecord.service.OperatorGetService; -import org.springframework.stereotype.Component; - -/** - * Custom operator get service. - * - * @author chen.ma - * @date 2021/11/28 17:57 - */ -@Component -public class CustomOperatorGetServiceImpl implements OperatorGetService { - - @Override - public Operator getUser() { - return new Operator(UserContext.getUserName()); - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java new file mode 100644 index 00000000..c2819fd4 --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/RemoveThreadPoolAdapterCache.java @@ -0,0 +1,38 @@ +/* + * 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. + */ + +package cn.hippo4j.config.service.handler; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.config.service.ThreadPoolAdapterService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Remove thread pool adapter cache + */ +@Slf4j +@Component +public class RemoveThreadPoolAdapterCache implements ClientCloseHookExecute { + + @Override + public void closeHook(ClientCloseHookReq requestParam) { + log.info("Remove thread-pool adapter cache, Execute client hook function. Req: {}", JSONUtil.toJSONString(requestParam)); + ThreadPoolAdapterService.remove(requestParam.getInstanceId()); + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/TenantIdFunctionServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/TenantIdFunctionServiceImpl.java deleted file mode 100644 index bff1cdb4..00000000 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/handler/TenantIdFunctionServiceImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.hippo4j.config.service.handler; - -import cn.hippo4j.config.model.biz.tenant.TenantRespDTO; -import cn.hippo4j.config.service.biz.TenantService; -import cn.hippo4j.tools.logrecord.service.ParseFunction; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.Optional; - -/** - * 查找原租户名称. - * - * @author chen.ma - * @date 2021/10/24 22:07 - */ -@Component -@AllArgsConstructor -public class TenantIdFunctionServiceImpl implements ParseFunction { - - private final TenantService tenantService; - - @Override - public boolean executeBefore() { - return true; - } - - @Override - public String functionName() { - return "TENANT"; - } - - @Override - public String apply(String tenantId) { - TenantRespDTO tenant = tenantService.getTenantById(tenantId); - return Optional.ofNullable(tenant).map(TenantRespDTO::getTenantName).orElse(""); - } - -} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java index 4e67e579..ad4c3879 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/BeanUtil.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import com.github.dozermapper.core.DozerBeanMapperBuilder; @@ -6,10 +23,7 @@ import com.github.dozermapper.core.Mapper; import java.util.*; /** - * Bean util - * - * @author chen.ma - * @date 2021/3/19 15:40 + * Bean util. */ public class BeanUtil { @@ -50,5 +64,4 @@ public class BeanUtil { }) .orElse(null); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ClassUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ClassUtil.java index e38019b5..24e4bd27 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ClassUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ClassUtil.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import java.util.Objects; /** * Class util. - * - * @author chen.ma - * @date 2021/6/23 19:03 */ public class ClassUtil { @@ -19,5 +33,4 @@ public class ClassUtil { Objects.requireNonNull(cls, "cls"); return cls.getCanonicalName(); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ConfigExecutor.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ConfigExecutor.java index 0e8267ca..00a58039 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ConfigExecutor.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/ConfigExecutor.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import cn.hippo4j.common.executor.ExecutorFactory; @@ -6,16 +23,15 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import static cn.hippo4j.common.constant.Constants.DEFAULT_GROUP; + /** * Config executor. - * - * @author chen.ma - * @date 2021/6/23 18:33 */ public class ConfigExecutor { private static final ScheduledExecutorService LONG_POLLING_EXECUTOR = ExecutorFactory.Managed - .newSingleScheduledExecutorService("default group", r -> new Thread(r, "long-polling")); + .newSingleScheduledExecutorService(DEFAULT_GROUP, r -> new Thread(r, "server.long.polling")); public static void executeLongPolling(Runnable runnable) { LONG_POLLING_EXECUTOR.execute(runnable); @@ -28,5 +44,4 @@ public class ConfigExecutor { public static void scheduleLongPolling(Runnable runnable, long initialDelay, long period, TimeUnit unit) { LONG_POLLING_EXECUTOR.scheduleWithFixedDelay(runnable, initialDelay, period, unit); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/EnvUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/EnvUtil.java new file mode 100644 index 00000000..2e78d7dd --- /dev/null +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/EnvUtil.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +package cn.hippo4j.config.toolkit; + +import org.apache.commons.lang3.StringUtils; + +import java.nio.file.Paths; +import java.util.Objects; + +/** + * Env Util. + */ +public class EnvUtil { + + public static final String HIPPO4J_HOME_KEY = "hippo4j.home"; + + public static final String STANDALONE_MODE_PROPERTY_NAME = "hippo4j.standalone"; + + private static String HIPPO4J_HOME_PATH = null; + + private static Boolean IS_STANDALONE = null; + + /** + * Get hippo4j home. + * + * @return + */ + public static String getHippo4JHome() { + if (StringUtils.isBlank(HIPPO4J_HOME_PATH)) { + String hippo4jHome = System.getProperty(HIPPO4J_HOME_KEY); + if (StringUtils.isBlank(hippo4jHome)) { + hippo4jHome = Paths.get(System.getProperty("user.home"), "hippo4j").toString(); + } + return hippo4jHome; + } + return HIPPO4J_HOME_PATH; + } + + /** + * Standalone mode or not. + * + * @return + */ + public static boolean getStandaloneMode() { + if (Objects.isNull(IS_STANDALONE)) { + IS_STANDALONE = Boolean.getBoolean(STANDALONE_MODE_PROPERTY_NAME); + } + return IS_STANDALONE; + } +} diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java index d153ffa0..0df8bdac 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/MapUtil.java @@ -1,21 +1,32 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import cn.hutool.core.collection.CollUtil; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.function.BiFunction; -import java.util.stream.Collectors; /** * Map util. - * - * @author chen.ma - * @date 2021/6/23 19:09 */ public class MapUtil { @@ -25,7 +36,6 @@ public class MapUtil { Objects.requireNonNull(mappingFunction, "mappingFunction"); Objects.requireNonNull(param1, "param1"); Objects.requireNonNull(param2, "param2"); - Object val = target.get(key); if (val == null) { Object ret = mappingFunction.apply(param1, param2); @@ -35,9 +45,8 @@ public class MapUtil { return val; } - /** - * 根据 Key 进行模糊匹配. + * Fuzzy matching based on Key. * * @param sourceMap * @param filters @@ -48,18 +57,16 @@ public class MapUtil { if (CollUtil.isEmpty(sourceMap)) { return resultList; } - sourceMap.forEach((key, val) -> { if (checkKey(key, filters)) { resultList.add(key); } }); - return resultList; } /** - * 匹配想要查询的字符. + * Match the characters you want to query. * * @param key * @param filters @@ -72,5 +79,4 @@ public class MapUtil { return false; } } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/Md5ConfigUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/Md5ConfigUtil.java index feef9fe7..bb0ae38a 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/Md5ConfigUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/Md5ConfigUtil.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import cn.hippo4j.common.toolkit.GroupKey; @@ -17,12 +34,8 @@ import java.util.Map; import static cn.hippo4j.common.constant.Constants.LINE_SEPARATOR; import static cn.hippo4j.common.constant.Constants.WORD_SEPARATOR; - /** * Md5 config util. - * - * @author chen.ma - * @date 2021/6/21 18:32 */ public class Md5ConfigUtil { @@ -50,19 +63,17 @@ public class Md5ConfigUtil { public static List compareMd5(HttpServletRequest request, Map clientMd5Map) { List changedGroupKeys = new ArrayList(); clientMd5Map.forEach((key, val) -> { - String remoteIp = RequestUtil.getRemoteIp(request); - boolean isUpdateData = ConfigCacheService.isUpdateData(key, val, remoteIp); + String clientIdentify = RequestUtil.getClientIdentify(request); + boolean isUpdateData = ConfigCacheService.isUpdateData(key, val, clientIdentify); if (!isUpdateData) { changedGroupKeys.add(key); } }); - return changedGroupKeys; } public static Map getClientMd5Map(String configKeysString) { Map md5Map = new HashMap(5); - if (null == configKeysString || "".equals(configKeysString)) { return md5Map; } @@ -83,12 +94,10 @@ public class Md5ConfigUtil { endValue = configKeysString.substring(start, i); } start = i + 1; - String groupKey = getKey(tmpList.get(0), tmpList.get(1), tmpList.get(2), tmpList.get(3)); groupKey = SingletonRepository.DataIdGroupIdCache.getSingleton(groupKey); md5Map.put(groupKey, endValue); tmpList.clear(); - // Protect malformed messages if (md5Map.size() > 10000) { throw new IllegalArgumentException("invalid protocol, too much listener"); @@ -116,7 +125,6 @@ public class Md5ConfigUtil { GroupKey.urlEncode(tenant, sb); sb.append("+").append(identify); } - return sb.toString(); } @@ -124,9 +132,7 @@ public class Md5ConfigUtil { if (null == changedGroupKeys) { return ""; } - StringBuilder sb = new StringBuilder(); - for (String groupKey : changedGroupKeys) { String[] dataIdGroupId = GroupKey.parseKey(groupKey); sb.append(dataIdGroupId[0]); @@ -141,8 +147,6 @@ public class Md5ConfigUtil { } sb.append(LINE_SEPARATOR); } - return URLEncoder.encode(sb.toString(), "UTF-8"); } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java index cd4a4075..85d369cf 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/RequestUtil.java @@ -1,6 +1,23 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; -import org.springframework.util.StringUtils; +import cn.hutool.core.util.StrUtil; import javax.servlet.http.HttpServletRequest; @@ -8,9 +25,6 @@ import static cn.hippo4j.common.constant.Constants.LONG_PULLING_CLIENT_IDENTIFIC /** * Request util. - * - * @author chen.ma - * @date 2021/6/23 18:28 */ public class RequestUtil { @@ -20,14 +34,8 @@ public class RequestUtil { private static final String X_FORWARDED_FOR_SPLIT_SYMBOL = ","; - public static String getRemoteIp(HttpServletRequest request) { - String xForwardedFor = request.getHeader(X_FORWARDED_FOR); - if (!StringUtils.isEmpty(xForwardedFor)) { - return xForwardedFor.split(X_FORWARDED_FOR_SPLIT_SYMBOL)[0].trim(); - } - String nginxHeader = request.getHeader(X_REAL_IP); - String ipPort = request.getHeader(LONG_PULLING_CLIENT_IDENTIFICATION); - return StringUtils.isEmpty(nginxHeader) ? ipPort : nginxHeader; + public static String getClientIdentify(HttpServletRequest request) { + String identify = request.getHeader(LONG_PULLING_CLIENT_IDENTIFICATION); + return StrUtil.isBlank(identify) ? "" : identify; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SimpleReadWriteLock.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SimpleReadWriteLock.java index 7b69a0fc..45cd23ef 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SimpleReadWriteLock.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SimpleReadWriteLock.java @@ -1,10 +1,24 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; /** * Simple read write lock. - * - * @author chen.ma - * @date 2021/6/24 21:26 */ public class SimpleReadWriteLock { @@ -43,5 +57,4 @@ public class SimpleReadWriteLock { private boolean isFree() { return status == 0; } - } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SingletonRepository.java b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SingletonRepository.java index 4f82e85b..12885bd0 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SingletonRepository.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/toolkit/SingletonRepository.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.config.toolkit; import java.util.concurrent.ConcurrentHashMap; /** * Singleton repository. - * - * @author chen.ma - * @date 2021/6/24 21:28 */ public class SingletonRepository { @@ -37,5 +51,4 @@ public class SingletonRepository { static SingletonRepository cache = new SingletonRepository(); } - } diff --git a/hippo4j-console/.gitignore b/hippo4j-console/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-console/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-console/pom.xml b/hippo4j-console/pom.xml index 7fba1f01..dbadd05e 100644 --- a/hippo4j-console/pom.xml +++ b/hippo4j-console/pom.xml @@ -2,18 +2,12 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-console - jar - - ${project.artifactId} - ${project.artifactId} true @@ -23,16 +17,29 @@ cn.hippo4j hippo4j-config + ${revision} cn.hippo4j hippo4j-discovery + ${revision} cn.hippo4j hippo4j-auth + ${revision} + + + + org.hibernate.validator + hibernate-validator + + + + cn.hutool + hutool-all @@ -44,5 +51,4 @@ - diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/config/GlobalExceptionHandler.java b/hippo4j-console/src/main/java/cn/hippo4j/console/config/GlobalExceptionHandler.java index 87216167..9b0ab566 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/config/GlobalExceptionHandler.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/config/GlobalExceptionHandler.java @@ -1,36 +1,69 @@ +/* + * 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. + */ + package cn.hippo4j.console.config; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.common.web.exception.AbstractException; import cn.hippo4j.common.web.exception.ServiceException; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; +import java.util.Optional; /** - * 全局异常捕获器. - * - * @author chen.ma - * @date 2021/11/18 22:18 + * Global exception handler. */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { - @ExceptionHandler(value = {ServiceException.class}) - public Result serviceException(HttpServletRequest request, ServiceException ex) { + @ExceptionHandler(value = {AbstractException.class}) + public Result serviceException(HttpServletRequest request, AbstractException ex) { if (ex.getCause() != null) { log.error("[{}] {} [ex] {}", request.getMethod(), request.getRequestURL().toString(), ex.toString(), ex.getCause()); return Results.failure(ex); } - log.info("[{}] {} [ex] {}", request.getMethod(), request.getRequestURL().toString(), ex.toString()); return Results.failure(ex); } + @SneakyThrows + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public Result validExceptionHandler(HttpServletRequest request, MethodArgumentNotValidException ex) { + BindingResult bindingResult = ex.getBindingResult(); + FieldError firstFieldError = CollectionUtil.getFirst(bindingResult.getFieldErrors()); + String exceptionStr = Optional.ofNullable(firstFieldError) + .map(FieldError::getDefaultMessage) + .orElse(StringUtil.EMPTY); + log.error("[{}] {} [ex] {}", request.getMethod(), getUrl(request), exceptionStr); + return Results.failure(new ServiceException(exceptionStr)); + } + @ExceptionHandler(value = Throwable.class) public Result defaultErrorHandler(HttpServletRequest request, Throwable throwable) { log.error("[{}] {} ", request.getMethod(), getUrl(request), throwable); @@ -41,8 +74,6 @@ public class GlobalExceptionHandler { if (StringUtils.isEmpty(request.getQueryString())) { return request.getRequestURL().toString(); } - return request.getRequestURL().toString() + "?" + request.getQueryString(); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/config/WebConfig.java b/hippo4j-console/src/main/java/cn/hippo4j/console/config/WebConfig.java index fe9296b0..e9b8aaf6 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/config/WebConfig.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/config/WebConfig.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.config; import org.springframework.context.annotation.Configuration; @@ -6,9 +23,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * Web config. - * - * @author chen.ma - * @date 2021/11/9 22:56 */ @Configuration public class WebConfig implements WebMvcConfigurer { @@ -18,5 +32,4 @@ public class WebConfig implements WebMvcConfigurer { registry.addResourceHandler("/index.html").addResourceLocations("classpath:/static/index.html"); registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/static/"); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ClientCloseHookController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ClientCloseHookController.java new file mode 100644 index 00000000..cf7a66d5 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ClientCloseHookController.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.console.controller; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * Client close hook controller. + */ +@RestController +@RequestMapping(Constants.BASE_PATH + "/client/close") +public class ClientCloseHookController { + + @PostMapping + public Result clientCloseHook(@RequestBody ClientCloseHookExecute.ClientCloseHookReq req) { + Map clientCloseHookExecuteMap = ApplicationContextHolder.getBeansOfType(ClientCloseHookExecute.class); + clientCloseHookExecuteMap.forEach((key, execute) -> execute.closeHook(req)); + return Results.success(); + } +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/DashboardController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/DashboardController.java index de51d2ed..3aca1125 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/DashboardController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/DashboardController.java @@ -1,9 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; -import cn.hippo4j.console.model.ChartInfo; +import cn.hippo4j.console.model.*; import cn.hippo4j.console.service.DashboardService; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -12,9 +29,6 @@ import org.springframework.web.bind.annotation.RestController; /** * Dash board controller. - * - * @author chen.ma - * @date 2021/11/10 21:03 */ @RestController @AllArgsConstructor @@ -28,4 +42,27 @@ public class DashboardController { return Results.success(dashboardService.getChartInfo()); } + @GetMapping("/line/chart") + public Result lineChart() { + LineChartInfo lineChatInfo = dashboardService.getLineChatInfo(); + return Results.success(lineChatInfo); + } + + @GetMapping("/tenant/chart") + public Result tenantChart() { + TenantChart tenantChart = dashboardService.getTenantChart(); + return Results.success(tenantChart); + } + + @GetMapping("/pie/chart") + public Result pieChart() { + PieChartInfo pieChartInfo = dashboardService.getPieChart(); + return Results.success(pieChartInfo); + } + + @GetMapping("/ranking") + public Result rankingChart() { + RankingChart rankingChart = dashboardService.getRankingChart(); + return Results.success(rankingChart); + } } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/HealthCheckController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/HealthCheckController.java new file mode 100644 index 00000000..3ba4ef60 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/HealthCheckController.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.console.controller; + +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static cn.hippo4j.common.constant.Constants.UP; + +/** + * Health check controller. + */ +@Slf4j +@RestController +@AllArgsConstructor +@RequestMapping(Constants.BASE_PATH + "/health/check") +public class HealthCheckController { + + @GetMapping + public Result healthCheck() { + return Results.success(UP); + } +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ItemController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ItemController.java index f658bbd3..1b2f71d2 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ItemController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ItemController.java @@ -1,6 +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. + */ + package cn.hippo4j.console.controller; -import com.baomidou.mybatisplus.core.metadata.IPage; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; @@ -9,14 +25,13 @@ import cn.hippo4j.config.model.biz.item.ItemRespDTO; import cn.hippo4j.config.model.biz.item.ItemSaveReqDTO; import cn.hippo4j.config.model.biz.item.ItemUpdateReqDTO; import cn.hippo4j.config.service.biz.ItemService; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** * Item controller. - * - * @author chen.ma - * @date 2021/6/29 21:42 */ @RestController @AllArgsConstructor @@ -36,7 +51,7 @@ public class ItemController { } @PostMapping("/save") - public Result saveItem(@RequestBody ItemSaveReqDTO reqDTO) { + public Result saveItem(@Validated @RequestBody ItemSaveReqDTO reqDTO) { itemService.saveItem(reqDTO); return Results.success(); } @@ -52,5 +67,4 @@ public class ItemController { itemService.deleteItem(tenantId, itemId); return Results.success(); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/LogRecordController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/LogRecordController.java index 62825a1d..de972232 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/LogRecordController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/LogRecordController.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; import cn.hippo4j.common.constant.Constants; @@ -5,7 +22,7 @@ import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.model.biz.log.LogRecordQueryReqDTO; import cn.hippo4j.config.model.biz.log.LogRecordRespDTO; -import cn.hippo4j.config.service.biz.LogRecordBizService; +import cn.hippo4j.config.service.biz.OperationLogService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -15,20 +32,16 @@ import org.springframework.web.bind.annotation.RestController; /** * Log record controller. - * - * @author chen.ma - * @date 2021/11/17 21:10 */ @RestController @AllArgsConstructor @RequestMapping(Constants.BASE_PATH + "/log") public class LogRecordController { - private final LogRecordBizService logRecordBizService; + private final OperationLogService operationLogService; @PostMapping("/query/page") public Result> queryPage(@RequestBody LogRecordQueryReqDTO queryReqDTO) { - return Results.success(logRecordBizService.queryPage(queryReqDTO)); + return Results.success(operationLogService.queryPage(queryReqDTO)); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/NotifyController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/NotifyController.java index 8b82b5f5..203b2f9f 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/NotifyController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/NotifyController.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; import cn.hippo4j.common.constant.Constants; @@ -15,10 +32,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; /** - * 通知管理. - * - * @author chen.ma - * @date 2021/11/17 22:00 + * Notify controller. */ @RestController @AllArgsConstructor @@ -62,5 +76,4 @@ public class NotifyController { notifyService.enableNotify(id, status); return Results.success(); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/PermissionController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/PermissionController.java index 94a19bfb..89715e6e 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/PermissionController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/PermissionController.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -10,9 +27,6 @@ import org.springframework.web.bind.annotation.*; /** * Permission controller. - * - * @author chen.ma - * @date 2021/10/30 22:08 */ @RestController @AllArgsConstructor @@ -38,5 +52,4 @@ public class PermissionController { permissionService.deletePermission(role, resource, action); return Results.success(); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/RoleController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/RoleController.java index 06648324..5758ef2f 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/RoleController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/RoleController.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -12,9 +29,6 @@ import java.util.List; /** * Role controller. - * - * @author chen.ma - * @date 2021/10/30 22:16 */ @RestController @AllArgsConstructor @@ -46,5 +60,4 @@ public class RoleController { List resultRole = roleService.getRoleLike(role); return Results.success(resultRole); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/TenantController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/TenantController.java index 9562da48..ce259601 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/TenantController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/TenantController.java @@ -1,6 +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. + */ + package cn.hippo4j.console.controller; -import com.baomidou.mybatisplus.core.metadata.IPage; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; @@ -9,14 +25,13 @@ import cn.hippo4j.config.model.biz.tenant.TenantRespDTO; import cn.hippo4j.config.model.biz.tenant.TenantSaveReqDTO; import cn.hippo4j.config.model.biz.tenant.TenantUpdateReqDTO; import cn.hippo4j.config.service.biz.TenantService; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** * Tenant controller. - * - * @author chen.ma - * @date 2021/6/25 18:31 */ @RestController @AllArgsConstructor @@ -37,7 +52,7 @@ public class TenantController { } @PostMapping("/save") - public Result saveNameSpace(@RequestBody TenantSaveReqDTO reqDTO) { + public Result saveNameSpace(@Validated @RequestBody TenantSaveReqDTO reqDTO) { tenantService.saveTenant(reqDTO); return Results.success(Boolean.TRUE); } @@ -53,5 +68,4 @@ public class TenantController { tenantService.deleteTenantById(tenantId); return Results.success(Boolean.TRUE); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java new file mode 100644 index 00000000..f743ae85 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolAdapterController.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.console.controller; + +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterReqDTO; +import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO; +import cn.hippo4j.config.service.ThreadPoolAdapterService; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.http.HttpUtil; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Set; + +import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT; +import static cn.hippo4j.common.constant.Constants.REGISTER_ADAPTER_BASE_PATH; + +/** + * Thread-pool adapter controller. + */ +@AllArgsConstructor +@RestController("threadPoolAdapterConsoleController") +public class ThreadPoolAdapterController { + + private final ThreadPoolAdapterService threadPoolAdapterService; + + @GetMapping(REGISTER_ADAPTER_BASE_PATH + "/query") + public Result> queryAdapterThreadPool(ThreadPoolAdapterReqDTO requestParameter) { + List result = threadPoolAdapterService.query(requestParameter); + return Results.success(result); + } + + @GetMapping(REGISTER_ADAPTER_BASE_PATH + "/query/key") + public Result> queryAdapterThreadPoolThreadPoolKey(ThreadPoolAdapterReqDTO requestParameter) { + Set result = threadPoolAdapterService.queryThreadPoolKey(requestParameter); + return Results.success(result); + } + + @PostMapping(REGISTER_ADAPTER_BASE_PATH + "/update") + public Result updateAdapterThreadPool(@RequestBody ThreadPoolAdapterReqDTO requestParameter) { + for (String each : requestParameter.getClientAddressList()) { + String urlString = StrBuilder.create("http://", each, "/adapter/thread-pool/update").toString(); + HttpUtil.post(urlString, JSONUtil.toJSONString(requestParameter), HTTP_EXECUTE_TIMEOUT); + } + return Results.success(); + } + +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java index c5d831a1..3ed9853a 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/ThreadPoolController.java @@ -1,10 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; -import cn.hippo4j.console.model.ThreadPoolInstanceInfo; -import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; import cn.hippo4j.config.model.CacheItem; @@ -15,22 +31,30 @@ import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.biz.ThreadPoolService; import cn.hippo4j.config.toolkit.BeanUtil; +import cn.hippo4j.console.model.ThreadPoolInstanceInfo; +import cn.hippo4j.console.model.WebThreadPoolReqDTO; +import cn.hippo4j.console.model.WebThreadPoolRespDTO; import cn.hippo4j.discovery.core.BaseInstanceRegistry; import cn.hippo4j.discovery.core.Lease; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT; import static cn.hippo4j.common.toolkit.ContentUtil.getGroupKey; /** * Thread pool controller. - * - * @author chen.ma - * @date 2021/6/30 20:54 */ @RestController @AllArgsConstructor @@ -53,45 +77,122 @@ public class ThreadPoolController { @PostMapping("/save_or_update") public Result saveOrUpdateThreadPoolConfig(@RequestParam(value = "identify", required = false) String identify, - @RequestBody ThreadPoolSaveOrUpdateReqDTO reqDTO) { + @Validated @RequestBody ThreadPoolSaveOrUpdateReqDTO reqDTO) { threadPoolService.saveOrUpdateThreadPoolConfig(identify, reqDTO); return Results.success(); } - @GetMapping("/list/instance/{itemId}/{tpId}") - public Result> listInstance(@PathVariable("itemId") String itemId, @PathVariable("tpId") String tpId) { + @DeleteMapping("/delete") + public Result deletePool(@RequestBody ThreadPoolDelReqDTO reqDTO) { + threadPoolService.deletePool(reqDTO); + return Results.success(); + } + + @PostMapping("/alarm/enable/{id}/{isAlarm}") + public Result alarmEnable(@PathVariable("id") String id, @PathVariable("isAlarm") Integer isAlarm) { + threadPoolService.alarmEnable(id, isAlarm); + return Results.success(); + } + + @GetMapping("/run/state/{tpId}") + public Result runState(@PathVariable("tpId") String tpId, + @RequestParam(value = "clientAddress") String clientAddress) { + String urlString = StrBuilder.create("http://", clientAddress, "/run/state/", tpId).toString(); + String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + Result result = JSONUtil.parseObject(data, Result.class); + return result; + } + + @GetMapping("/run/thread/state/{tpId}") + public Result runThreadState(@PathVariable("tpId") String tpId, + @RequestParam(value = "clientAddress") String clientAddress) { + String urlString = StrBuilder.create("http://", clientAddress, "/run/thread/state/", tpId).toString(); + String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + Result result = JSONUtil.parseObject(data, Result.class); + return result; + } + + @GetMapping("/list/client/instance/{itemId}") + public Result listClientInstance(@PathVariable("itemId") String itemId) { List> leases = baseInstanceRegistry.listInstance(itemId); Lease first = CollUtil.getFirst(leases); if (first == null) { return Results.success(Lists.newArrayList()); } + List returnThreadPool = Lists.newArrayList(); + for (Lease each : leases) { + Result poolBaseState; + try { + poolBaseState = getPoolBaseState(each.getHolder().getCallBackUrl()); + } catch (Throwable ignored) { + continue; + } + Object data = poolBaseState.getData(); + if (data == null) { + continue; + } + WebThreadPoolRespDTO result = BeanUtil.convert(data, WebThreadPoolRespDTO.class); + result.setActive(each.getHolder().getActive()); + result.setIdentify(each.getHolder().getIdentify()); + result.setClientAddress(each.getHolder().getCallBackUrl()); + returnThreadPool.add(result); + } + return Results.success(returnThreadPool); + } + + @GetMapping("/web/base/info") + public Result getPoolBaseState(@RequestParam(value = "clientAddress") String clientAddress) { + String urlString = StrBuilder.create("http://", clientAddress, "/web/base/info").toString(); + String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + Result result = JSONUtil.parseObject(data, Result.class); + return result; + } + + @GetMapping("/web/run/state") + public Result getPoolRunState(@RequestParam(value = "clientAddress") String clientAddress) { + String urlString = StrBuilder.create("http://", clientAddress, "/web/run/state").toString(); + String data = HttpUtil.get(urlString, HTTP_EXECUTE_TIMEOUT); + Result result = JSONUtil.parseObject(data, Result.class); + return result; + } + + @PostMapping("/web/update/pool") + public Result updateWebThreadPool(@RequestBody WebThreadPoolReqDTO requestParam) { + for (String each : requestParam.getClientAddressList()) { + String urlString = StrBuilder.create("http://", each, "/web/update/pool").toString(); + HttpUtil.post(urlString, JSONUtil.toJSONString(requestParam), HTTP_EXECUTE_TIMEOUT); + } + return Results.success(); + } + @GetMapping("/list/instance/{itemId}/{tpId}") + public Result> listInstance(@PathVariable("itemId") String itemId, + @PathVariable("tpId") String tpId) { + List> leases = baseInstanceRegistry.listInstance(itemId); + Lease first = CollUtil.getFirst(leases); + if (first == null) { + return Results.success(Lists.newArrayList()); + } InstanceInfo holder = first.getHolder(); String itemTenantKey = holder.getGroupKey(); String groupKey = getGroupKey(tpId, itemTenantKey); Map content = ConfigCacheService.getContent(groupKey); - + Map activeMap = + leases.stream().map(each -> each.getHolder()).filter(each -> StringUtil.isNotBlank(each.getActive())) + .collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getActive)); + Map clientBasePathMap = leases.stream().map(each -> each.getHolder()) + .filter(each -> StringUtil.isNotBlank(each.getClientBasePath())) + .collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getClientBasePath)); List returnThreadPool = Lists.newArrayList(); content.forEach((key, val) -> { - ThreadPoolInstanceInfo threadPoolInstanceInfo = BeanUtil.convert(val.configAllInfo, ThreadPoolInstanceInfo.class); + ThreadPoolInstanceInfo threadPoolInstanceInfo = + BeanUtil.convert(val.configAllInfo, ThreadPoolInstanceInfo.class); + threadPoolInstanceInfo.setClientAddress(StrUtil.subBefore(key, Constants.IDENTIFY_SLICER_SYMBOL, false)); + threadPoolInstanceInfo.setActive(activeMap.get(key)); threadPoolInstanceInfo.setIdentify(key); - threadPoolInstanceInfo.setClientBasePath(holder.getClientBasePath()); + threadPoolInstanceInfo.setClientBasePath(clientBasePathMap.get(key)); returnThreadPool.add(threadPoolInstanceInfo); }); - return Results.success(returnThreadPool); } - - @DeleteMapping("/delete") - public Result deletePool(@RequestBody ThreadPoolDelReqDTO reqDTO) { - threadPoolService.deletePool(reqDTO); - return Results.success(); - } - - @PostMapping("/alarm/enable/{id}/{isAlarm}") - public Result alarmEnable(@PathVariable("id") String id, @PathVariable("isAlarm") Integer isAlarm) { - threadPoolService.alarmEnable(id, isAlarm); - return Results.success(); - } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/UserController.java b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/UserController.java index b9d1b322..dea073cb 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/controller/UserController.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/controller/UserController.java @@ -1,23 +1,42 @@ +/* + * 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. + */ + package cn.hippo4j.console.controller; -import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.hippo4j.auth.model.UserInfo; import cn.hippo4j.auth.model.biz.user.UserQueryPageReqDTO; import cn.hippo4j.auth.model.biz.user.UserReqDTO; import cn.hippo4j.auth.model.biz.user.UserRespDTO; +import cn.hippo4j.auth.security.AuthManager; import cn.hippo4j.auth.service.UserService; import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.model.TokenInfo; import cn.hippo4j.common.web.base.Result; import cn.hippo4j.common.web.base.Results; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; +import static cn.hippo4j.auth.constant.Constants.TOKEN_VALIDITY_IN_SECONDS; + /** * User controller. - * - * @author chen.ma - * @date 2021/10/30 21:15 */ @RestController @AllArgsConstructor @@ -26,12 +45,27 @@ public class UserController { private final UserService userService; + private final AuthManager authManager; + + @PostMapping("/apply/token") + public Result applyToken(@RequestBody UserInfo userInfo) { + String accessToken = authManager.resolveTokenFromUser(userInfo.getUserName(), userInfo.getPassword()); + TokenInfo tokenInfo = new TokenInfo(accessToken, TOKEN_VALIDITY_IN_SECONDS); + return Results.success(tokenInfo); + } + @PostMapping("/page") public Result> listUser(@RequestBody UserQueryPageReqDTO reqDTO) { IPage resultUserPage = userService.listUser(reqDTO); return Results.success(resultUserPage); } + @GetMapping("/info/{username}") + public Result userInfo(@PathVariable("username") String username) { + UserRespDTO userRespDTO = userService.getUser(new UserReqDTO().setUserName(username)); + return Results.success(userRespDTO); + } + @PostMapping("/add") public Result addUser(@RequestBody UserReqDTO reqDTO) { userService.addUser(reqDTO); @@ -55,5 +89,4 @@ public class UserController { List resultUserNames = userService.getUserLikeUsername(userName); return Results.success(resultUserNames); } - } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/ChartInfo.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/ChartInfo.java index c17fbc0c..2d9e378f 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/model/ChartInfo.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/ChartInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.model; import lombok.Data; @@ -5,27 +22,28 @@ import lombok.experimental.Accessors; /** * Char info. - * - * @author chen.ma - * @date 2021/11/10 21:06 */ @Data @Accessors(chain = true) public class ChartInfo { /** - * 租户统计 + * tenantCount */ private Integer tenantCount; /** - * 项目统计 + * itemCount */ private Integer itemCount; /** - * 线程池统计 + * threadPoolCount */ private Integer threadPoolCount; + /** + * threadPoolInstanceCount + */ + private Integer threadPoolInstanceCount; } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/LineChartInfo.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/LineChartInfo.java new file mode 100644 index 00000000..342f0251 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/LineChartInfo.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Line chart info. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class LineChartInfo { + + /** + * oneList + */ + private List oneList; + + /** + * twoList + */ + private List twoList; + + /** + * threeList + */ + private List threeList; + + /** + * fourList + */ + private List fourList; +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/PieChartInfo.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/PieChartInfo.java new file mode 100644 index 00000000..129eb02b --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/PieChartInfo.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * Pie chart info. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PieChartInfo { + + /** + * itemIds + */ + private List itemIds; + + /** + * pieDataList + */ + private List> pieDataList; +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/RankingChart.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/RankingChart.java new file mode 100644 index 00000000..9a079300 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/RankingChart.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Ranking chart. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RankingChart { + + /** + * rankingChartInfoList + */ + private List rankingChartInfoList; + + @Data + public static class RankingChartInfo { + + /** + * groupKey + */ + private String groupKey; + + /** + * completedTaskCount + */ + private Long maxCompletedTaskCount; + + /** + * inst + */ + private Integer inst; + } +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/TenantChart.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/TenantChart.java new file mode 100644 index 00000000..690ef792 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/TenantChart.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * Tenant chart. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TenantChart { + + /** + * tenantCharts + */ + private List> tenantCharts; +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/ThreadPoolInstanceInfo.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/ThreadPoolInstanceInfo.java index 69ebc867..1e0efba0 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/model/ThreadPoolInstanceInfo.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/ThreadPoolInstanceInfo.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.console.model; import cn.hippo4j.config.model.ConfigAllInfo; @@ -5,13 +22,15 @@ import lombok.Data; /** * ThreadPool instance info. - * - * @author chen.ma - * @date 2021/11/11 23:39 */ @Data public class ThreadPoolInstanceInfo extends ConfigAllInfo { + /** + * clientAddress + */ + private String clientAddress; + /** * identify */ @@ -22,4 +41,8 @@ public class ThreadPoolInstanceInfo extends ConfigAllInfo { */ private String clientBasePath; + /** + * active + */ + private String active; } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolReqDTO.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolReqDTO.java new file mode 100644 index 00000000..9576da15 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolReqDTO.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.Data; + +import java.util.List; + +/** + * Web thread-pool req dto. + */ +@Data +public class WebThreadPoolReqDTO { + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Keep alive time + */ + private Integer keepAliveTime; + + /** + * Client address list + */ + private List clientAddressList; +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolRespDTO.java b/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolRespDTO.java new file mode 100644 index 00000000..b32cb9d2 --- /dev/null +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/model/WebThreadPoolRespDTO.java @@ -0,0 +1,72 @@ +/* + * 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. + */ + +package cn.hippo4j.console.model; + +import lombok.Data; + +/** + * Web thread-pool resp dto. + */ +@Data +public class WebThreadPoolRespDTO { + + /** + * Active + */ + private String active; + + /** + * Identify + */ + private String identify; + + /** + * Client address + */ + private String clientAddress; + + /** + * Core size + */ + private Integer coreSize; + + /** + * Maximum size + */ + private Integer maximumSize; + + /** + * Queue type + */ + private String queueType; + + /** + * Queue capacity + */ + private Integer queueCapacity; + + /** + * Rejected name + */ + private String rejectedName; + + /** + * Keep alive time + */ + private Long keepAliveTime; +} diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/service/DashboardService.java b/hippo4j-console/src/main/java/cn/hippo4j/console/service/DashboardService.java index d525d47f..72fea63f 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/service/DashboardService.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/service/DashboardService.java @@ -1,12 +1,26 @@ +/* + * 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. + */ + package cn.hippo4j.console.service; -import cn.hippo4j.console.model.ChartInfo; +import cn.hippo4j.console.model.*; /** * Dashboard service. - * - * @author chen.ma - * @date 2021/11/1 21:06 */ public interface DashboardService { @@ -17,4 +31,31 @@ public interface DashboardService { */ ChartInfo getChartInfo(); + /** + * Fet line chat info. + * + * @return + */ + LineChartInfo getLineChatInfo(); + + /** + * Get tenant chart. + * + * @return + */ + TenantChart getTenantChart(); + + /** + * Get pie chart. + * + * @return + */ + PieChartInfo getPieChart(); + + /** + * Get ranking chart. + * + * @return + */ + RankingChart getRankingChart(); } diff --git a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java index 1a67c712..a721cabb 100644 --- a/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java +++ b/hippo4j-console/src/main/java/cn/hippo4j/console/service/impl/DashboardServiceImpl.java @@ -1,23 +1,55 @@ +/* + * 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. + */ + package cn.hippo4j.console.service.impl; -import cn.hippo4j.console.model.ChartInfo; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import cn.hippo4j.config.enums.DelEnum; +import cn.hippo4j.common.enums.DelEnum; +import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.GroupKey; import cn.hippo4j.config.mapper.ConfigInfoMapper; +import cn.hippo4j.config.mapper.HisRunDataMapper; import cn.hippo4j.config.mapper.ItemInfoMapper; import cn.hippo4j.config.mapper.TenantInfoMapper; -import cn.hippo4j.config.model.ConfigAllInfo; -import cn.hippo4j.config.model.ItemInfo; -import cn.hippo4j.config.model.TenantInfo; +import cn.hippo4j.config.model.*; +import cn.hippo4j.config.service.ConfigCacheService; +import cn.hippo4j.console.model.*; import cn.hippo4j.console.service.DashboardService; +import cn.hippo4j.discovery.core.BaseInstanceRegistry; +import cn.hippo4j.discovery.core.Lease; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static cn.hippo4j.common.toolkit.ContentUtil.getGroupKey; + /** * Dashboard service impl. - * - * @author chen.ma - * @date 2021/11/10 21:08 */ @Service @AllArgsConstructor @@ -29,17 +61,121 @@ public class DashboardServiceImpl implements DashboardService { private final ConfigInfoMapper configInfoMapper; + private final HisRunDataMapper hisRunDataMapper; + + private final BaseInstanceRegistry baseInstanceRegistry; + @Override public ChartInfo getChartInfo() { Integer tenantCount = tenantInfoMapper.selectCount(Wrappers.lambdaQuery(TenantInfo.class).eq(TenantInfo::getDelFlag, DelEnum.NORMAL)); Integer itemCount = itemInfoMapper.selectCount(Wrappers.lambdaQuery(ItemInfo.class).eq(ItemInfo::getDelFlag, DelEnum.NORMAL)); Integer threadPoolCount = configInfoMapper.selectCount(Wrappers.lambdaQuery(ConfigAllInfo.class).eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL)); - ChartInfo chartInfo = new ChartInfo(); chartInfo.setTenantCount(tenantCount) .setItemCount(itemCount) - .setThreadPoolCount(threadPoolCount); + .setThreadPoolCount(threadPoolCount) + .setThreadPoolInstanceCount(ConfigCacheService.getTotal()); return chartInfo; } + @Override + public LineChartInfo getLineChatInfo() { + Date currentDate = new Date(); + DateTime startTime = DateUtil.offsetMinute(currentDate, -10); + List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolMaxRanking(startTime.getTime(), currentDate.getTime()); + List oneList = Lists.newArrayList(); + List twoList = Lists.newArrayList(); + List threeList = Lists.newArrayList(); + List fourList = Lists.newArrayList(); + ArrayList> lists = Lists.newArrayList(oneList, twoList, threeList, fourList); + for (int i = 0; i < threadPoolTaskRankings.size(); i++) { + List eachList = lists.get(i); + HisRunDataMapper.ThreadPoolTaskRanking taskRanking = threadPoolTaskRankings.get(i); + eachList.add(taskRanking.getTpId()); + eachList.add(taskRanking.getMaxQueueSize()); + eachList.add(taskRanking.getMaxRejectCount()); + eachList.add(taskRanking.getMaxCompletedTaskCount()); + } + return new LineChartInfo(oneList, twoList, threeList, fourList); + } + + @Override + public TenantChart getTenantChart() { + List> tenantChartList = Lists.newArrayList(); + List tenantInfos = tenantInfoMapper.selectList(Wrappers.lambdaQuery(TenantInfo.class).eq(TenantInfo::getDelFlag, DelEnum.NORMAL)); + for (TenantInfo tenant : tenantInfos) { + int tenantThreadPoolNum = 0; + LambdaQueryWrapper itemQueryWrapper = + Wrappers.lambdaQuery(ItemInfo.class).eq(ItemInfo::getTenantId, tenant.getTenantId()).eq(ItemInfo::getDelFlag, DelEnum.NORMAL).select(ItemInfo::getItemId); + List itemInfos = itemInfoMapper.selectList(itemQueryWrapper); + for (ItemInfo item : itemInfos) { + LambdaQueryWrapper threadPoolQueryWrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) + .eq(ConfigInfoBase::getItemId, item.getItemId()) + .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL); + Integer threadPoolCount = configInfoMapper.selectCount(threadPoolQueryWrapper); + tenantThreadPoolNum += threadPoolCount; + } + Dict dict = Dict.create().set("name", tenant.getTenantId()).set("value", tenantThreadPoolNum); + tenantChartList.add(dict); + } + List resultTenantChartList = tenantChartList.stream() + .sorted((one, two) -> (int) two.get("value") - (int) one.get("value")) + .limit(5) + .collect(Collectors.toList()); + return new TenantChart(resultTenantChartList); + } + + @Override + public PieChartInfo getPieChart() { + LambdaQueryWrapper itemQueryWrapper = Wrappers.lambdaQuery(ItemInfo.class).eq(ItemInfo::getDelFlag, DelEnum.NORMAL).select(ItemInfo::getItemId); + List itemNameList = itemInfoMapper.selectObjs(itemQueryWrapper); + List> pieDataList = Lists.newArrayList(); + for (Object each : itemNameList) { + LambdaQueryWrapper threadPoolQueryWrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) + .eq(ConfigInfoBase::getItemId, each) + .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL); + Integer threadPoolCount = configInfoMapper.selectCount(threadPoolQueryWrapper); + if (threadPoolCount != null) { + Dict dict = Dict.create().set("name", each).set("value", threadPoolCount); + pieDataList.add(dict); + } + } + pieDataList.sort((one, two) -> (int) two.get("value") - (int) one.get("value")); + List resultItemIds = Lists.newArrayList(); + List> resultPieDataList = pieDataList.stream() + .limit(5) + .map(each -> { + resultItemIds.add(each.get("name").toString()); + return each; + }) + .collect(Collectors.toList()); + return new PieChartInfo(resultItemIds, resultPieDataList); + } + + @Override + public RankingChart getRankingChart() { + Date currentDate = new Date(); + DateTime tenTime = DateUtil.offsetMinute(currentDate, -10); + List resultList = Lists.newArrayList(); + List threadPoolTaskRankings = hisRunDataMapper.queryThreadPoolTaskSumRanking(tenTime.getTime(), currentDate.getTime()); + threadPoolTaskRankings.forEach(each -> { + RankingChart.RankingChartInfo rankingChartInfo = new RankingChart.RankingChartInfo(); + rankingChartInfo.setMaxCompletedTaskCount(each.getMaxCompletedTaskCount()); + List> leases = baseInstanceRegistry.listInstance(each.getItemId()); + Lease first = CollUtil.getFirst(leases); + if (first == null) { + rankingChartInfo.setInst(0); + } else { + InstanceInfo holder = first.getHolder(); + String itemTenantKey = holder.getGroupKey(); + String groupKey = getGroupKey(each.getTpId(), itemTenantKey); + Map content = ConfigCacheService.getContent(groupKey); + rankingChartInfo.setInst(content.keySet().size()); + } + String keyTenant = GroupKey.getKeyTenant(each.getTenantId(), each.getItemId(), each.getTpId()); + rankingChartInfo.setGroupKey(keyTenant); + resultList.add(rankingChartInfo); + }); + return new RankingChart(resultList); + } } diff --git a/hippo4j-console/src/main/resources/static/favicon.ico b/hippo4j-console/src/main/resources/static/favicon.ico index ad413bec..264e6fc6 100644 Binary files a/hippo4j-console/src/main/resources/static/favicon.ico and b/hippo4j-console/src/main/resources/static/favicon.ico differ diff --git a/hippo4j-console/src/main/resources/static/index.html b/hippo4j-console/src/main/resources/static/index.html index 7800c3cd..d27ade6b 100644 --- a/hippo4j-console/src/main/resources/static/index.html +++ b/hippo4j-console/src/main/resources/static/index.html @@ -1 +1 @@ -Hippo4J Web
\ No newline at end of file +Hippo4J Web
\ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/app.0168504a.css b/hippo4j-console/src/main/resources/static/static/css/app.0168504a.css deleted file mode 100644 index e721678f..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/app.0168504a.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:element-icons;src:url(../../static/fonts/element-icons.535877f5.woff) format("woff"),url(../../static/fonts/element-icons.732389de.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\E6A0"}.el-icon-ice-cream-square:before{content:"\E6A3"}.el-icon-lollipop:before{content:"\E6A4"}.el-icon-potato-strips:before{content:"\E6A5"}.el-icon-milk-tea:before{content:"\E6A6"}.el-icon-ice-drink:before{content:"\E6A7"}.el-icon-ice-tea:before{content:"\E6A9"}.el-icon-coffee:before{content:"\E6AA"}.el-icon-orange:before{content:"\E6AB"}.el-icon-pear:before{content:"\E6AC"}.el-icon-apple:before{content:"\E6AD"}.el-icon-cherry:before{content:"\E6AE"}.el-icon-watermelon:before{content:"\E6AF"}.el-icon-grape:before{content:"\E6B0"}.el-icon-refrigerator:before{content:"\E6B1"}.el-icon-goblet-square-full:before{content:"\E6B2"}.el-icon-goblet-square:before{content:"\E6B3"}.el-icon-goblet-full:before{content:"\E6B4"}.el-icon-goblet:before{content:"\E6B5"}.el-icon-cold-drink:before{content:"\E6B6"}.el-icon-coffee-cup:before{content:"\E6B8"}.el-icon-water-cup:before{content:"\E6B9"}.el-icon-hot-water:before{content:"\E6BA"}.el-icon-ice-cream:before{content:"\E6BB"}.el-icon-dessert:before{content:"\E6BC"}.el-icon-sugar:before{content:"\E6BD"}.el-icon-tableware:before{content:"\E6BE"}.el-icon-burger:before{content:"\E6BF"}.el-icon-knife-fork:before{content:"\E6C1"}.el-icon-fork-spoon:before{content:"\E6C2"}.el-icon-chicken:before{content:"\E6C3"}.el-icon-food:before{content:"\E6C4"}.el-icon-dish-1:before{content:"\E6C5"}.el-icon-dish:before{content:"\E6C6"}.el-icon-moon-night:before{content:"\E6EE"}.el-icon-moon:before{content:"\E6F0"}.el-icon-cloudy-and-sunny:before{content:"\E6F1"}.el-icon-partly-cloudy:before{content:"\E6F2"}.el-icon-cloudy:before{content:"\E6F3"}.el-icon-sunny:before{content:"\E6F6"}.el-icon-sunset:before{content:"\E6F7"}.el-icon-sunrise-1:before{content:"\E6F8"}.el-icon-sunrise:before{content:"\E6F9"}.el-icon-heavy-rain:before{content:"\E6FA"}.el-icon-lightning:before{content:"\E6FB"}.el-icon-light-rain:before{content:"\E6FC"}.el-icon-wind-power:before{content:"\E6FD"}.el-icon-baseball:before{content:"\E712"}.el-icon-soccer:before{content:"\E713"}.el-icon-football:before{content:"\E715"}.el-icon-basketball:before{content:"\E716"}.el-icon-ship:before{content:"\E73F"}.el-icon-truck:before{content:"\E740"}.el-icon-bicycle:before{content:"\E741"}.el-icon-mobile-phone:before{content:"\E6D3"}.el-icon-service:before{content:"\E6D4"}.el-icon-key:before{content:"\E6E2"}.el-icon-unlock:before{content:"\E6E4"}.el-icon-lock:before{content:"\E6E5"}.el-icon-watch:before{content:"\E6FE"}.el-icon-watch-1:before{content:"\E6FF"}.el-icon-timer:before{content:"\E702"}.el-icon-alarm-clock:before{content:"\E703"}.el-icon-map-location:before{content:"\E704"}.el-icon-delete-location:before{content:"\E705"}.el-icon-add-location:before{content:"\E706"}.el-icon-location-information:before{content:"\E707"}.el-icon-location-outline:before{content:"\E708"}.el-icon-location:before{content:"\E79E"}.el-icon-place:before{content:"\E709"}.el-icon-discover:before{content:"\E70A"}.el-icon-first-aid-kit:before{content:"\E70B"}.el-icon-trophy-1:before{content:"\E70C"}.el-icon-trophy:before{content:"\E70D"}.el-icon-medal:before{content:"\E70E"}.el-icon-medal-1:before{content:"\E70F"}.el-icon-stopwatch:before{content:"\E710"}.el-icon-mic:before{content:"\E711"}.el-icon-copy-document:before{content:"\E718"}.el-icon-full-screen:before{content:"\E719"}.el-icon-switch-button:before{content:"\E71B"}.el-icon-aim:before{content:"\E71C"}.el-icon-crop:before{content:"\E71D"}.el-icon-odometer:before{content:"\E71E"}.el-icon-time:before{content:"\E71F"}.el-icon-bangzhu:before{content:"\E724"}.el-icon-close-notification:before{content:"\E726"}.el-icon-microphone:before{content:"\E727"}.el-icon-turn-off-microphone:before{content:"\E728"}.el-icon-position:before{content:"\E729"}.el-icon-postcard:before{content:"\E72A"}.el-icon-message:before{content:"\E72B"}.el-icon-chat-line-square:before{content:"\E72D"}.el-icon-chat-dot-square:before{content:"\E72E"}.el-icon-chat-dot-round:before{content:"\E72F"}.el-icon-chat-square:before{content:"\E730"}.el-icon-chat-line-round:before{content:"\E731"}.el-icon-chat-round:before{content:"\E732"}.el-icon-set-up:before{content:"\E733"}.el-icon-turn-off:before{content:"\E734"}.el-icon-open:before{content:"\E735"}.el-icon-connection:before{content:"\E736"}.el-icon-link:before{content:"\E737"}.el-icon-cpu:before{content:"\E738"}.el-icon-thumb:before{content:"\E739"}.el-icon-female:before{content:"\E73A"}.el-icon-male:before{content:"\E73B"}.el-icon-guide:before{content:"\E73C"}.el-icon-news:before{content:"\E73E"}.el-icon-price-tag:before{content:"\E744"}.el-icon-discount:before{content:"\E745"}.el-icon-wallet:before{content:"\E747"}.el-icon-coin:before{content:"\E748"}.el-icon-money:before{content:"\E749"}.el-icon-bank-card:before{content:"\E74A"}.el-icon-box:before{content:"\E74B"}.el-icon-present:before{content:"\E74C"}.el-icon-sell:before{content:"\E6D5"}.el-icon-sold-out:before{content:"\E6D6"}.el-icon-shopping-bag-2:before{content:"\E74D"}.el-icon-shopping-bag-1:before{content:"\E74E"}.el-icon-shopping-cart-2:before{content:"\E74F"}.el-icon-shopping-cart-1:before{content:"\E750"}.el-icon-shopping-cart-full:before{content:"\E751"}.el-icon-smoking:before{content:"\E752"}.el-icon-no-smoking:before{content:"\E753"}.el-icon-house:before{content:"\E754"}.el-icon-table-lamp:before{content:"\E755"}.el-icon-school:before{content:"\E756"}.el-icon-office-building:before{content:"\E757"}.el-icon-toilet-paper:before{content:"\E758"}.el-icon-notebook-2:before{content:"\E759"}.el-icon-notebook-1:before{content:"\E75A"}.el-icon-files:before{content:"\E75B"}.el-icon-collection:before{content:"\E75C"}.el-icon-receiving:before{content:"\E75D"}.el-icon-suitcase-1:before{content:"\E760"}.el-icon-suitcase:before{content:"\E761"}.el-icon-film:before{content:"\E763"}.el-icon-collection-tag:before{content:"\E765"}.el-icon-data-analysis:before{content:"\E766"}.el-icon-pie-chart:before{content:"\E767"}.el-icon-data-board:before{content:"\E768"}.el-icon-data-line:before{content:"\E76D"}.el-icon-reading:before{content:"\E769"}.el-icon-magic-stick:before{content:"\E76A"}.el-icon-coordinate:before{content:"\E76B"}.el-icon-mouse:before{content:"\E76C"}.el-icon-brush:before{content:"\E76E"}.el-icon-headset:before{content:"\E76F"}.el-icon-umbrella:before{content:"\E770"}.el-icon-scissors:before{content:"\E771"}.el-icon-mobile:before{content:"\E773"}.el-icon-attract:before{content:"\E774"}.el-icon-monitor:before{content:"\E775"}.el-icon-search:before{content:"\E778"}.el-icon-takeaway-box:before{content:"\E77A"}.el-icon-paperclip:before{content:"\E77D"}.el-icon-printer:before{content:"\E77E"}.el-icon-document-add:before{content:"\E782"}.el-icon-document:before{content:"\E785"}.el-icon-document-checked:before{content:"\E786"}.el-icon-document-copy:before{content:"\E787"}.el-icon-document-delete:before{content:"\E788"}.el-icon-document-remove:before{content:"\E789"}.el-icon-tickets:before{content:"\E78B"}.el-icon-folder-checked:before{content:"\E77F"}.el-icon-folder-delete:before{content:"\E780"}.el-icon-folder-remove:before{content:"\E781"}.el-icon-folder-add:before{content:"\E783"}.el-icon-folder-opened:before{content:"\E784"}.el-icon-folder:before{content:"\E78A"}.el-icon-edit-outline:before{content:"\E764"}.el-icon-edit:before{content:"\E78C"}.el-icon-date:before{content:"\E78E"}.el-icon-c-scale-to-original:before{content:"\E7C6"}.el-icon-view:before{content:"\E6CE"}.el-icon-loading:before{content:"\E6CF"}.el-icon-rank:before{content:"\E6D1"}.el-icon-sort-down:before{content:"\E7C4"}.el-icon-sort-up:before{content:"\E7C5"}.el-icon-sort:before{content:"\E6D2"}.el-icon-finished:before{content:"\E6CD"}.el-icon-refresh-left:before{content:"\E6C7"}.el-icon-refresh-right:before{content:"\E6C8"}.el-icon-refresh:before{content:"\E6D0"}.el-icon-video-play:before{content:"\E7C0"}.el-icon-video-pause:before{content:"\E7C1"}.el-icon-d-arrow-right:before{content:"\E6DC"}.el-icon-d-arrow-left:before{content:"\E6DD"}.el-icon-arrow-up:before{content:"\E6E1"}.el-icon-arrow-down:before{content:"\E6DF"}.el-icon-arrow-right:before{content:"\E6E0"}.el-icon-arrow-left:before{content:"\E6DE"}.el-icon-top-right:before{content:"\E6E7"}.el-icon-top-left:before{content:"\E6E8"}.el-icon-top:before{content:"\E6E6"}.el-icon-bottom:before{content:"\E6EB"}.el-icon-right:before{content:"\E6E9"}.el-icon-back:before{content:"\E6EA"}.el-icon-bottom-right:before{content:"\E6EC"}.el-icon-bottom-left:before{content:"\E6ED"}.el-icon-caret-top:before{content:"\E78F"}.el-icon-caret-bottom:before{content:"\E790"}.el-icon-caret-right:before{content:"\E791"}.el-icon-caret-left:before{content:"\E792"}.el-icon-d-caret:before{content:"\E79A"}.el-icon-share:before{content:"\E793"}.el-icon-menu:before{content:"\E798"}.el-icon-s-grid:before{content:"\E7A6"}.el-icon-s-check:before{content:"\E7A7"}.el-icon-s-data:before{content:"\E7A8"}.el-icon-s-opportunity:before{content:"\E7AA"}.el-icon-s-custom:before{content:"\E7AB"}.el-icon-s-claim:before{content:"\E7AD"}.el-icon-s-finance:before{content:"\E7AE"}.el-icon-s-comment:before{content:"\E7AF"}.el-icon-s-flag:before{content:"\E7B0"}.el-icon-s-marketing:before{content:"\E7B1"}.el-icon-s-shop:before{content:"\E7B4"}.el-icon-s-open:before{content:"\E7B5"}.el-icon-s-management:before{content:"\E7B6"}.el-icon-s-ticket:before{content:"\E7B7"}.el-icon-s-release:before{content:"\E7B8"}.el-icon-s-home:before{content:"\E7B9"}.el-icon-s-promotion:before{content:"\E7BA"}.el-icon-s-operation:before{content:"\E7BB"}.el-icon-s-unfold:before{content:"\E7BC"}.el-icon-s-fold:before{content:"\E7A9"}.el-icon-s-platform:before{content:"\E7BD"}.el-icon-s-order:before{content:"\E7BE"}.el-icon-s-cooperation:before{content:"\E7BF"}.el-icon-bell:before{content:"\E725"}.el-icon-message-solid:before{content:"\E799"}.el-icon-video-camera:before{content:"\E772"}.el-icon-video-camera-solid:before{content:"\E796"}.el-icon-camera:before{content:"\E779"}.el-icon-camera-solid:before{content:"\E79B"}.el-icon-download:before{content:"\E77C"}.el-icon-upload2:before{content:"\E77B"}.el-icon-upload:before{content:"\E7C3"}.el-icon-picture-outline-round:before{content:"\E75F"}.el-icon-picture-outline:before{content:"\E75E"}.el-icon-picture:before{content:"\E79F"}.el-icon-close:before{content:"\E6DB"}.el-icon-check:before{content:"\E6DA"}.el-icon-plus:before{content:"\E6D9"}.el-icon-minus:before{content:"\E6D8"}.el-icon-help:before{content:"\E73D"}.el-icon-s-help:before{content:"\E7B3"}.el-icon-circle-close:before{content:"\E78D"}.el-icon-circle-check:before{content:"\E720"}.el-icon-circle-plus-outline:before{content:"\E723"}.el-icon-remove-outline:before{content:"\E722"}.el-icon-zoom-out:before{content:"\E776"}.el-icon-zoom-in:before{content:"\E777"}.el-icon-error:before{content:"\E79D"}.el-icon-success:before{content:"\E79C"}.el-icon-circle-plus:before{content:"\E7A0"}.el-icon-remove:before{content:"\E7A2"}.el-icon-info:before{content:"\E7A1"}.el-icon-question:before{content:"\E7A4"}.el-icon-warning-outline:before{content:"\E6C9"}.el-icon-warning:before{content:"\E7A3"}.el-icon-goods:before{content:"\E7C2"}.el-icon-s-goods:before{content:"\E7B2"}.el-icon-star-off:before{content:"\E717"}.el-icon-star-on:before{content:"\E797"}.el-icon-more-outline:before{content:"\E6CC"}.el-icon-more:before{content:"\E794"}.el-icon-phone-outline:before{content:"\E6CB"}.el-icon-phone:before{content:"\E795"}.el-icon-user:before{content:"\E6E3"}.el-icon-user-solid:before{content:"\E7A5"}.el-icon-setting:before{content:"\E6CA"}.el-icon-s-tools:before{content:"\E7AC"}.el-icon-delete:before{content:"\E6D7"}.el-icon-delete-solid:before{content:"\E7C9"}.el-icon-eleme:before{content:"\E7C7"}.el-icon-platform-eleme:before{content:"\E7CA"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:transparent}.el-pagination button:focus{outline:none}.el-pagination button:hover{color:#1890ff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#1890ff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev:disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#1890ff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#1890ff;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;display:inline-block;vertical-align:top;font-size:0;padding:0;margin:0}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;vertical-align:top;display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:0}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#1890ff}.el-pager li.active{color:#1890ff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px;padding-bottom:10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:transparent;border:none;outline:none;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#1890ff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #dfe4ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled):before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #e6ebf5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:none}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e8f4ff;color:#46a6ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #e6ebf5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:none}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #1890ff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:none;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #1890ff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #dfe4ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:none;background-color:#e8f4ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#1890ff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:none;background-color:#e8f4ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu__title:hover{background-color:#e8f4ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#1890ff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button,.el-radio-button__inner{position:relative;display:inline-block;outline:none}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:400;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#1890ff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#1890ff;border-color:#1890ff;-webkit-box-shadow:-1px 0 0 0 #1890ff;box-shadow:-1px 0 0 0 #1890ff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #1890ff;box-shadow:0 0 2px 2px #1890ff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#1890ff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:none;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#1890ff;background-color:#1890ff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #dfe4ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#1890ff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\E6DA";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#1890ff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#dfe4ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#1890ff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotate(180deg);transform:rotate(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#dfe4ed}.el-select .el-input.is-focus .el-input__inner{border-color:#1890ff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:none;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform:translateY(.5px);transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;background-color:#fff;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell{background-color:#fff}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#f5f7fa}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#fff}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #dfe6ec}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#1890ff}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #dfe6ec}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#e6ebf5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell{border-right:1px solid #dfe6ec}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #dfe6ec;border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:1px solid #dfe6ec}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#e6ebf5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #dfe6ec}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #dfe6ec;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #dfe6ec}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #dfe6ec}.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #dfe6ec}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#1890ff}.el-table .descending .sort-caret.descending{border-top-color:#1890ff}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#e8f4ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#f5f7fa}.el-table__body tr.current-row>td.el-table__cell{background-color:#e8f4ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #dfe6ec;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #e6ebf5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e8f4ff;color:#46a6ff}.el-table-filter__list-item.is-active{background-color:#1890ff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #e6ebf5;padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#1890ff}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td div{padding:3px 0}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#1890ff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#1890ff}.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#1890ff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#1890ff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#1890ff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #e6ebf5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#1890ff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#1890ff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#1890ff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#1890ff}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#1890ff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#1890ff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #e6ebf5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#1890ff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#1890ff;font-weight:700}.time-select-item.disabled{color:#dfe4ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:none;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#1890ff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#dfe4ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #dfe4ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:none;cursor:pointer}.el-picker-panel__shortcut:hover{color:#1890ff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#1890ff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:transparent;cursor:pointer;outline:none;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#1890ff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#1890ff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #dfe4ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #dfe4ed;border-bottom:1px solid #dfe4ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#1890ff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #dfe4ed}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #e6ebf5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #e6ebf5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:none;background:transparent;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#1890ff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#ff4949}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#13ce66}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#ffba00}.el-message-box__status.el-icon-error{color:#ff4949}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#ff4949;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#1890ff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini.el-form-item{margin-bottom:18px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#ff4949;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#ff4949}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#ff4949}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#1890ff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#1890ff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#dfe4ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #1890ff inset;box-shadow:inset 0 0 2px 2px #1890ff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#1890ff}.el-tabs__item:hover{color:#1890ff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #dfe4ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #dfe4ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #dfe4ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #dfe4ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#1890ff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#1890ff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #dfe4ed;border-bottom:none;border-top:1px solid #dfe4ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #dfe4ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #dfe4ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #dfe4ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #dfe4ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #dfe4ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #dfe4ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #dfe4ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#1890ff}.el-tree-node{white-space:nowrap;outline:none}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#1890ff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#edf6ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#e7faf0;color:#13ce66}.el-alert--success.is-light .el-alert__description{color:#13ce66}.el-alert--success.is-dark{background-color:#13ce66;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fff8e6;color:#ffba00}.el-alert--warning.is-light .el-alert__description{color:#ffba00}.el-alert--warning.is-dark{background-color:#ffba00;color:#fff}.el-alert--error.is-light{background-color:#ffeded;color:#ff4949}.el-alert--error.is-light .el-alert__description{color:#ff4949}.el-alert--error.is-dark{background-color:#ff4949;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e6ebf5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#13ce66}.el-notification .el-icon-error{color:#ff4949}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#ffba00}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#1890ff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#1890ff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#dfe4ed;color:#dfe4ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#dfe4ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table;content:""}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#dfe4ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#1890ff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper:after{content:"";height:100%}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{display:inline-block;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #1890ff;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#1890ff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#1890ff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#1890ff;stroke-linecap:round}.el-loading-spinner i{color:#1890ff}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{display:none;width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{position:relative;right:16.66667%}.el-col-push-4{position:relative;left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{position:relative;right:20.83333%}.el-col-push-5{position:relative;left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{position:relative;right:29.16667%}.el-col-push-7{position:relative;left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{position:relative;right:33.33333%}.el-col-push-8{position:relative;left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{position:relative;right:41.66667%}.el-col-push-10{position:relative;left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{position:relative;right:45.83333%}.el-col-push-11{position:relative;left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{position:relative;right:54.16667%}.el-col-push-13{position:relative;left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{position:relative;right:58.33333%}.el-col-push-14{position:relative;left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{position:relative;right:66.66667%}.el-col-push-16{position:relative;left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{position:relative;right:70.83333%}.el-col-push-17{position:relative;left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{position:relative;right:79.16667%}.el-col-push-19{position:relative;left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{position:relative;right:83.33333%}.el-col-push-20{position:relative;left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{position:relative;right:91.66667%}.el-col-push-22{position:relative;left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{position:relative;right:95.83333%}.el-col-push-23{position:relative;left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#1890ff;color:#1890ff}.el-upload:focus .el-upload-dragger{border-color:#1890ff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#1890ff;font-style:normal}.el-upload-dragger:hover{border-color:#1890ff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #1890ff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#13ce66}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#1890ff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#1890ff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#1890ff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:transparent;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress.is-warning .el-progress-bar__inner{background-color:#ffba00}.el-progress.is-warning .el-progress__text{color:#ffba00}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#e6ebf5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#1890ff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#e6ebf5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#e7faf0;border-color:#d0f5e0}.el-message--success .el-message__content{color:#13ce66}.el-message--warning{background-color:#fff8e6;border-color:#fff1cc}.el-message--warning .el-message__content{color:#ffba00}.el-message--error{background-color:#ffeded;border-color:#ffdbdb}.el-message--error .el-message__content{color:#ff4949}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#13ce66}.el-message .el-icon-error{color:#ff4949}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#ffba00}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#1890ff}.el-badge__content--success{background-color:#13ce66}.el-badge__content--warning{background-color:#ffba00}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#ff4949}.el-card{border-radius:4px;border:1px solid #e6ebf5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon,.el-rate__item{display:inline-block;position:relative}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal,.el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-finish{color:#1890ff;border-color:#1890ff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#13ce66}.el-step__title.is-error{color:#ff4949}.el-step__title.is-finish{color:#1890ff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#13ce66}.el-step__description.is-error{color:#ff4949}.el-step__description.is-finish{color:#1890ff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:transparent;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:none;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:none;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45);transform:scale(.45)}.collapse-transition{-webkit-transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{-webkit-transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out;transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #e6ebf5;border-bottom:1px solid #e6ebf5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #e6ebf5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:none}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#1890ff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #e6ebf5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#e8f4ff;border-color:#d1e9ff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#1890ff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#1890ff}.el-tag .el-tag__close{color:#1890ff}.el-tag .el-tag__close:hover{color:#fff;background-color:#1890ff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#e7faf0;border-color:#d0f5e0;color:#13ce66}.el-tag.el-tag--success.is-hit{border-color:#13ce66}.el-tag.el-tag--success .el-tag__close{color:#13ce66}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#13ce66}.el-tag.el-tag--warning{background-color:#fff8e6;border-color:#fff1cc;color:#ffba00}.el-tag.el-tag--warning.is-hit{border-color:#ffba00}.el-tag.el-tag--warning .el-tag__close{color:#ffba00}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffba00}.el-tag.el-tag--danger{background-color:#ffeded;border-color:#ffdbdb;color:#ff4949}.el-tag.el-tag--danger.is-hit{border-color:#ff4949}.el-tag.el-tag--danger .el-tag__close{color:#ff4949}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff4949}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#1890ff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#1890ff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#46a6ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#13ce66;border-color:#13ce66;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#13ce66}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#42d885}.el-tag--dark.el-tag--warning{background-color:#ffba00;border-color:#ffba00;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#ffba00}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffc833}.el-tag--dark.el-tag--danger{background-color:#ff4949;border-color:#ff4949;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#ff4949}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff6d6d}.el-tag--plain{background-color:#fff;border-color:#a3d3ff;color:#1890ff}.el-tag--plain.is-hit{border-color:#1890ff}.el-tag--plain .el-tag__close{color:#1890ff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#1890ff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#a1ebc2;color:#13ce66}.el-tag--plain.el-tag--success.is-hit{border-color:#13ce66}.el-tag--plain.el-tag--success .el-tag__close{color:#13ce66}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#13ce66}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#ffe399;color:#ffba00}.el-tag--plain.el-tag--warning.is-hit{border-color:#ffba00}.el-tag--plain.el-tag--warning .el-tag__close{color:#ffba00}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffba00}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#ffb6b6;color:#ff4949}.el-tag--plain.el-tag--danger.is-hit{border-color:#ff4949}.el-tag--plain.el-tag--danger .el-tag__close{color:#ff4949}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff4949}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:focus{border-color:#1890ff}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader .el-input.is-focus .el-input__inner{border-color:#1890ff}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #dfe4ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:none;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#1890ff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex}.el-color-predefine__colors{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #1890ff;box-shadow:0 0 3px 2px #1890ff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#1890ff;border-color:#1890ff}.el-color-dropdown__link-btn{cursor:pointer;color:#1890ff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#1890ff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{font-size:12px;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #e6ebf5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:none;border-color:#1890ff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#ff4949}.el-textarea.is-exceed .el-input__count{color:#ff4949}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:none;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:none;border-color:#1890ff}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;left:5px;top:0;color:#c0c4cc}.el-input__icon,.el-input__prefix{height:100%;text-align:center;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{width:25px;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:none;border-color:#1890ff}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#ff4949}.el-input.is-exceed .el-input__suffix .el-input__count{color:#ff4949}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#1890ff;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #e6ebf5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#1890ff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #e6ebf5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #dfe4ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#dfe4ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#1890ff}.el-timeline-item__node--success{background-color:#13ce66}.el-timeline-item__node--warning{background-color:#ffba00}.el-timeline-item__node--danger{background-color:#ff4949}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:none;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #1890ff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#1890ff}.el-link.el-link--default:after{border-color:#1890ff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#1890ff}.el-link.el-link--primary:hover{color:#46a6ff}.el-link.el-link--primary:after{border-color:#1890ff}.el-link.el-link--primary.is-disabled{color:#8cc8ff}.el-link.el-link--primary.is-underline:hover:after{border-color:#1890ff}.el-link.el-link--danger{color:#ff4949}.el-link.el-link--danger:hover{color:#ff6d6d}.el-link.el-link--danger:after{border-color:#ff4949}.el-link.el-link--danger.is-disabled{color:#ffa4a4}.el-link.el-link--danger.is-underline:hover:after{border-color:#ff4949}.el-link.el-link--success{color:#13ce66}.el-link.el-link--success:hover{color:#42d885}.el-link.el-link--success:after{border-color:#13ce66}.el-link.el-link--success.is-disabled{color:#89e7b3}.el-link.el-link--success.is-underline:hover:after{border-color:#13ce66}.el-link.el-link--warning{color:#ffba00}.el-link.el-link--warning:hover{color:#ffc833}.el-link.el-link--warning:after{border-color:#ffba00}.el-link.el-link--warning.is-disabled{color:#ffdd80}.el-link.el-link--warning.is-underline:hover:after{border-color:#ffba00}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-link.el-link--info.is-underline:hover:after{border-color:#909399}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:400;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#1890ff;border-color:#badeff;background-color:#e8f4ff}.el-button:active{color:#1682e6;border-color:#1682e6;outline:none}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#1890ff;color:#1890ff}.el-button.is-plain:active{background:#fff;outline:none}.el-button.is-active,.el-button.is-plain:active{border-color:#1682e6;color:#1682e6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#1890ff;border-color:#1890ff}.el-button--primary:focus,.el-button--primary:hover{background:#46a6ff;border-color:#46a6ff;color:#fff}.el-button--primary:active{outline:none}.el-button--primary.is-active,.el-button--primary:active{background:#1682e6;border-color:#1682e6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#8cc8ff;border-color:#8cc8ff}.el-button--primary.is-plain{color:#1890ff;background:#e8f4ff;border-color:#a3d3ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#1890ff;border-color:#1890ff;color:#fff}.el-button--primary.is-plain:active{background:#1682e6;border-color:#1682e6;color:#fff;outline:none}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#74bcff;background-color:#e8f4ff;border-color:#d1e9ff}.el-button--success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-button--success:focus,.el-button--success:hover{background:#42d885;border-color:#42d885;color:#fff}.el-button--success:active{outline:none}.el-button--success.is-active,.el-button--success:active{background:#11b95c;border-color:#11b95c;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#89e7b3;border-color:#89e7b3}.el-button--success.is-plain{color:#13ce66;background:#e7faf0;border-color:#a1ebc2}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#13ce66;border-color:#13ce66;color:#fff}.el-button--success.is-plain:active{background:#11b95c;border-color:#11b95c;color:#fff;outline:none}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#71e2a3;background-color:#e7faf0;border-color:#d0f5e0}.el-button--warning{color:#fff;background-color:#ffba00;border-color:#ffba00}.el-button--warning:focus,.el-button--warning:hover{background:#ffc833;border-color:#ffc833;color:#fff}.el-button--warning:active{outline:none}.el-button--warning.is-active,.el-button--warning:active{background:#e6a700;border-color:#e6a700;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#ffdd80;border-color:#ffdd80}.el-button--warning.is-plain{color:#ffba00;background:#fff8e6;border-color:#ffe399}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#ffba00;border-color:#ffba00;color:#fff}.el-button--warning.is-plain:active{background:#e6a700;border-color:#e6a700;color:#fff;outline:none}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#ffd666;background-color:#fff8e6;border-color:#fff1cc}.el-button--danger{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-button--danger:focus,.el-button--danger:hover{background:#ff6d6d;border-color:#ff6d6d;color:#fff}.el-button--danger:active{outline:none}.el-button--danger.is-active,.el-button--danger:active{background:#e64242;border-color:#e64242;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#ffa4a4;border-color:#ffa4a4}.el-button--danger.is-plain{color:#ff4949;background:#ffeded;border-color:#ffb6b6}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#ff4949;border-color:#ff4949;color:#fff}.el-button--danger.is-plain:active{background:#e64242;border-color:#e64242;color:#fff;outline:none}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#ff9292;background-color:#ffeded;border-color:#ffdbdb}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{outline:none}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:none}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#1890ff;background:transparent;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#46a6ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#1682e6;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #dfe6ec}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-calendar-table td{border-bottom:1px solid #dfe6ec;border-right:1px solid #dfe6ec;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table td.is-today{color:#1890ff}.el-calendar-table tr:first-child td{border-top:1px solid #dfe6ec}.el-calendar-table tr td:first-child{border-left:1px solid #dfe6ec}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;color:#1890ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{line-height:24px}.el-page-header,.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex}.el-page-header__left{cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#1890ff}.el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#1890ff;border-color:#1890ff}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#1890ff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#1890ff}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#1890ff;border-color:#1890ff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#1890ff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#1890ff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:none;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#1890ff;border-color:#1890ff;-webkit-box-shadow:-1px 0 0 0 #74bcff;box-shadow:-1px 0 0 0 #74bcff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#1890ff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#e6ebf5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#1890ff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#1890ff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#e6ebf5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#1890ff;background:#1890ff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#1890ff}.el-radio__input.is-focus .el-radio__inner{border-color:#1890ff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#1890ff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #1890ff;box-shadow:0 0 2px 2px #1890ff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity .34s ease-out;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:background-color .3s;transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity .12s ease-out;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #dfe4ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #dfe4ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:none}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#1890ff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px;padding-bottom:0}.el-drawer__header>:first-child,.el-drawer__title{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#dcdde0;width:22%;height:22%}.el-empty{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;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#dcdde0;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions__body{color:#606266;background-color:#fff}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #e6ebf5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small{font-size:12px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini{font-size:12px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__label.has-colon:after{content:":";position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-result{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;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title{margin-top:20px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#13ce66}.el-result .icon-error{fill:#ff4949}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#ffba00}.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .28s;transition:opacity .28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform-enter-active,.fade-transform-leave-active{-webkit-transition:all .5s;transition:all .5s}.fade-transform-enter{opacity:0;-webkit-transform:translateX(-30px);transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;-webkit-transform:translateX(30px);transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.breadcrumb-move{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-leave-active{position:absolute}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400!important}.el-upload input[type=file]{display:none!important}.el-upload__input{display:none}.cell .el-tag{margin-right:0}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0}.el-dialog{-webkit-transform:none;transform:none;left:0;position:relative;margin:0 auto}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}.el-range-editor.el-input__inner{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}#app .main-container{min-height:100%;-webkit-transition:margin-left .28s;transition:margin-left .28s;margin-left:210px;position:relative}#app .sidebar-container{-webkit-transition:width .28s;transition:width .28s;width:210px!important;background-color:#304156;height:100%;position:fixed;font-size:0;top:0;bottom:0;left:0;z-index:1001;overflow:hidden}#app .sidebar-container .horizontal-collapse-transition{-webkit-transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out;transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out}#app .sidebar-container .scrollbar-wrapper{overflow-x:hidden!important}#app .sidebar-container .el-scrollbar__bar.is-vertical{right:0}#app .sidebar-container .el-scrollbar{height:100%}#app .sidebar-container.has-logo .el-scrollbar{height:calc(100% - 50px)}#app .sidebar-container .is-horizontal{display:none}#app .sidebar-container a{display:inline-block;width:100%;overflow:hidden}#app .sidebar-container .svg-icon{margin-right:16px}#app .sidebar-container .el-menu{border:none;height:100%;width:100%!important}#app .sidebar-container .el-submenu__title:hover,#app .sidebar-container .submenu-title-noDropdown:hover{background-color:#263445!important}#app .sidebar-container .is-active>.el-submenu__title{color:#f4f4f5!important}#app .sidebar-container .el-submenu .el-menu-item,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title{min-width:210px!important;background-color:#1f2d3d!important}#app .sidebar-container .el-submenu .el-menu-item:hover,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#001528!important}#app .hideSidebar .sidebar-container{width:54px!important}#app .hideSidebar .main-container{margin-left:54px}#app .hideSidebar .submenu-title-noDropdown{padding:0!important;position:relative}#app .hideSidebar .submenu-title-noDropdown .el-tooltip{padding:0!important}#app .hideSidebar .submenu-title-noDropdown .el-tooltip .svg-icon{margin-left:20px}#app .hideSidebar .el-submenu{overflow:hidden}#app .hideSidebar .el-submenu>.el-submenu__title{padding:0!important}#app .hideSidebar .el-submenu>.el-submenu__title .svg-icon{margin-left:20px}#app .hideSidebar .el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}#app .hideSidebar .el-menu--collapse .el-submenu>.el-submenu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .el-menu--collapse .el-menu .el-submenu{min-width:210px!important}#app .mobile .main-container{margin-left:0}#app .mobile .sidebar-container{-webkit-transition:-webkit-transform .28s;transition:-webkit-transform .28s;transition:transform .28s;transition:transform .28s,-webkit-transform .28s;width:210px!important}#app .mobile.hideSidebar .sidebar-container{pointer-events:none;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transform:translate3d(-210px,0,0);transform:translate3d(-210px,0,0)}#app .withoutAnimation .main-container,#app .withoutAnimation .sidebar-container{-webkit-transition:none;transition:none}.el-menu--vertical>.el-menu .svg-icon{margin-right:16px}.el-menu--vertical .el-menu-item:hover,.el-menu--vertical .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#263445!important}.el-menu--vertical>.el-menu--popup{max-height:100vh;overflow-y:auto}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-track-piece{background:#d3dce6}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar{width:6px}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-thumb{background:#99a9bf;border-radius:20px}.blue-btn{background:#324157}.blue-btn:hover{color:#324157}.blue-btn:hover:after,.blue-btn:hover:before{background:#324157}.light-blue-btn{background:#3a71a8}.light-blue-btn:hover{color:#3a71a8}.light-blue-btn:hover:after,.light-blue-btn:hover:before{background:#3a71a8}.red-btn{background:#c03639}.red-btn:hover{color:#c03639}.red-btn:hover:after,.red-btn:hover:before{background:#c03639}.pink-btn{background:#e65d6e}.pink-btn:hover{color:#e65d6e}.pink-btn:hover:after,.pink-btn:hover:before{background:#e65d6e}.green-btn{background:#30b08f}.green-btn:hover{color:#30b08f}.green-btn:hover:after,.green-btn:hover:before{background:#30b08f}.tiffany-btn{background:#4ab7bd}.tiffany-btn:hover{color:#4ab7bd}.tiffany-btn:hover:after,.tiffany-btn:hover:before{background:#4ab7bd}.yellow-btn{background:#fec171}.yellow-btn:hover{color:#fec171}.yellow-btn:hover:after,.yellow-btn:hover:before{background:#fec171}.pan-btn{font-size:14px;color:#fff;padding:14px 36px;border-radius:8px;border:none;outline:none;-webkit-transition:all .6s ease;transition:all .6s ease;position:relative;display:inline-block}.pan-btn:hover{background:#fff}.pan-btn:hover:after,.pan-btn:hover:before{width:100%;-webkit-transition:all .6s ease;transition:all .6s ease}.pan-btn:after,.pan-btn:before{content:"";position:absolute;top:0;right:0;height:2px;width:0;-webkit-transition:all .4s ease;transition:all .4s ease}.pan-btn:after{right:inherit;top:inherit;left:0;bottom:0}.custom-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;color:#fff;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;padding:10px 15px;font-size:14px;border-radius:4px}body{height:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif}label{font-weight:700}html{-webkit-box-sizing:border-box;box-sizing:border-box}#app,html{height:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}.no-padding{padding:0!important}.padding-content{padding:4px 0}a:active,a:focus{outline:none}a,a:focus,a:hover{cursor:pointer;color:inherit;text-decoration:none}div:focus{outline:none}.fr{float:right}.fl{float:left}.pr-5{padding-right:5px}.pl-5{padding-left:5px}.block{display:block}.pointer{cursor:pointer}.inlineBlock{display:block}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}aside{background:#eef1f6;padding:8px 24px;margin-bottom:20px;border-radius:2px;display:block;line-height:32px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;color:#2c3e50;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}aside a{color:#337ab7;cursor:pointer}aside a:hover{color:#20a0ff}.app-container{padding:20px}.components-container{margin:30px 50px;position:relative}.pagination-container{margin-top:30px}.text-center{text-align:center}.sub-navbar{height:50px;line-height:50px;position:relative;width:100%;text-align:right;padding-right:20px;-webkit-transition:position .6s ease;transition:position .6s ease;background:-webkit-gradient(linear,left top,right top,from(#20b6f9),color-stop(0,#20b6f9),color-stop(100%,#2178f1),to(#2178f1));background:linear-gradient(90deg,#20b6f9,#20b6f9 0,#2178f1 100%,#2178f1 0)}.sub-navbar .subtitle{font-size:20px;color:#fff}.sub-navbar.deleted,.sub-navbar.draft{background:#d0d0d0}.link-type,.link-type:focus{color:#337ab7;cursor:pointer}.link-type:focus:hover,.link-type:hover{color:#20a0ff}.filter-container{padding-bottom:10px}.filter-container .filter-item{display:inline-block;vertical-align:middle;margin-bottom:10px}.multiselect{line-height:16px}.multiselect--active{z-index:1000!important}.showRightPanel{overflow:hidden;position:relative;width:calc(100% - 15px)}.rightPanel-background[data-v-1cc16d82]{position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity .3s cubic-bezier(.7,.3,.1,1);transition:opacity .3s cubic-bezier(.7,.3,.1,1);background:rgba(0,0,0,.2);z-index:-1}.rightPanel[data-v-1cc16d82]{width:100%;max-width:260px;height:100vh;position:fixed;top:0;right:0;-webkit-box-shadow:0 0 15px 0 rgba(0,0,0,.05);box-shadow:0 0 15px 0 rgba(0,0,0,.05);-webkit-transition:all .25s cubic-bezier(.7,.3,.1,1);transition:all .25s cubic-bezier(.7,.3,.1,1);-webkit-transform:translate(100%);transform:translate(100%);background:#fff;z-index:40000}.show[data-v-1cc16d82]{-webkit-transition:all .3s cubic-bezier(.7,.3,.1,1);transition:all .3s cubic-bezier(.7,.3,.1,1)}.show .rightPanel-background[data-v-1cc16d82]{z-index:20000;opacity:1;width:100%;height:100%}.show .rightPanel[data-v-1cc16d82]{-webkit-transform:translate(0);transform:translate(0)}.handle-button[data-v-1cc16d82]{width:48px;height:48px;position:absolute;left:-48px;text-align:center;font-size:24px;border-radius:6px 0 0 6px!important;z-index:0;pointer-events:auto;cursor:pointer;color:#fff;line-height:48px}.handle-button i[data-v-1cc16d82]{font-size:24px;line-height:48px}.app-main[data-v-92459f82]{min-height:calc(100vh - 50px);width:100%;position:relative;overflow:hidden}.fixed-header+.app-main[data-v-92459f82]{padding-top:50px}.hasTagsView .app-main[data-v-92459f82]{min-height:calc(100vh - 84px)}.hasTagsView .fixed-header+.app-main[data-v-92459f82]{padding-top:84px}.el-popup-parent--hidden .fixed-header{padding-right:15px}.app-breadcrumb.el-breadcrumb[data-v-1919fc1a]{display:inline-block;font-size:14px;line-height:50px;margin-left:8px}.app-breadcrumb.el-breadcrumb .no-redirect[data-v-1919fc1a]{color:#97a8be;cursor:text}.hamburger[data-v-49e15297]{display:inline-block;vertical-align:middle;width:20px;height:20px}.hamburger.is-active[data-v-49e15297]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.message-title[data-v-be34583a]{font-size:16px;color:#333;font-weight:700;padding-right:8px}.navbar[data-v-195a3bb9]{height:50px;overflow:hidden;position:relative;background:#fff;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08);box-shadow:0 1px 4px rgba(0,21,41,.08)}.navbar .hamburger-container[data-v-195a3bb9]{line-height:46px;height:100%;float:left;cursor:pointer;-webkit-transition:background .3s;transition:background .3s;-webkit-tap-highlight-color:transparent}.navbar .hamburger-container[data-v-195a3bb9]:hover{background:rgba(0,0,0,.025)}.navbar .breadcrumb-container[data-v-195a3bb9]{float:left}.navbar .errLog-container[data-v-195a3bb9]{display:inline-block;vertical-align:top}.navbar .right-menu[data-v-195a3bb9]{float:right;height:100%;line-height:50px}.navbar .right-menu[data-v-195a3bb9]:focus{outline:none}.navbar .right-menu .right-menu-item[data-v-195a3bb9]{display:inline-block;padding:0 8px;height:100%;font-size:18px;color:#5a5e66;vertical-align:text-bottom}.navbar .right-menu .right-menu-item.hover-effect[data-v-195a3bb9]{cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .right-menu .right-menu-item.hover-effect[data-v-195a3bb9]:hover{background:rgba(0,0,0,.025)}.navbar .right-menu .avatar-container[data-v-195a3bb9]{margin-right:30px}.navbar .right-menu .avatar-container .avatar-wrapper[data-v-195a3bb9]{margin-top:5px;position:relative}.navbar .right-menu .avatar-container .avatar-wrapper .user-avatar[data-v-195a3bb9]{cursor:pointer;width:40px;height:40px;border-radius:10px}.navbar .right-menu .avatar-container .avatar-wrapper .el-icon-caret-bottom[data-v-195a3bb9]{cursor:pointer;position:absolute;right:-20px;top:25px;font-size:12px}.theme-message,.theme-picker-dropdown{z-index:99999!important}.theme-picker .el-color-picker__trigger{height:26px!important;width:26px!important;padding:2px}.theme-picker-dropdown .el-color-dropdown__link-btn{display:none}.drawer-container[data-v-5d274279]{padding:24px;font-size:14px;line-height:1.5;word-wrap:break-word}.drawer-container .drawer-title[data-v-5d274279]{margin-bottom:12px;color:rgba(0,0,0,.85);font-size:14px;line-height:22px}.drawer-container .drawer-item[data-v-5d274279]{color:rgba(0,0,0,.65);font-size:14px;padding:12px 0}.drawer-container .drawer-switch[data-v-5d274279]{float:right}.sidebarLogoFade-enter-active[data-v-18d569cc]{-webkit-transition:opacity 1.5s;transition:opacity 1.5s}.sidebarLogoFade-enter[data-v-18d569cc],.sidebarLogoFade-leave-to[data-v-18d569cc]{opacity:0}.sidebar-logo-container[data-v-18d569cc]{position:relative;width:100%;height:50px;line-height:50px;background:#2b2f3a;text-align:center;overflow:hidden}.sidebar-logo-container .sidebar-logo-link[data-v-18d569cc]{height:100%;width:100%}.sidebar-logo-container .sidebar-logo-link .sidebar-logo[data-v-18d569cc]{width:32px;height:32px;vertical-align:middle;margin-right:12px}.sidebar-logo-container .sidebar-logo-link .sidebar-title[data-v-18d569cc]{display:inline-block;margin:0;color:#fff;font-weight:600;line-height:50px;font-size:14px;font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;vertical-align:middle}.sidebar-logo-container.collapse .sidebar-logo[data-v-18d569cc]{margin-right:0}.scroll-container[data-v-6dac3e20]{white-space:nowrap;position:relative;overflow:hidden;width:100%}.scroll-container[data-v-6dac3e20] .el-scrollbar__bar{bottom:0}.scroll-container[data-v-6dac3e20] .el-scrollbar__wrap{height:70px}.tags-view-container[data-v-c64b5a6c]{height:50px;width:100%;background:#fff;border-bottom:1px solid #d8dce5;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04);box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04)}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]{display:inline-block;position:relative;cursor:pointer;height:35px;line-height:35px;border:1px solid #d8dce5;color:#495060;background:#fff;padding:0 15px;font-size:13px;margin-left:10px;margin-top:15px;border-radius:3px 3px 0 0}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]:first-of-type{margin-left:15px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]:last-of-type{margin-right:15px}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-c64b5a6c]{background-color:#198fff;color:#fff;border-color:#198fff}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-c64b5a6c]:before{content:"";background:#fff;display:inline-block;width:8px;height:8px;border-radius:50%;position:relative;margin-right:2px}.tags-view-container .contextmenu[data-v-c64b5a6c]{margin:0;background:#fff;z-index:3000;position:absolute;list-style-type:none;padding:5px 0;border-radius:4px;font-size:12px;font-weight:400;color:#333;-webkit-box-shadow:2px 2px 3px 0 rgba(0,0,0,.3);box-shadow:2px 2px 3px 0 rgba(0,0,0,.3)}.tags-view-container .contextmenu li[data-v-c64b5a6c]{margin:0;padding:7px 16px;cursor:pointer}.tags-view-container .contextmenu li[data-v-c64b5a6c]:hover{background:#eee}.tags-view-wrapper .tags-view-item .el-icon-close{width:16px;height:16px;vertical-align:2px;border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tags-view-wrapper .tags-view-item .el-icon-close:before{-webkit-transform:scale(.6);transform:scale(.6);display:inline-block;vertical-align:-3px}.tags-view-wrapper .tags-view-item .el-icon-close:hover{background-color:#b4bccc;color:#fff}[data-v-2539468a]:export{menuText:#bfcbd9;menuActiveText:#409eff;subMenuActiveText:#f4f4f5;menuBg:#304156;menuHover:#263445;subMenuBg:#1f2d3d;subMenuHover:#001528;sideBarWidth:210px}.app-wrapper[data-v-2539468a]{position:relative;height:100%;width:100%}.app-wrapper[data-v-2539468a]:after{content:"";display:table;clear:both}.app-wrapper.mobile.openSidebar[data-v-2539468a]{position:fixed;top:0}.drawer-bg[data-v-2539468a]{background:#000;opacity:.3;width:100%;top:0;height:100%;position:absolute;z-index:999}.fixed-header[data-v-2539468a]{position:fixed;top:0;right:0;z-index:9;width:calc(100% - 210px);-webkit-transition:width .28s;transition:width .28s}.hideSidebar .fixed-header[data-v-2539468a]{width:calc(100% - 54px)}.mobile .fixed-header[data-v-2539468a]{width:100%}.svg-icon[data-v-f9f7fefc]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.svg-external-icon[data-v-f9f7fefc]{background-color:currentColor;-webkit-mask-size:cover!important;mask-size:cover!important;display:inline-block} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/app.72b19615.css b/hippo4j-console/src/main/resources/static/static/css/app.72b19615.css new file mode 100644 index 00000000..6709a397 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/app.72b19615.css @@ -0,0 +1 @@ +@font-face{font-family:element-icons;src:url(../../static/fonts/element-icons.535877f5.woff) format("woff"),url(../../static/fonts/element-icons.732389de.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\E6A0"}.el-icon-ice-cream-square:before{content:"\E6A3"}.el-icon-lollipop:before{content:"\E6A4"}.el-icon-potato-strips:before{content:"\E6A5"}.el-icon-milk-tea:before{content:"\E6A6"}.el-icon-ice-drink:before{content:"\E6A7"}.el-icon-ice-tea:before{content:"\E6A9"}.el-icon-coffee:before{content:"\E6AA"}.el-icon-orange:before{content:"\E6AB"}.el-icon-pear:before{content:"\E6AC"}.el-icon-apple:before{content:"\E6AD"}.el-icon-cherry:before{content:"\E6AE"}.el-icon-watermelon:before{content:"\E6AF"}.el-icon-grape:before{content:"\E6B0"}.el-icon-refrigerator:before{content:"\E6B1"}.el-icon-goblet-square-full:before{content:"\E6B2"}.el-icon-goblet-square:before{content:"\E6B3"}.el-icon-goblet-full:before{content:"\E6B4"}.el-icon-goblet:before{content:"\E6B5"}.el-icon-cold-drink:before{content:"\E6B6"}.el-icon-coffee-cup:before{content:"\E6B8"}.el-icon-water-cup:before{content:"\E6B9"}.el-icon-hot-water:before{content:"\E6BA"}.el-icon-ice-cream:before{content:"\E6BB"}.el-icon-dessert:before{content:"\E6BC"}.el-icon-sugar:before{content:"\E6BD"}.el-icon-tableware:before{content:"\E6BE"}.el-icon-burger:before{content:"\E6BF"}.el-icon-knife-fork:before{content:"\E6C1"}.el-icon-fork-spoon:before{content:"\E6C2"}.el-icon-chicken:before{content:"\E6C3"}.el-icon-food:before{content:"\E6C4"}.el-icon-dish-1:before{content:"\E6C5"}.el-icon-dish:before{content:"\E6C6"}.el-icon-moon-night:before{content:"\E6EE"}.el-icon-moon:before{content:"\E6F0"}.el-icon-cloudy-and-sunny:before{content:"\E6F1"}.el-icon-partly-cloudy:before{content:"\E6F2"}.el-icon-cloudy:before{content:"\E6F3"}.el-icon-sunny:before{content:"\E6F6"}.el-icon-sunset:before{content:"\E6F7"}.el-icon-sunrise-1:before{content:"\E6F8"}.el-icon-sunrise:before{content:"\E6F9"}.el-icon-heavy-rain:before{content:"\E6FA"}.el-icon-lightning:before{content:"\E6FB"}.el-icon-light-rain:before{content:"\E6FC"}.el-icon-wind-power:before{content:"\E6FD"}.el-icon-baseball:before{content:"\E712"}.el-icon-soccer:before{content:"\E713"}.el-icon-football:before{content:"\E715"}.el-icon-basketball:before{content:"\E716"}.el-icon-ship:before{content:"\E73F"}.el-icon-truck:before{content:"\E740"}.el-icon-bicycle:before{content:"\E741"}.el-icon-mobile-phone:before{content:"\E6D3"}.el-icon-service:before{content:"\E6D4"}.el-icon-key:before{content:"\E6E2"}.el-icon-unlock:before{content:"\E6E4"}.el-icon-lock:before{content:"\E6E5"}.el-icon-watch:before{content:"\E6FE"}.el-icon-watch-1:before{content:"\E6FF"}.el-icon-timer:before{content:"\E702"}.el-icon-alarm-clock:before{content:"\E703"}.el-icon-map-location:before{content:"\E704"}.el-icon-delete-location:before{content:"\E705"}.el-icon-add-location:before{content:"\E706"}.el-icon-location-information:before{content:"\E707"}.el-icon-location-outline:before{content:"\E708"}.el-icon-location:before{content:"\E79E"}.el-icon-place:before{content:"\E709"}.el-icon-discover:before{content:"\E70A"}.el-icon-first-aid-kit:before{content:"\E70B"}.el-icon-trophy-1:before{content:"\E70C"}.el-icon-trophy:before{content:"\E70D"}.el-icon-medal:before{content:"\E70E"}.el-icon-medal-1:before{content:"\E70F"}.el-icon-stopwatch:before{content:"\E710"}.el-icon-mic:before{content:"\E711"}.el-icon-copy-document:before{content:"\E718"}.el-icon-full-screen:before{content:"\E719"}.el-icon-switch-button:before{content:"\E71B"}.el-icon-aim:before{content:"\E71C"}.el-icon-crop:before{content:"\E71D"}.el-icon-odometer:before{content:"\E71E"}.el-icon-time:before{content:"\E71F"}.el-icon-bangzhu:before{content:"\E724"}.el-icon-close-notification:before{content:"\E726"}.el-icon-microphone:before{content:"\E727"}.el-icon-turn-off-microphone:before{content:"\E728"}.el-icon-position:before{content:"\E729"}.el-icon-postcard:before{content:"\E72A"}.el-icon-message:before{content:"\E72B"}.el-icon-chat-line-square:before{content:"\E72D"}.el-icon-chat-dot-square:before{content:"\E72E"}.el-icon-chat-dot-round:before{content:"\E72F"}.el-icon-chat-square:before{content:"\E730"}.el-icon-chat-line-round:before{content:"\E731"}.el-icon-chat-round:before{content:"\E732"}.el-icon-set-up:before{content:"\E733"}.el-icon-turn-off:before{content:"\E734"}.el-icon-open:before{content:"\E735"}.el-icon-connection:before{content:"\E736"}.el-icon-link:before{content:"\E737"}.el-icon-cpu:before{content:"\E738"}.el-icon-thumb:before{content:"\E739"}.el-icon-female:before{content:"\E73A"}.el-icon-male:before{content:"\E73B"}.el-icon-guide:before{content:"\E73C"}.el-icon-news:before{content:"\E73E"}.el-icon-price-tag:before{content:"\E744"}.el-icon-discount:before{content:"\E745"}.el-icon-wallet:before{content:"\E747"}.el-icon-coin:before{content:"\E748"}.el-icon-money:before{content:"\E749"}.el-icon-bank-card:before{content:"\E74A"}.el-icon-box:before{content:"\E74B"}.el-icon-present:before{content:"\E74C"}.el-icon-sell:before{content:"\E6D5"}.el-icon-sold-out:before{content:"\E6D6"}.el-icon-shopping-bag-2:before{content:"\E74D"}.el-icon-shopping-bag-1:before{content:"\E74E"}.el-icon-shopping-cart-2:before{content:"\E74F"}.el-icon-shopping-cart-1:before{content:"\E750"}.el-icon-shopping-cart-full:before{content:"\E751"}.el-icon-smoking:before{content:"\E752"}.el-icon-no-smoking:before{content:"\E753"}.el-icon-house:before{content:"\E754"}.el-icon-table-lamp:before{content:"\E755"}.el-icon-school:before{content:"\E756"}.el-icon-office-building:before{content:"\E757"}.el-icon-toilet-paper:before{content:"\E758"}.el-icon-notebook-2:before{content:"\E759"}.el-icon-notebook-1:before{content:"\E75A"}.el-icon-files:before{content:"\E75B"}.el-icon-collection:before{content:"\E75C"}.el-icon-receiving:before{content:"\E75D"}.el-icon-suitcase-1:before{content:"\E760"}.el-icon-suitcase:before{content:"\E761"}.el-icon-film:before{content:"\E763"}.el-icon-collection-tag:before{content:"\E765"}.el-icon-data-analysis:before{content:"\E766"}.el-icon-pie-chart:before{content:"\E767"}.el-icon-data-board:before{content:"\E768"}.el-icon-data-line:before{content:"\E76D"}.el-icon-reading:before{content:"\E769"}.el-icon-magic-stick:before{content:"\E76A"}.el-icon-coordinate:before{content:"\E76B"}.el-icon-mouse:before{content:"\E76C"}.el-icon-brush:before{content:"\E76E"}.el-icon-headset:before{content:"\E76F"}.el-icon-umbrella:before{content:"\E770"}.el-icon-scissors:before{content:"\E771"}.el-icon-mobile:before{content:"\E773"}.el-icon-attract:before{content:"\E774"}.el-icon-monitor:before{content:"\E775"}.el-icon-search:before{content:"\E778"}.el-icon-takeaway-box:before{content:"\E77A"}.el-icon-paperclip:before{content:"\E77D"}.el-icon-printer:before{content:"\E77E"}.el-icon-document-add:before{content:"\E782"}.el-icon-document:before{content:"\E785"}.el-icon-document-checked:before{content:"\E786"}.el-icon-document-copy:before{content:"\E787"}.el-icon-document-delete:before{content:"\E788"}.el-icon-document-remove:before{content:"\E789"}.el-icon-tickets:before{content:"\E78B"}.el-icon-folder-checked:before{content:"\E77F"}.el-icon-folder-delete:before{content:"\E780"}.el-icon-folder-remove:before{content:"\E781"}.el-icon-folder-add:before{content:"\E783"}.el-icon-folder-opened:before{content:"\E784"}.el-icon-folder:before{content:"\E78A"}.el-icon-edit-outline:before{content:"\E764"}.el-icon-edit:before{content:"\E78C"}.el-icon-date:before{content:"\E78E"}.el-icon-c-scale-to-original:before{content:"\E7C6"}.el-icon-view:before{content:"\E6CE"}.el-icon-loading:before{content:"\E6CF"}.el-icon-rank:before{content:"\E6D1"}.el-icon-sort-down:before{content:"\E7C4"}.el-icon-sort-up:before{content:"\E7C5"}.el-icon-sort:before{content:"\E6D2"}.el-icon-finished:before{content:"\E6CD"}.el-icon-refresh-left:before{content:"\E6C7"}.el-icon-refresh-right:before{content:"\E6C8"}.el-icon-refresh:before{content:"\E6D0"}.el-icon-video-play:before{content:"\E7C0"}.el-icon-video-pause:before{content:"\E7C1"}.el-icon-d-arrow-right:before{content:"\E6DC"}.el-icon-d-arrow-left:before{content:"\E6DD"}.el-icon-arrow-up:before{content:"\E6E1"}.el-icon-arrow-down:before{content:"\E6DF"}.el-icon-arrow-right:before{content:"\E6E0"}.el-icon-arrow-left:before{content:"\E6DE"}.el-icon-top-right:before{content:"\E6E7"}.el-icon-top-left:before{content:"\E6E8"}.el-icon-top:before{content:"\E6E6"}.el-icon-bottom:before{content:"\E6EB"}.el-icon-right:before{content:"\E6E9"}.el-icon-back:before{content:"\E6EA"}.el-icon-bottom-right:before{content:"\E6EC"}.el-icon-bottom-left:before{content:"\E6ED"}.el-icon-caret-top:before{content:"\E78F"}.el-icon-caret-bottom:before{content:"\E790"}.el-icon-caret-right:before{content:"\E791"}.el-icon-caret-left:before{content:"\E792"}.el-icon-d-caret:before{content:"\E79A"}.el-icon-share:before{content:"\E793"}.el-icon-menu:before{content:"\E798"}.el-icon-s-grid:before{content:"\E7A6"}.el-icon-s-check:before{content:"\E7A7"}.el-icon-s-data:before{content:"\E7A8"}.el-icon-s-opportunity:before{content:"\E7AA"}.el-icon-s-custom:before{content:"\E7AB"}.el-icon-s-claim:before{content:"\E7AD"}.el-icon-s-finance:before{content:"\E7AE"}.el-icon-s-comment:before{content:"\E7AF"}.el-icon-s-flag:before{content:"\E7B0"}.el-icon-s-marketing:before{content:"\E7B1"}.el-icon-s-shop:before{content:"\E7B4"}.el-icon-s-open:before{content:"\E7B5"}.el-icon-s-management:before{content:"\E7B6"}.el-icon-s-ticket:before{content:"\E7B7"}.el-icon-s-release:before{content:"\E7B8"}.el-icon-s-home:before{content:"\E7B9"}.el-icon-s-promotion:before{content:"\E7BA"}.el-icon-s-operation:before{content:"\E7BB"}.el-icon-s-unfold:before{content:"\E7BC"}.el-icon-s-fold:before{content:"\E7A9"}.el-icon-s-platform:before{content:"\E7BD"}.el-icon-s-order:before{content:"\E7BE"}.el-icon-s-cooperation:before{content:"\E7BF"}.el-icon-bell:before{content:"\E725"}.el-icon-message-solid:before{content:"\E799"}.el-icon-video-camera:before{content:"\E772"}.el-icon-video-camera-solid:before{content:"\E796"}.el-icon-camera:before{content:"\E779"}.el-icon-camera-solid:before{content:"\E79B"}.el-icon-download:before{content:"\E77C"}.el-icon-upload2:before{content:"\E77B"}.el-icon-upload:before{content:"\E7C3"}.el-icon-picture-outline-round:before{content:"\E75F"}.el-icon-picture-outline:before{content:"\E75E"}.el-icon-picture:before{content:"\E79F"}.el-icon-close:before{content:"\E6DB"}.el-icon-check:before{content:"\E6DA"}.el-icon-plus:before{content:"\E6D9"}.el-icon-minus:before{content:"\E6D8"}.el-icon-help:before{content:"\E73D"}.el-icon-s-help:before{content:"\E7B3"}.el-icon-circle-close:before{content:"\E78D"}.el-icon-circle-check:before{content:"\E720"}.el-icon-circle-plus-outline:before{content:"\E723"}.el-icon-remove-outline:before{content:"\E722"}.el-icon-zoom-out:before{content:"\E776"}.el-icon-zoom-in:before{content:"\E777"}.el-icon-error:before{content:"\E79D"}.el-icon-success:before{content:"\E79C"}.el-icon-circle-plus:before{content:"\E7A0"}.el-icon-remove:before{content:"\E7A2"}.el-icon-info:before{content:"\E7A1"}.el-icon-question:before{content:"\E7A4"}.el-icon-warning-outline:before{content:"\E6C9"}.el-icon-warning:before{content:"\E7A3"}.el-icon-goods:before{content:"\E7C2"}.el-icon-s-goods:before{content:"\E7B2"}.el-icon-star-off:before{content:"\E717"}.el-icon-star-on:before{content:"\E797"}.el-icon-more-outline:before{content:"\E6CC"}.el-icon-more:before{content:"\E794"}.el-icon-phone-outline:before{content:"\E6CB"}.el-icon-phone:before{content:"\E795"}.el-icon-user:before{content:"\E6E3"}.el-icon-user-solid:before{content:"\E7A5"}.el-icon-setting:before{content:"\E6CA"}.el-icon-s-tools:before{content:"\E7AC"}.el-icon-delete:before{content:"\E6D7"}.el-icon-delete-solid:before{content:"\E7C9"}.el-icon-eleme:before{content:"\E7C7"}.el-icon-platform-eleme:before{content:"\E7CA"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:transparent}.el-pagination button:focus{outline:none}.el-pagination button:hover{color:#1890ff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#1890ff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev:disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#1890ff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#1890ff;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;display:inline-block;vertical-align:top;font-size:0;padding:0;margin:0}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;vertical-align:top;display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:0}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#1890ff}.el-pager li.active{color:#1890ff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px;padding-bottom:10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:transparent;border:none;outline:none;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#1890ff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #dfe4ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled):before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #e6ebf5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:none}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e8f4ff;color:#46a6ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #e6ebf5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:none}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #1890ff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:none;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #1890ff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #dfe4ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:none;background-color:#e8f4ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#1890ff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:none;background-color:#e8f4ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu__title:hover{background-color:#e8f4ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#1890ff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button,.el-radio-button__inner{position:relative;display:inline-block;outline:none}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:400;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#1890ff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#1890ff;border-color:#1890ff;-webkit-box-shadow:-1px 0 0 0 #1890ff;box-shadow:-1px 0 0 0 #1890ff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #1890ff;box-shadow:0 0 2px 2px #1890ff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#1890ff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:none;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#1890ff;background-color:#1890ff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #dfe4ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#1890ff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\E6DA";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#1890ff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#dfe4ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#1890ff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotate(180deg);transform:rotate(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#dfe4ed}.el-select .el-input.is-focus .el-input__inner{border-color:#1890ff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:none;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform:translateY(.5px);transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;background-color:#fff;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell{background-color:#fff}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#f5f7fa}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#fff}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #dfe6ec}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#1890ff}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #dfe6ec}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#e6ebf5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell{border-right:1px solid #dfe6ec}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #dfe6ec;border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:1px solid #dfe6ec}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#e6ebf5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #dfe6ec}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #dfe6ec;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #dfe6ec}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #dfe6ec}.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #dfe6ec}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#1890ff}.el-table .descending .sort-caret.descending{border-top-color:#1890ff}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#e8f4ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#f5f7fa}.el-table__body tr.current-row>td.el-table__cell{background-color:#e8f4ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #dfe6ec;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #e6ebf5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e8f4ff;color:#46a6ff}.el-table-filter__list-item.is-active{background-color:#1890ff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #e6ebf5;padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#1890ff}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td div{padding:3px 0}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#1890ff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#1890ff}.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#1890ff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#1890ff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#1890ff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #e6ebf5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#1890ff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#1890ff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#1890ff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#1890ff}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#1890ff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#1890ff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #e6ebf5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#1890ff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#1890ff;font-weight:700}.time-select-item.disabled{color:#dfe4ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:none;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#1890ff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#dfe4ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #dfe4ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:none;cursor:pointer}.el-picker-panel__shortcut:hover{color:#1890ff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#1890ff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:transparent;cursor:pointer;outline:none;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#1890ff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#1890ff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #dfe4ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #dfe4ed;border-bottom:1px solid #dfe4ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#1890ff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #dfe4ed}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #e6ebf5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #e6ebf5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:none;background:transparent;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#1890ff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#ff4949}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#13ce66}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#ffba00}.el-message-box__status.el-icon-error{color:#ff4949}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#ff4949;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#1890ff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini.el-form-item{margin-bottom:18px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#ff4949;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#ff4949}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#ff4949}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#1890ff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#1890ff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#dfe4ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #1890ff inset;box-shadow:inset 0 0 2px 2px #1890ff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#1890ff}.el-tabs__item:hover{color:#1890ff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #dfe4ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #dfe4ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #dfe4ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #dfe4ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#1890ff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#1890ff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #dfe4ed;border-bottom:none;border-top:1px solid #dfe4ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #dfe4ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #dfe4ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #dfe4ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #dfe4ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #dfe4ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #dfe4ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #dfe4ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#1890ff}.el-tree-node{white-space:nowrap;outline:none}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#1890ff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#edf6ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#e7faf0;color:#13ce66}.el-alert--success.is-light .el-alert__description{color:#13ce66}.el-alert--success.is-dark{background-color:#13ce66;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fff8e6;color:#ffba00}.el-alert--warning.is-light .el-alert__description{color:#ffba00}.el-alert--warning.is-dark{background-color:#ffba00;color:#fff}.el-alert--error.is-light{background-color:#ffeded;color:#ff4949}.el-alert--error.is-light .el-alert__description{color:#ff4949}.el-alert--error.is-dark{background-color:#ff4949;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #e6ebf5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#13ce66}.el-notification .el-icon-error{color:#ff4949}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#ffba00}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#1890ff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#1890ff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#dfe4ed;color:#dfe4ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#dfe4ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table;content:""}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#dfe4ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#1890ff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper:after{content:"";height:100%}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{display:inline-block;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #1890ff;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#1890ff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#1890ff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#1890ff;stroke-linecap:round}.el-loading-spinner i{color:#1890ff}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{display:none;width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{width:4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{position:relative;left:4.1666666667%}.el-col-2{width:8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{position:relative;left:8.3333333333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{width:16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{position:relative;left:16.6666666667%}.el-col-5{width:20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{position:relative;left:20.8333333333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{width:29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{position:relative;left:29.1666666667%}.el-col-8{width:33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{position:relative;left:33.3333333333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{width:41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{position:relative;left:41.6666666667%}.el-col-11{width:45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{position:relative;left:45.8333333333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{width:54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{position:relative;left:54.1666666667%}.el-col-14{width:58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{position:relative;left:58.3333333333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{width:66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{position:relative;left:66.6666666667%}.el-col-17{width:70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{position:relative;left:70.8333333333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{width:79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{position:relative;left:79.1666666667%}.el-col-20{width:83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{position:relative;left:83.3333333333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{width:91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{position:relative;left:91.6666666667%}.el-col-23{width:95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{position:relative;left:95.8333333333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{position:relative;left:4.1666666667%}.el-col-xs-2{width:8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{position:relative;left:8.3333333333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{position:relative;left:16.6666666667%}.el-col-xs-5{width:20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{position:relative;left:20.8333333333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{position:relative;left:29.1666666667%}.el-col-xs-8{width:33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{position:relative;left:33.3333333333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{position:relative;left:41.6666666667%}.el-col-xs-11{width:45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{position:relative;left:45.8333333333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{position:relative;left:54.1666666667%}.el-col-xs-14{width:58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{position:relative;left:58.3333333333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{position:relative;left:66.6666666667%}.el-col-xs-17{width:70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{position:relative;left:70.8333333333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{position:relative;left:79.1666666667%}.el-col-xs-20{width:83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{position:relative;left:83.3333333333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{position:relative;left:91.6666666667%}.el-col-xs-23{width:95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{position:relative;left:95.8333333333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{position:relative;left:4.1666666667%}.el-col-sm-2{width:8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{position:relative;left:8.3333333333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{position:relative;left:16.6666666667%}.el-col-sm-5{width:20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{position:relative;left:20.8333333333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{position:relative;left:29.1666666667%}.el-col-sm-8{width:33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{position:relative;left:33.3333333333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{position:relative;left:41.6666666667%}.el-col-sm-11{width:45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{position:relative;left:45.8333333333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{position:relative;left:54.1666666667%}.el-col-sm-14{width:58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{position:relative;left:58.3333333333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{position:relative;left:66.6666666667%}.el-col-sm-17{width:70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{position:relative;left:70.8333333333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{position:relative;left:79.1666666667%}.el-col-sm-20{width:83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{position:relative;left:83.3333333333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{position:relative;left:91.6666666667%}.el-col-sm-23{width:95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{position:relative;left:95.8333333333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{position:relative;left:4.1666666667%}.el-col-md-2{width:8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{position:relative;left:8.3333333333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{position:relative;left:16.6666666667%}.el-col-md-5{width:20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{position:relative;left:20.8333333333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{position:relative;left:29.1666666667%}.el-col-md-8{width:33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{position:relative;left:33.3333333333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{position:relative;left:41.6666666667%}.el-col-md-11{width:45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{position:relative;left:45.8333333333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{position:relative;left:54.1666666667%}.el-col-md-14{width:58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{position:relative;left:58.3333333333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{position:relative;left:66.6666666667%}.el-col-md-17{width:70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{position:relative;left:70.8333333333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{position:relative;left:79.1666666667%}.el-col-md-20{width:83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{position:relative;left:83.3333333333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{position:relative;left:91.6666666667%}.el-col-md-23{width:95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{position:relative;left:95.8333333333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{position:relative;left:4.1666666667%}.el-col-lg-2{width:8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{position:relative;left:8.3333333333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{position:relative;left:16.6666666667%}.el-col-lg-5{width:20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{position:relative;left:20.8333333333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{position:relative;left:29.1666666667%}.el-col-lg-8{width:33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{position:relative;left:33.3333333333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{position:relative;left:41.6666666667%}.el-col-lg-11{width:45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{position:relative;left:45.8333333333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{position:relative;left:54.1666666667%}.el-col-lg-14{width:58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{position:relative;left:58.3333333333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{position:relative;left:66.6666666667%}.el-col-lg-17{width:70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{position:relative;left:70.8333333333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{position:relative;left:79.1666666667%}.el-col-lg-20{width:83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{position:relative;left:83.3333333333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{position:relative;left:91.6666666667%}.el-col-lg-23{width:95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{position:relative;left:95.8333333333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{position:relative;left:4.1666666667%}.el-col-xl-2{width:8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{position:relative;left:8.3333333333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{position:relative;left:16.6666666667%}.el-col-xl-5{width:20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{position:relative;left:20.8333333333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{position:relative;left:29.1666666667%}.el-col-xl-8{width:33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{position:relative;left:33.3333333333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{position:relative;left:41.6666666667%}.el-col-xl-11{width:45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{position:relative;left:45.8333333333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{position:relative;left:54.1666666667%}.el-col-xl-14{width:58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{position:relative;left:58.3333333333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{position:relative;left:66.6666666667%}.el-col-xl-17{width:70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{position:relative;left:70.8333333333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{position:relative;left:79.1666666667%}.el-col-xl-20{width:83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{position:relative;left:83.3333333333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{position:relative;left:91.6666666667%}.el-col-xl-23{width:95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{position:relative;left:95.8333333333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#1890ff;color:#1890ff}.el-upload:focus .el-upload-dragger{border-color:#1890ff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#1890ff;font-style:normal}.el-upload-dragger:hover{border-color:#1890ff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #1890ff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#13ce66}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#1890ff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#1890ff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#1890ff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:transparent;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress.is-warning .el-progress-bar__inner{background-color:#ffba00}.el-progress.is-warning .el-progress__text{color:#ffba00}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#e6ebf5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#1890ff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#e6ebf5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#e7faf0;border-color:#d0f5e0}.el-message--success .el-message__content{color:#13ce66}.el-message--warning{background-color:#fff8e6;border-color:#fff1cc}.el-message--warning .el-message__content{color:#ffba00}.el-message--error{background-color:#ffeded;border-color:#ffdbdb}.el-message--error .el-message__content{color:#ff4949}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#13ce66}.el-message .el-icon-error{color:#ff4949}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#ffba00}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#1890ff}.el-badge__content--success{background-color:#13ce66}.el-badge__content--warning{background-color:#ffba00}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#ff4949}.el-card{border-radius:4px;border:1px solid #e6ebf5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon,.el-rate__item{display:inline-block;position:relative}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal,.el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-finish{color:#1890ff;border-color:#1890ff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#13ce66}.el-step__title.is-error{color:#ff4949}.el-step__title.is-finish{color:#1890ff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#13ce66}.el-step__description.is-error{color:#ff4949}.el-step__description.is-finish{color:#1890ff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:transparent;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:none;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:none;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45);transform:scale(.45)}.collapse-transition{-webkit-transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{-webkit-transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out;transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #e6ebf5;border-bottom:1px solid #e6ebf5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #e6ebf5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:none}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#1890ff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #e6ebf5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.7692307692}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#e6ebf5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#e6ebf5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#e6ebf5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#e6ebf5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#e8f4ff;border-color:#d1e9ff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#1890ff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#1890ff}.el-tag .el-tag__close{color:#1890ff}.el-tag .el-tag__close:hover{color:#fff;background-color:#1890ff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#e7faf0;border-color:#d0f5e0;color:#13ce66}.el-tag.el-tag--success.is-hit{border-color:#13ce66}.el-tag.el-tag--success .el-tag__close{color:#13ce66}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#13ce66}.el-tag.el-tag--warning{background-color:#fff8e6;border-color:#fff1cc;color:#ffba00}.el-tag.el-tag--warning.is-hit{border-color:#ffba00}.el-tag.el-tag--warning .el-tag__close{color:#ffba00}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffba00}.el-tag.el-tag--danger{background-color:#ffeded;border-color:#ffdbdb;color:#ff4949}.el-tag.el-tag--danger.is-hit{border-color:#ff4949}.el-tag.el-tag--danger .el-tag__close{color:#ff4949}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff4949}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#1890ff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#1890ff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#46a6ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#13ce66;border-color:#13ce66;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#13ce66}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#42d885}.el-tag--dark.el-tag--warning{background-color:#ffba00;border-color:#ffba00;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#ffba00}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffc833}.el-tag--dark.el-tag--danger{background-color:#ff4949;border-color:#ff4949;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#ff4949}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff6d6d}.el-tag--plain{background-color:#fff;border-color:#a3d3ff;color:#1890ff}.el-tag--plain.is-hit{border-color:#1890ff}.el-tag--plain .el-tag__close{color:#1890ff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#1890ff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#a1ebc2;color:#13ce66}.el-tag--plain.el-tag--success.is-hit{border-color:#13ce66}.el-tag--plain.el-tag--success .el-tag__close{color:#13ce66}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#13ce66}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#ffe399;color:#ffba00}.el-tag--plain.el-tag--warning.is-hit{border-color:#ffba00}.el-tag--plain.el-tag--warning .el-tag__close{color:#ffba00}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ffba00}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#ffb6b6;color:#ff4949}.el-tag--plain.el-tag--danger.is-hit{border-color:#ff4949}.el-tag--plain.el-tag--danger .el-tag__close{color:#ff4949}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#ff4949}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:focus{border-color:#1890ff}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader .el-input.is-focus .el-input__inner{border-color:#1890ff}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #dfe4ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:none;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#1890ff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex}.el-color-predefine__colors{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #1890ff;box-shadow:0 0 3px 2px #1890ff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#1890ff;border-color:#1890ff}.el-color-dropdown__link-btn{cursor:pointer;color:#1890ff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#1890ff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{font-size:12px;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #e6ebf5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:none;border-color:#1890ff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#ff4949}.el-textarea.is-exceed .el-input__count{color:#ff4949}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:none;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:none;border-color:#1890ff}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;left:5px;top:0;color:#c0c4cc}.el-input__icon,.el-input__prefix{height:100%;text-align:center;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{width:25px;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:none;border-color:#1890ff}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#dfe4ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#ff4949}.el-input.is-exceed .el-input__suffix .el-input__count{color:#ff4949}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#1890ff;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #e6ebf5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#1890ff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #e6ebf5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #e6ebf5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #dfe4ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#dfe4ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#1890ff}.el-timeline-item__node--success{background-color:#13ce66}.el-timeline-item__node--warning{background-color:#ffba00}.el-timeline-item__node--danger{background-color:#ff4949}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:none;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #1890ff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#1890ff}.el-link.el-link--default:after{border-color:#1890ff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#1890ff}.el-link.el-link--primary:hover{color:#46a6ff}.el-link.el-link--primary:after{border-color:#1890ff}.el-link.el-link--primary.is-disabled{color:#8cc8ff}.el-link.el-link--primary.is-underline:hover:after{border-color:#1890ff}.el-link.el-link--danger{color:#ff4949}.el-link.el-link--danger:hover{color:#ff6d6d}.el-link.el-link--danger:after{border-color:#ff4949}.el-link.el-link--danger.is-disabled{color:#ffa4a4}.el-link.el-link--danger.is-underline:hover:after{border-color:#ff4949}.el-link.el-link--success{color:#13ce66}.el-link.el-link--success:hover{color:#42d885}.el-link.el-link--success:after{border-color:#13ce66}.el-link.el-link--success.is-disabled{color:#89e7b3}.el-link.el-link--success.is-underline:hover:after{border-color:#13ce66}.el-link.el-link--warning{color:#ffba00}.el-link.el-link--warning:hover{color:#ffc833}.el-link.el-link--warning:after{border-color:#ffba00}.el-link.el-link--warning.is-disabled{color:#ffdd80}.el-link.el-link--warning.is-underline:hover:after{border-color:#ffba00}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-link.el-link--info.is-underline:hover:after{border-color:#909399}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:400;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#1890ff;border-color:#badeff;background-color:#e8f4ff}.el-button:active{color:#1682e6;border-color:#1682e6;outline:none}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#1890ff;color:#1890ff}.el-button.is-plain:active{background:#fff;outline:none}.el-button.is-active,.el-button.is-plain:active{border-color:#1682e6;color:#1682e6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#e6ebf5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#1890ff;border-color:#1890ff}.el-button--primary:focus,.el-button--primary:hover{background:#46a6ff;border-color:#46a6ff;color:#fff}.el-button--primary:active{outline:none}.el-button--primary.is-active,.el-button--primary:active{background:#1682e6;border-color:#1682e6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#8cc8ff;border-color:#8cc8ff}.el-button--primary.is-plain{color:#1890ff;background:#e8f4ff;border-color:#a3d3ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#1890ff;border-color:#1890ff;color:#fff}.el-button--primary.is-plain:active{background:#1682e6;border-color:#1682e6;color:#fff;outline:none}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#74bcff;background-color:#e8f4ff;border-color:#d1e9ff}.el-button--success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-button--success:focus,.el-button--success:hover{background:#42d885;border-color:#42d885;color:#fff}.el-button--success:active{outline:none}.el-button--success.is-active,.el-button--success:active{background:#11b95c;border-color:#11b95c;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#89e7b3;border-color:#89e7b3}.el-button--success.is-plain{color:#13ce66;background:#e7faf0;border-color:#a1ebc2}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#13ce66;border-color:#13ce66;color:#fff}.el-button--success.is-plain:active{background:#11b95c;border-color:#11b95c;color:#fff;outline:none}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#71e2a3;background-color:#e7faf0;border-color:#d0f5e0}.el-button--warning{color:#fff;background-color:#ffba00;border-color:#ffba00}.el-button--warning:focus,.el-button--warning:hover{background:#ffc833;border-color:#ffc833;color:#fff}.el-button--warning:active{outline:none}.el-button--warning.is-active,.el-button--warning:active{background:#e6a700;border-color:#e6a700;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#ffdd80;border-color:#ffdd80}.el-button--warning.is-plain{color:#ffba00;background:#fff8e6;border-color:#ffe399}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#ffba00;border-color:#ffba00;color:#fff}.el-button--warning.is-plain:active{background:#e6a700;border-color:#e6a700;color:#fff;outline:none}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#ffd666;background-color:#fff8e6;border-color:#fff1cc}.el-button--danger{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-button--danger:focus,.el-button--danger:hover{background:#ff6d6d;border-color:#ff6d6d;color:#fff}.el-button--danger:active{outline:none}.el-button--danger.is-active,.el-button--danger:active{background:#e64242;border-color:#e64242;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#ffa4a4;border-color:#ffa4a4}.el-button--danger.is-plain{color:#ff4949;background:#ffeded;border-color:#ffb6b6}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#ff4949;border-color:#ff4949;color:#fff}.el-button--danger.is-plain:active{background:#e64242;border-color:#e64242;color:#fff;outline:none}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#ff9292;background-color:#ffeded;border-color:#ffdbdb}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{outline:none}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:none}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#1890ff;background:transparent;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#46a6ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#1682e6;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #dfe6ec}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-calendar-table td{border-bottom:1px solid #dfe6ec;border-right:1px solid #dfe6ec;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table td.is-today{color:#1890ff}.el-calendar-table tr:first-child td{border-top:1px solid #dfe6ec}.el-calendar-table tr td:first-child{border-left:1px solid #dfe6ec}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;color:#1890ff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{line-height:24px}.el-page-header,.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex}.el-page-header__left{cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#1890ff}.el-checkbox.is-bordered.is-disabled{border-color:#e6ebf5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#1890ff;border-color:#1890ff}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#1890ff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#1890ff}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#1890ff;border-color:#1890ff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#1890ff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#1890ff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:none;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#1890ff;border-color:#1890ff;-webkit-box-shadow:-1px 0 0 0 #74bcff;box-shadow:-1px 0 0 0 #74bcff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#1890ff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#e6ebf5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#e6ebf5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#1890ff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#1890ff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#e6ebf5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#dfe4ed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#1890ff;background:#1890ff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#1890ff}.el-radio__input.is-focus .el-radio__inner{border-color:#1890ff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#1890ff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #1890ff;box-shadow:0 0 2px 2px #1890ff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity .34s ease-out;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:background-color .3s;transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity .12s ease-out;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #dfe4ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #dfe4ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:none}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#1890ff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px;padding-bottom:0}.el-drawer__header>:first-child,.el-drawer__title{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#dcdde0;width:22%;height:22%}.el-empty{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;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#dcdde0;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions__body{color:#606266;background-color:#fff}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #e6ebf5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small{font-size:12px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini{font-size:12px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon:after{content:":";position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{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;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title{margin-top:20px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#13ce66}.el-result .icon-error{fill:#ff4949}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#ffba00}.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .28s;transition:opacity .28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform-enter-active,.fade-transform-leave-active{-webkit-transition:all .5s;transition:all .5s}.fade-transform-enter{opacity:0;-webkit-transform:translateX(-30px);transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;-webkit-transform:translateX(30px);transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.breadcrumb-move{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-leave-active{position:absolute}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400!important}.el-upload input[type=file]{display:none!important}.el-upload__input{display:none}.cell .el-tag{margin-right:0}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0}.el-dialog{-webkit-transform:none;transform:none;left:0;position:relative;margin:0 auto}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}.el-range-editor.el-input__inner{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}#app .main-container{min-height:100%;-webkit-transition:margin-left .28s;transition:margin-left .28s;margin-left:210px;position:relative}#app .sidebar-container{-webkit-transition:width .28s;transition:width .28s;width:210px!important;background-color:#304156;height:100%;position:fixed;font-size:0;top:0;bottom:0;left:0;z-index:1001;overflow:hidden}#app .sidebar-container .horizontal-collapse-transition{-webkit-transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out;transition:width 0s ease-in-out,padding-left 0s ease-in-out,padding-right 0s ease-in-out}#app .sidebar-container .scrollbar-wrapper{overflow-x:hidden!important}#app .sidebar-container .el-scrollbar__bar.is-vertical{right:0}#app .sidebar-container .el-scrollbar{height:100%}#app .sidebar-container.has-logo .el-scrollbar{height:calc(100% - 50px)}#app .sidebar-container .is-horizontal{display:none}#app .sidebar-container a{display:inline-block;width:100%;overflow:hidden}#app .sidebar-container .svg-icon{margin-right:16px}#app .sidebar-container .el-menu{border:none;height:100%;width:100%!important}#app .sidebar-container .el-submenu__title:hover,#app .sidebar-container .submenu-title-noDropdown:hover{background-color:#263445!important}#app .sidebar-container .is-active>.el-submenu__title{color:#f4f4f5!important}#app .sidebar-container .el-submenu .el-menu-item,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title{min-width:210px!important;background-color:#1f2d3d!important}#app .sidebar-container .el-submenu .el-menu-item:hover,#app .sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#001528!important}#app .hideSidebar .sidebar-container{width:54px!important}#app .hideSidebar .main-container{margin-left:54px}#app .hideSidebar .submenu-title-noDropdown{padding:0!important;position:relative}#app .hideSidebar .submenu-title-noDropdown .el-tooltip{padding:0!important}#app .hideSidebar .submenu-title-noDropdown .el-tooltip .svg-icon{margin-left:20px}#app .hideSidebar .el-submenu{overflow:hidden}#app .hideSidebar .el-submenu>.el-submenu__title{padding:0!important}#app .hideSidebar .el-submenu>.el-submenu__title .svg-icon{margin-left:20px}#app .hideSidebar .el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}#app .hideSidebar .el-menu--collapse .el-submenu>.el-submenu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .el-menu--collapse .el-menu .el-submenu{min-width:210px!important}#app .mobile .main-container{margin-left:0}#app .mobile .sidebar-container{-webkit-transition:-webkit-transform .28s;transition:-webkit-transform .28s;transition:transform .28s;transition:transform .28s,-webkit-transform .28s;width:210px!important}#app .mobile.hideSidebar .sidebar-container{pointer-events:none;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transform:translate3d(-210px,0,0);transform:translate3d(-210px,0,0)}#app .withoutAnimation .main-container,#app .withoutAnimation .sidebar-container{-webkit-transition:none;transition:none}.el-menu--vertical>.el-menu .svg-icon{margin-right:16px}.el-menu--vertical .el-menu-item:hover,.el-menu--vertical .nest-menu .el-submenu>.el-submenu__title:hover{background-color:#263445!important}.el-menu--vertical>.el-menu--popup{max-height:100vh;overflow-y:auto}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-track-piece{background:#d3dce6}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar{width:6px}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-thumb{background:#99a9bf;border-radius:20px}.blue-btn{background:#324157}.blue-btn:hover{color:#324157}.blue-btn:hover:after,.blue-btn:hover:before{background:#324157}.light-blue-btn{background:#3a71a8}.light-blue-btn:hover{color:#3a71a8}.light-blue-btn:hover:after,.light-blue-btn:hover:before{background:#3a71a8}.red-btn{background:#c03639}.red-btn:hover{color:#c03639}.red-btn:hover:after,.red-btn:hover:before{background:#c03639}.pink-btn{background:#e65d6e}.pink-btn:hover{color:#e65d6e}.pink-btn:hover:after,.pink-btn:hover:before{background:#e65d6e}.green-btn{background:#30b08f}.green-btn:hover{color:#30b08f}.green-btn:hover:after,.green-btn:hover:before{background:#30b08f}.tiffany-btn{background:#4ab7bd}.tiffany-btn:hover{color:#4ab7bd}.tiffany-btn:hover:after,.tiffany-btn:hover:before{background:#4ab7bd}.yellow-btn{background:#fec171}.yellow-btn:hover{color:#fec171}.yellow-btn:hover:after,.yellow-btn:hover:before{background:#fec171}.pan-btn{font-size:14px;color:#fff;padding:14px 36px;border-radius:8px;border:none;outline:none;-webkit-transition:all .6s ease;transition:all .6s ease;position:relative;display:inline-block}.pan-btn:hover{background:#fff}.pan-btn:hover:after,.pan-btn:hover:before{width:100%;-webkit-transition:all .6s ease;transition:all .6s ease}.pan-btn:after,.pan-btn:before{content:"";position:absolute;top:0;right:0;height:2px;width:0;-webkit-transition:all .4s ease;transition:all .4s ease}.pan-btn:after{right:inherit;top:inherit;left:0;bottom:0}.custom-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;color:#fff;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;padding:10px 15px;font-size:14px;border-radius:4px}*{padding:0;margin:0}body{height:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Arial,sans-serif}label{font-weight:700}html{-webkit-box-sizing:border-box;box-sizing:border-box}#app,html{height:100%}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}.no-padding{padding:0!important}.padding-content{padding:4px 0}a:active,a:focus{outline:none}a,a:focus,a:hover{cursor:pointer;color:inherit;text-decoration:none}div:focus{outline:none}.fr{float:right}.fl{float:left}.pr-5{padding-right:5px}.pl-5{padding-left:5px}.block{display:block}.pointer{cursor:pointer}.inlineBlock{display:block}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}aside{background:#eef1f6;padding:8px 24px;margin-bottom:20px;border-radius:2px;display:block;line-height:32px;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;color:#2c3e50;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}aside a{color:#337ab7;cursor:pointer}aside a:hover{color:#20a0ff}.app-container{padding:20px}.components-container{margin:30px 50px;position:relative}.pagination-container{margin-top:30px}.text-center{text-align:center}.sub-navbar{height:50px;line-height:50px;position:relative;width:100%;text-align:right;padding-right:20px;-webkit-transition:position .6s ease;transition:position .6s ease;background:-webkit-gradient(linear,left top,right top,from(#20b6f9),color-stop(0,#20b6f9),color-stop(100%,#2178f1),to(#2178f1));background:linear-gradient(90deg,#20b6f9,#20b6f9 0,#2178f1 100%,#2178f1 0)}.sub-navbar .subtitle{font-size:20px;color:#fff}.sub-navbar.deleted,.sub-navbar.draft{background:#d0d0d0}.link-type,.link-type:focus{color:#337ab7;cursor:pointer}.link-type:focus:hover,.link-type:hover{color:#20a0ff}.filter-container{padding-bottom:10px}.filter-container .filter-item{display:inline-block;vertical-align:middle;margin-bottom:10px}.multiselect{line-height:16px}.multiselect--active{z-index:1000!important}ol,ul{list-style:none}.app-main[data-v-92459f82]{min-height:calc(100vh - 50px);width:100%;position:relative;overflow:hidden}.fixed-header+.app-main[data-v-92459f82]{padding-top:50px}.hasTagsView .app-main[data-v-92459f82]{min-height:calc(100vh - 84px)}.hasTagsView .fixed-header+.app-main[data-v-92459f82]{padding-top:84px}.el-popup-parent--hidden .fixed-header{padding-right:15px}.app-breadcrumb.el-breadcrumb[data-v-1919fc1a]{display:inline-block;font-size:14px;line-height:50px;margin-left:8px}.app-breadcrumb.el-breadcrumb .no-redirect[data-v-1919fc1a]{color:#97a8be;cursor:text}.hamburger[data-v-49e15297]{display:inline-block;vertical-align:middle;width:20px;height:20px}.hamburger.is-active[data-v-49e15297]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.message-title[data-v-be34583a]{font-size:16px;color:#333;font-weight:700;padding-right:8px}.navbar[data-v-6ab05616]{height:50px;overflow:hidden;position:relative;background:#fff;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08);box-shadow:0 1px 4px rgba(0,21,41,.08)}.navbar .hamburger-container[data-v-6ab05616]{line-height:46px;height:100%;float:left;cursor:pointer;-webkit-transition:background .3s;transition:background .3s;-webkit-tap-highlight-color:rgba(0,0,0,0)}.navbar .hamburger-container[data-v-6ab05616]:hover{background:rgba(0,0,0,.025)}.navbar .breadcrumb-container[data-v-6ab05616]{float:left}.navbar .errLog-container[data-v-6ab05616]{display:inline-block;vertical-align:top}.navbar .right-menu[data-v-6ab05616]{float:right;height:100%;line-height:50px}.navbar .right-menu[data-v-6ab05616]:focus{outline:none}.navbar .right-menu .right-menu-item[data-v-6ab05616]{display:inline-block;padding:0 8px;height:100%;font-size:18px;color:#5a5e66;vertical-align:text-bottom}.navbar .right-menu .right-menu-item.hover-effect[data-v-6ab05616]{cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.navbar .right-menu .right-menu-item.hover-effect[data-v-6ab05616]:hover{background:rgba(0,0,0,.025)}.navbar .right-menu .avatar-container[data-v-6ab05616]{margin-right:30px}.navbar .right-menu .avatar-container .avatar-wrapper[data-v-6ab05616]{margin-top:5px;position:relative}.navbar .right-menu .avatar-container .avatar-wrapper .user-avatar[data-v-6ab05616]{cursor:pointer;width:40px;height:40px;border-radius:10px}.navbar .right-menu .avatar-container .avatar-wrapper .el-icon-caret-bottom[data-v-6ab05616]{cursor:pointer;position:absolute;right:-20px;top:25px;font-size:12px}.sidebarLogoFade-enter-active[data-v-24887324]{-webkit-transition:opacity 1.5s;transition:opacity 1.5s}.sidebarLogoFade-enter[data-v-24887324],.sidebarLogoFade-leave-to[data-v-24887324]{opacity:0}.sidebar-logo-container[data-v-24887324]{position:relative;width:100%;height:50px;line-height:50px;background:#2b2f3a;text-align:center;overflow:hidden}.sidebar-logo-container .sidebar-logo-link[data-v-24887324]{height:100%;width:100%}.sidebar-logo-container .sidebar-logo-link .sidebar-logo[data-v-24887324]{width:32px;height:32px;vertical-align:middle;margin-right:12px}.sidebar-logo-container .sidebar-logo-link .sidebar-title[data-v-24887324]{display:inline-block;margin:0;color:#fff;font-weight:600;line-height:50px;font-size:14px;font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;vertical-align:middle}.sidebar-logo-container.collapse .sidebar-logo[data-v-24887324]{margin-right:0}.scroll-container[data-v-59c4e7df]{white-space:nowrap;position:relative;overflow:hidden;width:100%}.scroll-container[data-v-59c4e7df] .el-scrollbar__bar{bottom:0}.scroll-container[data-v-59c4e7df] .el-scrollbar__wrap{height:70px}.tags-view-container[data-v-c64b5a6c]{height:50px;width:100%;background:#fff;border-bottom:1px solid #d8dce5;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04);box-shadow:0 1px 3px 0 rgba(0,0,0,.12),0 0 3px 0 rgba(0,0,0,.04)}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]{display:inline-block;position:relative;cursor:pointer;height:35px;line-height:35px;border:1px solid #d8dce5;color:#495060;background:#fff;padding:0 15px;font-size:13px;margin-left:10px;margin-top:15px;border-radius:3px 3px 0 0}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]:first-of-type{margin-left:15px}.tags-view-container .tags-view-wrapper .tags-view-item[data-v-c64b5a6c]:last-of-type{margin-right:15px}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-c64b5a6c]{background-color:#198fff;color:#fff;border-color:#198fff}.tags-view-container .tags-view-wrapper .tags-view-item.active[data-v-c64b5a6c]:before{content:"";background:#fff;display:inline-block;width:8px;height:8px;border-radius:50%;position:relative;margin-right:2px}.tags-view-container .contextmenu[data-v-c64b5a6c]{margin:0;background:#fff;z-index:3000;position:absolute;list-style-type:none;padding:5px 0;border-radius:4px;font-size:12px;font-weight:400;color:#333;-webkit-box-shadow:2px 2px 3px 0 rgba(0,0,0,.3);box-shadow:2px 2px 3px 0 rgba(0,0,0,.3)}.tags-view-container .contextmenu li[data-v-c64b5a6c]{margin:0;padding:7px 16px;cursor:pointer}.tags-view-container .contextmenu li[data-v-c64b5a6c]:hover{background:#eee}.tags-view-wrapper .tags-view-item .el-icon-close{width:16px;height:16px;vertical-align:2px;border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tags-view-wrapper .tags-view-item .el-icon-close:before{-webkit-transform:scale(.6);transform:scale(.6);display:inline-block;vertical-align:-3px}.tags-view-wrapper .tags-view-item .el-icon-close:hover{background-color:#b4bccc;color:#fff}[data-v-3da30414]:export{menuText:#bfcbd9;menuActiveText:#409eff;subMenuActiveText:#f4f4f5;menuBg:#304156;menuHover:#263445;subMenuBg:#1f2d3d;subMenuHover:#001528;sideBarWidth:210px}.app-wrapper[data-v-3da30414]{position:relative;height:100%;width:100%}.app-wrapper[data-v-3da30414]:after{content:"";display:table;clear:both}.app-wrapper.mobile.openSidebar[data-v-3da30414]{position:fixed;top:0}.drawer-bg[data-v-3da30414]{background:#000;opacity:.3;width:100%;top:0;height:100%;position:absolute;z-index:999}.fixed-header[data-v-3da30414]{position:fixed;top:0;right:0;z-index:9;width:calc(100% - 210px);-webkit-transition:width .28s;transition:width .28s}.hideSidebar .fixed-header[data-v-3da30414]{width:calc(100% - 54px)}.mobile .fixed-header[data-v-3da30414]{width:100%}.svg-icon[data-v-f9f7fefc]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.svg-external-icon[data-v-f9f7fefc]{background-color:currentColor;-webkit-mask-size:cover!important;mask-size:cover!important;display:inline-block} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-003006fa.6d24dacd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-05d50b2c.95ae0d9d.css similarity index 83% rename from hippo4j-console/src/main/resources/static/static/css/chunk-003006fa.6d24dacd.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-05d50b2c.95ae0d9d.css index 72a7cbfe..7132ae73 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-003006fa.6d24dacd.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-05d50b2c.95ae0d9d.css @@ -1 +1 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-073ce7f8.52ff3c91.css b/hippo4j-console/src/main/resources/static/static/css/chunk-073ce7f8.52ff3c91.css new file mode 100644 index 00000000..26bf4c9e --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-073ce7f8.52ff3c91.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.dashboard-editor-container[data-v-001a3100]{padding:32px;background-color:#f0f2f5;position:relative;min-height:100vh} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-078a7535.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-078a7535.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-078a7535.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-0a5b5b6f.6d24dacd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-19132c4b.95ae0d9d.css similarity index 83% rename from hippo4j-console/src/main/resources/static/static/css/chunk-0a5b5b6f.6d24dacd.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-19132c4b.95ae0d9d.css index 72a7cbfe..7132ae73 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-0a5b5b6f.6d24dacd.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-19132c4b.95ae0d9d.css @@ -1 +1 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-247f955b.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-247f955b.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-247f955b.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-2597d3d5.65c5c6ca.css b/hippo4j-console/src/main/resources/static/static/css/chunk-2597d3d5.65c5c6ca.css new file mode 100644 index 00000000..28ce768b --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-2597d3d5.65c5c6ca.css @@ -0,0 +1 @@ +.social-signup-container[data-v-7309fbbb]{margin:20px 0}.social-signup-container .sign-btn[data-v-7309fbbb]{display:inline-block;cursor:pointer}.social-signup-container .icon[data-v-7309fbbb]{color:#fff;font-size:24px;margin-top:8px}.social-signup-container .qq-svg-container[data-v-7309fbbb],.social-signup-container .wx-svg-container[data-v-7309fbbb]{display:inline-block;width:40px;height:40px;line-height:40px;text-align:center;padding-top:1px;border-radius:4px;margin-bottom:20px;margin-right:5px}.social-signup-container .wx-svg-container[data-v-7309fbbb]{background-color:#24da70}.social-signup-container .qq-svg-container[data-v-7309fbbb]{background-color:#6ba2d6;margin-left:50px}@supports(-webkit-mask:none) and (not (cater-color:#fff)){.login-container .el-input input{color:#fff}}.login-container .el-input{display:inline-block;height:47px;width:85%}.login-container .el-input input{background:transparent;border:0;-webkit-appearance:none;border-radius:0;padding:12px 5px 12px 15px;color:#fff;height:47px;caret-color:#fff}.login-container .el-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #283443 inset!important;box-shadow:inset 0 0 0 1000px #283443!important;-webkit-text-fill-color:#fff!important}.login-container .el-form-item{border:1px solid hsla(0,0%,100%,.1);background:rgba(0,0,0,.1);border-radius:5px;color:#454545}.login-container[data-v-3efc76dc]{min-height:100%;width:100%;background-color:#2d3a4b;overflow:hidden}.login-container .login-form[data-v-3efc76dc]{position:relative;width:520px;max-width:100%;padding:160px 35px 0;margin:0 auto;overflow:hidden}.login-container .tips[data-v-3efc76dc]{font-size:14px;color:#fff;margin-bottom:10px}.login-container .tips span[data-v-3efc76dc]:first-of-type{margin-right:16px}.login-container .svg-container[data-v-3efc76dc]{padding:6px 5px 6px 15px;color:#889aa4;vertical-align:middle;width:30px;display:inline-block}.login-container .title-container[data-v-3efc76dc]{position:relative}.login-container .title-container .title[data-v-3efc76dc]{font-size:26px;color:#eee;margin:0 auto 40px auto;text-align:center;font-weight:700}.login-container .show-pwd[data-v-3efc76dc]{position:absolute;right:10px;top:7px;font-size:16px;color:#889aa4;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.login-container .thirdparty-button[data-v-3efc76dc]{position:absolute;right:0;bottom:6px}@media only screen and (max-width:470px){.login-container .thirdparty-button[data-v-3efc76dc]{display:none}} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-2b48c09a.5d4d51c0.css b/hippo4j-console/src/main/resources/static/static/css/chunk-2b48c09a.5d4d51c0.css new file mode 100644 index 00000000..2ab4a1a5 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-2b48c09a.5d4d51c0.css @@ -0,0 +1 @@ +.github-corner:hover .octo-arm[data-v-fedac698]{-webkit-animation:octocat-wave-data-v-fedac698 .56s ease-in-out;animation:octocat-wave-data-v-fedac698 .56s ease-in-out}@-webkit-keyframes octocat-wave-data-v-fedac698{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes octocat-wave-data-v-fedac698{0%,to{-webkit-transform:rotate(0);transform:rotate(0)}20%,60%{-webkit-transform:rotate(-25deg);transform:rotate(-25deg)}40%,80%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm[data-v-fedac698]{-webkit-animation:none;animation:none}.github-corner .octo-arm[data-v-fedac698]{-webkit-animation:octocat-wave-data-v-fedac698 .56s ease-in-out;animation:octocat-wave-data-v-fedac698 .56s ease-in-out}}.panel-group[data-v-787f9ab2]{margin-top:18px}.panel-group .card-panel-col[data-v-787f9ab2]{margin-bottom:32px}.panel-group .card-panel[data-v-787f9ab2]{height:108px;cursor:pointer;font-size:12px;position:relative;overflow:hidden;color:#666;background:#fff;-webkit-box-shadow:4px 4px 40px rgba(0,0,0,.05);box-shadow:4px 4px 40px rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.panel-group .card-panel:hover .card-panel-icon-wrapper[data-v-787f9ab2]{color:#fff}.panel-group .card-panel:hover .icon-people[data-v-787f9ab2]{background:#dae8d6}.panel-group .card-panel:hover .icon-message[data-v-787f9ab2]{background:#36a3f7}.panel-group .card-panel:hover .icon-money[data-v-787f9ab2]{background:#a0a6f4}.panel-group .card-panel:hover .icon-shopping[data-v-787f9ab2]{background:#dae8d6}.panel-group .card-panel .icon-people[data-v-787f9ab2]{color:#40c9c6}.panel-group .card-panel .icon-message[data-v-787f9ab2]{color:#36a3f7}.panel-group .card-panel .icon-money[data-v-787f9ab2]{color:#a0a6f4}.panel-group .card-panel .icon-shopping[data-v-787f9ab2]{color:#34bfa3}.panel-group .card-panel .card-panel-icon-wrapper[data-v-787f9ab2]{float:left;margin:14px 0 0 14px;padding:16px;-webkit-transition:all .38s ease-out;transition:all .38s ease-out;border-radius:6px}.panel-group .card-panel .card-panel-icon[data-v-787f9ab2]{float:left;font-size:48px}.panel-group .card-panel .card-panel-description[data-v-787f9ab2]{float:right;font-weight:700;margin:26px;margin-left:0}.panel-group .card-panel .card-panel-description .card-panel-text[data-v-787f9ab2]{line-height:18px;color:rgba(0,0,0,.45);font-size:16px;margin-bottom:12px}.panel-group .card-panel .card-panel-description .card-panel-num[data-v-787f9ab2]{font-size:20px}@media(max-width:550px){.card-panel-description[data-v-787f9ab2]{display:none}.card-panel-icon-wrapper[data-v-787f9ab2]{float:none!important;width:100%;height:100%;margin:0!important}.card-panel-icon-wrapper .svg-icon[data-v-787f9ab2]{display:block;margin:14px auto!important;float:none!important}}.dashboard-editor-container[data-v-73ee0239]{padding:32px;background-color:#f0f2f5;position:relative}.dashboard-editor-container .github-corner[data-v-73ee0239]{position:absolute;top:0;border:0;right:0}.dashboard-editor-container .el-form-item[data-v-73ee0239]{margin-bottom:5px!important;padding-bottom:20px}.dashboard-editor-container .chart-wrapper[data-v-73ee0239]{background:#fff;padding:16px 16px 0;margin-bottom:32px}@media(max-width:1024px){.chart-wrapper[data-v-73ee0239]{padding:8px}} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-2b98613f.119e6d52.css b/hippo4j-console/src/main/resources/static/static/css/chunk-2b98613f.119e6d52.css new file mode 100644 index 00000000..d76a2792 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-2b98613f.119e6d52.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none}[data-v-40b8bf28]::-webkit-scrollbar{width:8px;height:8px}[data-v-40b8bf28]::-webkit-scrollbar-track{border-radius:5px;background:rgba(0,0,0,.06);-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.08)}[data-v-40b8bf28]::-webkit-scrollbar-thumb{border-radius:5px;background:rgba(0,0,0,.12);-webkit-box-shadow:inset 0 0 10px rgba(0,0,0,.2)}.stack-info[data-v-40b8bf28]{height:400px;overflow:auto}.stack-info>li[data-v-40b8bf28]{margin-bottom:24px}.stack-info>li p[data-v-40b8bf28]:first-child{color:#06f;font-weight:600;margin-top:10px}.stack-info>li ul[data-v-40b8bf28]{margin-left:30px}.stack-info>li ul li[data-v-40b8bf28]{color:#fc5531;text-align:justify;margin:10px auto} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-0c349c3a.9905f991.css b/hippo4j-console/src/main/resources/static/static/css/chunk-2e217faa.95ae0d9d.css similarity index 83% rename from hippo4j-console/src/main/resources/static/static/css/chunk-0c349c3a.9905f991.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-2e217faa.95ae0d9d.css index 72a7cbfe..7132ae73 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-0c349c3a.9905f991.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-2e217faa.95ae0d9d.css @@ -1 +1 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-434632c4.adc5827d.css b/hippo4j-console/src/main/resources/static/static/css/chunk-2fd02e04.adc5827d.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-434632c4.adc5827d.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-2fd02e04.adc5827d.css diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-4f40863a.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-4f40863a.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-4f40863a.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-5428753b.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-5428753b.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-5428753b.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-91584750.b043920c.css b/hippo4j-console/src/main/resources/static/static/css/chunk-5911c282.13a7e89e.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-91584750.b043920c.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-5911c282.13a7e89e.css diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-22d8af12.6d24dacd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-5ee8c90c.95ae0d9d.css similarity index 83% rename from hippo4j-console/src/main/resources/static/static/css/chunk-22d8af12.6d24dacd.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-5ee8c90c.95ae0d9d.css index 72a7cbfe..7132ae73 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-22d8af12.6d24dacd.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-5ee8c90c.95ae0d9d.css @@ -1 +1 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-60c39f89.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-60c39f89.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-60c39f89.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-62bd3ba2.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-62bd3ba2.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-62bd3ba2.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-648295c6.6d24dacd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-648295c6.6d24dacd.css deleted file mode 100644 index 72a7cbfe..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-648295c6.6d24dacd.css +++ /dev/null @@ -1 +0,0 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-6a55e40a.95ae0d9d.css b/hippo4j-console/src/main/resources/static/static/css/chunk-6a55e40a.95ae0d9d.css new file mode 100644 index 00000000..7132ae73 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-6a55e40a.95ae0d9d.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-6e7ca1a9.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-6e7ca1a9.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-6e7ca1a9.35874984.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-7b4c55c2.9905f991.css b/hippo4j-console/src/main/resources/static/static/css/chunk-7b4c55c2.9905f991.css deleted file mode 100644 index 72a7cbfe..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-7b4c55c2.9905f991.css +++ /dev/null @@ -1 +0,0 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-bc53b446.55a106d0.css b/hippo4j-console/src/main/resources/static/static/css/chunk-7d41a2d3.55a106d0.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-bc53b446.55a106d0.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-7d41a2d3.55a106d0.css diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-8bb94e76.480b5dcd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-8bb94e76.480b5dcd.css deleted file mode 100644 index 4054fd75..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-8bb94e76.480b5dcd.css +++ /dev/null @@ -1 +0,0 @@ -.pan-item[data-v-799537af]{width:200px;height:200px;border-radius:50%;display:inline-block;position:relative;cursor:default;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.pan-info-roles-container[data-v-799537af]{padding:20px;text-align:center}.pan-thumb[data-v-799537af]{width:100%;height:100%;background-position:50%;background-size:cover;border-radius:50%;overflow:hidden;position:absolute;-webkit-transform-origin:95% 40%;transform-origin:95% 40%;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.pan-info[data-v-799537af]{position:absolute;width:inherit;height:inherit;border-radius:50%;overflow:hidden;-webkit-box-shadow:inset 0 0 0 5px rgba(0,0,0,.05);box-shadow:inset 0 0 0 5px rgba(0,0,0,.05)}.pan-info h3[data-v-799537af]{color:#fff;text-transform:uppercase;position:relative;letter-spacing:2px;font-size:18px;margin:0 60px;padding:22px 0 0 0;height:85px;font-family:Open Sans,Arial,sans-serif;text-shadow:0 0 1px #fff,0 1px 2px rgba(0,0,0,.3)}.pan-info p[data-v-799537af]{color:#fff;padding:10px 5px;font-style:italic;margin:0 30px;font-size:12px;border-top:1px solid hsla(0,0%,100%,.5)}.pan-info p a[data-v-799537af]{display:block;color:#333;width:80px;height:80px;background:hsla(0,0%,100%,.3);border-radius:50%;color:#fff;font-style:normal;font-weight:700;text-transform:uppercase;font-size:9px;letter-spacing:1px;padding-top:24px;margin:7px auto 0;font-family:Open Sans,Arial,sans-serif;opacity:0;-webkit-transition:opacity .3s ease-in-out .2s,background .2s linear 0s,-webkit-transform .3s ease-in-out .2s;transition:opacity .3s ease-in-out .2s,background .2s linear 0s,-webkit-transform .3s ease-in-out .2s;transition:transform .3s ease-in-out .2s,opacity .3s ease-in-out .2s,background .2s linear 0s;transition:transform .3s ease-in-out .2s,opacity .3s ease-in-out .2s,background .2s linear 0s,-webkit-transform .3s ease-in-out .2s;-webkit-transform:translateX(60px) rotate(90deg);transform:translateX(60px) rotate(90deg)}.pan-info p a[data-v-799537af]:hover{background:hsla(0,0%,100%,.5)}.pan-item:hover .pan-thumb[data-v-799537af]{-webkit-transform:rotate(-110deg);transform:rotate(-110deg)}.pan-item:hover .pan-info p a[data-v-799537af]{opacity:1;-webkit-transform:translateX(0) rotate(0deg);transform:translateX(0) rotate(0deg)}.box-center[data-v-72e10cd6]{margin:0 auto;display:table}.text-muted[data-v-72e10cd6]{color:#777}.user-profile .user-name[data-v-72e10cd6]{font-weight:700}.user-profile .box-center[data-v-72e10cd6]{padding-top:10px}.user-profile .user-role[data-v-72e10cd6]{padding-top:10px;font-weight:400;font-size:14px}.user-profile .box-social[data-v-72e10cd6]{padding-top:30px}.user-profile .box-social .el-table[data-v-72e10cd6]{border-top:1px solid #dfe6ec}.user-profile .user-follow[data-v-72e10cd6]{padding-top:20px}.user-bio[data-v-72e10cd6]{margin-top:20px;color:#606266}.user-bio span[data-v-72e10cd6]{padding-left:4px}.user-bio .user-bio-section[data-v-72e10cd6]{font-size:14px;padding:15px 0}.user-bio .user-bio-section .user-bio-section-header[data-v-72e10cd6]{border-bottom:1px solid #dfe6ec;padding-bottom:10px;margin-bottom:10px;font-weight:700}.user-activity .user-block .description[data-v-1066d76c],.user-activity .user-block .username[data-v-1066d76c]{display:block;margin-left:50px;padding:2px 0}.user-activity .user-block .username[data-v-1066d76c]{font-size:16px;color:#000}.user-activity .user-block[data-v-1066d76c] :after{clear:both}.user-activity .user-block .img-circle[data-v-1066d76c]{border-radius:50%;width:40px;height:40px;float:left}.user-activity .user-block span[data-v-1066d76c]{font-weight:500;font-size:12px}.user-activity .post[data-v-1066d76c]{font-size:14px;border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.user-activity .post .image[data-v-1066d76c]{width:100%;height:100%}.user-activity .post .user-images[data-v-1066d76c]{padding-top:20px}.user-activity .list-inline[data-v-1066d76c]{padding-left:0;margin-left:-5px;list-style:none}.user-activity .list-inline li[data-v-1066d76c]{display:inline-block;padding-right:5px;padding-left:5px;font-size:13px}.user-activity .list-inline .link-black[data-v-1066d76c]:focus,.user-activity .list-inline .link-black[data-v-1066d76c]:hover{color:#999}.box-center[data-v-1066d76c]{margin:0 auto;display:table}.text-muted[data-v-1066d76c]{color:#777} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-90a072fe.95ae0d9d.css b/hippo4j-console/src/main/resources/static/static/css/chunk-90a072fe.95ae0d9d.css new file mode 100644 index 00000000..7132ae73 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-90a072fe.95ae0d9d.css @@ -0,0 +1 @@ +.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-df7d1fa0]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-df7d1fa0]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-a7c68c10.cf25c508.css b/hippo4j-console/src/main/resources/static/static/css/chunk-a7c68c10.cf25c508.css deleted file mode 100644 index fa665cb7..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-a7c68c10.cf25c508.css +++ /dev/null @@ -1 +0,0 @@ -.panel-group[data-v-36757f12]{margin-top:18px}.panel-group .card-panel-col[data-v-36757f12]{margin-bottom:32px}.panel-group .card-panel[data-v-36757f12]{height:108px;cursor:pointer;font-size:12px;position:relative;overflow:hidden;color:#666;background:#fff;-webkit-box-shadow:4px 4px 40px rgba(0,0,0,.05);box-shadow:4px 4px 40px rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.panel-group .card-panel:hover .card-panel-icon-wrapper[data-v-36757f12]{color:#fff}.panel-group .card-panel:hover .icon-people[data-v-36757f12]{background:#40c9c6}.panel-group .card-panel:hover .icon-message[data-v-36757f12]{background:#36a3f7}.panel-group .card-panel:hover .icon-money[data-v-36757f12]{background:#f4516c}.panel-group .card-panel:hover .icon-shopping[data-v-36757f12]{background:#34bfa3}.panel-group .card-panel .icon-people[data-v-36757f12]{color:#40c9c6}.panel-group .card-panel .icon-message[data-v-36757f12]{color:#36a3f7}.panel-group .card-panel .icon-money[data-v-36757f12]{color:#f4516c}.panel-group .card-panel .icon-shopping[data-v-36757f12]{color:#34bfa3}.panel-group .card-panel .card-panel-icon-wrapper[data-v-36757f12]{float:left;margin:14px 0 0 14px;padding:16px;-webkit-transition:all .38s ease-out;transition:all .38s ease-out;border-radius:6px}.panel-group .card-panel .card-panel-icon[data-v-36757f12]{float:left;font-size:48px}.panel-group .card-panel .card-panel-description[data-v-36757f12]{float:right;font-weight:700;margin:26px;margin-left:0}.panel-group .card-panel .card-panel-description .card-panel-text[data-v-36757f12]{line-height:18px;color:rgba(0,0,0,.45);font-size:16px;margin-bottom:12px}.panel-group .card-panel .card-panel-description .card-panel-num[data-v-36757f12]{font-size:20px}@media (max-width:550px){.card-panel-description[data-v-36757f12]{display:none}.card-panel-icon-wrapper[data-v-36757f12]{float:none!important;width:100%;height:100%;margin:0!important}.card-panel-icon-wrapper .svg-icon[data-v-36757f12]{display:block;margin:14px auto!important;float:none!important}}.dashboard-editor-container[data-v-79bf050c]{padding:32px;background-color:#f0f2f5;position:relative}.dashboard-editor-container .github-corner[data-v-79bf050c]{position:absolute;top:0;border:0;right:0}.dashboard-editor-container .chart-wrapper[data-v-79bf050c]{background:#fff;padding:16px 16px 0;margin-bottom:32px}@media (max-width:1024px){.chart-wrapper[data-v-79bf050c]{padding:8px}} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-e25b23da.6d24dacd.css b/hippo4j-console/src/main/resources/static/static/css/chunk-e25b23da.6d24dacd.css deleted file mode 100644 index 72a7cbfe..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-e25b23da.6d24dacd.css +++ /dev/null @@ -1 +0,0 @@ -.waves-ripple{position:absolute;border-radius:100%;background-color:rgba(0,0,0,.15);background-clip:padding-box;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transform:scale(0);transform:scale(0);opacity:1}.waves-ripple.z-active{opacity:0;-webkit-transform:scale(2);transform:scale(2);-webkit-transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,-webkit-transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out;transition:opacity 1.2s ease-out,transform .6s ease-out,-webkit-transform .6s ease-out}.pagination-container[data-v-6af373ef]{background:#fff;padding:32px 16px}.pagination-container.hidden[data-v-6af373ef]{display:none} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-e5408722.a767bfa2.css b/hippo4j-console/src/main/resources/static/static/css/chunk-e5408722.a767bfa2.css deleted file mode 100644 index ca8a7382..00000000 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-e5408722.a767bfa2.css +++ /dev/null @@ -1 +0,0 @@ -.social-signup-container[data-v-7309fbbb]{margin:20px 0}.social-signup-container .sign-btn[data-v-7309fbbb]{display:inline-block;cursor:pointer}.social-signup-container .icon[data-v-7309fbbb]{color:#fff;font-size:24px;margin-top:8px}.social-signup-container .qq-svg-container[data-v-7309fbbb],.social-signup-container .wx-svg-container[data-v-7309fbbb]{display:inline-block;width:40px;height:40px;line-height:40px;text-align:center;padding-top:1px;border-radius:4px;margin-bottom:20px;margin-right:5px}.social-signup-container .wx-svg-container[data-v-7309fbbb]{background-color:#24da70}.social-signup-container .qq-svg-container[data-v-7309fbbb]{background-color:#6ba2d6;margin-left:50px}@supports (-webkit-mask:none) and (not (cater-color:#fff)){.login-container .el-input input{color:#fff}}.login-container .el-input{display:inline-block;height:47px;width:85%}.login-container .el-input input{background:transparent;border:0;-webkit-appearance:none;border-radius:0;padding:12px 5px 12px 15px;color:#fff;height:47px;caret-color:#fff}.login-container .el-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #283443 inset!important;box-shadow:inset 0 0 0 1000px #283443!important;-webkit-text-fill-color:#fff!important}.login-container .el-form-item{border:1px solid hsla(0,0%,100%,.1);background:rgba(0,0,0,.1);border-radius:5px;color:#454545}.login-container[data-v-0189cd00]{min-height:100%;width:100%;background-color:#2d3a4b;overflow:hidden}.login-container .login-form[data-v-0189cd00]{position:relative;width:520px;max-width:100%;padding:160px 35px 0;margin:0 auto;overflow:hidden}.login-container .tips[data-v-0189cd00]{font-size:14px;color:#fff;margin-bottom:10px}.login-container .tips span[data-v-0189cd00]:first-of-type{margin-right:16px}.login-container .svg-container[data-v-0189cd00]{padding:6px 5px 6px 15px;color:#889aa4;vertical-align:middle;width:30px;display:inline-block}.login-container .title-container[data-v-0189cd00]{position:relative}.login-container .title-container .title[data-v-0189cd00]{font-size:26px;color:#eee;margin:0 auto 40px auto;text-align:center;font-weight:700}.login-container .show-pwd[data-v-0189cd00]{position:absolute;right:10px;top:7px;font-size:16px;color:#889aa4;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.login-container .thirdparty-button[data-v-0189cd00]{position:absolute;right:0;bottom:6px}@media only screen and (max-width:470px){.login-container .thirdparty-button[data-v-0189cd00]{display:none}} \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-45e73af7.13821f5e.css b/hippo4j-console/src/main/resources/static/static/css/chunk-ef888edc.5f8941eb.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-45e73af7.13821f5e.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-ef888edc.5f8941eb.css diff --git a/hippo4j-console/src/main/resources/static/static/css/chunk-libs.5cf311f0.css b/hippo4j-console/src/main/resources/static/static/css/chunk-libs.3dfb7769.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-libs.5cf311f0.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-libs.3dfb7769.css diff --git a/hippo4j-console/src/main/resources/static/static/js/app.146dd351.js b/hippo4j-console/src/main/resources/static/static/js/app.146dd351.js new file mode 100644 index 00000000..fc155216 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/app.146dd351.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,n){e.exports=n("56d7")},"0334":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-batch-create",use:"icon-batch-create-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"034c":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tenant_two",use:"icon-tenant_two-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"0781":function(e,t,n){"use strict";n.r(t);var a=n("24ab"),i=n.n(a),o=n("83d6"),c=n.n(o),s=c.a.showSettings,l=c.a.tagsView,r=c.a.fixedHeader,d=c.a.sidebarLogo,h={theme:i.a.theme,showSettings:s,tagsView:l,fixedHeader:r,sidebarLogo:d},u={CHANGE_SETTING:function(e,t){var n=t.key,a=t.value;e.hasOwnProperty(n)&&(e[n]=a)}},p={changeSetting:function(e,t){var n=e.commit;n("CHANGE_SETTING",t)}};t["default"]={namespaced:!0,state:h,mutations:u,actions:p}},"07c6":function(e,t,n){"use strict";n("48c1")},"096e":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-skill",use:"icon-skill-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"0f9a":function(e,t,n){"use strict";n.r(t);var a=n("c80c"),i=(n("96cf"),n("3b8d")),o=n("b775");function c(e){return Object(o["a"])({url:"/hippo4j/v1/cs/auth/login",method:"post",data:e})}var s=n("5f87"),l=n("a18c"),r={token:Object(s["a"])(),name:"",avatar:"",introduction:"",roles:[]},d={SET_TOKEN:function(e,t){e.token=t},SET_INTRODUCTION:function(e,t){e.introduction=t},SET_NAME:function(e,t){e.name=t},SET_AVATAR:function(e,t){e.avatar=t},SET_ROLES:function(e,t){e.roles=t}},h={login:function(e,t){var n=e.commit,a=t.username,i=t.password;return new Promise((function(e,t){c({username:a.trim(),password:i,rememberMe:1}).then((function(t){var a=t.data,i=t.roles;n("SET_TOKEN",a),localStorage.setItem("roles",JSON.stringify(i)),Object(s["c"])(a),e()})).catch((function(e){alert("登录失败"),t(e)}))}))},getInfo:function(e){var t=e.commit;e.state;return new Promise((function(e,n){var a={};a.roles=JSON.parse(localStorage.getItem("roles")),t("SET_ROLES",a.roles),e(a)}))},logout:function(e){var t=e.commit;e.state;return new Promise((function(e){t("SET_TOKEN",""),t("SET_ROLES",[]),Object(s["b"])(),Object(l["d"])(),e()}))},resetToken:function(e){var t=e.commit;return new Promise((function(e){t("SET_TOKEN",""),t("SET_ROLES",[]),Object(s["b"])(),e()}))},changeRoles:function(e,t){var n=e.commit,o=e.dispatch;return new Promise(function(){var e=Object(i["a"])(Object(a["a"])().mark((function e(i){var c,r,d,h;return Object(a["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return c=t+"-token",n("SET_TOKEN",c),Object(s["c"])(c),e.next=5,o("getInfo");case 5:return r=e.sent,d=r.roles,Object(l["d"])(),e.next=10,o("permission/generateRoutes",d,{root:!0});case 10:h=e.sent,l["c"].addRoutes(h),o("tagsView/delAllViews",null,{root:!0}),i();case 14:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}};t["default"]={namespaced:!0,state:r,mutations:d,actions:h}},"119b":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-other4",use:"icon-other4-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"12a5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-shopping",use:"icon-shopping-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},1424:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tenant_logo2",use:"icon-tenant_logo2-usage",viewBox:"0 0 1331 1024",content:''});c.a.add(s);t["default"]=s},1430:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-qq",use:"icon-qq-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"158d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item",use:"icon-item-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},1695:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-thread_pool_Instance",use:"icon-thread_pool_Instance-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},1779:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-bug",use:"icon-bug-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"187a":function(e,t,n){},"18f0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},1994:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-user-cfg",use:"icon-user-cfg-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"24ab":function(e,t,n){e.exports={theme:"#1890ff"}},2538:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-json",use:"icon-json-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},2580:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-language",use:"icon-language-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"273b":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-running",use:"icon-running-usage",viewBox:"0 0 1129 1024",content:''});c.a.add(s);t["default"]=s},"273d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-user6",use:"icon-user6-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"29aa":function(e,t,n){},"2a3d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"2b97":function(e,t,n){},"2f11":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-peoples",use:"icon-peoples-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},3046:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-money",use:"icon-money-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"30c3":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"31c2":function(e,t,n){"use strict";n.r(t),n.d(t,"filterAsyncRoutes",(function(){return c}));var a=n("db72"),i=(n("ac6a"),n("6762"),n("2fdb"),n("a18c"));function o(e,t){return!t.meta||!t.meta.roles||e.some((function(e){return t.meta.roles.includes(e)}))}function c(e,t){var n=[];return e.forEach((function(e){var i=Object(a["a"])({},e);o(t,i)&&(i.children&&(i.children=c(i.children,t)),n.push(i))})),n}var s={routes:[],addRoutes:[]},l={SET_ROUTES:function(e,t){e.addRoutes=t,e.routes=i["b"].concat(t)}},r={generateRoutes:function(e,t){var n=e.commit;return new Promise((function(e){var a;a=t.includes("ROLE_ADMIN")?i["a"]||[]:c(i["a"],t),n("SET_ROUTES",a),e(a)}))}};t["default"]={namespaced:!0,state:s,mutations:l,actions:r}},3289:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-list",use:"icon-list-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},3743:function(e,t,n){"use strict";n("5b1d")},3749:function(e,t,n){"use strict";n("3f7d")},"3da9":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-thread_logo",use:"icon-thread_logo-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"3f7d":function(e,t,n){},4213:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-link3",use:"icon-link3-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"42e9":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-instance_logo",use:"icon-instance_logo-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},4360:function(e,t,n){"use strict";n("a481"),n("ac6a");var a=n("2b0e"),i=n("2f62"),o=(n("7f7f"),{sidebar:function(e){return e.app.sidebar},size:function(e){return e.app.size},device:function(e){return e.app.device},visitedViews:function(e){return e.tagsView.visitedViews},cachedViews:function(e){return e.tagsView.cachedViews},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name},introduction:function(e){return e.user.introduction},roles:function(e){return e.user.roles},permission_routes:function(e){return e.permission.routes},errorLogs:function(e){return e.errorLog.logs}}),c=o;a["default"].use(i["a"]);var s=n("c653"),l=s.keys().reduce((function(e,t){var n=t.replace(/^\.\/(.*)\.\w+$/,"$1"),a=s(t);return e[n]=a.default,e}),{}),r=new i["a"].Store({modules:l,getters:c});t["a"]=r},"441c":function(e,t,n){},"47f1":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"47ff":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-message",use:"icon-message-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"48c1":function(e,t,n){},"4d49":function(e,t,n){"use strict";n.r(t);var a={logs:[]},i={ADD_ERROR_LOG:function(e,t){e.logs.push(t)},CLEAR_ERROR_LOG:function(e){e.logs.splice(0)}},o={addErrorLog:function(e,t){var n=e.commit;n("ADD_ERROR_LOG",t)},clearErrorLog:function(e){var t=e.commit;t("CLEAR_ERROR_LOG")}};t["default"]={namespaced:!0,state:a,mutations:i,actions:o}},"4df5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:''});c.a.add(s);t["default"]=s},"51ff":function(e,t,n){var a={"./404.svg":"a14a","./batch-create.svg":"0334","./battery-line.svg":"659b","./bug.svg":"1779","./cfg-datasouce.svg":"ce80","./chart.svg":"c829","./clipboard.svg":"bc35","./component.svg":"56d6","./dashboard.svg":"f782","./dashboard2.svg":"ea93","./documentation.svg":"90fb","./drag.svg":"9bbf","./edit.svg":"aa46","./education.svg":"ad1c","./email.svg":"cbb7","./example.svg":"30c3","./excel.svg":"6599","./exe-cfg.svg":"c309","./exit-fullscreen.svg":"dbc7","./eye-open.svg":"d7ec","./eye.svg":"4df5","./fail.svg":"9448","./form.svg":"eb1b","./fullscreen.svg":"9921","./guide.svg":"6683","./icon.svg":"9d91","./instance_logo.svg":"42e9","./item.svg":"158d","./item4.svg":"f385","./item_logo.svg":"b444","./item_logo2.svg":"ac67","./item_logo3.svg":"5f29","./item_logo4.svg":"8811","./item_logo_1.svg":"d314","./item_three.svg":"bddf","./item_two.svg":"d50e","./json.svg":"2538","./language.svg":"2580","./lessee.svg":"dbd7","./link.svg":"18f0","./link3.svg":"4213","./list.svg":"3289","./lock.svg":"ab00","./log.svg":"fea0","./log3.svg":"6ba9","./message.svg":"47ff","./money.svg":"3046","./nested.svg":"dcf8","./notify.svg":"5448","./other4.svg":"119b","./password.svg":"2a3d","./pdf.svg":"f9a1","./people.svg":"d056","./peoples.svg":"2f11","./pool3.svg":"a551","./project.svg":"69e4","./qq.svg":"1430","./running.svg":"273b","./search.svg":"8e8d","./shopping.svg":"12a5","./size.svg":"8644","./skill.svg":"096e","./star.svg":"708a","./success.svg":"a8cf","./tab.svg":"8fb7","./table.svg":"47f1","./task-cfg.svg":"7824","./task-tmp.svg":"90d2","./tenant_logo.svg":"67a0","./tenant_logo2.svg":"1424","./tenant_two.svg":"034c","./theme.svg":"e534","./threadPool_logo1.svg":"b6d1","./threadPool_logo2.svg":"9bc4","./thread_logo.svg":"3da9","./thread_pool_Instance.svg":"1695","./threadpool_logo.svg":"eb7b","./tree-table.svg":"e7c8","./tree.svg":"93cd","./user-cfg.svg":"1994","./user.svg":"b3b5","./user6.svg":"273d","./vessel3.svg":"6e71","./wechat.svg":"80da","./work.svg":"7bb0","./zip.svg":"8aa6"};function i(e){var t=o(e);return n(t)}function o(e){var t=a[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}i.keys=function(){return Object.keys(a)},i.resolve=o,e.exports=i,i.id="51ff"},5448:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-notify",use:"icon-notify-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"54ff":function(e,t,n){},"56d6":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-component",use:"icon-component-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"56d7":function(e,t,n){"use strict";n.r(t);var a={};n.r(a),n.d(a,"parseTime",(function(){return j["e"]})),n.d(a,"formatTime",(function(){return j["c"]})),n.d(a,"timeAgo",(function(){return P})),n.d(a,"numberFormatter",(function(){return I})),n.d(a,"toThousandFilter",(function(){return q})),n.d(a,"uppercaseFirst",(function(){return R}));n("456d"),n("ac6a"),n("cadf"),n("551c"),n("f751"),n("097d");var i=n("2b0e"),o=n("a78e"),c=n.n(o),s=(n("f5df"),n("5c96")),l=n.n(s),r=(n("24ab"),n("b20f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)}),d=[],h={name:"App"},u=h,p=n("2877"),v=Object(p["a"])(u,r,d,!1,null,null,null),m=v.exports,f=n("4360"),w=n("a18c"),g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isExternal?n("div",e._g({staticClass:"svg-external-icon svg-icon",style:e.styleExternalIcon},e.$listeners)):n("svg",e._g({class:e.svgClass,attrs:{"aria-hidden":"true"}},e.$listeners),[n("use",{attrs:{"xlink:href":e.iconName}})])},b=[],x=n("61f7"),y={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{isExternal:function(){return Object(x["a"])(this.iconClass)},iconName:function(){return"#icon-".concat(this.iconClass)},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"},styleExternalIcon:function(){return{mask:"url(".concat(this.iconClass,") no-repeat 50% 50%"),"-webkit-mask":"url(".concat(this.iconClass,") no-repeat 50% 50%")}}}},z=y,M=(n("64df"),Object(p["a"])(z,g,b,!1,null,"f9f7fefc",null)),V=M.exports;i["default"].component("svg-icon",V);var _=n("51ff"),C=function(e){return e.keys().map(e)};C(_);var k=n("c80c"),H=n("db72"),E=(n("96cf"),n("3b8d")),L=n("323e"),B=n.n(L),F=(n("a5d8"),n("5f87")),O=n("83d6"),A=n.n(O),D=A.a.title||"Vue Element Admin";function S(e){return e?"".concat(e," - ").concat(D):"".concat(D)}B.a.configure({showSpinner:!1});var T=["/login","/auth-redirect"];w["c"].beforeEach(function(){var e=Object(E["a"])(Object(k["a"])().mark((function e(t,n,a){var i,o,c,l,r;return Object(k["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(B.a.start(),document.title=S(t.meta.title),i=Object(F["a"])(),!i){e.next=35;break}if("/login"!==t.path){e.next=9;break}a({path:"/"}),B.a.done(),e.next=33;break;case 9:if(o=f["a"].getters.roles&&f["a"].getters.roles.length>0,!o){e.next=14;break}a(),e.next=33;break;case 14:return e.prev=14,e.next=17,f["a"].dispatch("user/getInfo");case 17:return c=e.sent,l=c.roles,e.next=21,f["a"].dispatch("permission/generateRoutes",l);case 21:r=e.sent,w["c"].addRoutes(r),a(Object(H["a"])(Object(H["a"])({},t),{},{replace:!0})),e.next=33;break;case 26:return e.prev=26,e.t0=e["catch"](14),e.next=30,f["a"].dispatch("user/resetToken");case 30:s["Message"].error(e.t0||"Has Error"),a("/login?redirect=".concat(t.path)),B.a.done();case 33:e.next=36;break;case 35:-1!==T.indexOf(t.path)?a():(a("/login?redirect=".concat(t.path)),B.a.done());case 36:case"end":return e.stop()}}),e,null,[[14,26]])})));return function(t,n,a){return e.apply(this,arguments)}}()),w["c"].afterEach((function(){B.a.done()}));n("6b54"),n("a481"),n("c5f6");var j=n("ed08");function $(e,t){return 1===e?e+t:e+t+"s"}function P(e){var t=Date.now()/1e3-Number(e);return t<3600?$(~~(t/60)," minute"):t<86400?$(~~(t/3600)," hour"):$(~~(t/86400)," day")}function I(e,t){for(var n=[{value:1e18,symbol:"E"},{value:1e15,symbol:"P"},{value:1e12,symbol:"T"},{value:1e9,symbol:"G"},{value:1e6,symbol:"M"},{value:1e3,symbol:"k"}],a=0;a=n[a].value)return(e/n[a].value+.1).toFixed(t).replace(/\.0+$|(\.[0-9]*[1-9])0+$/,"$1")+n[a].symbol;return e.toString()}function q(e){return(+e||0).toString().replace(/^-?\d+/g,(function(e){return e.replace(/(?=(?!\b)(\d{3})+$)/g,",")}))}function R(e){return e.charAt(0).toUpperCase()+e.slice(1)}for(var N=n("313e"),W=n("00e7"),G=n.n(W),U=(n("3b2b"),n("2d63")),J=n("75fc"),Z=n("96eb"),K=n.n(Z),X={admin:{token:"admin-token"},editor:{token:"editor-token"}},Y={"admin-token":{roles:["admin"],introduction:"I am a super administrator",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",name:"Super Admin"},"editor-token":{roles:["editor"],introduction:"I am an editor",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",name:"Normal Editor"}},Q=[{url:"/user/login",type:"post",response:function(e){var t=e.body.username,n=X[t];return n?{code:"20000",data:n}:{code:"60204",message:"Account and password are incorrect."}}},{url:"/user/info.*",type:"get",response:function(e){var t=e.query.token,n=Y[t];return n?{code:"20000",data:n}:{code:"50008",message:"Login failed, unable to get user details."}}},{url:"/user/logout",type:"post",response:function(e){return{code:"20000",data:"success"}}}],ee=[{path:"/redirect",component:"layout/Layout",hidden:!0,children:[{path:"/redirect/:path*",component:"views/redirect/index"}]},{path:"/login",component:"views/login/index",hidden:!0},{path:"/auth-redirect",component:"views/login/auth-redirect",hidden:!0},{path:"/404",component:"views/error-page/404",hidden:!0},{path:"/401",component:"views/error-page/401",hidden:!0},{path:"",component:"layout/Layout",redirect:"dashboard",children:[{path:"dashboard",component:"views/dashboard/index",name:"Dashboard",meta:{title:"Dashboard",icon:"dashboard",affix:!0}}]},{path:"/documentation",component:"layout/Layout",children:[{path:"index",component:"views/documentation/index",name:"Documentation",meta:{title:"Documentation",icon:"documentation",affix:!0}}]},{path:"/guide",component:"layout/Layout",redirect:"/guide/index",children:[{path:"index",component:"views/guide/index",name:"Guide",meta:{title:"Guide",icon:"guide",noCache:!0}}]}],te=[{path:"/permission",component:"layout/Layout",redirect:"/permission/index",alwaysShow:!0,meta:{title:"Permission",icon:"lock",roles:["admin","editor"]},children:[{path:"page",component:"views/permission/page",name:"PagePermission",meta:{title:"Page Permission11111",roles:["admin"]}},{path:"directive",component:"views/permission/directive",name:"DirectivePermission",meta:{title:"Directive Permission"}},{path:"role",component:"views/permission/role",name:"RolePermission",meta:{title:"Role Permission",roles:["admin"]}}]},{path:"/icon",component:"layout/Layout",children:[{path:"index",component:"views/icons/index",name:"Icons",meta:{title:"Icons",icon:"icon",noCache:!0}}]},{path:"/components",component:"layout/Layout",redirect:"noRedirect",name:"ComponentDemo",meta:{title:"Components",icon:"component"},children:[{path:"tinymce",component:"views/components-demo/tinymce",name:"TinymceDemo",meta:{title:"Tinymce"}},{path:"markdown",component:"views/components-demo/markdown",name:"MarkdownDemo",meta:{title:"Markdown"}},{path:"json-editor",component:"views/components-demo/json-editor",name:"JsonEditorDemo",meta:{title:"Json Editor"}},{path:"split-pane",component:"views/components-demo/split-pane",name:"SplitpaneDemo",meta:{title:"SplitPane"}},{path:"avatar-upload",component:"views/components-demo/avatar-upload",name:"AvatarUploadDemo",meta:{title:"Avatar Upload"}},{path:"dropzone",component:"views/components-demo/dropzone",name:"DropzoneDemo",meta:{title:"Dropzone"}},{path:"sticky",component:"views/components-demo/sticky",name:"StickyDemo",meta:{title:"Sticky"}},{path:"count-to",component:"views/components-demo/count-to",name:"CountToDemo",meta:{title:"Count To"}},{path:"mixin",component:"views/components-demo/mixin",name:"ComponentMixinDemo",meta:{title:"componentMixin"}},{path:"back-to-top",component:"views/components-demo/back-to-top",name:"BackToTopDemo",meta:{title:"Back To Top"}},{path:"drag-dialog",component:"views/components-demo/drag-dialog",name:"DragDialogDemo",meta:{title:"Drag Dialog"}},{path:"drag-select",component:"views/components-demo/drag-select",name:"DragSelectDemo",meta:{title:"Drag Select"}},{path:"dnd-list",component:"views/components-demo/dnd-list",name:"DndListDemo",meta:{title:"Dnd List"}},{path:"drag-kanban",component:"views/components-demo/drag-kanban",name:"DragKanbanDemo",meta:{title:"Drag Kanban"}}]},{path:"/charts",component:"layout/Layout",redirect:"noRedirect",name:"Charts",meta:{title:"Charts",icon:"chart"},children:[{path:"keyboard",component:"views/charts/keyboard",name:"KeyboardChart",meta:{title:"Keyboard Chart",noCache:!0}},{path:"line",component:"views/charts/line",name:"LineChart",meta:{title:"Line Chart",noCache:!0}},{path:"mixchart",component:"views/charts/mixChart",name:"MixChart",meta:{title:"Mix Chart",noCache:!0}}]},{path:"/nested",component:"layout/Layout",redirect:"/nested/menu1/menu1-1",name:"Nested",meta:{title:"Nested",icon:"nested"},children:[{path:"menu1",component:"views/nested/menu1/index",name:"Menu1",meta:{title:"Menu1"},redirect:"/nested/menu1/menu1-1",children:[{path:"menu1-1",component:"views/nested/menu1/menu1-1",name:"Menu1-1",meta:{title:"Menu1-1"}},{path:"menu1-2",component:"views/nested/menu1/menu1-2",name:"Menu1-2",redirect:"/nested/menu1/menu1-2/menu1-2-1",meta:{title:"Menu1-2"},children:[{path:"menu1-2-1",component:"views/nested/menu1/menu1-2/menu1-2-1",name:"Menu1-2-1",meta:{title:"Menu1-2-1"}},{path:"menu1-2-2",component:"views/nested/menu1/menu1-2/menu1-2-2",name:"Menu1-2-2",meta:{title:"Menu1-2-2"}}]},{path:"menu1-3",component:"views/nested/menu1/menu1-3",name:"Menu1-3",meta:{title:"Menu1-3"}}]},{path:"menu2",name:"Menu2",component:"views/nested/menu2/index",meta:{title:"Menu2"}}]},{path:"/example",component:"layout/Layout",redirect:"/example/list",name:"Example",meta:{title:"Example",icon:"example"},children:[{path:"create",component:"views/example/create",name:"CreateArticle",meta:{title:"Create Article",icon:"edit"}},{path:"edit/:id(\\d+)",component:"views/example/edit",name:"EditArticle",meta:{title:"Edit Article",noCache:!0},hidden:!0},{path:"list",component:"views/example/list",name:"ArticleList",meta:{title:"Article List",icon:"list"}}]},{path:"/tab",component:"layout/Layout",children:[{path:"index",component:"views/tab/index",name:"Tab",meta:{title:"Tab",icon:"tab"}}]},{path:"/error",component:"layout/Layout",redirect:"noRedirect",name:"ErrorPages",meta:{title:"Error Pages",icon:"404"},children:[{path:"401",component:"views/error-page/401",name:"Page401",meta:{title:"Page 401",noCache:!0}},{path:"404",component:"views/error-page/404",name:"Page404",meta:{title:"Page 404",noCache:!0}}]},{path:"/error-log",component:"layout/Layout",redirect:"noRedirect",children:[{path:"log",component:"views/error-log/index",name:"ErrorLog",meta:{title:"Error Log",icon:"bug"}}]},{path:"/excel",component:"layout/Layout",redirect:"/excel/export-excel",name:"Excel",meta:{title:"Excel",icon:"excel"},children:[{path:"export-excel",component:"views/excel/export-excel",name:"ExportExcel",meta:{title:"Export Excel"}},{path:"export-selected-excel",component:"views/excel/select-excel",name:"SelectExcel",meta:{title:"Select Excel"}},{path:"export-merge-header",component:"views/excel/merge-header",name:"MergeHeader",meta:{title:"Merge Header"}},{path:"upload-excel",component:"views/excel/upload-excel",name:"UploadExcel",meta:{title:"Upload Excel"}}]},{path:"/zip",component:"layout/Layout",redirect:"/zip/download",alwaysShow:!0,meta:{title:"Zip",icon:"zip"},children:[{path:"download",component:"views/zip/index",name:"ExportZip",meta:{title:"Export Zip"}}]},{path:"/pdf",component:"layout/Layout",redirect:"/pdf/index",children:[{path:"index",component:"views/pdf/index",name:"PDF",meta:{title:"PDF",icon:"pdf"}}]},{path:"/pdf/download",component:"views/pdf/download",hidden:!0},{path:"/theme",component:"layout/Layout",redirect:"noRedirect",children:[{path:"index",component:"views/theme/index",name:"Theme",meta:{title:"Theme",icon:"theme"}}]},{path:"/clipboard",component:"layout/Layout",redirect:"noRedirect",children:[{path:"index",component:"views/clipboard/index",name:"ClipboardDemo",meta:{title:"Clipboard Demo",icon:"clipboard"}}]},{path:"/i18n",component:"layout/Layout",children:[{path:"index",component:"views/i18n-demo/index",name:"I18n",meta:{title:"I18n",icon:"international"}}]},{path:"external-link",component:"layout/Layout",children:[{path:"https://github.com/PanJiaChen/vue-element-admin",meta:{title:"External Link",icon:"link"}}]},{path:"*",redirect:"/404",hidden:!0}],ne=Object(j["b"])([].concat(Object(J["a"])(ee),Object(J["a"])(te))),ae=[{key:"admin",name:"admin",description:"Super Administrator. Have access to view all pages.",routes:ne},{key:"editor",name:"editor",description:"Normal Editor. Can see all pages except permission page",routes:ne.filter((function(e){return"/permission"!==e.path}))},{key:"visitor",name:"visitor",description:"Just a visitor. Can only see the home page and the document page",routes:[{path:"",redirect:"dashboard",children:[{path:"dashboard",name:"Dashboard",meta:{title:"dashboard",icon:"dashboard"}}]}]}],ie=[{url:"/routes",type:"get",response:function(e){return{code:2e4,data:ne}}},{url:"/roles",type:"get",response:function(e){return{code:2e4,data:ae}}},{url:"/role",type:"post",response:{code:2e4,data:{key:K.a.mock("@integer(300, 5000)")}}},{url:"/role/[A-Za-z0-9]",type:"put",response:{code:2e4,data:{status:"success"}}},{url:"/role/[A-Za-z0-9]",type:"delete",response:{code:2e4,data:{status:"success"}}}],oe=(n("7f7f"),[]),ce=100,se=0;se'});c.a.add(s);t["default"]=s},"5f87":function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"c",(function(){return s})),n.d(t,"b",(function(){return l}));var a=n("a78e"),i=n.n(a),o="Admin-Token";function c(){return i.a.get(o)}function s(e){return i.a.set(o,e)}function l(){return i.a.remove(o)}},"61f7":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n("6b54");function a(e){return/^(https?:|mailto:|tel:)/.test(e)}},"62ad":function(e,t,n){"use strict";n("c079")},"64df":function(e,t,n){"use strict";n("78bf")},6599:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-excel",use:"icon-excel-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"659b":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-battery-line",use:"icon-battery-line-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},6683:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-guide",use:"icon-guide-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"67a0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tenant_logo",use:"icon-tenant_logo-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"69e4":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-project",use:"icon-project-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"6ba9":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-log3",use:"icon-log3-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"6e71":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-vessel3",use:"icon-vessel3-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"708a":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-star",use:"icon-star-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},7467:function(e,t,n){"use strict";n("b62e")},7509:function(e,t,n){"use strict";n.r(t);var a=n("75fc"),i=n("768b"),o=(n("ac6a"),n("2d63")),c=(n("7f7f"),n("6762"),n("2fdb"),{visitedViews:[],cachedViews:[]}),s={ADD_VISITED_VIEW:function(e,t){e.visitedViews.some((function(e){return e.path===t.path}))||e.visitedViews.push(Object.assign({},t,{title:t.meta.title||"no-name"}))},ADD_CACHED_VIEW:function(e,t){e.cachedViews.includes(t.name)||t.meta.noCache||e.cachedViews.push(t.name)},DEL_VISITED_VIEW:function(e,t){var n,a=Object(o["a"])(e.visitedViews.entries());try{for(a.s();!(n=a.n()).done;){var c=Object(i["a"])(n.value,2),s=c[0],l=c[1];if(l.path===t.path){e.visitedViews.splice(s,1);break}}}catch(r){a.e(r)}finally{a.f()}},DEL_CACHED_VIEW:function(e,t){var n,a=Object(o["a"])(e.cachedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i===t.name){var c=e.cachedViews.indexOf(i);e.cachedViews.splice(c,1);break}}}catch(s){a.e(s)}finally{a.f()}},DEL_OTHERS_VISITED_VIEWS:function(e,t){e.visitedViews=e.visitedViews.filter((function(e){return e.meta.affix||e.path===t.path}))},DEL_OTHERS_CACHED_VIEWS:function(e,t){var n,a=Object(o["a"])(e.cachedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i===t.name){var c=e.cachedViews.indexOf(i);e.cachedViews=e.cachedViews.slice(c,c+1);break}}}catch(s){a.e(s)}finally{a.f()}},DEL_ALL_VISITED_VIEWS:function(e){var t=e.visitedViews.filter((function(e){return e.meta.affix}));e.visitedViews=t},DEL_ALL_CACHED_VIEWS:function(e){e.cachedViews=[]},UPDATE_VISITED_VIEW:function(e,t){var n,a=Object(o["a"])(e.visitedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.path===t.path){i=Object.assign(i,t);break}}}catch(c){a.e(c)}finally{a.f()}}},l={addView:function(e,t){var n=e.dispatch;n("addVisitedView",t),n("addCachedView",t)},addVisitedView:function(e,t){var n=e.commit;n("ADD_VISITED_VIEW",t)},addCachedView:function(e,t){var n=e.commit;n("ADD_CACHED_VIEW",t)},delView:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delVisitedView",t),n("delCachedView",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delVisitedView:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_VISITED_VIEW",t),e(Object(a["a"])(i.visitedViews))}))},delCachedView:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_CACHED_VIEW",t),e(Object(a["a"])(i.cachedViews))}))},delOthersViews:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delOthersVisitedViews",t),n("delOthersCachedViews",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delOthersVisitedViews:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_OTHERS_VISITED_VIEWS",t),e(Object(a["a"])(i.visitedViews))}))},delOthersCachedViews:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_OTHERS_CACHED_VIEWS",t),e(Object(a["a"])(i.cachedViews))}))},delAllViews:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delAllVisitedViews",t),n("delAllCachedViews",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delAllVisitedViews:function(e){var t=e.commit,n=e.state;return new Promise((function(e){t("DEL_ALL_VISITED_VIEWS"),e(Object(a["a"])(n.visitedViews))}))},delAllCachedViews:function(e){var t=e.commit,n=e.state;return new Promise((function(e){t("DEL_ALL_CACHED_VIEWS"),e(Object(a["a"])(n.cachedViews))}))},updateVisitedView:function(e,t){var n=e.commit;n("UPDATE_VISITED_VIEW",t)}};t["default"]={namespaced:!0,state:c,mutations:s,actions:l}},7824:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-task-cfg",use:"icon-task-cfg-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"78bf":function(e,t,n){},"7bb0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-work",use:"icon-work-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"80da":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-wechat",use:"icon-wechat-usage",viewBox:"0 0 128 110",content:''});c.a.add(s);t["default"]=s},8326:function(e,t,n){},"83d6":function(e,t){e.exports={title:"Hippo4J Web",showSettings:!0,tagsView:!0,fixedHeader:!1,sidebarLogo:!0,errorLog:"production"}},8644:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-size",use:"icon-size-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},8811:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_logo4",use:"icon-item_logo4-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"89f5":function(e,t,n){"use strict";n("29aa")},"8aa6":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-zip",use:"icon-zip-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"8e8d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-search",use:"icon-search-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"8fb7":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tab",use:"icon-tab-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"90d2":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-task-tmp",use:"icon-task-tmp-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"90fb":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-documentation",use:"icon-documentation-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"93cd":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},9448:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-fail",use:"icon-fail-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},"98fb":function(e,t,n){"use strict";n("54ff")},9921:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-fullscreen",use:"icon-fullscreen-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"9bbf":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-drag",use:"icon-drag-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},"9bc4":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-threadPool_logo2",use:"icon-threadPool_logo2-usage",viewBox:"0 0 1044 1024",content:''});c.a.add(s);t["default"]=s},"9d91":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-icon",use:"icon-icon-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},a14a:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-404",use:"icon-404-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},a18c:function(e,t,n){"use strict";var a,i,o=n("2b0e"),c=n("8c4f"),s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),e._v(" "),n("sidebar",{staticClass:"sidebar-container"}),e._v(" "),n("div",{staticClass:"main-container",class:{hasTagsView:e.needTagsView}},[n("div",{class:{"fixed-header":e.fixedHeader}},[n("navbar"),e._v(" "),e.needTagsView?n("tags-view"):e._e()],1),e._v(" "),n("app-main")],1)],1)},l=[],r=n("db72"),d=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"app-main"},[n("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[n("keep-alive",{attrs:{include:e.cachedViews}},[n("router-view",{key:e.key})],1)],1)],1)},h=[],u={name:"AppMain",computed:{cachedViews:function(){return this.$store.state.tagsView.cachedViews},key:function(){return this.$route.path}}},p=u,v=(n("bb12"),n("3749"),n("2877")),m=Object(v["a"])(p,d,h,!1,null,"92459f82",null),f=m.exports,w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"navbar"},[a("hamburger",{staticClass:"hamburger-container",attrs:{id:"hamburger-container","is-active":e.sidebar.opened},on:{toggleClick:e.toggleSideBar}}),e._v(" "),a("breadcrumb",{staticClass:"breadcrumb-container",attrs:{id:"breadcrumb-container"}}),e._v(" "),a("div",{staticClass:"right-menu"},["mobile"!==e.device?void 0:e._e(),e._v(" "),a("el-dropdown",{staticClass:"avatar-container right-menu-item hover-effect",attrs:{trigger:"click"}},[a("div",{staticClass:"avatar-wrapper"},[a("img",{staticClass:"user-avatar",attrs:{src:n("f561")}}),e._v(" "),a("i",{staticClass:"el-icon-caret-bottom"})]),e._v(" "),a("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[a("router-link",{attrs:{to:"/"}},[a("el-dropdown-item",[e._v("Dashboard")])],1),e._v(" "),a("el-dropdown-item",{attrs:{divided:""}},[a("span",{staticStyle:{display:"block"},on:{click:e.logout}},[e._v("Log Out")])])],1)],1)],2)],1)},g=[],b=n("c80c"),x=(n("96cf"),n("3b8d")),y=n("2f62"),z=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.levelList,(function(t,a){return n("el-breadcrumb-item",{key:t.path},["noRedirect"===t.redirect||a==e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){return n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})),1)],1)},M=[],V=(n("7f7f"),n("f559"),n("bd11")),_=n.n(V),C={data:function(){return{levelList:null}},watch:{$route:function(e){e.path.startsWith("/redirect/")||this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){return e.meta&&e.meta.title})),t=e[0];this.isDashboard(t)||(e=[{path:"/dashboard",meta:{title:"Dashboard"}}].concat(e)),this.levelList=e.filter((function(e){return e.meta&&e.meta.title&&!1!==e.meta.breadcrumb}))},isDashboard:function(e){var t=e&&e.name;return!!t&&t.trim().toLocaleLowerCase()==="Dashboard".toLocaleLowerCase()},pathCompile:function(e){var t=this.$route.params,n=_.a.compile(e);return n(t)},handleLink:function(e){var t=e.redirect,n=e.path;t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}},k=C,H=(n("89f5"),Object(v["a"])(k,z,M,!1,null,"1919fc1a",null)),E=H.exports,L=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticStyle:{padding:"0 15px"},on:{click:e.toggleClick}},[n("svg",{staticClass:"hamburger",class:{"is-active":e.isActive},attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:"64",height:"64"}},[n("path",{attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"}})])])},B=[],F={name:"Hamburger",props:{isActive:{type:Boolean,default:!1}},methods:{toggleClick:function(){this.$emit("toggleClick")}}},O=F,A=(n("d49d"),Object(v["a"])(O,L,B,!1,null,"49e15297",null)),D=A.exports,S=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.errorLogs.length>0?n("div",[n("el-badge",{staticStyle:{"line-height":"25px","margin-top":"-5px"},attrs:{"is-dot":!0},nativeOn:{click:function(t){e.dialogTableVisible=!0}}},[n("el-button",{staticStyle:{padding:"8px 10px"},attrs:{size:"small",type:"danger"}},[n("svg-icon",{attrs:{"icon-class":"bug"}})],1)],1),e._v(" "),n("el-dialog",{attrs:{visible:e.dialogTableVisible,width:"80%","append-to-body":""},on:{"update:visible":function(t){e.dialogTableVisible=t}}},[n("div",{attrs:{slot:"title"},slot:"title"},[n("span",{staticStyle:{"padding-right":"10px"}},[e._v("Error Log")]),e._v(" "),n("el-button",{attrs:{size:"mini",type:"primary",icon:"el-icon-delete"},on:{click:e.clearAll}},[e._v("Clear All")])],1),e._v(" "),n("el-table",{attrs:{data:e.errorLogs,border:""}},[n("el-table-column",{attrs:{label:"Message"},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.row;return[n("div",[n("span",{staticClass:"message-title"},[e._v("Msg:")]),e._v(" "),n("el-tag",{attrs:{type:"danger"}},[e._v("\n "+e._s(a.err.message)+"\n ")])],1),e._v(" "),n("br"),e._v(" "),n("div",[n("span",{staticClass:"message-title",staticStyle:{"padding-right":"10px"}},[e._v("Info: ")]),e._v(" "),n("el-tag",{attrs:{type:"warning"}},[e._v("\n "+e._s(a.vm.$vnode.tag)+" error in "+e._s(a.info)+"\n ")])],1),e._v(" "),n("br"),e._v(" "),n("div",[n("span",{staticClass:"message-title",staticStyle:{"padding-right":"16px"}},[e._v("Url: ")]),e._v(" "),n("el-tag",{attrs:{type:"success"}},[e._v("\n "+e._s(a.url)+"\n ")])],1)]}}],null,!1,3621415002)}),e._v(" "),n("el-table-column",{attrs:{label:"Stack"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(t.row.err.stack)+"\n ")]}}],null,!1,1726869048)})],1)],1)],1):e._e()},T=[],j={name:"ErrorLog",data:function(){return{dialogTableVisible:!1}},computed:{errorLogs:function(){return this.$store.getters.errorLogs}},methods:{clearAll:function(){this.dialogTableVisible=!1,this.$store.dispatch("errorLog/clearErrorLog")}}},$=j,P=(n("b36c"),Object(v["a"])($,S,T,!1,null,"be34583a",null)),I=P.exports,q={components:{Breadcrumb:E,Hamburger:D,ErrorLog:I},computed:Object(r["a"])({},Object(y["b"])(["sidebar","avatar","device"])),methods:{toggleSideBar:function(){this.$store.dispatch("app/toggleSideBar")},logout:function(){var e=Object(x["a"])(Object(b["a"])().mark((function e(){return Object(b["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.$cookie.delete("userName"),e.next=3,this.$store.dispatch("user/logout");case 3:this.$router.push("/login?redirect=".concat(this.$route.fullPath));case 4:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},R=q,N=(n("07c6"),Object(v["a"])(R,w,g,!1,null,"6ab05616",null)),W=N.exports,G=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:{"has-logo":e.showLogo}},[e.showLogo?n("logo",{attrs:{collapse:e.isCollapse}}):e._e(),e._v(" "),n("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[n("el-menu",{attrs:{"default-active":e.activeMenu,collapse:e.isCollapse,"background-color":e.variables.menuBg,"text-color":e.variables.menuText,"unique-opened":!1,"active-text-color":e.variables.menuActiveText,"collapse-transition":!1,mode:"vertical"}},e._l(e.permission_routes,(function(e){return n("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})),1)],1)],1)},U=[],J=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sidebar-logo-container",class:{collapse:e.collapse}},[n("transition",{attrs:{name:"sidebarLogoFade"}},[e.collapse?n("router-link",{key:"collapse",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title))])]):n("router-link",{key:"expand",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):e._e(),e._v(" "),n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title))])])],1)],1)},Z=[],K={name:"SidebarLogo",props:{collapse:{type:Boolean,required:!0}},data:function(){return{title:"hippo4j 1.4.0",logo:"https://images-machen.oss-cn-beijing.aliyuncs.com/20220808_hippo4j_logo.PNG"}}},X=K,Y=(n("98fb"),Object(v["a"])(X,J,Z,!1,null,"24887324",null)),Q=Y.exports,ee=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.item.hidden?e._e():n("div",{staticClass:"menu-wrapper"},[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{ref:"subMenu",attrs:{index:e.resolvePath(e.item.path),"popper-append-to-body":""}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta&&e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._v(" "),e._l(e.item.children,(function(t){return n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}})}))],2):[e.onlyOneChild.meta?n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta&&e.item.meta.icon,title:e.onlyOneChild.meta.title}})],1)],1):e._e()]],2)},te=[],ne=n("df7c"),ae=n.n(ne),ie=n("61f7"),oe={name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,a=n.icon,i=n.title,o=[];return a&&o.push(e("svg-icon",{attrs:{"icon-class":a}})),i&&o.push(e("span",{slot:"title"},[i])),o}},ce=oe,se=Object(v["a"])(ce,a,i,!1,null,null,null),le=se.exports,re=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("component",e._b({},"component",e.linkProps(e.to),!1),[e._t("default")],2)},de=[],he={props:{to:{type:String,required:!0}},methods:{linkProps:function(e){return Object(ie["a"])(e)?{is:"a",href:e,target:"_blank",rel:"noopener"}:{is:"router-link",to:e}}}},ue=he,pe=Object(v["a"])(ue,re,de,!1,null,null,null),ve=pe.exports,me={computed:{device:function(){return this.$store.state.app.device}},mounted:function(){this.fixBugIniOS()},methods:{fixBugIniOS:function(){var e=this,t=this.$refs.subMenu;if(t){var n=t.handleMouseleave;t.handleMouseleave=function(t){"mobile"!==e.device&&n(t)}}}}},fe={name:"SidebarItem",components:{Item:le,AppLink:ve},mixins:[me],props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return this.onlyOneChild=null,{}},methods:{hasOneShowingChild:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,a=t.filter((function(t){return!t.hidden&&(e.onlyOneChild=t,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=Object(r["a"])(Object(r["a"])({},n),{},{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return Object(ie["a"])(e)?e:Object(ie["a"])(this.basePath)?this.basePath:ae.a.resolve(this.basePath,e)}}},we=fe,ge=Object(v["a"])(we,ee,te,!1,null,null,null),be=ge.exports,xe=n("cf1e"),ye=n.n(xe),ze={components:{SidebarItem:be,Logo:Q},computed:Object(r["a"])(Object(r["a"])({},Object(y["b"])(["permission_routes","sidebar"])),{},{activeMenu:function(){var e=this.$route,t=e.meta,n=e.path;return t.activeMenu?t.activeMenu:n},showLogo:function(){return this.$store.state.settings.sidebarLogo},variables:function(){return ye.a},isCollapse:function(){return!this.sidebar.opened}})},Me=ze,Ve=Object(v["a"])(Me,G,U,!1,null,null,null),_e=Ve.exports,Ce=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"tags-view-container",attrs:{id:"tags-view-container"}},[n("scroll-pane",{ref:"scrollPane",staticClass:"tags-view-wrapper"},e._l(e.visitedViews,(function(t){return n("router-link",{key:t.path,ref:"tag",refInFor:!0,staticClass:"tags-view-item",class:e.isActive(t)?"active":"",attrs:{to:{path:t.path,query:t.query,fullPath:t.fullPath},tag:"span"},nativeOn:{mouseup:function(n){return"button"in n&&1!==n.button?null:e.closeSelectedTag(t)},contextmenu:function(n){return n.preventDefault(),e.openMenu(t,n)}}},[e._v("\n "+e._s(t.title)+"\n "),t.meta.affix?e._e():n("span",{staticClass:"el-icon-close",on:{click:function(n){return n.preventDefault(),n.stopPropagation(),e.closeSelectedTag(t)}}})])})),1),e._v(" "),n("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"contextmenu",style:{left:e.left+"px",top:e.top+"px"}},[n("li",{on:{click:function(t){return e.refreshSelectedTag(e.selectedTag)}}},[e._v("Refresh")]),e._v(" "),e.selectedTag.meta&&e.selectedTag.meta.affix?e._e():n("li",{on:{click:function(t){return e.closeSelectedTag(e.selectedTag)}}},[e._v("Close")]),e._v(" "),n("li",{on:{click:e.closeOthersTags}},[e._v("Close Others")]),e._v(" "),n("li",{on:{click:function(t){return e.closeAllTags(e.selectedTag)}}},[e._v("Close All")])])],1)},ke=[],He=(n("a481"),n("2d63")),Ee=n("75fc"),Le=(n("ac6a"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-scrollbar",{ref:"scrollContainer",staticClass:"scroll-container",attrs:{vertical:!1},nativeOn:{wheel:function(t){return t.preventDefault(),e.handleScroll(t)}}},[e._t("default")],2)}),Be=[],Fe=(n("20d6"),4),Oe={name:"ScrollPane",data:function(){return{left:0}},computed:{scrollWrapper:function(){return this.$refs.scrollContainer.$refs.wrap}},methods:{handleScroll:function(e){var t=e.wheelDelta||40*-e.deltaY,n=this.scrollWrapper;n.scrollLeft=n.scrollLeft+t/4},moveToTarget:function(e){var t=this.$refs.scrollContainer.$el,n=t.offsetWidth,a=this.scrollWrapper,i=this.$parent.$refs.tag,o=null,c=null;if(i.length>0&&(o=i[0],c=i[i.length-1]),o===e)a.scrollLeft=0;else if(c===e)a.scrollLeft=a.scrollWidth-n;else{var s=i.findIndex((function(t){return t===e})),l=i[s-1],r=i[s+1],d=r.$el.offsetLeft+r.$el.offsetWidth+Fe,h=l.$el.offsetLeft-Fe;d>a.scrollLeft+n?a.scrollLeft=d-n:h1&&void 0!==arguments[1]?arguments[1]:"/",a=[];return e.forEach((function(e){if(e.meta&&e.meta.affix){var i=ae.a.resolve(n,e.path);a.push({fullPath:i,path:i,name:e.name,meta:Object(r["a"])({},e.meta)})}if(e.children){var o=t.filterAffixTags(e.children,e.path);o.length>=1&&(a=[].concat(Object(Ee["a"])(a),Object(Ee["a"])(o)))}})),a},initTags:function(){var e,t=this.affixTags=this.filterAffixTags(this.routes),n=Object(He["a"])(t);try{for(n.s();!(e=n.n()).done;){var a=e.value;a.name&&this.$store.dispatch("tagsView/addVisitedView",a)}}catch(i){n.e(i)}finally{n.f()}},addTags:function(){var e=this.$route.name;return e&&this.$store.dispatch("tagsView/addView",this.$route),!1},moveToCurrentTag:function(){var e=this,t=this.$refs.tag;this.$nextTick((function(){var n,a=Object(He["a"])(t);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.to.path===e.$route.path){e.$refs.scrollPane.moveToTarget(i),i.to.fullPath!==e.$route.fullPath&&e.$store.dispatch("tagsView/updateVisitedView",e.$route);break}}}catch(o){a.e(o)}finally{a.f()}}))},refreshSelectedTag:function(e){var t=this;this.$store.dispatch("tagsView/delCachedView",e).then((function(){var n=e.fullPath;t.$nextTick((function(){t.$router.replace({path:"/redirect"+n})}))}))},closeSelectedTag:function(e){var t=this;this.$store.dispatch("tagsView/delView",e).then((function(n){var a=n.visitedViews;t.isActive(e)&&t.toLastView(a,e)}))},closeOthersTags:function(){var e=this;this.$router.push(this.selectedTag),this.$store.dispatch("tagsView/delOthersViews",this.selectedTag).then((function(){e.moveToCurrentTag()}))},closeAllTags:function(e){var t=this;this.$store.dispatch("tagsView/delAllViews").then((function(n){var a=n.visitedViews;t.affixTags.some((function(t){return t.path===e.path}))||t.toLastView(a,e)}))},toLastView:function(e,t){var n=e.slice(-1)[0];n?this.$router.push(n):"Dashboard"===t.name?this.$router.replace({path:"/redirect"+t.fullPath}):this.$router.push("/")},openMenu:function(e,t){var n=105,a=this.$el.getBoundingClientRect().left,i=this.$el.offsetWidth,o=i-n,c=t.clientX-a+15;this.left=c>o?o:c,this.top=t.clientY,this.visible=!0,this.selectedTag=e},closeMenu:function(){this.visible=!1}}},je=Te,$e=(n("595c"),n("62ad"),Object(v["a"])(je,Ce,ke,!1,null,"c64b5a6c",null)),Pe=$e.exports,Ie=n("4360"),qe=document,Re=qe.body,Ne=992,We={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&Ie["a"].dispatch("app/closeSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.$_resizeHandler)},beforeDestroy:function(){window.removeEventListener("resize",this.$_resizeHandler)},mounted:function(){var e=this.$_isMobile();e&&(Ie["a"].dispatch("app/toggleDevice","mobile"),Ie["a"].dispatch("app/closeSideBar",{withoutAnimation:!0}))},methods:{$_isMobile:function(){var e=Re.getBoundingClientRect();return e.width-1'});c.a.add(s);t["default"]=s},a8cf:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-success",use:"icon-success-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},aa46:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-edit",use:"icon-edit-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},ab00:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-lock",use:"icon-lock-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},ac67:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_logo2",use:"icon-item_logo2-usage",viewBox:"0 0 1027 1024",content:''});c.a.add(s);t["default"]=s},ad1c:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-education",use:"icon-education-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},b20f:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},b36c:function(e,t,n){"use strict";n("187a")},b3b5:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},b444:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_logo",use:"icon-item_logo-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},b62e:function(e,t,n){},b6d1:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-threadPool_logo1",use:"icon-threadPool_logo1-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},b775:function(e,t,n){"use strict";var a=n("bc3a"),i=n.n(a),o=n("5c96"),c=n("4360"),s=n("5f87"),l=n("a18c"),r=i.a.create({baseURL:"",timeout:2e4});r.interceptors.request.use((function(e){return c["a"].getters.token&&(e.headers["Authorization"]=Object(s["a"])()),e}),(function(e){return console.log(e),Promise.reject(e)})),r.interceptors.response.use((function(e){var t=e.data;if("A000004"!==t.code){if("20000"!==t.code&&"0"!==t.code&&"200"!==t.code)return Object(o["Message"])({message:t.message||"Error",type:"error",duration:5e3}),"50008"!==t.code&&"50012"!==t.code&&"50014"!==t.code||o["MessageBox"].confirm("You have been logged out, you can cancel to stay on this page, or log in again","Confirm logout",{confirmButtonText:"Re-Login",cancelButtonText:"Cancel",type:"warning"}).then((function(){c["a"].dispatch("user/resetToken").then((function(){location.reload()}))})),Promise.reject(new Error(t.message||"Error"));var n=e.data,a=n.code;if("0"===a){var i=n.data;return i}return"200"===a?n:t}Object(s["b"])(),Object(l["d"])(),alert(t.message),document.location.href="index.html"}),(function(e){return console.log("err"+e),Object(o["Message"])({message:e.message,type:"error",duration:5e3}),Promise.reject(e)})),t["a"]=r},bb12:function(e,t,n){"use strict";n("2b97")},bc35:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-clipboard",use:"icon-clipboard-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},bddf:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_three",use:"icon-item_three-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},c079:function(e,t,n){},c309:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-exe-cfg",use:"icon-exe-cfg-usage",viewBox:"0 0 1529 1024",content:''});c.a.add(s);t["default"]=s},c653:function(e,t,n){var a={"./app.js":"d9cd","./errorLog.js":"4d49","./permission.js":"31c2","./settings.js":"0781","./tagsView.js":"7509","./user.js":"0f9a"};function i(e){var t=o(e);return n(t)}function o(e){var t=a[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}i.keys=function(){return Object.keys(a)},i.resolve=o,e.exports=i,i.id="c653"},c829:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-chart",use:"icon-chart-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},cbb7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-email",use:"icon-email-usage",viewBox:"0 0 128 96",content:''});c.a.add(s);t["default"]=s},ce80:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-cfg-datasouce",use:"icon-cfg-datasouce-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},cf1e:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409eff",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},d056:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-people",use:"icon-people-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},d314:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_logo_1",use:"icon-item_logo_1-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},d49d:function(e,t,n){"use strict";n("8326")},d50e:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-item_two",use:"icon-item_two-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},d7ec:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-eye-open",use:"icon-eye-open-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},d9cd:function(e,t,n){"use strict";n.r(t);var a=n("a78e"),i=n.n(a),o={sidebar:{opened:!i.a.get("sidebarStatus")||!!+i.a.get("sidebarStatus"),withoutAnimation:!1},device:"desktop",size:i.a.get("size")||"medium"},c={TOGGLE_SIDEBAR:function(e){e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1,e.sidebar.opened?i.a.set("sidebarStatus",1):i.a.set("sidebarStatus",0)},CLOSE_SIDEBAR:function(e,t){i.a.set("sidebarStatus",0),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t},SET_SIZE:function(e,t){e.size=t,i.a.set("size",t)}},s={toggleSideBar:function(e){var t=e.commit;t("TOGGLE_SIDEBAR")},closeSideBar:function(e,t){var n=e.commit,a=t.withoutAnimation;n("CLOSE_SIDEBAR",a)},toggleDevice:function(e,t){var n=e.commit;n("TOGGLE_DEVICE",t)},setSize:function(e,t){var n=e.commit;n("SET_SIZE",t)}};t["default"]={namespaced:!0,state:o,mutations:c,actions:s}},dbc7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-exit-fullscreen",use:"icon-exit-fullscreen-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},dbd7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-lessee",use:"icon-lessee-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},dcf8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},e534:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-theme",use:"icon-theme-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},e7c8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-tree-table",use:"icon-tree-table-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},ea93:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-dashboard2",use:"icon-dashboard2-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},eb1b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:''});c.a.add(s);t["default"]=s},eb7b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-threadpool_logo",use:"icon-threadpool_logo-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},ed08:function(e,t,n){"use strict";n.d(t,"e",(function(){return i})),n.d(t,"c",(function(){return o})),n.d(t,"d",(function(){return c})),n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return l}));n("3b2b"),n("4917"),n("4f7f"),n("5df3"),n("1c4c"),n("28a5"),n("ac6a"),n("456d"),n("a481"),n("6b54");var a=n("7618");function i(e,t){if(0===arguments.length)return null;var n,i=t||"{y}-{m}-{d} {h}:{i}:{s}";"object"===Object(a["a"])(e)?n=e:("string"===typeof e&&/^[0-9]+$/.test(e)&&(e=parseInt(e)),"number"===typeof e&&10===e.toString().length&&(e*=1e3),n=new Date(e));var o={y:n.getFullYear(),m:n.getMonth()+1,d:n.getDate(),h:n.getHours(),i:n.getMinutes(),s:n.getSeconds(),a:n.getDay()},c=i.replace(/{(y|m|d|h|i|s|a)+}/g,(function(e,t){var n=o[t];return"a"===t?["日","一","二","三","四","五","六"][n]:(e.length>0&&n<10&&(n="0"+n),n||0)}));return c}function o(e,t){e=10===(""+e).length?1e3*parseInt(e):+e;var n=new Date(e),a=Date.now(),o=(a-n)/1e3;return o<30?"刚刚":o<3600?Math.ceil(o/60)+"分钟前":o<86400?Math.ceil(o/3600)+"小时前":o<172800?"1天前":t?i(e,t):n.getMonth()+1+"月"+n.getDate()+"日"+n.getHours()+"时"+n.getMinutes()+"分"}function c(e){var t=e.split("?")[1];return t?JSON.parse('{"'+decodeURIComponent(t).replace(/"/g,'\\"').replace(/&/g,'","').replace(/=/g,'":"').replace(/\+/g," ")+'"}'):{}}function s(e,t,n){var a,i,o,c,s,l=function l(){var r=+new Date-c;r0?a=setTimeout(l,t-r):(a=null,n||(s=e.apply(o,i),a||(o=i=null)))};return function(){for(var i=arguments.length,r=new Array(i),d=0;d'});c.a.add(s);t["default"]=s},f561:function(e,t,n){e.exports=n.p+"static/img/hippo4j.ecba1844.gif"},f782:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-dashboard",use:"icon-dashboard-usage",viewBox:"0 0 128 100",content:''});c.a.add(s);t["default"]=s},f9a1:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-pdf",use:"icon-pdf-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s},fea0:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),o=n("21a1"),c=n.n(o),s=new i.a({id:"icon-log",use:"icon-log-usage",viewBox:"0 0 1024 1024",content:''});c.a.add(s);t["default"]=s}},[[0,"runtime","chunk-elementUI","chunk-libs"]]]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/app.6ec24944.js b/hippo4j-console/src/main/resources/static/static/js/app.6ec24944.js deleted file mode 100644 index c9649244..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/app.6ec24944.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,n){e.exports=n("56d7")},"028b":function(e,t,n){"use strict";n("f12c")},"0334":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-batch-create",use:"icon-batch-create-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"034f":function(e,t,n){"use strict";n("67e7")},"06c2":function(e,t,n){"use strict";n("92a6")},"0781":function(e,t,n){"use strict";n.r(t);var a=n("24ab"),i=n.n(a),c=n("83d6"),o=n.n(c),s=o.a.showSettings,r=o.a.tagsView,l=o.a.fixedHeader,d=o.a.sidebarLogo,u={theme:i.a.theme,showSettings:s,tagsView:r,fixedHeader:l,sidebarLogo:d},h={CHANGE_SETTING:function(e,t){var n=t.key,a=t.value;e.hasOwnProperty(n)&&(e[n]=a)}},m={changeSetting:function(e,t){var n=e.commit;n("CHANGE_SETTING",t)}};t["default"]={namespaced:!0,state:u,mutations:h,actions:m}},"096e":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-skill",use:"icon-skill-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"0f9a":function(e,t,n){"use strict";n.r(t);n("96cf");var a=n("3b8d"),i=n("b775");function c(e){return Object(i["a"])({url:"/v1/cs/auth/login",method:"post",data:e})}var o=n("5f87"),s=n("a18c"),r={token:Object(o["a"])(),name:"",avatar:"",introduction:"",roles:[]},l={SET_TOKEN:function(e,t){e.token=t},SET_INTRODUCTION:function(e,t){e.introduction=t},SET_NAME:function(e,t){e.name=t},SET_AVATAR:function(e,t){e.avatar=t},SET_ROLES:function(e,t){e.roles=t}},d={login:function(e,t){var n=e.commit,a=t.username,i=t.password;return new Promise((function(e,t){c({username:a.trim(),password:i,rememberMe:1}).then((function(t){var a=t.data,i=t.roles;n("SET_TOKEN",a),localStorage.setItem("roles",JSON.stringify(i)),Object(o["c"])(a),e()})).catch((function(e){alert("登陆失败"),t(e)}))}))},getInfo:function(e){var t=e.commit;e.state;return new Promise((function(e,n){var a={};a.roles=JSON.parse(localStorage.getItem("roles")),t("SET_ROLES",a.roles),e(a)}))},logout:function(e){var t=e.commit;e.state;return new Promise((function(e){t("SET_TOKEN",""),t("SET_ROLES",[]),Object(o["b"])(),Object(s["d"])(),e()}))},resetToken:function(e){var t=e.commit;return new Promise((function(e){t("SET_TOKEN",""),t("SET_ROLES",[]),Object(o["b"])(),e()}))},changeRoles:function(e,t){var n=e.commit,i=e.dispatch;return new Promise(function(){var e=Object(a["a"])(regeneratorRuntime.mark((function e(a){var c,r,l,d;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return c=t+"-token",n("SET_TOKEN",c),Object(o["c"])(c),e.next=5,i("getInfo");case 5:return r=e.sent,l=r.roles,Object(s["d"])(),e.next=10,i("permission/generateRoutes",l,{root:!0});case 10:d=e.sent,s["c"].addRoutes(d),i("tagsView/delAllViews",null,{root:!0}),a();case 14:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}};t["default"]={namespaced:!0,state:r,mutations:l,actions:d}},"12a5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-shopping",use:"icon-shopping-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},1430:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-qq",use:"icon-qq-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"158d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-item",use:"icon-item-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},1779:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-bug",use:"icon-bug-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"186a":function(e,t,n){"use strict";n("dc52")},"18f0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-link",use:"icon-link-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},1994:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-user-cfg",use:"icon-user-cfg-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"1f75":function(e,t,n){"use strict";n("603f")},2021:function(e,t,n){},"24ab":function(e,t,n){e.exports={theme:"#1890ff"}},2538:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-json",use:"icon-json-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},2580:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-language",use:"icon-language-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"273b":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-running",use:"icon-running-usage",viewBox:"0 0 1129 1024",content:''});o.a.add(s);t["default"]=s},"2a3d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-password",use:"icon-password-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"2f11":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-peoples",use:"icon-peoples-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},3046:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-money",use:"icon-money-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"30c3":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"31c2":function(e,t,n){"use strict";n.r(t),n.d(t,"filterAsyncRoutes",(function(){return o}));var a=n("db72"),i=(n("ac6a"),n("6762"),n("2fdb"),n("a18c"));function c(e,t){return!t.meta||!t.meta.roles||e.some((function(e){return t.meta.roles.includes(e)}))}function o(e,t){var n=[];return e.forEach((function(e){var i=Object(a["a"])({},e);c(t,i)&&(i.children&&(i.children=o(i.children,t)),n.push(i))})),n}var s={routes:[],addRoutes:[]},r={SET_ROUTES:function(e,t){e.addRoutes=t,e.routes=i["b"].concat(t)}},l={generateRoutes:function(e,t){var n=e.commit;return new Promise((function(e){var a;a=t.includes("ROLE_ADMIN")?i["a"]||[]:o(i["a"],t),n("SET_ROUTES",a),e(a)}))}};t["default"]={namespaced:!0,state:s,mutations:r,actions:l}},3289:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-list",use:"icon-list-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},3561:function(e,t,n){},4360:function(e,t,n){"use strict";n("a481"),n("ac6a");var a=n("2b0e"),i=n("2f62"),c=(n("7f7f"),{sidebar:function(e){return e.app.sidebar},size:function(e){return e.app.size},device:function(e){return e.app.device},visitedViews:function(e){return e.tagsView.visitedViews},cachedViews:function(e){return e.tagsView.cachedViews},token:function(e){return e.user.token},avatar:function(e){return e.user.avatar},name:function(e){return e.user.name},introduction:function(e){return e.user.introduction},roles:function(e){return e.user.roles},permission_routes:function(e){return e.permission.routes},errorLogs:function(e){return e.errorLog.logs}}),o=c;a["default"].use(i["a"]);var s=n("c653"),r=s.keys().reduce((function(e,t){var n=t.replace(/^\.\/(.*)\.\w+$/,"$1"),a=s(t);return e[n]=a.default,e}),{}),l=new i["a"].Store({modules:r,getters:o});t["a"]=l},"47f1":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-table",use:"icon-table-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"47ff":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-message",use:"icon-message-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"4d49":function(e,t,n){"use strict";n.r(t);var a={logs:[]},i={ADD_ERROR_LOG:function(e,t){e.logs.push(t)},CLEAR_ERROR_LOG:function(e){e.logs.splice(0)}},c={addErrorLog:function(e,t){var n=e.commit;n("ADD_ERROR_LOG",t)},clearErrorLog:function(e){var t=e.commit;t("CLEAR_ERROR_LOG")}};t["default"]={namespaced:!0,state:a,mutations:i,actions:c}},"4df5":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-eye",use:"icon-eye-usage",viewBox:"0 0 128 64",content:''});o.a.add(s);t["default"]=s},"50d0":function(e,t,n){"use strict";n("98a6")},"51ff":function(e,t,n){var a={"./404.svg":"a14a","./batch-create.svg":"0334","./battery-line.svg":"659b","./bug.svg":"1779","./cfg-datasouce.svg":"ce80","./chart.svg":"c829","./clipboard.svg":"bc35","./component.svg":"56d6","./dashboard.svg":"f782","./documentation.svg":"90fb","./drag.svg":"9bbf","./edit.svg":"aa46","./education.svg":"ad1c","./email.svg":"cbb7","./example.svg":"30c3","./excel.svg":"6599","./exe-cfg.svg":"c309","./exit-fullscreen.svg":"dbc7","./eye-open.svg":"d7ec","./eye.svg":"4df5","./fail.svg":"9448","./form.svg":"eb1b","./fullscreen.svg":"9921","./guide.svg":"6683","./icon.svg":"9d91","./item.svg":"158d","./item_logo.svg":"b444","./json.svg":"2538","./language.svg":"2580","./lessee.svg":"dbd7","./link.svg":"18f0","./list.svg":"3289","./lock.svg":"ab00","./log.svg":"fea0","./message.svg":"47ff","./money.svg":"3046","./nested.svg":"dcf8","./password.svg":"2a3d","./pdf.svg":"f9a1","./people.svg":"d056","./peoples.svg":"2f11","./project.svg":"69e4","./qq.svg":"1430","./running.svg":"273b","./search.svg":"8e8d","./shopping.svg":"12a5","./size.svg":"8644","./skill.svg":"096e","./star.svg":"708a","./success.svg":"a8cf","./tab.svg":"8fb7","./table.svg":"47f1","./task-cfg.svg":"7824","./task-tmp.svg":"90d2","./tenant_logo.svg":"67a0","./theme.svg":"e534","./threadpool_logo.svg":"eb7b","./tree-table.svg":"e7c8","./tree.svg":"93cd","./user-cfg.svg":"1994","./user.svg":"b3b5","./wechat.svg":"80da","./work.svg":"7bb0","./zip.svg":"8aa6"};function i(e){var t=c(e);return n(t)}function c(e){var t=a[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}i.keys=function(){return Object.keys(a)},i.resolve=c,e.exports=i,i.id="51ff"},"52f9":function(e,t,n){"use strict";n("9b0e")},"56d6":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-component",use:"icon-component-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"56d7":function(e,t,n){"use strict";n.r(t);var a={};n.r(a),n.d(a,"parseTime",(function(){return P["f"]})),n.d(a,"formatTime",(function(){return P["d"]})),n.d(a,"timeAgo",(function(){return R})),n.d(a,"numberFormatter",(function(){return F})),n.d(a,"toThousandFilter",(function(){return N})),n.d(a,"uppercaseFirst",(function(){return q}));n("456d"),n("ac6a"),n("cadf"),n("551c"),n("f751"),n("097d");var i=n("2b0e"),c=n("a78e"),o=n.n(c),s=(n("f5df"),n("5c96")),r=n.n(s),l=(n("24ab"),n("b20f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)}),d=[],u={name:"App"},h=u,m=n("2877"),p=Object(m["a"])(h,l,d,!1,null,null,null),v=p.exports,f=n("4360"),w=n("a18c"),g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.isExternal?n("div",e._g({staticClass:"svg-external-icon svg-icon",style:e.styleExternalIcon},e.$listeners)):n("svg",e._g({class:e.svgClass,attrs:{"aria-hidden":"true"}},e.$listeners),[n("use",{attrs:{"xlink:href":e.iconName}})])},b=[],x=n("61f7"),y={name:"SvgIcon",props:{iconClass:{type:String,required:!0},className:{type:String,default:""}},computed:{isExternal:function(){return Object(x["b"])(this.iconClass)},iconName:function(){return"#icon-".concat(this.iconClass)},svgClass:function(){return this.className?"svg-icon "+this.className:"svg-icon"},styleExternalIcon:function(){return{mask:"url(".concat(this.iconClass,") no-repeat 50% 50%"),"-webkit-mask":"url(".concat(this.iconClass,") no-repeat 50% 50%")}}}},V=y,z=(n("68fa"),Object(m["a"])(V,g,b,!1,null,"f9f7fefc",null)),C=z.exports;i["default"].component("svg-icon",C);var M=n("51ff"),k=function(e){return e.keys().map(e)};k(M);var _=n("db72"),L=(n("96cf"),n("3b8d")),E=n("323e"),H=n.n(E),B=(n("a5d8"),n("5f87")),O=n("83d6"),S=n.n(O),T=S.a.title||"Vue Element Admin";function j(e){return e?"".concat(e," - ").concat(T):"".concat(T)}H.a.configure({showSpinner:!1});var D=["/login","/auth-redirect"];w["c"].beforeEach(function(){var e=Object(L["a"])(regeneratorRuntime.mark((function e(t,n,a){var i,c,o,r,l;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(H.a.start(),document.title=j(t.meta.title),i=Object(B["a"])(),!i){e.next=35;break}if("/login"!==t.path){e.next=9;break}a({path:"/"}),H.a.done(),e.next=33;break;case 9:if(c=f["a"].getters.roles&&f["a"].getters.roles.length>0,!c){e.next=14;break}a(),e.next=33;break;case 14:return e.prev=14,e.next=17,f["a"].dispatch("user/getInfo");case 17:return o=e.sent,r=o.roles,e.next=21,f["a"].dispatch("permission/generateRoutes",r);case 21:l=e.sent,w["c"].addRoutes(l),a(Object(_["a"])(Object(_["a"])({},t),{},{replace:!0})),e.next=33;break;case 26:return e.prev=26,e.t0=e["catch"](14),e.next=30,f["a"].dispatch("user/resetToken");case 30:s["Message"].error(e.t0||"Has Error"),a("/login?redirect=".concat(t.path)),H.a.done();case 33:e.next=36;break;case 35:-1!==D.indexOf(t.path)?a():(a("/login?redirect=".concat(t.path)),H.a.done());case 36:case"end":return e.stop()}}),e,null,[[14,26]])})));return function(t,n,a){return e.apply(this,arguments)}}()),w["c"].afterEach((function(){H.a.done()}));n("6762"),n("2fdb");var A=S.a.errorLog;function $(){var e="production";return Object(x["c"])(A)?e===A:!!Object(x["a"])(A)&&A.includes(e)}$()&&(i["default"].config.errorHandler=function(e,t,n,a){i["default"].nextTick((function(){f["a"].dispatch("errorLog/addErrorLog",{err:e,vm:t,info:n,url:window.location.href}),console.error(e,n)}))});n("6b54"),n("a481"),n("c5f6");var P=n("ed08");function I(e,t){return 1===e?e+t:e+t+"s"}function R(e){var t=Date.now()/1e3-Number(e);return t<3600?I(~~(t/60)," minute"):t<86400?I(~~(t/3600)," hour"):I(~~(t/86400)," day")}function F(e,t){for(var n=[{value:1e18,symbol:"E"},{value:1e15,symbol:"P"},{value:1e12,symbol:"T"},{value:1e9,symbol:"G"},{value:1e6,symbol:"M"},{value:1e3,symbol:"k"}],a=0;a=n[a].value)return(e/n[a].value+.1).toFixed(t).replace(/\.0+$|(\.[0-9]*[1-9])0+$/,"$1")+n[a].symbol;return e.toString()}function N(e){return(+e||0).toString().replace(/^-?\d+/g,(function(e){return e.replace(/(?=(?!\b)(\d{3})+$)/g,",")}))}function q(e){return e.charAt(0).toUpperCase()+e.slice(1)}for(var W=n("313e"),G=n.n(W),U=n("00e7"),J=n.n(U),K=(n("3b2b"),n("2d63")),Z=n("75fc"),X=n("96eb"),Y=n.n(X),Q={admin:{token:"admin-token"},editor:{token:"editor-token"}},ee={"admin-token":{roles:["admin"],introduction:"I am a super administrator",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",name:"Super Admin"},"editor-token":{roles:["editor"],introduction:"I am an editor",avatar:"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",name:"Normal Editor"}},te=[{url:"/user/login",type:"post",response:function(e){var t=e.body.username,n=Q[t];return n?{code:"20000",data:n}:{code:"60204",message:"Account and password are incorrect."}}},{url:"/user/info.*",type:"get",response:function(e){var t=e.query.token,n=ee[t];return n?{code:"20000",data:n}:{code:"50008",message:"Login failed, unable to get user details."}}},{url:"/user/logout",type:"post",response:function(e){return{code:"20000",data:"success"}}}],ne=[{path:"/redirect",component:"layout/Layout",hidden:!0,children:[{path:"/redirect/:path*",component:"views/redirect/index"}]},{path:"/login",component:"views/login/index",hidden:!0},{path:"/auth-redirect",component:"views/login/auth-redirect",hidden:!0},{path:"/404",component:"views/error-page/404",hidden:!0},{path:"/401",component:"views/error-page/401",hidden:!0},{path:"",component:"layout/Layout",redirect:"dashboard",children:[{path:"dashboard",component:"views/dashboard/index",name:"Dashboard",meta:{title:"Dashboard",icon:"dashboard",affix:!0}}]},{path:"/documentation",component:"layout/Layout",children:[{path:"index",component:"views/documentation/index",name:"Documentation",meta:{title:"Documentation",icon:"documentation",affix:!0}}]},{path:"/guide",component:"layout/Layout",redirect:"/guide/index",children:[{path:"index",component:"views/guide/index",name:"Guide",meta:{title:"Guide",icon:"guide",noCache:!0}}]}],ae=[{path:"/permission",component:"layout/Layout",redirect:"/permission/index",alwaysShow:!0,meta:{title:"Permission",icon:"lock",roles:["admin","editor"]},children:[{path:"page",component:"views/permission/page",name:"PagePermission",meta:{title:"Page Permission11111",roles:["admin"]}},{path:"directive",component:"views/permission/directive",name:"DirectivePermission",meta:{title:"Directive Permission"}},{path:"role",component:"views/permission/role",name:"RolePermission",meta:{title:"Role Permission",roles:["admin"]}}]},{path:"/icon",component:"layout/Layout",children:[{path:"index",component:"views/icons/index",name:"Icons",meta:{title:"Icons",icon:"icon",noCache:!0}}]},{path:"/components",component:"layout/Layout",redirect:"noRedirect",name:"ComponentDemo",meta:{title:"Components",icon:"component"},children:[{path:"tinymce",component:"views/components-demo/tinymce",name:"TinymceDemo",meta:{title:"Tinymce"}},{path:"markdown",component:"views/components-demo/markdown",name:"MarkdownDemo",meta:{title:"Markdown"}},{path:"json-editor",component:"views/components-demo/json-editor",name:"JsonEditorDemo",meta:{title:"Json Editor"}},{path:"split-pane",component:"views/components-demo/split-pane",name:"SplitpaneDemo",meta:{title:"SplitPane"}},{path:"avatar-upload",component:"views/components-demo/avatar-upload",name:"AvatarUploadDemo",meta:{title:"Avatar Upload"}},{path:"dropzone",component:"views/components-demo/dropzone",name:"DropzoneDemo",meta:{title:"Dropzone"}},{path:"sticky",component:"views/components-demo/sticky",name:"StickyDemo",meta:{title:"Sticky"}},{path:"count-to",component:"views/components-demo/count-to",name:"CountToDemo",meta:{title:"Count To"}},{path:"mixin",component:"views/components-demo/mixin",name:"ComponentMixinDemo",meta:{title:"componentMixin"}},{path:"back-to-top",component:"views/components-demo/back-to-top",name:"BackToTopDemo",meta:{title:"Back To Top"}},{path:"drag-dialog",component:"views/components-demo/drag-dialog",name:"DragDialogDemo",meta:{title:"Drag Dialog"}},{path:"drag-select",component:"views/components-demo/drag-select",name:"DragSelectDemo",meta:{title:"Drag Select"}},{path:"dnd-list",component:"views/components-demo/dnd-list",name:"DndListDemo",meta:{title:"Dnd List"}},{path:"drag-kanban",component:"views/components-demo/drag-kanban",name:"DragKanbanDemo",meta:{title:"Drag Kanban"}}]},{path:"/charts",component:"layout/Layout",redirect:"noRedirect",name:"Charts",meta:{title:"Charts",icon:"chart"},children:[{path:"keyboard",component:"views/charts/keyboard",name:"KeyboardChart",meta:{title:"Keyboard Chart",noCache:!0}},{path:"line",component:"views/charts/line",name:"LineChart",meta:{title:"Line Chart",noCache:!0}},{path:"mixchart",component:"views/charts/mixChart",name:"MixChart",meta:{title:"Mix Chart",noCache:!0}}]},{path:"/nested",component:"layout/Layout",redirect:"/nested/menu1/menu1-1",name:"Nested",meta:{title:"Nested",icon:"nested"},children:[{path:"menu1",component:"views/nested/menu1/index",name:"Menu1",meta:{title:"Menu1"},redirect:"/nested/menu1/menu1-1",children:[{path:"menu1-1",component:"views/nested/menu1/menu1-1",name:"Menu1-1",meta:{title:"Menu1-1"}},{path:"menu1-2",component:"views/nested/menu1/menu1-2",name:"Menu1-2",redirect:"/nested/menu1/menu1-2/menu1-2-1",meta:{title:"Menu1-2"},children:[{path:"menu1-2-1",component:"views/nested/menu1/menu1-2/menu1-2-1",name:"Menu1-2-1",meta:{title:"Menu1-2-1"}},{path:"menu1-2-2",component:"views/nested/menu1/menu1-2/menu1-2-2",name:"Menu1-2-2",meta:{title:"Menu1-2-2"}}]},{path:"menu1-3",component:"views/nested/menu1/menu1-3",name:"Menu1-3",meta:{title:"Menu1-3"}}]},{path:"menu2",name:"Menu2",component:"views/nested/menu2/index",meta:{title:"Menu2"}}]},{path:"/example",component:"layout/Layout",redirect:"/example/list",name:"Example",meta:{title:"Example",icon:"example"},children:[{path:"create",component:"views/example/create",name:"CreateArticle",meta:{title:"Create Article",icon:"edit"}},{path:"edit/:id(\\d+)",component:"views/example/edit",name:"EditArticle",meta:{title:"Edit Article",noCache:!0},hidden:!0},{path:"list",component:"views/example/list",name:"ArticleList",meta:{title:"Article List",icon:"list"}}]},{path:"/tab",component:"layout/Layout",children:[{path:"index",component:"views/tab/index",name:"Tab",meta:{title:"Tab",icon:"tab"}}]},{path:"/error",component:"layout/Layout",redirect:"noRedirect",name:"ErrorPages",meta:{title:"Error Pages",icon:"404"},children:[{path:"401",component:"views/error-page/401",name:"Page401",meta:{title:"Page 401",noCache:!0}},{path:"404",component:"views/error-page/404",name:"Page404",meta:{title:"Page 404",noCache:!0}}]},{path:"/error-log",component:"layout/Layout",redirect:"noRedirect",children:[{path:"log",component:"views/error-log/index",name:"ErrorLog",meta:{title:"Error Log",icon:"bug"}}]},{path:"/excel",component:"layout/Layout",redirect:"/excel/export-excel",name:"Excel",meta:{title:"Excel",icon:"excel"},children:[{path:"export-excel",component:"views/excel/export-excel",name:"ExportExcel",meta:{title:"Export Excel"}},{path:"export-selected-excel",component:"views/excel/select-excel",name:"SelectExcel",meta:{title:"Select Excel"}},{path:"export-merge-header",component:"views/excel/merge-header",name:"MergeHeader",meta:{title:"Merge Header"}},{path:"upload-excel",component:"views/excel/upload-excel",name:"UploadExcel",meta:{title:"Upload Excel"}}]},{path:"/zip",component:"layout/Layout",redirect:"/zip/download",alwaysShow:!0,meta:{title:"Zip",icon:"zip"},children:[{path:"download",component:"views/zip/index",name:"ExportZip",meta:{title:"Export Zip"}}]},{path:"/pdf",component:"layout/Layout",redirect:"/pdf/index",children:[{path:"index",component:"views/pdf/index",name:"PDF",meta:{title:"PDF",icon:"pdf"}}]},{path:"/pdf/download",component:"views/pdf/download",hidden:!0},{path:"/theme",component:"layout/Layout",redirect:"noRedirect",children:[{path:"index",component:"views/theme/index",name:"Theme",meta:{title:"Theme",icon:"theme"}}]},{path:"/clipboard",component:"layout/Layout",redirect:"noRedirect",children:[{path:"index",component:"views/clipboard/index",name:"ClipboardDemo",meta:{title:"Clipboard Demo",icon:"clipboard"}}]},{path:"/i18n",component:"layout/Layout",children:[{path:"index",component:"views/i18n-demo/index",name:"I18n",meta:{title:"I18n",icon:"international"}}]},{path:"external-link",component:"layout/Layout",children:[{path:"https://github.com/PanJiaChen/vue-element-admin",meta:{title:"External Link",icon:"link"}}]},{path:"*",redirect:"/404",hidden:!0}],ie=Object(P["c"])([].concat(Object(Z["a"])(ne),Object(Z["a"])(ae))),ce=[{key:"admin",name:"admin",description:"Super Administrator. Have access to view all pages.",routes:ie},{key:"editor",name:"editor",description:"Normal Editor. Can see all pages except permission page",routes:ie.filter((function(e){return"/permission"!==e.path}))},{key:"visitor",name:"visitor",description:"Just a visitor. Can only see the home page and the document page",routes:[{path:"",redirect:"dashboard",children:[{path:"dashboard",name:"Dashboard",meta:{title:"dashboard",icon:"dashboard"}}]}]}],oe=[{url:"/routes",type:"get",response:function(e){return{code:2e4,data:ie}}},{url:"/roles",type:"get",response:function(e){return{code:2e4,data:ce}}},{url:"/role",type:"post",response:{code:2e4,data:{key:Y.a.mock("@integer(300, 5000)")}}},{url:"/role/[A-Za-z0-9]",type:"put",response:{code:2e4,data:{status:"success"}}},{url:"/role/[A-Za-z0-9]",type:"delete",response:{code:2e4,data:{status:"success"}}}],se=(n("7f7f"),[]),re=100,le=0;le'});o.a.add(s);t["default"]=s},"659b":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-battery-line",use:"icon-battery-line-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},6683:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-guide",use:"icon-guide-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"67a0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-tenant_logo",use:"icon-tenant_logo-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"67e7":function(e,t,n){},"68fa":function(e,t,n){"use strict";n("2021")},"69d8":function(e,t,n){"use strict";n("c3a3")},"69e4":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-project",use:"icon-project-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"708a":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-star",use:"icon-star-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},7509:function(e,t,n){"use strict";n.r(t);var a=n("75fc"),i=n("768b"),c=(n("ac6a"),n("2d63")),o=(n("7f7f"),n("6762"),n("2fdb"),{visitedViews:[],cachedViews:[]}),s={ADD_VISITED_VIEW:function(e,t){e.visitedViews.some((function(e){return e.path===t.path}))||e.visitedViews.push(Object.assign({},t,{title:t.meta.title||"no-name"}))},ADD_CACHED_VIEW:function(e,t){e.cachedViews.includes(t.name)||t.meta.noCache||e.cachedViews.push(t.name)},DEL_VISITED_VIEW:function(e,t){var n,a=Object(c["a"])(e.visitedViews.entries());try{for(a.s();!(n=a.n()).done;){var o=Object(i["a"])(n.value,2),s=o[0],r=o[1];if(r.path===t.path){e.visitedViews.splice(s,1);break}}}catch(l){a.e(l)}finally{a.f()}},DEL_CACHED_VIEW:function(e,t){var n,a=Object(c["a"])(e.cachedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i===t.name){var o=e.cachedViews.indexOf(i);e.cachedViews.splice(o,1);break}}}catch(s){a.e(s)}finally{a.f()}},DEL_OTHERS_VISITED_VIEWS:function(e,t){e.visitedViews=e.visitedViews.filter((function(e){return e.meta.affix||e.path===t.path}))},DEL_OTHERS_CACHED_VIEWS:function(e,t){var n,a=Object(c["a"])(e.cachedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i===t.name){var o=e.cachedViews.indexOf(i);e.cachedViews=e.cachedViews.slice(o,o+1);break}}}catch(s){a.e(s)}finally{a.f()}},DEL_ALL_VISITED_VIEWS:function(e){var t=e.visitedViews.filter((function(e){return e.meta.affix}));e.visitedViews=t},DEL_ALL_CACHED_VIEWS:function(e){e.cachedViews=[]},UPDATE_VISITED_VIEW:function(e,t){var n,a=Object(c["a"])(e.visitedViews);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.path===t.path){i=Object.assign(i,t);break}}}catch(o){a.e(o)}finally{a.f()}}},r={addView:function(e,t){var n=e.dispatch;n("addVisitedView",t),n("addCachedView",t)},addVisitedView:function(e,t){var n=e.commit;n("ADD_VISITED_VIEW",t)},addCachedView:function(e,t){var n=e.commit;n("ADD_CACHED_VIEW",t)},delView:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delVisitedView",t),n("delCachedView",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delVisitedView:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_VISITED_VIEW",t),e(Object(a["a"])(i.visitedViews))}))},delCachedView:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_CACHED_VIEW",t),e(Object(a["a"])(i.cachedViews))}))},delOthersViews:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delOthersVisitedViews",t),n("delOthersCachedViews",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delOthersVisitedViews:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_OTHERS_VISITED_VIEWS",t),e(Object(a["a"])(i.visitedViews))}))},delOthersCachedViews:function(e,t){var n=e.commit,i=e.state;return new Promise((function(e){n("DEL_OTHERS_CACHED_VIEWS",t),e(Object(a["a"])(i.cachedViews))}))},delAllViews:function(e,t){var n=e.dispatch,i=e.state;return new Promise((function(e){n("delAllVisitedViews",t),n("delAllCachedViews",t),e({visitedViews:Object(a["a"])(i.visitedViews),cachedViews:Object(a["a"])(i.cachedViews)})}))},delAllVisitedViews:function(e){var t=e.commit,n=e.state;return new Promise((function(e){t("DEL_ALL_VISITED_VIEWS"),e(Object(a["a"])(n.visitedViews))}))},delAllCachedViews:function(e){var t=e.commit,n=e.state;return new Promise((function(e){t("DEL_ALL_CACHED_VIEWS"),e(Object(a["a"])(n.cachedViews))}))},updateVisitedView:function(e,t){var n=e.commit;n("UPDATE_VISITED_VIEW",t)}};t["default"]={namespaced:!0,state:o,mutations:s,actions:r}},7824:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-task-cfg",use:"icon-task-cfg-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"7bb0":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-work",use:"icon-work-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"80da":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-wechat",use:"icon-wechat-usage",viewBox:"0 0 128 110",content:''});o.a.add(s);t["default"]=s},"83d6":function(e,t){e.exports={title:"Hippo4J Web",showSettings:!0,tagsView:!0,fixedHeader:!1,sidebarLogo:!0,errorLog:"production"}},8644:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-size",use:"icon-size-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"8aa6":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-zip",use:"icon-zip-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"8d4d":function(e,t,n){},"8e8d":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-search",use:"icon-search-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"8fb7":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-tab",use:"icon-tab-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"90d2":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-task-tmp",use:"icon-task-tmp-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"90fb":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-documentation",use:"icon-documentation-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"92a6":function(e,t,n){},"93cd":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-tree",use:"icon-tree-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},9448:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-fail",use:"icon-fail-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},"98a6":function(e,t,n){},9921:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-fullscreen",use:"icon-fullscreen-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"9a1c":function(e,t,n){},"9b0e":function(e,t,n){},"9bbf":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-drag",use:"icon-drag-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},"9d91":function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-icon",use:"icon-icon-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},a14a:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-404",use:"icon-404-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},a18c:function(e,t,n){"use strict";var a,i,c=n("2b0e"),o=n("8c4f"),s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"app-wrapper",class:e.classObj},["mobile"===e.device&&e.sidebar.opened?n("div",{staticClass:"drawer-bg",on:{click:e.handleClickOutside}}):e._e(),e._v(" "),n("sidebar",{staticClass:"sidebar-container"}),e._v(" "),n("div",{staticClass:"main-container",class:{hasTagsView:e.needTagsView}},[n("div",{class:{"fixed-header":e.fixedHeader}},[n("navbar"),e._v(" "),e.needTagsView?n("tags-view"):e._e()],1),e._v(" "),n("app-main"),e._v(" "),e.showSettings?n("right-panel",[n("settings")],1):e._e()],1)],1)},r=[],l=n("db72"),d=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"rightPanel",staticClass:"rightPanel-container",class:{show:e.show}},[n("div",{staticClass:"rightPanel-background"}),e._v(" "),n("div",{staticClass:"rightPanel",staticStyle:{display:"none"}},[n("div",{staticClass:"handle-button",style:{top:e.buttonTop+"px","background-color":e.theme},on:{click:function(t){e.show=!e.show}}},[n("i",{class:e.show?"el-icon-close":"el-icon-setting"})]),e._v(" "),n("div",{staticClass:"rightPanel-items"},[e._t("default")],2)])])},u=[],h=(n("c5f6"),n("ed08")),m={name:"RightPanel",props:{clickNotClose:{default:!1,type:Boolean},buttonTop:{default:250,type:Number}},data:function(){return{show:!1}},computed:{theme:function(){return this.$store.state.settings.theme}},watch:{show:function(e){e&&!this.clickNotClose&&this.addEventClick(),e?Object(h["a"])(document.body,"showRightPanel"):Object(h["g"])(document.body,"showRightPanel")}},mounted:function(){this.insertToBody()},beforeDestroy:function(){var e=this.$refs.rightPanel;e.remove()},methods:{addEventClick:function(){window.addEventListener("click",this.closeSidebar)},closeSidebar:function(e){var t=e.target.closest(".rightPanel");t||(this.show=!1,window.removeEventListener("click",this.closeSidebar))},insertToBody:function(){var e=this.$refs.rightPanel,t=document.querySelector("body");t.insertBefore(e,t.firstChild)}}},p=m,v=(n("fab5"),n("f842"),n("2877")),f=Object(v["a"])(p,d,u,!1,null,"1cc16d82",null),w=f.exports,g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"app-main"},[n("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[n("keep-alive",{attrs:{include:e.cachedViews}},[n("router-view",{key:e.key})],1)],1)],1)},b=[],x={name:"AppMain",computed:{cachedViews:function(){return this.$store.state.tagsView.cachedViews},key:function(){return this.$route.path}}},y=x,V=(n("c968"),n("028b"),Object(v["a"])(y,g,b,!1,null,"92459f82",null)),z=V.exports,C=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"navbar"},[a("hamburger",{staticClass:"hamburger-container",attrs:{id:"hamburger-container","is-active":e.sidebar.opened},on:{toggleClick:e.toggleSideBar}}),e._v(" "),a("breadcrumb",{staticClass:"breadcrumb-container",attrs:{id:"breadcrumb-container"}}),e._v(" "),a("div",{staticClass:"right-menu"},["mobile"!==e.device?[a("error-log",{staticClass:"errLog-container right-menu-item hover-effect"})]:e._e(),e._v(" "),a("el-dropdown",{staticClass:"avatar-container right-menu-item hover-effect",attrs:{trigger:"click"}},[a("div",{staticClass:"avatar-wrapper"},[a("img",{staticClass:"user-avatar",attrs:{src:n("f561")}}),e._v(" "),a("i",{staticClass:"el-icon-caret-bottom"})]),e._v(" "),a("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[a("router-link",{attrs:{to:"/"}},[a("el-dropdown-item",[e._v("Dashboard")])],1),e._v(" "),a("el-dropdown-item",{attrs:{divided:""}},[a("span",{staticStyle:{display:"block"},on:{click:e.logout}},[e._v("Log Out")])])],1)],1)],2)],1)},M=[],k=(n("96cf"),n("3b8d")),_=n("2f62"),L=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{separator:"/"}},[n("transition-group",{attrs:{name:"breadcrumb"}},e._l(e.levelList,(function(t,a){return n("el-breadcrumb-item",{key:t.path},["noRedirect"===t.redirect||a==e.levelList.length-1?n("span",{staticClass:"no-redirect"},[e._v(e._s(t.meta.title))]):n("a",{on:{click:function(n){return n.preventDefault(),e.handleLink(t)}}},[e._v(e._s(t.meta.title))])])})),1)],1)},E=[],H=(n("7f7f"),n("f559"),n("bd11")),B=n.n(H),O={data:function(){return{levelList:null}},watch:{$route:function(e){e.path.startsWith("/redirect/")||this.getBreadcrumb()}},created:function(){this.getBreadcrumb()},methods:{getBreadcrumb:function(){var e=this.$route.matched.filter((function(e){return e.meta&&e.meta.title})),t=e[0];this.isDashboard(t)||(e=[{path:"/dashboard",meta:{title:"Dashboard"}}].concat(e)),this.levelList=e.filter((function(e){return e.meta&&e.meta.title&&!1!==e.meta.breadcrumb}))},isDashboard:function(e){var t=e&&e.name;return!!t&&t.trim().toLocaleLowerCase()==="Dashboard".toLocaleLowerCase()},pathCompile:function(e){var t=this.$route.params,n=B.a.compile(e);return n(t)},handleLink:function(e){var t=e.redirect,n=e.path;t?this.$router.push(t):this.$router.push(this.pathCompile(n))}}},S=O,T=(n("d9ae"),Object(v["a"])(S,L,E,!1,null,"1919fc1a",null)),j=T.exports,D=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticStyle:{padding:"0 15px"},on:{click:e.toggleClick}},[n("svg",{staticClass:"hamburger",class:{"is-active":e.isActive},attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:"64",height:"64"}},[n("path",{attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"}})])])},A=[],$={name:"Hamburger",props:{isActive:{type:Boolean,default:!1}},methods:{toggleClick:function(){this.$emit("toggleClick")}}},P=$,I=(n("186a"),Object(v["a"])(P,D,A,!1,null,"49e15297",null)),R=I.exports,F=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.errorLogs.length>0?n("div",[n("el-badge",{staticStyle:{"line-height":"25px","margin-top":"-5px"},attrs:{"is-dot":!0},nativeOn:{click:function(t){e.dialogTableVisible=!0}}},[n("el-button",{staticStyle:{padding:"8px 10px"},attrs:{size:"small",type:"danger"}},[n("svg-icon",{attrs:{"icon-class":"bug"}})],1)],1),e._v(" "),n("el-dialog",{attrs:{visible:e.dialogTableVisible,width:"80%","append-to-body":""},on:{"update:visible":function(t){e.dialogTableVisible=t}}},[n("div",{attrs:{slot:"title"},slot:"title"},[n("span",{staticStyle:{"padding-right":"10px"}},[e._v("Error Log")]),e._v(" "),n("el-button",{attrs:{size:"mini",type:"primary",icon:"el-icon-delete"},on:{click:e.clearAll}},[e._v("Clear All")])],1),e._v(" "),n("el-table",{attrs:{data:e.errorLogs,border:""}},[n("el-table-column",{attrs:{label:"Message"},scopedSlots:e._u([{key:"default",fn:function(t){var a=t.row;return[n("div",[n("span",{staticClass:"message-title"},[e._v("Msg:")]),e._v(" "),n("el-tag",{attrs:{type:"danger"}},[e._v("\n "+e._s(a.err.message)+"\n ")])],1),e._v(" "),n("br"),e._v(" "),n("div",[n("span",{staticClass:"message-title",staticStyle:{"padding-right":"10px"}},[e._v("Info: ")]),e._v(" "),n("el-tag",{attrs:{type:"warning"}},[e._v("\n "+e._s(a.vm.$vnode.tag)+" error in "+e._s(a.info)+"\n ")])],1),e._v(" "),n("br"),e._v(" "),n("div",[n("span",{staticClass:"message-title",staticStyle:{"padding-right":"16px"}},[e._v("Url: ")]),e._v(" "),n("el-tag",{attrs:{type:"success"}},[e._v("\n "+e._s(a.url)+"\n ")])],1)]}}],null,!1,3621415002)}),e._v(" "),n("el-table-column",{attrs:{label:"Stack"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(t.row.err.stack)+"\n ")]}}],null,!1,1726869048)})],1)],1)],1):e._e()},N=[],q={name:"ErrorLog",data:function(){return{dialogTableVisible:!1}},computed:{errorLogs:function(){return this.$store.getters.errorLogs}},methods:{clearAll:function(){this.dialogTableVisible=!1,this.$store.dispatch("errorLog/clearErrorLog")}}},W=q,G=(n("69d8"),Object(v["a"])(W,F,N,!1,null,"be34583a",null)),U=G.exports,J={components:{Breadcrumb:j,Hamburger:R,ErrorLog:U},computed:Object(l["a"])({},Object(_["b"])(["sidebar","avatar","device"])),methods:{toggleSideBar:function(){this.$store.dispatch("app/toggleSideBar")},logout:function(){var e=Object(k["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,this.$store.dispatch("user/logout");case 2:this.$router.push("/login?redirect=".concat(this.$route.fullPath));case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()}},K=J,Z=(n("e00c"),Object(v["a"])(K,C,M,!1,null,"195a3bb9",null)),X=Z.exports,Y=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"drawer-container"},[n("div",[n("h3",{staticClass:"drawer-title"},[e._v("Page style setting")]),e._v(" "),n("div",{staticClass:"drawer-item"},[n("span",[e._v("Theme Color")]),e._v(" "),n("theme-picker",{staticStyle:{float:"right",height:"26px",margin:"-3px 8px 0 0"},on:{change:e.themeChange}})],1),e._v(" "),n("div",{staticClass:"drawer-item"},[n("span",[e._v("Open Tags-View")]),e._v(" "),n("el-switch",{staticClass:"drawer-switch",model:{value:e.tagsView,callback:function(t){e.tagsView=t},expression:"tagsView"}})],1),e._v(" "),n("div",{staticClass:"drawer-item"},[n("span",[e._v("Fixed Header")]),e._v(" "),n("el-switch",{staticClass:"drawer-switch",model:{value:e.fixedHeader,callback:function(t){e.fixedHeader=t},expression:"fixedHeader"}})],1),e._v(" "),n("div",{staticClass:"drawer-item"},[n("span",[e._v("Sidebar Logo")]),e._v(" "),n("el-switch",{staticClass:"drawer-switch",model:{value:e.sidebarLogo,callback:function(t){e.sidebarLogo=t},expression:"sidebarLogo"}})],1)])])},Q=[],ee=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-color-picker",{staticClass:"theme-picker",attrs:{predefine:["#409EFF","#1890ff","#304156","#212121","#11a983","#13c2c2","#6959CD","#f5222d"],"popper-class":"theme-picker-dropdown"},model:{value:e.theme,callback:function(t){e.theme=t},expression:"theme"}})},te=[],ne=(n("6b54"),n("ac6a"),n("3b2b"),n("a481"),n("f6f8").version),ae="#409EFF",ie={data:function(){return{chalk:"",theme:""}},computed:{defaultTheme:function(){return this.$store.state.settings.theme}},watch:{defaultTheme:{handler:function(e,t){this.theme=e},immediate:!0},theme:function(){var e=Object(k["a"])(regeneratorRuntime.mark((function e(t){var n,a,i,c,o,s,r,l,d=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(n=this.chalk?this.theme:ae,"string"===typeof t){e.next=3;break}return e.abrupt("return");case 3:if(a=this.getThemeCluster(t.replace("#","")),i=this.getThemeCluster(n.replace("#","")),console.log(a,i),c=this.$message({message:" Compiling the theme",customClass:"theme-message",type:"success",duration:0,iconClass:"el-icon-loading"}),o=function(e,t){return function(){var n=d.getThemeCluster(ae.replace("#","")),i=d.updateStyle(d[e],n,a),c=document.getElementById(t);c||(c=document.createElement("style"),c.setAttribute("id",t),document.head.appendChild(c)),c.innerText=i}},this.chalk){e.next=12;break}return s="https://unpkg.com/element-ui@".concat(ne,"/lib/theme-chalk/index.css"),e.next=12,this.getCSSString(s,"chalk");case 12:r=o("chalk","chalk-style"),r(),l=[].slice.call(document.querySelectorAll("style")).filter((function(e){var t=e.innerText;return new RegExp(n,"i").test(t)&&!/Chalk Variables/.test(t)})),l.forEach((function(e){var t=e.innerText;"string"===typeof t&&(e.innerText=d.updateStyle(t,i,a))})),this.$emit("change",t),c.close();case 18:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()},methods:{updateStyle:function(e,t,n){var a=e;return t.forEach((function(e,t){a=a.replace(new RegExp(e,"ig"),n[t])})),a},getCSSString:function(e,t){var n=this;return new Promise((function(a){var i=new XMLHttpRequest;i.onreadystatechange=function(){4===i.readyState&&200===i.status&&(n[t]=i.responseText.replace(/@font-face{[^}]+}/,""),a())},i.open("GET",e),i.send()}))},getThemeCluster:function(e){for(var t=function(e,t){var n=parseInt(e.slice(0,2),16),a=parseInt(e.slice(2,4),16),i=parseInt(e.slice(4,6),16);return 0===t?[n,a,i].join(","):(n+=Math.round(t*(255-n)),a+=Math.round(t*(255-a)),i+=Math.round(t*(255-i)),n=n.toString(16),a=a.toString(16),i=i.toString(16),"#".concat(n).concat(a).concat(i))},n=function(e,t){var n=parseInt(e.slice(0,2),16),a=parseInt(e.slice(2,4),16),i=parseInt(e.slice(4,6),16);return n=Math.round((1-t)*n),a=Math.round((1-t)*a),i=Math.round((1-t)*i),n=n.toString(16),a=a.toString(16),i=i.toString(16),"#".concat(n).concat(a).concat(i)},a=[e],i=0;i<=9;i++)a.push(t(e,Number((i/10).toFixed(2))));return a.push(n(e,.1)),a}}},ce=ie,oe=(n("06c2"),Object(v["a"])(ce,ee,te,!1,null,null,null)),se=oe.exports,re={components:{ThemePicker:se},data:function(){return{}},computed:{fixedHeader:{get:function(){return this.$store.state.settings.fixedHeader},set:function(e){this.$store.dispatch("settings/changeSetting",{key:"fixedHeader",value:e})}},tagsView:{get:function(){return this.$store.state.settings.tagsView},set:function(e){this.$store.dispatch("settings/changeSetting",{key:"tagsView",value:e})}},sidebarLogo:{get:function(){return this.$store.state.settings.sidebarLogo},set:function(e){this.$store.dispatch("settings/changeSetting",{key:"sidebarLogo",value:e})}}},methods:{themeChange:function(e){this.$store.dispatch("settings/changeSetting",{key:"theme",value:e})}}},le=re,de=(n("f271"),Object(v["a"])(le,Y,Q,!1,null,"5d274279",null)),ue=de.exports,he=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:{"has-logo":e.showLogo}},[e.showLogo?n("logo",{attrs:{collapse:e.isCollapse}}):e._e(),e._v(" "),n("el-scrollbar",{attrs:{"wrap-class":"scrollbar-wrapper"}},[n("el-menu",{attrs:{"default-active":e.activeMenu,collapse:e.isCollapse,"background-color":e.variables.menuBg,"text-color":e.variables.menuText,"unique-opened":!1,"active-text-color":e.variables.menuActiveText,"collapse-transition":!1,mode:"vertical"}},e._l(e.permission_routes,(function(e){return n("sidebar-item",{key:e.path,attrs:{item:e,"base-path":e.path}})})),1)],1)],1)},me=[],pe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"sidebar-logo-container",class:{collapse:e.collapse}},[n("transition",{attrs:{name:"sidebarLogoFade"}},[e.collapse?n("router-link",{key:"collapse",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])]):n("router-link",{key:"expand",staticClass:"sidebar-logo-link",attrs:{to:"/"}},[e.logo?n("img",{staticClass:"sidebar-logo",attrs:{src:e.logo}}):e._e(),e._v(" "),n("h1",{staticClass:"sidebar-title"},[e._v(e._s(e.title)+" ")])])],1)],1)},ve=[],fe={name:"SidebarLogo",props:{collapse:{type:Boolean,required:!0}},data:function(){return{title:"Hippo4J 0.9.0",logo:"https://images-machen.oss-cn-beijing.aliyuncs.com/20211127_hippo4j_logo.png"}}},we=fe,ge=(n("1f75"),Object(v["a"])(we,pe,ve,!1,null,"18d569cc",null)),be=ge.exports,xe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.item.hidden?e._e():n("div",{staticClass:"menu-wrapper"},[!e.hasOneShowingChild(e.item.children,e.item)||e.onlyOneChild.children&&!e.onlyOneChild.noShowingChildren||e.item.alwaysShow?n("el-submenu",{ref:"subMenu",attrs:{index:e.resolvePath(e.item.path),"popper-append-to-body":""}},[n("template",{slot:"title"},[e.item.meta?n("item",{attrs:{icon:e.item.meta&&e.item.meta.icon,title:e.item.meta.title}}):e._e()],1),e._v(" "),e._l(e.item.children,(function(t){return n("sidebar-item",{key:t.path,staticClass:"nest-menu",attrs:{"is-nest":!0,item:t,"base-path":e.resolvePath(t.path)}})}))],2):[e.onlyOneChild.meta?n("app-link",{attrs:{to:e.resolvePath(e.onlyOneChild.path)}},[n("el-menu-item",{class:{"submenu-title-noDropdown":!e.isNest},attrs:{index:e.resolvePath(e.onlyOneChild.path)}},[n("item",{attrs:{icon:e.onlyOneChild.meta.icon||e.item.meta&&e.item.meta.icon,title:e.onlyOneChild.meta.title}})],1)],1):e._e()]],2)},ye=[],Ve=n("df7c"),ze=n.n(Ve),Ce=n("61f7"),Me={name:"MenuItem",functional:!0,props:{icon:{type:String,default:""},title:{type:String,default:""}},render:function(e,t){var n=t.props,a=n.icon,i=n.title,c=[];return a&&c.push(e("svg-icon",{attrs:{"icon-class":a}})),i&&c.push(e("span",{slot:"title"},[i])),c}},ke=Me,_e=Object(v["a"])(ke,a,i,!1,null,null,null),Le=_e.exports,Ee=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("component",e._b({},"component",e.linkProps(e.to),!1),[e._t("default")],2)},He=[],Be={props:{to:{type:String,required:!0}},methods:{linkProps:function(e){return Object(Ce["b"])(e)?{is:"a",href:e,target:"_blank",rel:"noopener"}:{is:"router-link",to:e}}}},Oe=Be,Se=Object(v["a"])(Oe,Ee,He,!1,null,null,null),Te=Se.exports,je={computed:{device:function(){return this.$store.state.app.device}},mounted:function(){this.fixBugIniOS()},methods:{fixBugIniOS:function(){var e=this,t=this.$refs.subMenu;if(t){var n=t.handleMouseleave;t.handleMouseleave=function(t){"mobile"!==e.device&&n(t)}}}}},De={name:"SidebarItem",components:{Item:Le,AppLink:Te},mixins:[je],props:{item:{type:Object,required:!0},isNest:{type:Boolean,default:!1},basePath:{type:String,default:""}},data:function(){return this.onlyOneChild=null,{}},methods:{hasOneShowingChild:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,a=t.filter((function(t){return!t.hidden&&(e.onlyOneChild=t,!0)}));return 1===a.length||0===a.length&&(this.onlyOneChild=Object(l["a"])(Object(l["a"])({},n),{},{path:"",noShowingChildren:!0}),!0)},resolvePath:function(e){return Object(Ce["b"])(e)?e:Object(Ce["b"])(this.basePath)?this.basePath:ze.a.resolve(this.basePath,e)}}},Ae=De,$e=Object(v["a"])(Ae,xe,ye,!1,null,null,null),Pe=$e.exports,Ie=n("cf1e"),Re=n.n(Ie),Fe={components:{SidebarItem:Pe,Logo:be},computed:Object(l["a"])(Object(l["a"])({},Object(_["b"])(["permission_routes","sidebar"])),{},{activeMenu:function(){var e=this.$route,t=e.meta,n=e.path;return t.activeMenu?t.activeMenu:n},showLogo:function(){return this.$store.state.settings.sidebarLogo},variables:function(){return Re.a},isCollapse:function(){return!this.sidebar.opened}})},Ne=Fe,qe=Object(v["a"])(Ne,he,me,!1,null,null,null),We=qe.exports,Ge=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"tags-view-container",attrs:{id:"tags-view-container"}},[n("scroll-pane",{ref:"scrollPane",staticClass:"tags-view-wrapper"},e._l(e.visitedViews,(function(t){return n("router-link",{key:t.path,ref:"tag",refInFor:!0,staticClass:"tags-view-item",class:e.isActive(t)?"active":"",attrs:{to:{path:t.path,query:t.query,fullPath:t.fullPath},tag:"span"},nativeOn:{mouseup:function(n){return"button"in n&&1!==n.button?null:e.closeSelectedTag(t)},contextmenu:function(n){return n.preventDefault(),e.openMenu(t,n)}}},[e._v("\n "+e._s(t.title)+"\n "),t.meta.affix?e._e():n("span",{staticClass:"el-icon-close",on:{click:function(n){return n.preventDefault(),n.stopPropagation(),e.closeSelectedTag(t)}}})])})),1),e._v(" "),n("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"contextmenu",style:{left:e.left+"px",top:e.top+"px"}},[n("li",{on:{click:function(t){return e.refreshSelectedTag(e.selectedTag)}}},[e._v("Refresh")]),e._v(" "),e.selectedTag.meta&&e.selectedTag.meta.affix?e._e():n("li",{on:{click:function(t){return e.closeSelectedTag(e.selectedTag)}}},[e._v("Close")]),e._v(" "),n("li",{on:{click:e.closeOthersTags}},[e._v("Close Others")]),e._v(" "),n("li",{on:{click:function(t){return e.closeAllTags(e.selectedTag)}}},[e._v("Close All")])])],1)},Ue=[],Je=n("2d63"),Ke=n("75fc"),Ze=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-scrollbar",{ref:"scrollContainer",staticClass:"scroll-container",attrs:{vertical:!1},nativeOn:{wheel:function(t){return t.preventDefault(),e.handleScroll(t)}}},[e._t("default")],2)},Xe=[],Ye=(n("20d6"),4),Qe={name:"ScrollPane",data:function(){return{left:0}},computed:{scrollWrapper:function(){return this.$refs.scrollContainer.$refs.wrap}},methods:{handleScroll:function(e){var t=e.wheelDelta||40*-e.deltaY,n=this.scrollWrapper;n.scrollLeft=n.scrollLeft+t/4},moveToTarget:function(e){var t=this.$refs.scrollContainer.$el,n=t.offsetWidth,a=this.scrollWrapper,i=this.$parent.$refs.tag,c=null,o=null;if(i.length>0&&(c=i[0],o=i[i.length-1]),c===e)a.scrollLeft=0;else if(o===e)a.scrollLeft=a.scrollWidth-n;else{var s=i.findIndex((function(t){return t===e})),r=i[s-1],l=i[s+1],d=l.$el.offsetLeft+l.$el.offsetWidth+Ye,u=r.$el.offsetLeft-Ye;d>a.scrollLeft+n?a.scrollLeft=d-n:u1&&void 0!==arguments[1]?arguments[1]:"/",a=[];return e.forEach((function(e){if(e.meta&&e.meta.affix){var i=ze.a.resolve(n,e.path);a.push({fullPath:i,path:i,name:e.name,meta:Object(l["a"])({},e.meta)})}if(e.children){var c=t.filterAffixTags(e.children,e.path);c.length>=1&&(a=[].concat(Object(Ke["a"])(a),Object(Ke["a"])(c)))}})),a},initTags:function(){var e,t=this.affixTags=this.filterAffixTags(this.routes),n=Object(Je["a"])(t);try{for(n.s();!(e=n.n()).done;){var a=e.value;a.name&&this.$store.dispatch("tagsView/addVisitedView",a)}}catch(i){n.e(i)}finally{n.f()}},addTags:function(){var e=this.$route.name;return e&&this.$store.dispatch("tagsView/addView",this.$route),!1},moveToCurrentTag:function(){var e=this,t=this.$refs.tag;this.$nextTick((function(){var n,a=Object(Je["a"])(t);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.to.path===e.$route.path){e.$refs.scrollPane.moveToTarget(i),i.to.fullPath!==e.$route.fullPath&&e.$store.dispatch("tagsView/updateVisitedView",e.$route);break}}}catch(c){a.e(c)}finally{a.f()}}))},refreshSelectedTag:function(e){var t=this;this.$store.dispatch("tagsView/delCachedView",e).then((function(){var n=e.fullPath;t.$nextTick((function(){t.$router.replace({path:"/redirect"+n})}))}))},closeSelectedTag:function(e){var t=this;this.$store.dispatch("tagsView/delView",e).then((function(n){var a=n.visitedViews;t.isActive(e)&&t.toLastView(a,e)}))},closeOthersTags:function(){var e=this;this.$router.push(this.selectedTag),this.$store.dispatch("tagsView/delOthersViews",this.selectedTag).then((function(){e.moveToCurrentTag()}))},closeAllTags:function(e){var t=this;this.$store.dispatch("tagsView/delAllViews").then((function(n){var a=n.visitedViews;t.affixTags.some((function(t){return t.path===e.path}))||t.toLastView(a,e)}))},toLastView:function(e,t){var n=e.slice(-1)[0];n?this.$router.push(n):"Dashboard"===t.name?this.$router.replace({path:"/redirect"+t.fullPath}):this.$router.push("/")},openMenu:function(e,t){var n=105,a=this.$el.getBoundingClientRect().left,i=this.$el.offsetWidth,c=i-n,o=t.clientX-a+15;this.left=o>c?c:o,this.top=t.clientY,this.visible=!0,this.selectedTag=e},closeMenu:function(){this.visible=!1}}},it=at,ct=(n("034f"),n("cfaa"),Object(v["a"])(it,Ge,Ue,!1,null,"c64b5a6c",null)),ot=ct.exports,st=n("4360"),rt=document,lt=rt.body,dt=992,ut={watch:{$route:function(e){"mobile"===this.device&&this.sidebar.opened&&st["a"].dispatch("app/closeSideBar",{withoutAnimation:!1})}},beforeMount:function(){window.addEventListener("resize",this.$_resizeHandler)},beforeDestroy:function(){window.removeEventListener("resize",this.$_resizeHandler)},mounted:function(){var e=this.$_isMobile();e&&(st["a"].dispatch("app/toggleDevice","mobile"),st["a"].dispatch("app/closeSideBar",{withoutAnimation:!0}))},methods:{$_isMobile:function(){var e=lt.getBoundingClientRect();return e.width-1'});o.a.add(s);t["default"]=s},aa46:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-edit",use:"icon-edit-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},aace:function(e,t,n){},ab00:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-lock",use:"icon-lock-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},ad1c:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-education",use:"icon-education-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},b20f:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409EFF",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},b3b5:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-user",use:"icon-user-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},b3b6:function(e,t,n){},b444:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-item_logo",use:"icon-item_logo-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},b775:function(e,t,n){"use strict";var a=n("bc3a"),i=n.n(a),c=n("5c96"),o=n("4360"),s=n("5f87"),r=i.a.create({baseURL:"",timeout:2e4});r.interceptors.request.use((function(e){return o["a"].getters.token&&(e.headers["Authorization"]=Object(s["a"])()),e}),(function(e){return console.log(e),Promise.reject(e)})),r.interceptors.response.use((function(e){var t=e.data;if("20000"!==t.code&&"0"!==t.code&&"200"!==t.code)return Object(c["Message"])({message:t.message||"Error",type:"error",duration:5e3}),"50008"!==t.code&&"50012"!==t.code&&"50014"!==t.code||c["MessageBox"].confirm("You have been logged out, you can cancel to stay on this page, or log in again","Confirm logout",{confirmButtonText:"Re-Login",cancelButtonText:"Cancel",type:"warning"}).then((function(){o["a"].dispatch("user/resetToken").then((function(){location.reload()}))})),Promise.reject(new Error(t.message||"Error"));var n=e.data,a=n.code;if("0"===a){var i=n.data;return i}return"200"===a?n:t}),(function(e){return console.log("err"+e),Object(c["Message"])({message:e.message,type:"error",duration:5e3}),Promise.reject(e)})),t["a"]=r},bc35:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-clipboard",use:"icon-clipboard-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},c309:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-exe-cfg",use:"icon-exe-cfg-usage",viewBox:"0 0 1529 1024",content:''});o.a.add(s);t["default"]=s},c3a3:function(e,t,n){},c653:function(e,t,n){var a={"./app.js":"d9cd","./errorLog.js":"4d49","./permission.js":"31c2","./settings.js":"0781","./tagsView.js":"7509","./user.js":"0f9a"};function i(e){var t=c(e);return n(t)}function c(e){var t=a[e];if(!(t+1)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return t}i.keys=function(){return Object.keys(a)},i.resolve=c,e.exports=i,i.id="c653"},c829:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-chart",use:"icon-chart-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},c968:function(e,t,n){"use strict";n("9a1c")},cbb7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-email",use:"icon-email-usage",viewBox:"0 0 128 96",content:''});o.a.add(s);t["default"]=s},ce80:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-cfg-datasouce",use:"icon-cfg-datasouce-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},cf1e:function(e,t,n){e.exports={menuText:"#bfcbd9",menuActiveText:"#409EFF",subMenuActiveText:"#f4f4f5",menuBg:"#304156",menuHover:"#263445",subMenuBg:"#1f2d3d",subMenuHover:"#001528",sideBarWidth:"210px"}},cfaa:function(e,t,n){"use strict";n("3561")},d056:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-people",use:"icon-people-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},d7ec:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-eye-open",use:"icon-eye-open-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},d9ae:function(e,t,n){"use strict";n("8d4d")},d9cd:function(e,t,n){"use strict";n.r(t);var a=n("a78e"),i=n.n(a),c={sidebar:{opened:!i.a.get("sidebarStatus")||!!+i.a.get("sidebarStatus"),withoutAnimation:!1},device:"desktop",size:i.a.get("size")||"medium"},o={TOGGLE_SIDEBAR:function(e){e.sidebar.opened=!e.sidebar.opened,e.sidebar.withoutAnimation=!1,e.sidebar.opened?i.a.set("sidebarStatus",1):i.a.set("sidebarStatus",0)},CLOSE_SIDEBAR:function(e,t){i.a.set("sidebarStatus",0),e.sidebar.opened=!1,e.sidebar.withoutAnimation=t},TOGGLE_DEVICE:function(e,t){e.device=t},SET_SIZE:function(e,t){e.size=t,i.a.set("size",t)}},s={toggleSideBar:function(e){var t=e.commit;t("TOGGLE_SIDEBAR")},closeSideBar:function(e,t){var n=e.commit,a=t.withoutAnimation;n("CLOSE_SIDEBAR",a)},toggleDevice:function(e,t){var n=e.commit;n("TOGGLE_DEVICE",t)},setSize:function(e,t){var n=e.commit;n("SET_SIZE",t)}};t["default"]={namespaced:!0,state:c,mutations:o,actions:s}},dbc7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-exit-fullscreen",use:"icon-exit-fullscreen-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},dbd7:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-lessee",use:"icon-lessee-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},dc52:function(e,t,n){},dcf8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-nested",use:"icon-nested-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},e00c:function(e,t,n){"use strict";n("57cd")},e534:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-theme",use:"icon-theme-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},e7c8:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-tree-table",use:"icon-tree-table-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},eb1b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-form",use:"icon-form-usage",viewBox:"0 0 128 128",content:''});o.a.add(s);t["default"]=s},eb7b:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-threadpool_logo",use:"icon-threadpool_logo-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},ed08:function(e,t,n){"use strict";n.d(t,"f",(function(){return i})),n.d(t,"d",(function(){return c})),n.d(t,"e",(function(){return o})),n.d(t,"b",(function(){return s})),n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return d})),n.d(t,"g",(function(){return u}));n("3b2b"),n("4917"),n("4f7f"),n("5df3"),n("1c4c"),n("28a5"),n("ac6a"),n("456d"),n("a481"),n("6b54");var a=n("7618");function i(e,t){if(0===arguments.length)return null;var n,i=t||"{y}-{m}-{d} {h}:{i}:{s}";"object"===Object(a["a"])(e)?n=e:("string"===typeof e&&/^[0-9]+$/.test(e)&&(e=parseInt(e)),"number"===typeof e&&10===e.toString().length&&(e*=1e3),n=new Date(e));var c={y:n.getFullYear(),m:n.getMonth()+1,d:n.getDate(),h:n.getHours(),i:n.getMinutes(),s:n.getSeconds(),a:n.getDay()},o=i.replace(/{(y|m|d|h|i|s|a)+}/g,(function(e,t){var n=c[t];return"a"===t?["日","一","二","三","四","五","六"][n]:(e.length>0&&n<10&&(n="0"+n),n||0)}));return o}function c(e,t){e=10===(""+e).length?1e3*parseInt(e):+e;var n=new Date(e),a=Date.now(),c=(a-n)/1e3;return c<30?"刚刚":c<3600?Math.ceil(c/60)+"分钟前":c<86400?Math.ceil(c/3600)+"小时前":c<172800?"1天前":t?i(e,t):n.getMonth()+1+"月"+n.getDate()+"日"+n.getHours()+"时"+n.getMinutes()+"分"}function o(e){var t=e.split("?")[1];return t?JSON.parse('{"'+decodeURIComponent(t).replace(/"/g,'\\"').replace(/&/g,'","').replace(/=/g,'":"').replace(/\+/g," ")+'"}'):{}}function s(e,t,n){var a,i,c,o,s,r=function r(){var l=+new Date-o;l0?a=setTimeout(r,t-l):(a=null,n||(s=e.apply(c,i),a||(c=i=null)))};return function(){for(var i=arguments.length,l=new Array(i),d=0;d'});o.a.add(s);t["default"]=s},f842:function(e,t,n){"use strict";n("f514")},f9a1:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-pdf",use:"icon-pdf-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s},fab5:function(e,t,n){"use strict";n("b3b6")},fea0:function(e,t,n){"use strict";n.r(t);var a=n("e017"),i=n.n(a),c=n("21a1"),o=n.n(c),s=new i.a({id:"icon-log",use:"icon-log-usage",viewBox:"0 0 1024 1024",content:''});o.a.add(s);t["default"]=s}},[[0,"runtime","chunk-elementUI","chunk-libs"]]]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-003006fa.e2f7ea8b.js b/hippo4j-console/src/main/resources/static/static/js/chunk-003006fa.e2f7ea8b.js deleted file mode 100644 index c6717d4b..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-003006fa.e2f7ea8b.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-003006fa"],{"333d":function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"pagination-container",class:{hidden:e.hidden}},[a("el-pagination",e._b({attrs:{background:e.background,"current-page":e.currentPage,"page-size":e.pageSize,layout:e.layout,"page-sizes":e.pageSizes,total:e.total},on:{"update:currentPage":function(t){e.currentPage=t},"update:current-page":function(t){e.currentPage=t},"update:pageSize":function(t){e.pageSize=t},"update:page-size":function(t){e.pageSize=t},"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}},"el-pagination",e.$attrs,!1))],1)},l=[];a("c5f6");Math.easeInOutQuad=function(e,t,a,i){return e/=i/2,e<1?a/2*e*e+t:(e--,-a/2*(e*(e-2)-1)+t)};var r=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}();function n(e){document.documentElement.scrollTop=e,document.body.parentNode.scrollTop=e,document.body.scrollTop=e}function s(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function o(e,t,a){var i=s(),l=e-i,o=20,u=0;t="undefined"===typeof t?500:t;var c=function e(){u+=o;var s=Math.easeInOutQuad(u,i,l,t);n(s),u0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.instanceDialogFormVisible,width:"1000px"},on:{"update:visible":function(t){e.instanceDialogFormVisible=t}}},[a("test"),e._v(" "),a("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"right","label-width":"110px"}},[a("h3",[e._v("       线程池负载高时, 禁止频繁刷新此页面!!!")]),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:""}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"线程池ID"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.tpId,callback:function(t){e.$set(e.runTimeTemp,"tpId",t)},expression:"runTimeTemp.tpId"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"当前负载",prop:"currentLoad"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.currentLoad,callback:function(t){e.$set(e.runTimeTemp,"currentLoad",t)},expression:"runTimeTemp.currentLoad"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"峰值负载",prop:"peakLoad"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.peakLoad,callback:function(t){e.$set(e.runTimeTemp,"peakLoad",t)},expression:"runTimeTemp.peakLoad"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"内存占比",prop:"currentLoad"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.memoryProportion,callback:function(t){e.$set(e.runTimeTemp,"memoryProportion",t)},expression:"runTimeTemp.memoryProportion"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"剩余内存",prop:"currentLoad"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.freeMemory,callback:function(t){e.$set(e.runTimeTemp,"freeMemory",t)},expression:"runTimeTemp.freeMemory"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"《线程相关》"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"核心线程"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.coreSize,callback:function(t){e.$set(e.runTimeTemp,"coreSize",t)},expression:"runTimeTemp.coreSize"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"当前线程",prop:"poolSize"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.poolSize,callback:function(t){e.$set(e.runTimeTemp,"poolSize",t)},expression:"runTimeTemp.poolSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"最大线程",prop:"maximumSize"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.maximumSize,callback:function(t){e.$set(e.runTimeTemp,"maximumSize",t)},expression:"runTimeTemp.maximumSize"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"活跃线程",prop:"activeSize"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.activeSize,callback:function(t){e.$set(e.runTimeTemp,"activeSize",t)},expression:"runTimeTemp.activeSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"《队列相关》"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"阻塞队列"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.queueType,callback:function(t){e.$set(e.runTimeTemp,"queueType",t)},expression:"runTimeTemp.queueType"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列容量",prop:"queueCapacity"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.queueCapacity,callback:function(t){e.$set(e.runTimeTemp,"queueCapacity",t)},expression:"runTimeTemp.queueCapacity"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列元素",prop:"queueSize"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.queueSize,callback:function(t){e.$set(e.runTimeTemp,"queueSize",t)},expression:"runTimeTemp.queueSize"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列剩余容量",prop:"queueRemainingCapacity"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.queueRemainingCapacity,callback:function(t){e.$set(e.runTimeTemp,"queueRemainingCapacity",t)},expression:"runTimeTemp.queueRemainingCapacity"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"《其它信息》"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"任务总量",prop:"completedTaskCount"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.completedTaskCount,callback:function(t){e.$set(e.runTimeTemp,"completedTaskCount",t)},expression:"runTimeTemp.completedTaskCount"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"拒绝次数",prop:"rejectCount"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.rejectCount,callback:function(t){e.$set(e.runTimeTemp,"rejectCount",t)},expression:"runTimeTemp.rejectCount"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"最后更新时间",prop:"clientLastRefreshTime"}},[a("el-input",{attrs:{disabled:!0},model:{value:e.runTimeTemp.clientLastRefreshTime,callback:function(t){e.$set(e.runTimeTemp,"clientLastRefreshTime",t)},expression:"runTimeTemp.clientLastRefreshTime"}})],1)],1)],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.instanceDialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.handleInfo()}}},[e._v("\n 刷新\n ")])],1)],1),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"1000px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"基本信息"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"租户ID",prop:"tenantId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[a("el-input-number",{attrs:{placeholder:"核心线程",min:1,max:999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"项目ID",prop:"itemId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"最大线程",prop:"maxSize"}},[a("el-input-number",{attrs:{placeholder:"最大线程",min:1,max:999},model:{value:e.temp.maxSize,callback:function(t){e.$set(e.temp,"maxSize",t)},expression:"temp.maxSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"线程池ID",prop:"tpId"}},[a("el-input",{attrs:{size:"medium",placeholder:"请输入线程池ID",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"扩展信息"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列类型",prop:"queueType"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"队列类型"},on:{change:e.selectQueueType},model:{value:e.temp.queueType,callback:function(t){e.$set(e.temp,"queueType",t)},expression:"temp.queueType"}},e._l(e.queueTypeOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列容量",prop:"capacity"}},[a("el-input-number",{attrs:{placeholder:"队列容量",min:0,max:2147483647,disabled:4===e.temp.queueType||5===e.temp.queueType},model:{value:e.temp.capacity,callback:function(t){e.$set(e.temp,"capacity",t)},expression:"temp.capacity"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"拒绝策略",prop:"rejectedType"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"拒绝策略"},model:{value:e.temp.rejectedType,callback:function(t){e.$set(e.temp,"rejectedType",t)},expression:"temp.rejectedType"}},e._l(e.rejectedOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"KVTime",prop:"keepAliveTime"}},[a("el-input-number",{attrs:{placeholder:"Time / S",min:20,max:90},model:{value:e.temp.keepAliveTime,callback:function(t){e.$set(e.temp,"keepAliveTime",t)},expression:"temp.keepAliveTime"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}})],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),a("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),a("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},l=[],r=a("bd86"),n=(a("ac6a"),a("456d"),a("3737")),s=a("4d856"),o=a("b775");function u(e){return Object(o["a"])({url:"/v1/cs/thread/pool/list/instance/"+e[0]+"/"+e[1],method:"get"})}function c(e){return Object(o["a"])({url:"/v1/cs/configs?identify="+e.identify,method:"post",data:e})}var p,d=a("6724"),m=a("333d"),f=a("bc3a"),b=a.n(f),v=(p={name:"JobProject",components:{Pagination:m["a"]},directives:{waves:d["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]}}},Object(r["a"])(p,"filters",{queueFilter:function(e){return"1"==e?"ArrayBlockingQueue":"2"==e?"LinkedBlockingQueue":"3"==e?"LinkedBlockingDeque":"4"==e?"SynchronousQueue":"5"==e?"LinkedTransferQueue":"6"==e?"PriorityBlockingQueue":"9"==e?"ResizableLinkedBlockingQueue":void 0},rejectedFilter:function(e){return"1"==e?"CallerRunsPolicy":"2"==e?"AbortPolicy":"3"==e?"DiscardPolicy":"4"==e?"DiscardOldestPolicy":void 0}}),Object(r["a"])(p,"data",(function(){return{list:null,listLoading:!1,total:0,listQuery:{current:1,size:10,itemId:"",tpId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,instanceDialogFormVisible:!1,tenantOptions:[],threadPoolOptions:[],itemOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (支持动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"}],alarmTypes:[{key:0,display_name:"报警"},{key:1,display_name:"不报警"}],rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maxSize:[{required:!0,message:"this is required",trigger:"blur"}],queueType:[{required:!0,message:"this is required",trigger:"blur"}],keepAliveTime:[{required:!0,message:"this is required",trigger:"blur"}],isAlarm:[{required:!0,message:"this is required",trigger:"blur"}],capacityAlarm:[{required:!0,message:"this is required",trigger:"blur"}],livenessAlarm:[{required:!0,message:"this is required",trigger:"blur"}],rejectedType:[{required:!0,message:"this is required",trigger:"blur"}]},dialogStatus:"",textMap:{update:"Edit",create:"Create",info:"Info"},temp:{id:void 0,tenantId:""},runTimeTemp:{},tempRow:{},visible:!0}})),Object(r["a"])(p,"created",(function(){this.initSelect()})),Object(r["a"])(p,"methods",{fetchData:function(){var e=this;if(0!=Object.keys(this.listQuery.itemId).length)if(0!=Object.keys(this.listQuery.tpId).length){this.listLoading=!0;var t=[this.listQuery.itemId,this.listQuery.tpId];u(t).then((function(t){t.records;e.list=t,e.listLoading=!1}))}else alert("线程池ID不允许为空!");else alert("项目ID不允许为空")},initSelect:function(){var e=this;n["c"]({}).then((function(t){for(var a=t.records,i=0;i0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"800px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",attrs:{model:e.temp,"label-position":"left","label-width":"100px"}},[a("el-form-item",{attrs:{label:"业务类型",prop:"category"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"业务类型"},model:{value:e.temp.category,callback:function(t){e.$set(e.temp,"category",t)},expression:"temp.category"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"业务标识",prop:"bizNo"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"业务标识"},model:{value:e.temp.bizNo,callback:function(t){e.$set(e.temp,"bizNo",t)},expression:"temp.bizNo"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"操作人",prop:"operator"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"操作人"},model:{value:e.temp.operator,callback:function(t){e.$set(e.temp,"operator",t)},expression:"temp.operator"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"创建时间",prop:"createTime"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"创建时间"},model:{value:e.temp.createTime,callback:function(t){e.$set(e.temp,"createTime",t)},expression:"temp.createTime"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"日志内容",prop:"action"}},[a("el-input",{staticStyle:{width:"60%"},attrs:{disabled:!0,autosize:{minRows:4,maxRows:10},type:"textarea",placeholder:"日志内容"},model:{value:e.temp.action,callback:function(t){e.$set(e.temp,"action",t)},expression:"temp.action"}})],1)],1)],1),e._v(" "),a("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),a("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},n=[],l=a("b775");function o(e){return Object(l["a"])({url:"/hippo4j/v1/cs/log/query/page",method:"post",data:e})}var r=a("6724"),s=a("333d"),c={name:"JobProject",components:{Pagination:s["a"]},directives:{waves:r["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>100?e.slice(0,100)+"...":e:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tenantId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Info",create:"Create"},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData()},methods:{fetchData:function(){var e=this;this.listLoading=!0,o(this.listQuery).then((function(t){var a=t.records,i=t.total;e.total=i,e.list=a,e.listLoading=!1}))},resetTemp:function(){this.temp={id:void 0,tenantName:"",tenantDesc:""}},handleCreate:function(){var e=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},createData:function(){var e=this;this.$refs["dataForm"].validate((function(t){t&&jobProjectApi.created(e.temp).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(e){var t=this;this.temp=Object.assign({},e),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},updateData:function(){var e=this;this.$refs["dataForm"].validate((function(t){if(t){var a=Object.assign({},e.temp);jobProjectApi.updated(a).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},handleDelete:function(e){var t=this;console.log("删除"),jobProjectApi.deleted(e.tenantId).then((function(e){t.fetchData(),t.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}}},u=c,d=a("2877"),p=Object(d["a"])(u,i,n,!1,null,null,null);t["default"]=p.exports},6724:function(e,t,a){"use strict";a("8d41");var i="@@wavesContext";function n(e,t){function a(a){var i=Object.assign({},t.value),n=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},i),l=n.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var o=l.getBoundingClientRect(),r=l.querySelector(".waves-ripple");switch(r?r.className="waves-ripple":(r=document.createElement("span"),r.className="waves-ripple",r.style.height=r.style.width=Math.max(o.width,o.height)+"px",l.appendChild(r)),n.type){case"center":r.style.top=o.height/2-r.offsetHeight/2+"px",r.style.left=o.width/2-r.offsetWidth/2+"px";break;default:r.style.top=(a.pageY-o.top-r.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",r.style.left=(a.pageX-o.left-r.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return r.style.backgroundColor=n.color,r.className="waves-ripple z-active",!1}}return e[i]?e[i].removeHandle=a:e[i]={removeHandle:a},a}var l={bind:function(e,t){e.addEventListener("click",n(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[i].removeHandle,!1),e.addEventListener("click",n(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[i].removeHandle,!1),e[i]=null,delete e[i]}},o=function(e){e.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(o)),l.install=o;t["a"]=l},"8d41":function(e,t,a){},b36cf:function(e,t,a){},fe41:function(e,t,a){"use strict";a("b36cf")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-073ce7f8.056a0bda.js b/hippo4j-console/src/main/resources/static/static/js/chunk-073ce7f8.056a0bda.js new file mode 100644 index 00000000..c2de4e70 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-073ce7f8.056a0bda.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-073ce7f8"],{"04ca":function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"dashboard-editor-container"},[i("div",{staticClass:"filter-container"},[i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"租户(必填)",filterable:""},on:{change:function(e){return t.tenantSelectList()}},model:{value:t.listQuery.tenantId,callback:function(e){t.$set(t.listQuery,"tenantId",e)},expression:"listQuery.tenantId"}},t._l(t.tenantOptions,(function(t){return i("el-option",{key:t.key,attrs:{label:t.display_name,value:t.key}})})),1),t._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"项目(必填)",filterable:""},on:{change:function(e){return t.itemSelectList()}},model:{value:t.listQuery.itemId,callback:function(e){t.$set(t.listQuery,"itemId",e)},expression:"listQuery.itemId"}},t._l(t.itemOptions,(function(t){return i("el-option",{key:t.key,attrs:{label:t.display_name,value:t.key}})})),1),t._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"线程池(必填)",filterable:""},on:{change:function(e){return t.threadPoolSelectList()}},model:{value:t.listQuery.tpId,callback:function(e){t.$set(t.listQuery,"tpId",e)},expression:"listQuery.tpId"}},t._l(t.threadPoolOptions,(function(t){return i("el-option",{key:t.key,attrs:{label:t.display_name,value:t.key}})})),1),t._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"IP : Port(必填)",filterable:""},model:{value:t.listQuery.identify,callback:function(e){t.$set(t.listQuery,"identify",e)},expression:"listQuery.identify"}},t._l(t.identifyOptions,(function(t){return i("el-option",{key:t.key,attrs:{label:t.display_name,value:t.key}})})),1),t._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-search"},on:{click:t.fetchData}},[t._v("\n 搜索\n ")]),t._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-refresh"},on:{click:t.refreshData}},[t._v("\n 重置\n ")])],1),t._v(" "),t.temp.coreSize?i("el-row",{attrs:{gutter:10}},[i("el-card",{attrs:{shadow:"hover"}},[i("el-descriptions",{attrs:{column:4,border:""}},[i("el-descriptions-item",{attrs:{label:"核心线程"}},[t._v(t._s(t.temp.coreSize))]),t._v(" "),i("el-descriptions-item",{attrs:{label:"最大线程"}},[t._v(t._s(t.temp.maxSize))]),t._v(" "),i("el-descriptions-item",{attrs:{label:"是否报警"}},[t._v("\n "+t._s(t._f("alarmFilter")(t.temp.isAlarm))+"\n ")]),t._v(" "),i("el-descriptions-item",{attrs:{label:"已完成任务数"}},[t._v(t._s(t.lastTaskCount))]),t._v(" "),i("el-descriptions-item",{attrs:{label:"核心线程超时"}},[t._v("\n "+t._s(t._f("allowCoreThreadTimeOutFilter")(t.temp.allowCoreThreadTimeOut))+"\n ")]),t._v(" "),i("el-descriptions-item",{attrs:{label:"队列类型"}},[t._v("\n "+t._s(t._f("queueFilter")(t.temp.queueType))+"\n ")]),t._v(" "),i("el-descriptions-item",{attrs:{label:"队列容量"}},[t._v(t._s(t.temp.capacity))]),t._v(" "),i("el-descriptions-item",{attrs:{label:"拒绝策略"}},[t._v("\n "+t._s(t._f("rejectedFilter")(t.temp.rejectedType))+"\n ")]),t._v(" "),i("el-descriptions-item",{attrs:{label:"实例 ID"}},[t._v(t._s(t.listQuery.identify))])],1)],1),t._v(" "),i("el-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:10}},[i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData1,times:t.times}})],1)],1),t._v(" "),i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData2,times:t.times}})],1)],1)],1),t._v(" "),i("el-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:10}},[i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData3,times:t.times}})],1)],1),t._v(" "),i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData4,times:t.times}})],1)],1)],1),t._v(" "),i("el-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:10}},[i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData5,times:t.times}})],1)],1),t._v(" "),i("el-col",{attrs:{span:12}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData6,times:t.times}})],1)],1)],1)],1):i("el-empty",{attrs:{description:"暂无结果"}})],1)},a=[],r=i("c80c"),s=(i("96cf"),i("3b8d")),o=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{class:t.className,style:{height:t.height,width:t.width}})},l=[],c=(i("7f7f"),i("ed08")),d={data:function(){return{$_sidebarElm:null}},mounted:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},beforeDestroy:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},activated:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},deactivated:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},methods:{$_resizeHandler:function(){var t=this;return Object(c["a"])((function(){t.chart&&t.chart.resize()}),100)()},$_initResizeEvent:function(){window.addEventListener("resize",this.$_resizeHandler)},$_destroyResizeEvent:function(){window.removeEventListener("resize",this.$_resizeHandler)},$_sidebarResizeHandler:function(t){"width"===t.propertyName&&this.$_resizeHandler()},$_initSidebarResizeEvent:function(){this.$_sidebarElm=document.getElementsByClassName("sidebar-container")[0],this.$_sidebarElm&&this.$_sidebarElm.addEventListener("transitionend",this.$_sidebarResizeHandler)},$_destroySidebarResizeEvent:function(){this.$_sidebarElm&&this.$_sidebarElm.removeEventListener("transitionend",this.$_sidebarResizeHandler)}}},u={mixins:[d],props:{className:{type:String,default:"chart"},width:{type:String,default:"100%"},height:{type:String,default:"300px"},autoResize:{type:Boolean,default:!0},chartData:{type:Array,required:!0},times:{type:Array,required:!0}},data:function(){return{chart:null,chartDataFrom:{}}},watch:{chartData:{deep:!0,handler:function(t){this.setOptions(t)}}},mounted:function(){var t=this;this.$nextTick((function(){t.initChart()}))},beforeDestroy:function(){this.chart&&(this.chart.dispose(),this.chart=null)},methods:{initChart:function(){var t=i("313e");this.chart=t.init(this.$el,"macarons"),this.setOptions()},setOptions:function(){var t=this.chartData.map((function(t){return{name:t.name,type:"line",stack:"Total",areaStyle:{},label:{position:"top"},color:t.color,emphasis:{focus:"series"},smooth:!0,data:t.data,showSymbol:!1}}));this.chart.setOption({tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},legend:{data:this.chartData},toolbox:{feature:{}},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:this.times}],yAxis:[{type:"value"}],series:t})}}},h=u,p=i("2877"),f=Object(p["a"])(h,o,l,!1,null,null,null),m=f.exports,v=i("6724"),y=i("3737"),b=i("dd71"),_=i("4d85"),g=i("397f"),w=i("b775");function O(t){return Object(w["a"])({url:"/hippo4j/v1/cs/monitor/info",method:"post",data:t})}function j(t){return Object(w["a"])({url:"/hippo4j/v1/cs/monitor/last/task/count",method:"post",data:t})}var k={name:"Monitor",components:{LineChart:m},directives:{waves:v["a"]},filters:{queueFilter:function(t){var e={1:"ArrayBlockingQueue",2:"LinkedBlockingQueue",3:"LinkedBlockingDeque",4:"SynchronousQueue",5:"LinkedTransferQueue",6:"PriorityBlockingQueue",9:"ResizableLinkedBlockingQueue"};return e[t]},rejectedFilter:function(t){var e={1:"CallerRunsPolicy",2:"AbortPolicy",3:"DiscardPolicy",4:"DiscardOldestPolicy",5:"RunsOldestTaskPolicy",6:"SyncPutQueuePolicy"};return t&&e[t]?e[t]:t?"CustomRejectedPolicy-".concat(t):""},alarmFilter:function(t){return"1"===t?"报警":"忽略"},allowCoreThreadTimeOutFilter:function(t){return"1"===t?"超时":"不超时"}},data:function(){return{lineChartData1:[{name:"activeSizeList",data:[],color:"#264653"}],lineChartData2:[{name:"poolSizeList",data:[],color:"#e9c46a"}],lineChartData3:[{name:"queueSizeList",data:[],color:"#e9c46a"}],lineChartData4:[{name:"queueRemainingCapacityList",data:[],color:"#f4a261"}],lineChartData5:[{name:"completedTaskCountList",data:[],color:"#e76f51"}],lineChartData6:[{name:"rejectCountList",data:[],color:"#e63946"}],times:[],size:500,tenantOptions:[],threadPoolOptions:[],itemOptions:[],identifyOptions:[],listQuery:{current:1,size:10,itemId:"",tpId:"",tenantId:"",identify:"",instanceId:""},temp:{},lastTaskCount:null}},created:function(){var t=Object(s["a"])(Object(r["a"])().mark((function t(){return Object(r["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.initSelect();case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{fetchData:function(){var t=this;this.listQuery.tenantId?this.listQuery.itemId?this.listQuery.tpId?this.listQuery.identify?(this.listQuery.instanceId=this.listQuery.identify,_["d"](this.listQuery).then((function(e){t.temp=e})),j(this.listQuery).then((function(e){t.lastTaskCount=e.completedTaskCount})),this.initChart()):this.$message.warning("IP : PORT 不允许为空"):this.$message.warning("线程池不允许为空"):this.$message.warning("项目不允许为空"):this.$message.warning("租户不允许为空")},refreshData:function(){this.listQuery.tenantId=null,this.listQuery.itemId=null,this.listQuery.tpId=null,this.listQuery.identify=null,this.itemOptions=[],this.threadPoolOptions=[],this.identifyOptions=[]},initSelect:function(){var t=this;b["c"]({size:this.size}).then((function(e){var i=e||{},n=i.records;t.tenantOptions=n&&n.map((function(t){return{key:t.tenantId,display_name:t.tenantId+" "+t.tenantName}}))}))},tenantSelectList:function(){var t=this;this.listQuery.itemId=null,this.listQuery.tpId=null,this.listQuery.identify=null,this.itemOptions=[],this.threadPoolOptions=[],this.identifyOptions=[];var e={tenantId:this.listQuery.tenantId,size:this.size};y["c"](e).then((function(e){var i=e||{},n=i.records;t.itemOptions=n&&n.map((function(t){return{key:t.itemId,display_name:t.itemId+" "+t.itemName}}))}))},itemSelectList:function(){var t=this;this.listQuery.tpId=null,this.listQuery.identify=null,this.threadPoolOptions=[],this.identifyOptions=[];var e={itemId:this.listQuery.itemId,size:this.size};_["e"](e).then((function(e){var i=e||{},n=i.records;t.threadPoolOptions=n&&n.map((function(t){return{key:t.tpId,display_name:t.tpId}}))}))},threadPoolSelectList:function(){var t=this;this.listQuery.identify=null,this.identifyOptions=[];var e=[this.listQuery.itemId,this.listQuery.tpId];g["a"](e).then((function(e){t.identifyOptions=e&&e.map((function(t){return{key:t.identify,display_name:t.clientAddress}}))}))},initChart:function(){var t=this;O(this.listQuery).then((function(e){var i=e||{},n=i.poolSizeList,a=i.activeSizeList,r=i.queueSizeList,s=i.queueRemainingCapacityList,o=i.completedTaskCountList,l=i.rejectCountList,c=i.times;t.times=c,t.lineChartData1[0].data=a,t.lineChartData2[0].data=n,t.lineChartData3[0].data=r,t.lineChartData4[0].data=s,t.lineChartData5[0].data=o,t.lineChartData6[0].data=l}))}}},C=k,I=(i("3887"),Object(p["a"])(C,n,a,!1,null,"001a3100",null));e["default"]=I.exports},"2ba5":function(t,e,i){},3737:function(t,e,i){"use strict";i.d(e,"c",(function(){return a})),i.d(e,"d",(function(){return r})),i.d(e,"a",(function(){return s})),i.d(e,"b",(function(){return o}));var n=i("b775");function a(t){return Object(n["a"])({url:"/hippo4j/v1/cs/item/query/page",method:"post",data:t})}function r(t){return Object(n["a"])({url:"/hippo4j/v1/cs/item/update",method:"post",data:t})}function s(t){return Object(n["a"])({url:"/hippo4j/v1/cs/item/save",method:"post",data:t})}function o(t){return Object(n["a"])({url:"/hippo4j/v1/cs/item/delete/"+t[0]+"/"+t[1],method:"delete"})}},3887:function(t,e,i){"use strict";i("2ba5")},"397f":function(t,e,i){"use strict";i.d(e,"a",(function(){return a})),i.d(e,"b",(function(){return r}));var n=i("b775");function a(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/list/instance/"+t[0]+"/"+t[1],method:"get"})}function r(t){return Object(n["a"])({url:"/hippo4j/v1/cs/configs?identify="+t.identify,method:"post",data:t})}},"4d85":function(t,e,i){"use strict";i.d(e,"e",(function(){return a})),i.d(e,"f",(function(){return r})),i.d(e,"d",(function(){return s})),i.d(e,"g",(function(){return o})),i.d(e,"h",(function(){return l})),i.d(e,"j",(function(){return c})),i.d(e,"k",(function(){return d})),i.d(e,"i",(function(){return u})),i.d(e,"b",(function(){return h})),i.d(e,"c",(function(){return p})),i.d(e,"a",(function(){return f}));var n=i("b775");function a(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/query/page",method:"post",data:t})}function r(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/list/client/instance/"+t.itemId,method:"get",data:t})}function s(t){return Object(n["a"])({url:"/hippo4j/v1/cs/configs?tpId="+t.tpId+"&itemId="+t.itemId+"&namespace="+t.tenantId+"&instanceId="+t.identify,method:"get"})}function o(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/state/"+t.tpId+"?clientAddress="+t.clientAddress,method:"get"})}function l(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/thread/state/"+t.tpId+"?clientAddress="+t.clientAddress,method:"get"})}function c(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/run/state?clientAddress="+t.clientAddress,method:"get"})}function d(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/update/pool",method:"post",data:t})}function u(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:t})}function h(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:t})}function p(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/delete",method:"delete",data:t})}function f(t){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/alarm/enable/"+t.id+"/"+t.isAlarm,method:"post"})}},6724:function(t,e,i){"use strict";i("8d41");var n="@@wavesContext";function a(t,e){function i(i){var n=Object.assign({},e.value),a=Object.assign({ele:t,type:"hit",color:"rgba(0, 0, 0, 0.15)"},n),r=a.ele;if(r){r.style.position="relative",r.style.overflow="hidden";var s=r.getBoundingClientRect(),o=r.querySelector(".waves-ripple");switch(o?o.className="waves-ripple":(o=document.createElement("span"),o.className="waves-ripple",o.style.height=o.style.width=Math.max(s.width,s.height)+"px",r.appendChild(o)),a.type){case"center":o.style.top=s.height/2-o.offsetHeight/2+"px",o.style.left=s.width/2-o.offsetWidth/2+"px";break;default:o.style.top=(i.pageY-s.top-o.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",o.style.left=(i.pageX-s.left-o.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return o.style.backgroundColor=a.color,o.className="waves-ripple z-active",!1}}return t[n]?t[n].removeHandle=i:t[n]={removeHandle:i},i}var r={bind:function(t,e){t.addEventListener("click",a(t,e),!1)},update:function(t,e){t.removeEventListener("click",t[n].removeHandle,!1),t.addEventListener("click",a(t,e),!1)},unbind:function(t){t.removeEventListener("click",t[n].removeHandle,!1),t[n]=null,delete t[n]}},s=function(t){t.directive("waves",r)};window.Vue&&(window.waves=r,Vue.use(s)),r.install=s;e["a"]=r},"8d41":function(t,e,i){},dd71:function(t,e,i){"use strict";i.d(e,"c",(function(){return a})),i.d(e,"d",(function(){return r})),i.d(e,"a",(function(){return s})),i.d(e,"b",(function(){return o}));var n=i("b775");function a(t){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/query/page",method:"post",data:t})}function r(t){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/update",method:"post",data:t})}function s(t){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/save",method:"post",data:t})}function o(t){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/delete/"+t,method:"delete"})}}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-078a7535.1bbab392.js b/hippo4j-console/src/main/resources/static/static/js/chunk-078a7535.1bbab392.js new file mode 100644 index 00000000..e3de5a15 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-078a7535.1bbab392.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-078a7535"],{3737:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"d",(function(){return l})),i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return o}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/update",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/save",method:"post",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/delete/"+e[0]+"/"+e[1],method:"delete"})}},"395c":function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"app-container"},[i("div",{staticClass:"filter-container"},[i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"租户(必填)",filterable:""},on:{change:function(t){return e.tenantSelectList()}},model:{value:e.listQuery.tenantId,callback:function(t){e.$set(e.listQuery,"tenantId",t)},expression:"listQuery.tenantId"}},e._l(e.tenantOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"项目(必填)",filterable:""},on:{change:function(t){return e.itemSelectList()}},model:{value:e.listQuery.itemId,callback:function(t){e.$set(e.listQuery,"itemId",t)},expression:"listQuery.itemId"}},e._l(e.itemOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"线程池标识(必填)",filterable:""},model:{value:e.listQuery.threadPoolKey,callback:function(t){e.$set(e.listQuery,"threadPoolKey",t)},expression:"listQuery.threadPoolKey"}},e._l(e.threadPoolKeyOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.fetchData}},[e._v("\n 搜索\n ")]),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-refresh"},on:{click:e.refreshData}},[e._v("\n 重置\n ")])],1),e._v(" "),i("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.listLoading,expression:"listLoading"}],attrs:{data:e.list,"element-loading-text":"Loading",stripe:"",border:"",fit:"","max-height":"714","highlight-current-row":""}},[i("el-table-column",{attrs:{label:"序号",width:"95"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.$index+1))]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"实例标识",width:"260"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"primary",underline:!1}},[e._v(e._s(t.row.identify))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"Active"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-tag",{attrs:{type:e._f("statusFilter")(t.row.active)}},[e._v("\n "+e._s(t.row.active)+"\n ")])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"线程池标识"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(t.row.threadPoolKey)+"\n ")]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"核心线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"success",underline:!1}},[e._v(e._s(t.row.coreSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"最大线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"danger",underline:!1}},[e._v(e._s(t.row.maximumSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"操作",width:"180","class-name":"small-padding fixed-width"},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row;return[i("el-button",{attrs:{type:"text",size:"small"},on:{click:function(t){return e.handleUpdate(n)}}},[e._v(" 编辑 ")])]}}])})],1),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[i("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"最大线程",prop:"maximumSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.maximumSize,callback:function(t){e.$set(e.temp,"maximumSize",t)},expression:"temp.maximumSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"全部修改",prop:"allUpdate"}},[i("el-switch",{model:{value:e.temp.allUpdate,callback:function(t){e.$set(e.temp,"allUpdate",t)},expression:"temp.allUpdate"}})],1)],1),e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v(" 取消 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.updateData()}}},[e._v(" 确认 ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},a=[],l=i("3737"),r=i("dd71"),o=i("4d85"),s=i("47ec"),u=i("6724"),d={name:"JobProject",directives:{waves:u["a"]},filters:{statusFilter:function(e){var t={DEV:"info",TEST:"success",UAT:"warning",PROD:"danger"};return t[e]}},data:function(){var e=this;return{isRejectShow:!1,list:null,listLoading:!1,total:0,listQuery:{itemId:"",mark:"Hystrix",tenantId:"",threadPoolKey:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,runTimeTemp:{},typeOptions:[{key:"Dubbo",display_name:"Dubbo"},{key:"Kafka",display_name:"Kafka"},{key:"KafkaSpringCloudStream",display_name:"KafkaSpringCloudStream"},{key:"RocketMQ",display_name:"RocketMQ"},{key:"RocketMQSpringCloudStream",display_name:"RocketMQSpringCloudStream"},{key:"RabbitMQ",display_name:"RabbitMQ"},{key:"RabbitMQSpringCloudStream",display_name:"RabbitMQSpringCloudStream"}],tenantOptions:[],instanceDialogFormVisible:!1,threadPoolOptions:[],itemOptions:[],threadPoolKeyOptions:[],itemTempOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"},{key:5,display_name:"RunsOldestTaskPolicy"},{key:6,display_name:"SyncPutQueuePolicy"},{key:99,display_name:"CustomRejectedPolicy(自定义 SPI 策略)"}],alarmTypes:[{key:1,display_name:"报警"},{key:0,display_name:"不报警"}],allowCoreThreadTimeOutTypes:[{key:1,display_name:"超时"},{key:0,display_name:"不超时"}],size:500,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maximumSize:[{required:!0,message:"this is required",trigger:"blur"},{validator:function(t,i,n){parseInt(i)0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",staticStyle:{width:"400px","margin-left":"50px"},attrs:{rules:e.rules,model:e.temp,"label-position":"right","label-width":"100px"}},[a("el-form-item",{attrs:{label:"用户名",prop:"userName"}},[a("el-input",{attrs:{placeholder:"用户名"},model:{value:e.temp.userName,callback:function(t){e.$set(e.temp,"userName",t)},expression:"temp.userName"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"密 码",prop:"password"}},[a("el-input",{attrs:{placeholder:"密码",minlength:"6"},model:{value:e.temp.password,callback:function(t){e.$set(e.temp,"password",t)},expression:"temp.password"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"角色",prop:"role"}},[a("el-select",{staticClass:"filter-item",attrs:{placeholder:"角色类型"},model:{value:e.temp.role,callback:function(t){e.$set(e.temp,"role",t)},expression:"temp.role"}},e._l(e.roles,(function(e){return a("el-option",{key:e.key,attrs:{label:e,value:e}})})),1)],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确定\n ")])],1)],1)],1)},i=[],r=a("b775");function s(e){return Object(r["a"])({url:"/v1/cs/auth/users/page",method:"post",data:e})}function l(e){return Object(r["a"])({url:"/v1/cs/auth/users/update",method:"put",data:e})}function o(e){return Object(r["a"])({url:"/v1/cs/auth/users/add",method:"post",data:e})}function u(e){return Object(r["a"])({url:"/v1/cs/auth/users/remove/"+e,method:"delete"})}var c=a("6724"),d=a("333d"),p={name:"User",components:{Pagination:d["a"]},directives:{waves:c["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,userName:void 0},roles:["ROLE_USER","ROLE_ADMIN"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{role:[{required:!0,message:"role is required",trigger:"change"}],userName:[{required:!0,message:"userName is required",trigger:"blur"}],password:[{required:!1,message:"password is required",trigger:"blur"}]},temp:{id:void 0,role:"",userName:"",password:"",permission:""},resetTemp:function(){this.temp=this.$options.data().temp}}},created:function(){this.fetchData()},methods:{fetchData:function(){var e=this;this.listLoading=!0,s(this.listQuery).then((function(t){e.total=t.total,e.list=t.records,e.listLoading=!1}))},handleCreate:function(){var e=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},createData:function(){var e=this;this.$refs["dataForm"].validate((function(t){t&&o(e.temp).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(e){var t=this;this.temp=Object.assign({},e),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},updateData:function(){var e=this;this.$refs["dataForm"].validate((function(t){if(t){var a=Object.assign({},e.temp);l(a).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},handleDelete:function(e){var t=this;u(e.userName).then((function(e){t.fetchData(),t.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}}},m=p,f=a("2877"),g=Object(f["a"])(m,n,i,!1,null,null,null);t["default"]=g.exports},6724:function(e,t,a){"use strict";a("8d41");var n="@@wavesContext";function i(e,t){function a(a){var n=Object.assign({},t.value),i=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},n),r=i.ele;if(r){r.style.position="relative",r.style.overflow="hidden";var s=r.getBoundingClientRect(),l=r.querySelector(".waves-ripple");switch(l?l.className="waves-ripple":(l=document.createElement("span"),l.className="waves-ripple",l.style.height=l.style.width=Math.max(s.width,s.height)+"px",r.appendChild(l)),i.type){case"center":l.style.top=s.height/2-l.offsetHeight/2+"px",l.style.left=s.width/2-l.offsetWidth/2+"px";break;default:l.style.top=(a.pageY-s.top-l.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",l.style.left=(a.pageX-s.left-l.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return l.style.backgroundColor=i.color,l.className="waves-ripple z-active",!1}}return e[n]?e[n].removeHandle=a:e[n]={removeHandle:a},a}var r={bind:function(e,t){e.addEventListener("click",i(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[n].removeHandle,!1),e.addEventListener("click",i(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[n].removeHandle,!1),e[n]=null,delete e[n]}},s=function(e){e.directive("waves",r)};window.Vue&&(window.waves=r,Vue.use(s)),r.install=s;t["a"]=r},7456:function(e,t,a){},"8d41":function(e,t,a){},e498:function(e,t,a){"use strict";a("7456")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-0c349c3a.a8142b34.js b/hippo4j-console/src/main/resources/static/static/js/chunk-0c349c3a.a8142b34.js deleted file mode 100644 index 132c7835..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-0c349c3a.a8142b34.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0c349c3a"],{"266a":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"app-container"},[a("div",{staticClass:"filter-container"},[a("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"租户ID"},model:{value:e.listQuery.tenantId,callback:function(t){e.$set(e.listQuery,"tenantId",t)},expression:"listQuery.tenantId"}},e._l(e.tenantOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),a("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"项目ID"},model:{value:e.listQuery.itemId,callback:function(t){e.$set(e.listQuery,"itemId",t)},expression:"listQuery.itemId"}},e._l(e.itemOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),a("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"线程池ID"},model:{value:e.listQuery.tpId,callback:function(t){e.$set(e.listQuery,"tpId",t)},expression:"listQuery.tpId"}},e._l(e.threadPoolOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),a("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.fetchData}},[e._v("\n 搜索\n ")]),e._v(" "),a("el-button",{staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-edit"},on:{click:e.handleCreate}},[e._v("\n 添加\n ")])],1),e._v(" "),a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.listLoading,expression:"listLoading"}],attrs:{data:e.list,"element-loading-text":"Loading",border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{align:"center",label:"序号",width:"95"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.$index+1))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"租户ID",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.tenantId))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"项目ID",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.itemId))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"线程池ID",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.tpId))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"通知平台",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.platform))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"通知类型",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.type))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"报警间隔",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.row.interval))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"接收者",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(e._f("ellipsis")(t.row.receives)))]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"是否启用",align:"center"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-switch",{attrs:{"active-color":"#00A854","active-text":"启用","active-value":0,"inactive-color":"#F04134","inactive-text":"停用","inactive-value":1},on:{change:function(a){return e.changeEnable(t.row)}},model:{value:t.row.enable,callback:function(a){e.$set(t.row,"enable",a)},expression:"scope.row.enable"}})]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"操作",align:"center",width:"180","class-name":"small-padding fixed-width"},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row;return[a("el-button",{attrs:{type:"primary",size:"mini"},on:{click:function(t){return e.handleUpdate(n)}}},[e._v("\n 编辑\n ")]),e._v(" "),"deleted"!==n.status?a("el-button",{attrs:{size:"mini",type:"danger"},on:{click:function(t){return e.handleDelete(n)}}},[e._v("\n 删除\n ")]):e._e()]}}])})],1),e._v(" "),a("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"1000px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"基本信息"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"租户ID",prop:"tenantId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"通知平台",prop:"platform"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"通知平台"},model:{value:e.temp.platform,callback:function(t){e.$set(e.temp,"platform",t)},expression:"temp.platform"}},e._l(e.platformTypes,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"项目ID",prop:"itemId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"通知类型",prop:"type"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"通知类型"},on:{change:e.selectType},model:{value:e.temp.type,callback:function(t){e.$set(e.temp,"type",t)},expression:"temp.type"}},e._l(e.typeTypes,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"线程池ID",prop:"tpId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"线程池ID",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}},e._l(e.threadPoolOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"是否启用",prop:"enable"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"是否启用"},model:{value:e.temp.enable,callback:function(t){e.$set(e.temp,"enable",t)},expression:"temp.enable"}},e._l(e.enableTypes,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"扩展信息"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"Token",prop:"secretKey"}},[a("el-input",{attrs:{size:"medium",placeholder:"请输入Token"},model:{value:e.temp.secretKey,callback:function(t){e.$set(e.temp,"secretKey",t)},expression:"temp.secretKey"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"报警间隔",prop:"interval"}},[a("el-input-number",{attrs:{placeholder:"报警间隔/Min",min:0,disabled:"CONFIG"===e.temp.type},model:{value:e.temp.interval,callback:function(t){e.$set(e.temp,"interval",t)},expression:"temp.interval"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:40}},[a("el-col",{attrs:{span:24}},[a("el-form-item",{attrs:{label:"接收者",prop:"receives"}},[a("el-input",{staticStyle:{width:"83%"},attrs:{autosize:{minRows:6,maxRows:10},type:"textarea",placeholder:"多个接收者使用英文逗号 , 分割 (注意不要有空格)\n钉钉:填写手机号\n企微:填写user_id会以@的消息发给用户,否则填写姓名,如:龙台\n飞书:填写ou_开头用户唯一标识会以@的消息发给用户,填写手机号则是普通的@"},model:{value:e.temp.receives,callback:function(t){e.$set(e.temp,"receives",t)},expression:"temp.receives"}})],1)],1)],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),a("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),a("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},l=[],i=a("3737"),r=a("dd71"),s=a("b775");function o(e){return Object(s["a"])({url:"/v1/cs/notify/query/page",method:"post",data:e})}function c(e){return Object(s["a"])({url:"/v1/cs/notify/update",method:"post",data:e})}function u(e){return Object(s["a"])({url:"/v1/cs/notify/save",method:"post",data:e})}function d(e){return Object(s["a"])({url:"/v1/cs/notify/remove",method:"delete",data:e})}function p(e){return Object(s["a"])({url:"/v1/cs/notify/enable/"+e.id+"/"+e.enable,method:"post"})}var m=a("4d856"),f=a("6724"),v=a("333d"),y={name:"JobProject",components:{Pagination:v["a"]},directives:{waves:f["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>22?e.slice(0,22)+"...":e:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,itemId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,tenantOptions:[],itemOptions:[],threadPoolOptions:[],platformTypes:[{key:"DING",display_name:"DING"},{key:"LARK",display_name:"LARK"},{key:"WECHAT",display_name:"WECHAT"}],typeTypes:[{key:"CONFIG",display_name:"CONFIG"},{key:"ALARM",display_name:"ALARM"}],enableTypes:[{key:0,display_name:"启用"},{key:1,display_name:"停用"}],dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],receives:[{required:!0,message:"this is required",trigger:"blur"}],secretKey:[{required:!0,message:"this is required",trigger:"blur"}],platform:[{required:!0,message:"this is required",trigger:"blur"}],type:[{required:!0,message:"this is required",trigger:"blur"}],enable:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",interval:void 0},visible:!0}},created:function(){this.fetchData(),this.initSelect()},methods:{fetchData:function(){var e=this;this.listLoading=!0,o(this.listQuery).then((function(t){var a=t.records,n=t.total;e.total=n,e.list=a,e.listLoading=!1}))},initSelect:function(){var e=this;r["c"]({}).then((function(t){for(var a=t.records,n=0;n0,expression:"total > 0"}],attrs:{total:t.total,page:t.listQuery.current,limit:t.listQuery.size},on:{"update:page":function(e){return t.$set(t.listQuery,"current",e)},"update:limit":function(e){return t.$set(t.listQuery,"size",e)},pagination:t.fetchData}}),t._v(" "),i("el-dialog",{attrs:{title:t.textMap[t.dialogStatus],visible:t.dialogFormVisible,width:"800px"},on:{"update:visible":function(e){t.dialogFormVisible=e}}},[i("el-form",{ref:"dataForm",attrs:{rules:t.rules,model:t.temp,"label-position":"left","label-width":"100px"}},[i("el-form-item",{attrs:{label:"租户",prop:"tenantId"}},[i("el-select",{staticClass:"filter-item",staticStyle:{width:"40%"},attrs:{placeholder:"租户",filterable:"",clearable:"",disabled:"create"!==t.dialogStatus},model:{value:t.temp.tenantId,callback:function(e){t.$set(t.temp,"tenantId",e)},expression:"temp.tenantId"}},t._l(t.tenantOptions,(function(t){return i("el-option",{key:t.key,attrs:{label:t.display_name,value:t.key}})})),1)],1),t._v(" "),i("el-form-item",{attrs:{label:"项目",prop:"itemId"}},[i("el-input",{staticStyle:{width:"40%"},attrs:{disabled:"create"!==t.dialogStatus,placeholder:"项目"},model:{value:t.temp.itemId,callback:function(e){t.$set(t.temp,"itemId",e)},expression:"temp.itemId"}})],1),t._v(" "),i("el-form-item",{attrs:{label:"项目名称",prop:"itemName"}},[i("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"项目名称"},model:{value:t.temp.itemName,callback:function(e){t.$set(t.temp,"itemName",e)},expression:"temp.itemName"}})],1),t._v(" "),i("el-form-item",{attrs:{label:"OWNER",prop:"owner"}},[i("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"OWNER"},model:{value:t.temp.owner,callback:function(e){t.$set(t.temp,"owner",e)},expression:"temp.owner"}})],1),t._v(" "),i("el-form-item",{attrs:{label:"项目描述",prop:"itemDesc"}},[i("el-input",{staticStyle:{width:"40%"},attrs:{autosize:{minRows:3,maxRows:6},type:"textarea",placeholder:"项目描述"},model:{value:t.temp.itemDesc,callback:function(e){t.$set(t.temp,"itemDesc",e)},expression:"temp.itemDesc"}})],1)],1),t._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(e){t.dialogFormVisible=!1}}},[t._v(" 取消 ")]),t._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(e){"create"===t.dialogStatus?t.createData():t.updateData()}}},[t._v("\n 确认\n ")])],1)],1),t._v(" "),i("el-dialog",{attrs:{visible:t.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(e){t.dialogPluginVisible=e}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:t.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),t._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),t._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(e){t.dialogPvVisible=!1}}},[t._v("Confirm")])],1)],1)],1)},a=[],l=i("3737"),o=i("dd71"),r=i("6724"),s=i("333d"),u={name:"JobProject",components:{Pagination:s["a"]},directives:{waves:r["a"]},filters:{statusFilter:function(t){var e={published:"success",draft:"gray",deleted:"danger"};return e[t]},ellipsis:function(t){return t?t.length>26?t.slice(0,26)+"...":t:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,itemId:"",desc:!0},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,tenantOptions:[],dialogStatus:"",isEditDisabled:!1,textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],itemName:[{required:!0,message:"this is required",trigger:"blur"}],owner:[{required:!0,message:"this is required",trigger:"blur"}],itemDesc:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData(),this.initSelect()},mounted:function(){this.isEditDisabled="admin"!==this.$cookie.get("userName")},methods:{fetchData:function(){var t=this;this.listLoading=!0,l["c"](this.listQuery).then((function(e){var i=e.records,n=e.total;t.total=n,t.list=i,t.listLoading=!1}))},initSelect:function(){var t=this;o["c"]({}).then((function(e){for(var i=e.records,n=0;n0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"800px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",attrs:{model:e.temp,"label-position":"left","label-width":"100px"}},[a("el-form-item",{attrs:{label:"业务类型",prop:"category"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"业务类型"},model:{value:e.temp.category,callback:function(t){e.$set(e.temp,"category",t)},expression:"temp.category"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"业务标识",prop:"bizNo"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"业务标识"},model:{value:e.temp.bizNo,callback:function(t){e.$set(e.temp,"bizNo",t)},expression:"temp.bizNo"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"操作人",prop:"operator"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"操作人"},model:{value:e.temp.operator,callback:function(t){e.$set(e.temp,"operator",t)},expression:"temp.operator"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"创建时间",prop:"createTime"}},[a("el-input",{staticStyle:{width:"40%"},attrs:{disabled:!0,placeholder:"创建时间"},model:{value:e.temp.createTime,callback:function(t){e.$set(e.temp,"createTime",t)},expression:"temp.createTime"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"日志内容",prop:"action"}},[a("el-input",{staticStyle:{width:"60%"},attrs:{disabled:!0,autosize:{minRows:4,maxRows:10},type:"textarea",placeholder:"日志内容"},model:{value:e.temp.action,callback:function(t){e.$set(e.temp,"action",t)},expression:"temp.action"}})],1)],1)],1),e._v(" "),a("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),a("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},n=[],l=a("b775");function o(e){return Object(l["a"])({url:"/v1/cs/log/query/page",method:"post",data:e})}var r=a("6724"),s=a("333d"),c={name:"JobProject",components:{Pagination:s["a"]},directives:{waves:r["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>26?e.slice(0,26)+"...":e:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tenantId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Info",create:"Create"},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData()},methods:{fetchData:function(){var e=this;this.listLoading=!0,o(this.listQuery).then((function(t){var a=t.records,i=t.total;e.total=i,e.list=a,e.listLoading=!1}))},resetTemp:function(){this.temp={id:void 0,tenantName:"",tenantDesc:""}},handleCreate:function(){var e=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},createData:function(){var e=this;this.$refs["dataForm"].validate((function(t){t&&jobProjectApi.created(e.temp).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(e){var t=this;this.temp=Object.assign({},e),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},updateData:function(){var e=this;this.$refs["dataForm"].validate((function(t){if(t){var a=Object.assign({},e.temp);jobProjectApi.updated(a).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},handleDelete:function(e){var t=this;console.log("删除"),jobProjectApi.deleted(e.tenantId).then((function(e){t.fetchData(),t.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}}},u=c,d=a("2877"),p=Object(d["a"])(u,i,n,!1,null,null,null);t["default"]=p.exports},6724:function(e,t,a){"use strict";a("8d41");var i="@@wavesContext";function n(e,t){function a(a){var i=Object.assign({},t.value),n=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},i),l=n.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var o=l.getBoundingClientRect(),r=l.querySelector(".waves-ripple");switch(r?r.className="waves-ripple":(r=document.createElement("span"),r.className="waves-ripple",r.style.height=r.style.width=Math.max(o.width,o.height)+"px",l.appendChild(r)),n.type){case"center":r.style.top=o.height/2-r.offsetHeight/2+"px",r.style.left=o.width/2-r.offsetWidth/2+"px";break;default:r.style.top=(a.pageY-o.top-r.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",r.style.left=(a.pageX-o.left-r.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return r.style.backgroundColor=n.color,r.className="waves-ripple z-active",!1}}return e[i]?e[i].removeHandle=a:e[i]={removeHandle:a},a}var l={bind:function(e,t){e.addEventListener("click",n(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[i].removeHandle,!1),e.addEventListener("click",n(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[i].removeHandle,!1),e[i]=null,delete e[i]}},o=function(e){e.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(o)),l.install=o;t["a"]=l},7456:function(e,t,a){},"8d41":function(e,t,a){},e498:function(e,t,a){"use strict";a("7456")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-247f955b.b167c908.js b/hippo4j-console/src/main/resources/static/static/js/chunk-247f955b.b167c908.js new file mode 100644 index 00000000..21e7a305 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-247f955b.b167c908.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-247f955b"],{3737:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"d",(function(){return l})),i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return o}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/update",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/save",method:"post",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/delete/"+e[0]+"/"+e[1],method:"delete"})}},"47ec":function(e,t,i){"use strict";i.d(t,"a",(function(){return a})),i.d(t,"b",(function(){return l})),i.d(t,"c",(function(){return r}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/query?mark="+e.mark+"&tenant="+e.tenantId+"&item="+e.itemId+"&threadPoolKey="+e.threadPoolKey,method:"get"})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/query/key?mark="+e.mark+"&tenant="+e.tenantId+"&item="+e.itemId,method:"get"})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/update",method:"post",data:e})}},"4d85":function(e,t,i){"use strict";i.d(t,"e",(function(){return a})),i.d(t,"f",(function(){return l})),i.d(t,"d",(function(){return r})),i.d(t,"g",(function(){return o})),i.d(t,"h",(function(){return s})),i.d(t,"j",(function(){return u})),i.d(t,"k",(function(){return d})),i.d(t,"i",(function(){return c})),i.d(t,"b",(function(){return p})),i.d(t,"c",(function(){return m})),i.d(t,"a",(function(){return h}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/list/client/instance/"+e.itemId,method:"get",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/configs?tpId="+e.tpId+"&itemId="+e.itemId+"&namespace="+e.tenantId+"&instanceId="+e.identify,method:"get"})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/state/"+e.tpId+"?clientAddress="+e.clientAddress,method:"get"})}function s(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/thread/state/"+e.tpId+"?clientAddress="+e.clientAddress,method:"get"})}function u(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/run/state?clientAddress="+e.clientAddress,method:"get"})}function d(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/update/pool",method:"post",data:e})}function c(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:e})}function p(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:e})}function m(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/delete",method:"delete",data:e})}function h(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/alarm/enable/"+e.id+"/"+e.isAlarm,method:"post"})}},6724:function(e,t,i){"use strict";i("8d41");var n="@@wavesContext";function a(e,t){function i(i){var n=Object.assign({},t.value),a=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},n),l=a.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var r=l.getBoundingClientRect(),o=l.querySelector(".waves-ripple");switch(o?o.className="waves-ripple":(o=document.createElement("span"),o.className="waves-ripple",o.style.height=o.style.width=Math.max(r.width,r.height)+"px",l.appendChild(o)),a.type){case"center":o.style.top=r.height/2-o.offsetHeight/2+"px",o.style.left=r.width/2-o.offsetWidth/2+"px";break;default:o.style.top=(i.pageY-r.top-o.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",o.style.left=(i.pageX-r.left-o.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return o.style.backgroundColor=a.color,o.className="waves-ripple z-active",!1}}return e[n]?e[n].removeHandle=i:e[n]={removeHandle:i},i}var l={bind:function(e,t){e.addEventListener("click",a(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[n].removeHandle,!1),e.addEventListener("click",a(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[n].removeHandle,!1),e[n]=null,delete e[n]}},r=function(e){e.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(r)),l.install=r;t["a"]=l},"8d41":function(e,t,i){},dd71:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"d",(function(){return l})),i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return o}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/update",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/save",method:"post",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/delete/"+e,method:"delete"})}},fc5f:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"app-container"},[i("div",{staticClass:"filter-container"},[i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"租户(必填)",filterable:""},on:{change:function(t){return e.tenantSelectList()}},model:{value:e.listQuery.tenantId,callback:function(t){e.$set(e.listQuery,"tenantId",t)},expression:"listQuery.tenantId"}},e._l(e.tenantOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"项目(必填)",filterable:""},on:{change:function(t){return e.itemSelectList()}},model:{value:e.listQuery.itemId,callback:function(t){e.$set(e.listQuery,"itemId",t)},expression:"listQuery.itemId"}},e._l(e.itemOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"线程池标识(必填)",filterable:""},model:{value:e.listQuery.threadPoolKey,callback:function(t){e.$set(e.listQuery,"threadPoolKey",t)},expression:"listQuery.threadPoolKey"}},e._l(e.threadPoolKeyOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.fetchData}},[e._v("\n 搜索\n ")]),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-refresh"},on:{click:e.refreshData}},[e._v("\n 重置\n ")])],1),e._v(" "),i("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.listLoading,expression:"listLoading"}],attrs:{data:e.list,"element-loading-text":"Loading",stripe:"",fit:"",border:"","max-height":"714","highlight-current-row":""}},[i("el-table-column",{attrs:{label:"序号",width:"95"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.$index+1))]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"实例标识",width:"260"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"primary",underline:!1}},[e._v(e._s(t.row.identify))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"Active"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-tag",{attrs:{type:e._f("statusFilter")(t.row.active)}},[e._v("\n "+e._s(t.row.active)+"\n ")])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"线程池标识"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(t.row.threadPoolKey)+"\n ")]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"核心线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"success",underline:!1}},[e._v(e._s(t.row.coreSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"最大线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"danger",underline:!1}},[e._v(e._s(t.row.maximumSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"操作",width:"180","class-name":"small-padding fixed-width"},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row;return[i("el-button",{attrs:{type:"text",size:"small"},on:{click:function(t){return e.handleUpdate(n)}}},[e._v(" 编辑 ")])]}}])})],1),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[i("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"最大线程",prop:"maximumSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.maximumSize,callback:function(t){e.$set(e.temp,"maximumSize",t)},expression:"temp.maximumSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"全部修改",prop:"allUpdate"}},[i("el-switch",{model:{value:e.temp.allUpdate,callback:function(t){e.$set(e.temp,"allUpdate",t)},expression:"temp.allUpdate"}})],1)],1),e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v(" 取消 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.updateData()}}},[e._v(" 确认 ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},a=[],l=i("3737"),r=i("dd71"),o=i("4d85"),s=i("47ec"),u=i("6724"),d={name:"JobProject",directives:{waves:u["a"]},filters:{statusFilter:function(e){var t={DEV:"info",TEST:"success",UAT:"warning",PROD:"danger"};return t[e]}},data:function(){var e=this;return{isRejectShow:!1,list:null,listLoading:!1,total:0,listQuery:{itemId:"",mark:"RocketMQSpringCloudStream",tenantId:"",threadPoolKey:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,runTimeTemp:{},typeOptions:[{key:"Dubbo",display_name:"Dubbo"},{key:"Kafka",display_name:"Kafka"},{key:"KafkaSpringCloudStream",display_name:"KafkaSpringCloudStream"},{key:"RocketMQ",display_name:"RocketMQ"},{key:"RocketMQSpringCloudStream",display_name:"RocketMQSpringCloudStream"},{key:"RabbitMQ",display_name:"RabbitMQ"},{key:"RabbitMQSpringCloudStream",display_name:"RabbitMQSpringCloudStream"}],tenantOptions:[],instanceDialogFormVisible:!1,threadPoolOptions:[],itemOptions:[],threadPoolKeyOptions:[],itemTempOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"},{key:5,display_name:"RunsOldestTaskPolicy"},{key:6,display_name:"SyncPutQueuePolicy"},{key:99,display_name:"CustomRejectedPolicy(自定义 SPI 策略)"}],alarmTypes:[{key:1,display_name:"报警"},{key:0,display_name:"不报警"}],allowCoreThreadTimeOutTypes:[{key:1,display_name:"超时"},{key:0,display_name:"不超时"}],size:500,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maximumSize:[{required:!0,message:"this is required",trigger:"blur"},{validator:function(t,i,n){parseInt(i)0&&void 0!==arguments[0]?arguments[0]:{},t=e.shiftKey,n=e.key;n&&1===n.length&&(this.capsTooltip=!!(t&&n>="a"&&n<="z"||!t&&n>="A"&&n<="Z")),"CapsLock"===n&&!0===this.capsTooltip&&(this.capsTooltip=!1)},showPwd:function(){var e=this;"password"===this.passwordType?this.passwordType="":this.passwordType="password",this.$nextTick((function(){e.$refs.password.focus()}))},handleLogin:function(){var e=this;this.$refs.loginForm.validate((function(t){if(!t)return console.log("error submit."),!1;e.loading=!0,e.$store.dispatch("user/login",e.loginForm).then((function(){e.$cookie.set("userName",e.loginForm.username),console.log("success submit."),e.$router.push({path:e.redirect||"/",query:e.otherQuery}),e.loading=!1})).catch((function(){console.log("error catch."),e.loading=!1}))}))},getOtherQuery:function(e){return Object.keys(e).reduce((function(t,n){return"redirect"!==n&&(t[n]=e[n]),t}),{})}}},h=d,f=(n("3693"),n("eef1"),Object(l["a"])(h,o,s,!1,null,"3efc76dc",null));t["default"]=f.exports},bfec:function(e,t,n){"use strict";n("9a73")},eef1:function(e,t,n){"use strict";n("4f37")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-2b48c09a.dbb72078.js b/hippo4j-console/src/main/resources/static/static/js/chunk-2b48c09a.dbb72078.js new file mode 100644 index 00000000..c5673abe --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-2b48c09a.dbb72078.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2b48c09a"],{"1b77":function(t,e,a){"use strict";a("5948")},"2f59":function(t,e,a){},"2f8f":function(t,e,a){},"3f2c":function(t,e,a){"use strict";a.r(e);var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.show?a("div",{staticClass:"dashboard-editor-container"},[a("github-corner",{staticClass:"github-corner"}),t._v(" "),a("panel-group",{attrs:{"count-suc-total":t.countSucTotal,"count-fail-total":t.countFailTotal,"count-running-total":t.countRunningTotal,"count-running-instance-total":t.countRunningInstanceTotal},on:{handleSetLineChartData:t.handleSetLineChartData}}),t._v(" "),a("el-row",{staticStyle:{background:"#fff",padding:"16px 16px 0","margin-bottom":"32px"}},[a("line-chart",{attrs:{"chart-data":t.lineChartData}})],1),t._v(" "),a("el-row",{attrs:{gutter:32}},[a("el-col",{attrs:{xs:24,sm:24,lg:8}},[a("div",{staticClass:"chart-wrapper"},[a("el-form",{attrs:{"label-position":"left"}},[a("el-form-item",{attrs:{label:"登录用户","label-width":"120px"}},[a("span",[t._v(t._s(t.temp.userName))])]),t._v(" "),a("el-form-item",{attrs:{label:"用户角色","label-width":"120px"}},[a("span",[t._v(t._s(t.temp.role))])]),t._v(" "),a("el-form-item",{attrs:{label:"所属租户","label-width":"120px"}},[a("span")]),t._v(" "),a("el-form-item",{attrs:{label:"创建时间","label-width":"120px"}},[a("span",[t._v(" "+t._s(t.temp.gmtCreate))])]),t._v(" "),a("el-form-item",{attrs:{label:"修改时间","label-width":"120px"}},[a("span",[t._v(t._s(t.temp.gmtModified))])])],1)],1)]),t._v(" "),a("el-col",{attrs:{xs:24,sm:24,lg:8}},[a("div",{staticClass:"chart-wrapper"},[a("raddar-chart")],1)]),t._v(" "),a("el-col",{attrs:{xs:24,sm:24,lg:8}},[a("div",{staticClass:"chart-wrapper"},[a("pie-chart")],1)])],1),t._v(" "),a("el-row",{attrs:{gutter:8}},[a("el-col",{staticStyle:{"padding-right":"8px","margin-bottom":"30px"},attrs:{xs:{span:24},sm:{span:24},md:{span:24},lg:{span:12},xl:{span:12}}},[a("transaction-table")],1)],1)],1):t._e()},i=[],r=a("c80c"),s=(a("96cf"),a("3b8d")),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("a",{staticClass:"github-corner",attrs:{href:"https://github.com/opengoofy/hippo4j",target:"_blank","aria-label":"View source on Github"}},[a("svg",{staticStyle:{fill:"#40c9c6",color:"#fff"},attrs:{width:"80",height:"80",viewBox:"0 0 250 250","aria-hidden":"true"}},[a("path",{attrs:{d:"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"}}),t._v(" "),a("path",{staticClass:"octo-arm",staticStyle:{"transform-origin":"130px 106px"},attrs:{d:"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2",fill:"currentColor"}}),t._v(" "),a("path",{staticClass:"octo-body",attrs:{d:"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z",fill:"currentColor"}})])])},l=[],c=(a("71ae"),a("2877")),u={},d=Object(c["a"])(u,o,l,!1,null,"fedac698",null),h=d.exports,p=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-row",{staticClass:"panel-group",attrs:{gutter:40}},[a("el-col",{staticClass:"card-panel-col",attrs:{xs:12,sm:12,lg:6}},[a("div",{staticClass:"card-panel",on:{click:function(e){return t.handleSetLineChartData("chartInfo")}}},[a("div",{staticClass:"card-panel-icon-wrapper "},[a("svg-icon",{attrs:{"icon-class":"tenant_logo2","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n Tenant\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.successCount,duration:2600}})],1)])]),t._v(" "),a("el-col",{staticClass:"card-panel-col",attrs:{xs:12,sm:12,lg:6}},[a("div",{staticClass:"card-panel"},[a("div",{staticClass:"card-panel-icon-wrapper "},[a("svg-icon",{attrs:{"icon-class":"item_logo4","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n Item\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.failCount,duration:3e3}})],1)])]),t._v(" "),a("el-col",{staticClass:"card-panel-col",attrs:{xs:12,sm:12,lg:6}},[a("div",{staticClass:"card-panel"},[a("div",{staticClass:"card-panel-icon-wrapper "},[a("svg-icon",{attrs:{"icon-class":"threadPool_logo1","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n Thread Pool\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.runningCount,duration:3200}})],1)])]),t._v(" "),a("el-col",{staticClass:"card-panel-col",attrs:{xs:12,sm:12,lg:6}},[a("div",{staticClass:"card-panel"},[a("div",{staticClass:"card-panel-icon-wrapper "},[a("svg-icon",{attrs:{"icon-class":"threadPool_logo2","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n Pool Instance\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.runningCountInstance,duration:3200}})],1)])])],1)},f=[],m=(a("c5f6"),a("ec1b")),v=a.n(m),b={components:{CountTo:v.a},props:{countSucTotal:{type:Number,default:0},countFailTotal:{type:Number,default:0},countRunningTotal:{type:Number,default:0},countRunningInstanceTotal:{type:Number,default:0}},data:function(){return{successCount:this.countSucTotal,failCount:this.countFailTotal,runningCount:this.countRunningTotal,runningCountInstance:this.countRunningInstanceTotal}},methods:{handleSetLineChartData:function(t){this.$emit("handleSetLineChartData",t)}}},g=b,_=(a("1b77"),Object(c["a"])(g,p,f,!1,null,"787f9ab2",null)),C=_.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:t.className,style:{height:t.height,width:t.width}})},w=[],x=a("ed08"),S={data:function(){return{$_sidebarElm:null}},mounted:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},beforeDestroy:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},activated:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},deactivated:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},methods:{$_resizeHandler:function(){var t=this;return Object(x["a"])((function(){t.chart&&t.chart.resize()}),100)()},$_initResizeEvent:function(){window.addEventListener("resize",this.$_resizeHandler)},$_destroyResizeEvent:function(){window.removeEventListener("resize",this.$_resizeHandler)},$_sidebarResizeHandler:function(t){"width"===t.propertyName&&this.$_resizeHandler()},$_initSidebarResizeEvent:function(){this.$_sidebarElm=document.getElementsByClassName("sidebar-container")[0],this.$_sidebarElm&&this.$_sidebarElm.addEventListener("transitionend",this.$_sidebarResizeHandler)},$_destroySidebarResizeEvent:function(){this.$_sidebarElm&&this.$_sidebarElm.removeEventListener("transitionend",this.$_sidebarResizeHandler)}}},F={mixins:[S],props:{className:{type:String,default:"chart"},width:{type:String,default:"100%"},height:{type:String,default:"350px"},autoResize:{type:Boolean,default:!0},chartData:{type:Object,required:!0}},data:function(){return{chart:null}},watch:{chartData:{deep:!0,handler:function(t){this.setOptions(t)}}},mounted:function(){var t=this;this.$nextTick((function(){t.initChart()}))},beforeDestroy:function(){this.chart&&(this.chart.dispose(),this.chart=null)},methods:{initChart:function(){var t=a("313e");this.chart=t.init(this.$el,"macarons"),this.setOptions(this.chartData)},setOptions:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.oneList,a=t.twoList,n=t.threeList,i=t.fourList;this.chart.setOption({legend:{},tooltip:{},dataset:{source:[["product","queueSize","rejectCount","completedTaskCount"],e,a,n,i]},xAxis:{type:"category"},yAxis:{},series:[{type:"bar"},{type:"bar"},{type:"bar"}]})}}},V=F,T=Object(c["a"])(V,y,w,!1,null,null,null),j=T.exports,$=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:t.className,style:{height:t.height,width:t.width}})},D=[],O=a("bd86"),L=a("b775");function E(){return Object(L["a"])({url:"/hippo4j/v1/cs/dashboard",method:"get"})}function R(){return Object(L["a"])({url:"/hippo4j/v1/cs/dashboard/line/chart",method:"get"})}function A(){return Object(L["a"])({url:"/hippo4j/v1/cs/dashboard/pie/chart",method:"get"})}function I(){return Object(L["a"])({url:"/hippo4j/v1/cs/dashboard/tenant/chart",method:"get"})}function N(){return Object(L["a"])({url:"/hippo4j/v1/cs/dashboard/ranking",method:"get"})}var k={mixins:[S],props:{className:{type:String,default:"chart"},width:{type:String,default:"100%"},height:{type:String,default:"300px"}},data:function(){return{chart:null}},mounted:function(){var t=this;this.$nextTick((function(){t.initChart()}))},beforeDestroy:function(){this.chart&&(this.chart.dispose(),this.chart=null)},methods:{initChart:function(){var t=this,e=a("313e");this.chart=e.init(this.$el,"macarons"),I({}).then((function(e){var a;t.chart.setOption({legend:{left:"center",bottom:"10"},toolbox:{show:!0,feature:{mark:{show:!0}}},series:[(a={name:"Nightingale Chart",type:"pie",roseType:"radius",radius:[15,95],center:["50%","38%"]},Object(O["a"])(a,"roseType","area"),Object(O["a"])(a,"itemStyle",{borderRadius:8}),Object(O["a"])(a,"data",e.tenantCharts),a)]})}))}}},z=k,q=Object(c["a"])(z,$,D,!1,null,null,null),P=q.exports,M=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:t.className,style:{height:t.height,width:t.width}})},H=[],B={itemIds:["Industries","Technology","Forex","Gold","Forecasts"],pieDataList:[{value:320,name:"Industries"},{value:240,name:"Technology"},{value:149,name:"Forex"},{value:100,name:"Gold"},{value:59,name:"Forecasts"}]},G={mixins:[S],props:{className:{type:String,default:"chart"},width:{type:String,default:"100%"},height:{type:String,default:"300px"}},data:function(){return{chart:null}},mounted:function(){var t=this;this.pieChartInfo(),this.$nextTick((function(){t.initChart()}))},beforeDestroy:function(){this.chart&&(this.chart.dispose(),this.chart=null)},methods:{pieChartInfo:function(){},initChart:function(){var t=this,e=a("313e");this.chart=e.init(this.$el,"macarons"),A({}).then((function(e){B.itemIds=e.itemIds,B.pieDataList=e.pieDataList,t.chart.setOption({tooltip:{trigger:"item",formatter:"{a}
{b} : {c} ({d}%)"},legend:{left:"center",bottom:"10",data:B.itemIds},toolbox:{show:!0,feature:{mark:{show:!0}}},series:[{name:"NUMBER OF THREAD POOLS",type:"pie",roseType:"radius",radius:[15,95],center:["50%","38%"],data:B.pieDataList,animationEasing:"cubicInOut",animationDuration:2600}]})}))}}},J=G,Z=Object(c["a"])(J,M,H,!1,null,null,null),K=Z.exports,U=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-table",{staticStyle:{width:"100%","padding-top":"15px"},attrs:{data:t.list}},[a("el-table-column",{attrs:{label:"threadPool ID","min-width":"200"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.groupKey)+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"taskCount",width:"195",align:"center"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(t._f("toThousandFilter")(e.row.maxCompletedTaskCount))+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"inst",width:"100",align:"center"},scopedSlots:t._u([{key:"default",fn:function(e){var n=e.row;return[a("el-tag",{attrs:{type:t._f("statusFilter")(n.inst)}},[t._v("\n "+t._s(n.inst)+"\n ")])]}}])})],1)},Q=[],W={filters:{statusFilter:function(t){var e={success:"success",pending:"danger"};return e[t]},orderNoFilter:function(t){return t.substring(0,30)}},data:function(){return{list:null}},created:function(){this.fetchData()},methods:{fetchData:function(){var t=this;this.list=[{order_no:"123456",price:"4454",status:"1"}],N({}).then((function(e){t.list=e.rankingChartInfoList,console.log(e.rankingChartInfoList)}))}}},X=W,Y=Object(c["a"])(X,U,Q,!1,null,null,null),tt=Y.exports,et=a("cc68"),at={chartInfo:{oneList:[1,3,4,5,3,2],twoList:[1,2,3,4,1,3],threeList:[1,2,3,4,1,3],fourList:[1,2,3,4,1,3],dayList:["ten","twenty","thirty","forty","fifty","sixty"]}},nt={name:"DashboardAdmin",components:{GithubCorner:h,PanelGroup:C,LineChart:j,RaddarChart:P,PieChart:K,TransactionTable:tt},data:function(){return{lineChartData:at.chartInfo,countSucTotal:0,countRunningTotal:0,countFailTotal:0,countRunningInstanceTotal:0,show:!1,temp:{}}},created:function(){var t=Object(s["a"])(Object(r["a"])().mark((function t(){return Object(r["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.chartInfo(),this.lintChart(),this.userInfo();case 3:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{handleSetLineChartData:function(t){this.lineChartData=at[t]},chartInfo:function(){var t=this;E().then((function(e){var a=e||{},n=a.tenantCount,i=a.threadPoolCount,r=a.threadPoolInstanceCount,s=a.itemCount;t.show=!0,t.countSucTotal=n,t.countRunningTotal=i,t.countFailTotal=s,t.countRunningInstanceTotal=r})).catch((function(){}))},lintChart:function(){var t=this;R({}).then((function(e){var a=e||{},n=a.oneList,i=a.twoList,r=a.threeList,s=a.fourList;t.lineChartData.oneList=n,t.lineChartData.twoList=i,t.lineChartData.threeList=r,t.lineChartData.fourList=s})).catch((function(){}))},userInfo:function(){var t=this,e=this.$cookie.get("userName");et["c"](e).then((function(e){t.temp=e})).catch((function(){}))}}},it=nt,rt=(a("8664"),Object(c["a"])(it,n,i,!1,null,"73ee0239",null));e["default"]=rt.exports},5948:function(t,e,a){},"71ae":function(t,e,a){"use strict";a("2f59")},8664:function(t,e,a){"use strict";a("2f8f")},cc68:function(t,e,a){"use strict";a.d(e,"d",(function(){return i})),a.d(e,"e",(function(){return r})),a.d(e,"a",(function(){return s})),a.d(e,"b",(function(){return o})),a.d(e,"c",(function(){return l}));var n=a("b775");function i(t){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/page",method:"post",data:t})}function r(t){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/update",method:"put",data:t})}function s(t){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/add",method:"post",data:t})}function o(t){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/remove/"+t,method:"delete"})}function l(t){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/info/"+t,method:"get"})}},ec1b:function(t,e,a){!function(e,a){t.exports=a()}(0,(function(){return function(t){function e(n){if(a[n])return a[n].exports;var i=a[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var a={};return e.m=t,e.c=a,e.i=function(t){return t},e.d=function(t,a,n){e.o(t,a)||Object.defineProperty(t,a,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(a,"a",a),a},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/dist/",e(e.s=2)}([function(t,e,a){var n=a(4)(a(1),a(5),null,null);t.exports=n.exports},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(3);e.default={props:{startVal:{type:Number,required:!1,default:0},endVal:{type:Number,required:!1,default:2017},duration:{type:Number,required:!1,default:3e3},autoplay:{type:Boolean,required:!1,default:!0},decimals:{type:Number,required:!1,default:0,validator:function(t){return t>=0}},decimal:{type:String,required:!1,default:"."},separator:{type:String,required:!1,default:","},prefix:{type:String,required:!1,default:""},suffix:{type:String,required:!1,default:""},useEasing:{type:Boolean,required:!1,default:!0},easingFn:{type:Function,default:function(t,e,a,n){return a*(1-Math.pow(2,-10*t/n))*1024/1023+e}}},data:function(){return{localStartVal:this.startVal,displayValue:this.formatNumber(this.startVal),printVal:null,paused:!1,localDuration:this.duration,startTime:null,timestamp:null,remaining:null,rAF:null}},computed:{countDown:function(){return this.startVal>this.endVal}},watch:{startVal:function(){this.autoplay&&this.start()},endVal:function(){this.autoplay&&this.start()}},mounted:function(){this.autoplay&&this.start(),this.$emit("mountedCallback")},methods:{start:function(){this.localStartVal=this.startVal,this.startTime=null,this.localDuration=this.duration,this.paused=!1,this.rAF=(0,n.requestAnimationFrame)(this.count)},pauseResume:function(){this.paused?(this.resume(),this.paused=!1):(this.pause(),this.paused=!0)},pause:function(){(0,n.cancelAnimationFrame)(this.rAF)},resume:function(){this.startTime=null,this.localDuration=+this.remaining,this.localStartVal=+this.printVal,(0,n.requestAnimationFrame)(this.count)},reset:function(){this.startTime=null,(0,n.cancelAnimationFrame)(this.rAF),this.displayValue=this.formatNumber(this.startVal)},count:function(t){this.startTime||(this.startTime=t),this.timestamp=t;var e=t-this.startTime;this.remaining=this.localDuration-e,this.useEasing?this.countDown?this.printVal=this.localStartVal-this.easingFn(e,0,this.localStartVal-this.endVal,this.localDuration):this.printVal=this.easingFn(e,this.localStartVal,this.endVal-this.localStartVal,this.localDuration):this.countDown?this.printVal=this.localStartVal-(this.localStartVal-this.endVal)*(e/this.localDuration):this.printVal=this.localStartVal+(this.localStartVal-this.startVal)*(e/this.localDuration),this.countDown?this.printVal=this.printValthis.endVal?this.endVal:this.printVal,this.displayValue=this.formatNumber(this.printVal),e1?this.decimal+e[1]:"",i=/(\d+)(\d{3})/;if(this.separator&&!this.isNumber(this.separator))for(;i.test(a);)a=a.replace(i,"$1"+this.separator+"$2");return this.prefix+a+n+this.suffix}},destroyed:function(){(0,n.cancelAnimationFrame)(this.rAF)}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(0),i=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=i.default,"undefined"!=typeof window&&window.Vue&&window.Vue.component("count-to",i.default)},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=0,i="webkit moz ms o".split(" "),r=void 0,s=void 0;if("undefined"==typeof window)e.requestAnimationFrame=r=function(){},e.cancelAnimationFrame=s=function(){};else{e.requestAnimationFrame=r=window.requestAnimationFrame,e.cancelAnimationFrame=s=window.cancelAnimationFrame;for(var o=void 0,l=0;l0,expression:"total > 0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.instanceDialogFormVisible,width:"1000px"},on:{"update:visible":function(t){e.instanceDialogFormVisible=t}}},[[i("el-descriptions",{staticClass:"margin-top",attrs:{title:"基础信息",column:3,size:e.size,border:""}},[i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 线程池 ")]),e._v("\n "+e._s(e.runTimeTemp.tpId)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 环境标识 ")]),e._v(" "),i("el-tag",{attrs:{type:e._f("statusFilter")(e.runTimeTemp.active)}},[e._v("\n "+e._s(e.runTimeTemp.active)+"\n ")])],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 运行状态 ")]),e._v(" "),i("el-tag",[e._v(e._s(e.runTimeTemp.state))])],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 实例Host ")]),e._v("\n "+e._s(e.runTimeTemp.host)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 实例标识 ")]),e._v("\n "+e._s(e.runTimeTemp.identify)+"\n ")],2)],1),e._v(" "),i("br"),e._v(" "),i("br"),e._v(" "),i("el-descriptions",{staticClass:"margin-top",attrs:{title:"负载信息",column:3,size:e.size,border:""}},[i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 当前负载 ")]),e._v("\n "+e._s(e.runTimeTemp.currentLoad)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 峰值负载 ")]),e._v("\n "+e._s(e.runTimeTemp.peakLoad)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 剩余内存 ")]),e._v("\n "+e._s(e.runTimeTemp.freeMemory)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 内存占比 ")]),e._v("\n "+e._s(e.runTimeTemp.memoryProportion)+"\n ")],2)],1),e._v(" "),i("br"),e._v(" "),i("br"),e._v(" "),i("el-descriptions",{staticClass:"margin-top",attrs:{title:"线程信息",column:3,size:e.size,border:""}},[i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 核心线程 ")]),e._v("\n "+e._s(e.runTimeTemp.coreSize)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 当前线程 ")]),e._v("\n "+e._s(e.runTimeTemp.poolSize)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 最大线程 ")]),e._v("\n "+e._s(e.runTimeTemp.maximumSize)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 活跃线程 ")]),e._v("\n "+e._s(e.runTimeTemp.activeSize)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 同存最大线程 ")]),e._v("\n "+e._s(e.runTimeTemp.largestPoolSize)+"\n ")],2)],1),e._v(" "),i("br"),e._v(" "),i("br"),e._v(" "),i("el-descriptions",{staticClass:"margin-top",attrs:{title:"队列信息",column:3,size:e.size,border:""}},[i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 队列容量 ")]),e._v("\n "+e._s(e.runTimeTemp.queueCapacity)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 队列元素 ")]),e._v("\n "+e._s(e.runTimeTemp.queueSize)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 队列剩余容量 ")]),e._v("\n "+e._s(e.runTimeTemp.queueRemainingCapacity)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 阻塞队列 ")]),e._v("\n "+e._s(e.runTimeTemp.queueType)+"\n ")],2)],1),e._v(" "),i("br"),e._v(" "),i("br"),e._v(" "),i("el-descriptions",{staticClass:"margin-top",attrs:{title:"其它信息",column:3,size:e.size,border:""}},[i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 任务总量 ")]),e._v("\n "+e._s(e.runTimeTemp.completedTaskCount)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 拒绝次数 ")]),e._v("\n "+e._s(e.runTimeTemp.rejectCount)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 最后更新时间 ")]),e._v("\n "+e._s(e.runTimeTemp.clientLastRefreshTime)+"\n ")],2),e._v(" "),i("el-descriptions-item",[i("template",{slot:"label"},[e._v(" 拒绝策略 ")]),e._v("\n "+e._s(e.runTimeTemp.rejectedName)+"\n ")],2)],1)],e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.instanceDialogFormVisible=!1}}},[i("i",{staticClass:"el-icon-close"}),e._v("\n 关 闭\n ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.handleInfo()}}},[i("i",{staticClass:"el-icon-refresh-right"}),e._v("\n 刷 新\n ")])],1)],2),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"950px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"租户",prop:"tenantId"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[i("el-input-number",{attrs:{placeholder:"核心线程","controls-position":"right",min:1,max:9999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"项目",prop:"itemId"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"最大线程",prop:"maxSize"}},[i("el-input-number",{attrs:{placeholder:"最大线程","controls-position":"right",min:1,max:9999},model:{value:e.temp.maxSize,callback:function(t){e.$set(e.temp,"maxSize",t)},expression:"temp.maxSize"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"线程池",prop:"tpId"}},[i("el-input",{attrs:{size:"medium",placeholder:"请输入线程池",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"队列类型",prop:"queueType"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"队列类型",disabled:!0},on:{change:e.selectQueueType},model:{value:e.temp.queueType,callback:function(t){e.$set(e.temp,"queueType",t)},expression:"temp.queueType"}},e._l(e.queueTypeOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"队列容量",prop:"capacity"}},[i("el-input-number",{attrs:{placeholder:"队列容量","controls-position":"right",min:0,max:2147483647,disabled:9!==e.temp.queueType},model:{value:e.temp.capacity,callback:function(t){e.$set(e.temp,"capacity",t)},expression:"temp.capacity"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"线程超时",prop:"isAlarm"}},[[i("div",[i("el-radio-group",{model:{value:e.temp.allowCoreThreadTimeOut,callback:function(t){e.$set(e.temp,"allowCoreThreadTimeOut",t)},expression:"temp.allowCoreThreadTimeOut"}},[i("el-radio-button",{attrs:{label:1}},[e._v("超时")]),e._v(" "),i("el-radio-button",{attrs:{label:0}},[e._v("不超时")])],1)],1)]],2)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"空闲回收",prop:"keepAliveTime"}},[i("el-input-number",{attrs:{placeholder:"空闲回收 / S","controls-position":"right",min:1,max:9999},model:{value:e.temp.keepAliveTime,callback:function(t){e.$set(e.temp,"keepAliveTime",t)},expression:"temp.keepAliveTime"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"拒绝策略",prop:"rejectedType"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"拒绝策略"},on:{change:e.selectRejectedType},model:{value:e.temp.rejectedType,callback:function(t){e.$set(e.temp,"rejectedType",t)},expression:"temp.rejectedType"}},e._l(e.rejectedOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"全部修改",prop:"allUpdate"}},[i("el-switch",{model:{value:e.allUpdate,callback:function(t){e.allUpdate=t},expression:"allUpdate"}})],1)],1)],1),e._v(" "),e.isRejectShow?i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"SPI 拒绝策略",prop:"customRejectedType"}},[i("el-input",{attrs:{placeholder:"请输入自定义 SPI 拒绝策略标识"},on:{input:function(t){return e.onInput()}},model:{value:e.temp.customRejectedType,callback:function(t){e.$set(e.temp,"customRejectedType",t)},expression:"temp.customRejectedType"}})],1)],1)],1):e._e()],1),e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v(" 取消 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v(" Confirm ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{title:"Stack Info",visible:e.isStackShow,width:"60%"},on:{"update:visible":function(t){e.isStackShow=t}}},[i("ul",{staticClass:"stack-info"},e._l(e.stackInfo,(function(t){return i("li",{key:t.threadId},[i("p",[e._v('\n "'+e._s(t.threadName)+'" #'+e._s(t.threadId)+" java.lang.Thread.State:\n "+e._s(t.threadStatus)+"\n ")]),e._v(" "),i("ul",e._l(t.threadStack,(function(t,n){return i("li",{key:n},[e._v("at "+e._s(t))])})),0)])})),0),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.isStackShow=!1}}},[i("i",{staticClass:"el-icon-close"}),e._v("关 闭 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:e.handleStackInfo}},[i("i",{staticClass:"el-icon-refresh-right"}),e._v("\n 刷 新\n ")])],1)])],1)},a=[],l=(i("6762"),i("dd71")),s=i("3737"),r=i("4d85"),o=i("397f"),c=i("6724"),u=i("333d"),d=(i("bc3a"),{components:{Pagination:u["a"]},directives:{waves:c["a"]},filters:{statusFilter:function(e){var t={DEV:"info",TEST:"success",UAT:"warning",PROD:"danger"};return t[e]},queueFilter:function(e){return"1"==e?"ArrayBlockingQueue":"2"==e?"LinkedBlockingQueue":"3"==e?"LinkedBlockingDeque":"4"==e?"SynchronousQueue":"5"==e?"LinkedTransferQueue":"6"==e?"PriorityBlockingQueue":"9"==e?"ResizableLinkedBlockingQueue":void 0},rejectedFilter:function(e){return"1"==e?"CallerRunsPolicy":"2"==e?"AbortPolicy":"3"==e?"DiscardPolicy":"4"==e?"DiscardOldestPolicy":"5"==e?"RunsOldestTaskPolicy":"6"==e?"SyncPutQueuePolicy":"CustomRejectedPolicy - "+e}},data:function(){return{list:[],listLoading:!1,total:0,listQuery:{current:1,size:10,itemId:"",tpId:""},isStackShow:!1,stackInfo:[],rowInfo:{},size:500,pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,isRejectShow:!1,instanceDialogFormVisible:!1,tenantOptions:[],threadPoolOptions:[],itemOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"},{key:5,display_name:"RunsOldestTaskPolicy"},{key:6,display_name:"SyncPutQueuePolicy"},{key:99,display_name:"CustomRejectedPolicy(自定义 SPI 策略)"}],alarmTypes:[{key:1,display_name:"报警"},{key:0,display_name:"不报警"}],allowCoreThreadTimeOutTypes:[{key:1,display_name:"超时"},{key:0,display_name:"不超时"}],rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maxSize:[{required:!0,message:"this is required",trigger:"blur"}],queueType:[{required:!0,message:"this is required",trigger:"blur"}],keepAliveTime:[{required:!0,message:"this is required",trigger:"blur"}],isAlarm:[{required:!0,message:"this is required",trigger:"blur"}],capacity:[{required:!0,message:"this is required",trigger:"blur"}],capacityAlarm:[{required:!0,message:"this is required",trigger:"blur"}],livenessAlarm:[{required:!0,message:"this is required",trigger:"blur"}],rejectedType:[{required:!0,message:"this is required",trigger:"blur"}]},dialogStatus:"",textMap:{update:"Edit",create:"Create",info:"Info"},allUpdate:!1,temp:{id:void 0,tenantId:"",itemId:"",rejectedType:null,customRejectedType:null},runTimeTemp:{},tempRow:{},visible:!0}},created:function(){this.initSelect()},methods:{onInput:function(){this.$forceUpdate()},fetchData:function(){var e=this;if(this.listQuery.tenantId)if(this.listQuery.itemId)if(this.listQuery.tpId){this.listLoading=!0;var t=[this.listQuery.itemId,this.listQuery.tpId];o["a"](t).then((function(t){e.list=t,e.listLoading=!1}))}else this.$message.warning("线程池不允许为空");else this.$message.warning("项目不允许为空");else this.$message.warning("租户不允许为空")},refreshData:function(){this.listQuery.tenantId=null,this.listQuery.itemId=null,this.listQuery.tpId=null,this.itemOptions=[],this.threadPoolOptions=[]},initSelect:function(){var e=this;l["c"]({size:this.size}).then((function(t){for(var i=t.records,n=0;n0,expression:"total > 0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),n("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[n("el-form",{ref:"dataForm",staticStyle:{width:"500px","margin-left":"50px"},attrs:{rules:e.rules,model:e.temp,"label-width":"80px"}},[n("el-form-item",{attrs:{label:"租户",prop:"tenantId"}},[n("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},on:{change:function(t){return e.tenantTempSelectList()}},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return n("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1),e._v(" "),n("el-form-item",{attrs:{label:"项目",prop:"itemId"}},[n("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},on:{change:function(t){return e.itemTempSelectList()}},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemTempOptions,(function(e){return n("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1),e._v(" "),n("el-form-item",{attrs:{label:"线程池",prop:"tpId"}},[n("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"线程池",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}},e._l(e.threadPoolTempOptions,(function(e){return n("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1),e._v(" "),n("el-form-item",{attrs:{label:"通知平台",prop:"platform"}},[[n("div",[n("el-radio-group",{model:{value:e.temp.platform,callback:function(t){e.$set(e.temp,"platform",t)},expression:"temp.platform"}},[n("el-radio-button",{attrs:{label:"DING"}},[e._v("DING")]),e._v(" "),n("el-radio-button",{attrs:{label:"LARK"}},[e._v("LARK")]),e._v(" "),n("el-radio-button",{attrs:{label:"WECHAT"}},[e._v("WECHAT")])],1)],1)]],2),e._v(" "),n("el-form-item",{attrs:{label:"是否启用",prop:"enable"}},[[n("div",[n("el-radio-group",{model:{value:e.temp.enable,callback:function(t){e.$set(e.temp,"enable",t)},expression:"temp.enable"}},[n("el-radio-button",{attrs:{label:1}},[e._v("启用")]),e._v(" "),n("el-radio-button",{attrs:{label:0}},[e._v("停用")])],1)],1)]],2),e._v(" "),n("el-form-item",{attrs:{label:"通知类型",prop:"configType"}},[[n("div",[n("el-checkbox",{attrs:{disabled:"create"!==e.dialogStatus,label:"CONFIG",border:""},model:{value:e.temp.configType,callback:function(t){e.$set(e.temp,"configType",t)},expression:"temp.configType"}}),e._v(" "),n("el-checkbox",{attrs:{disabled:"create"!==e.dialogStatus,label:"ALARM",border:""},model:{value:e.temp.alarmType,callback:function(t){e.$set(e.temp,"alarmType",t)},expression:"temp.alarmType"}})],1)]],2),e._v(" "),n("el-form-item",{attrs:{label:"报警间隔",prop:"interval"}},[n("el-input-number",{attrs:{placeholder:"报警间隔 / Min","controls-position":"right",min:0,max:999999,disabled:!0!==e.temp.alarmType},model:{value:e.temp.interval,callback:function(t){e.$set(e.temp,"interval",t)},expression:"temp.interval"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"Token",prop:"secretKey"}},[n("el-input",{attrs:{type:"textarea",placeholder:"请输入 Token","show-word-limit":""},model:{value:e.temp.secretKey,callback:function(t){e.$set(e.temp,"secretKey",t)},expression:"temp.secretKey"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"接收者",prop:"receives"}},[n("el-input",{attrs:{type:"textarea",autosize:{minRows:4,maxRows:4},placeholder:"多个接收者使用英文逗号 , 分割 (注意不要有空格)\n- 钉钉:填写手机号\n- 企微:填写user_id会以@的消息发给用户,否则填写姓名,如:小马哥\n- 飞书:填写ou_开头用户唯一标识会以@的消息发给用户,填写手机号则是普通的@"},model:{value:e.temp.receives,callback:function(t){e.$set(e.temp,"receives",t)},expression:"temp.receives"}})],1)],1),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{on:{click:function(t){return e.cleanForm()}}},[e._v(" 取消 ")]),e._v(" "),n("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),n("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[n("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[n("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),n("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},a=[],l=(n("ac6a"),n("456d"),n("3737")),r=n("dd71"),o=n("b775");function s(e){return Object(o["a"])({url:"/hippo4j/v1/cs/notify/query/page",method:"post",data:e})}function u(e){return Object(o["a"])({url:"/hippo4j/v1/cs/notify/update",method:"post",data:e})}function c(e){return Object(o["a"])({url:"/hippo4j/v1/cs/notify/save",method:"post",data:e})}function d(e){return Object(o["a"])({url:"/hippo4j/v1/cs/notify/remove",method:"delete",data:e})}function p(e){return Object(o["a"])({url:"/hippo4j/v1/cs/notify/enable/"+e.id+"/"+e.enable,method:"post"})}var m=n("4d85"),f=n("6724"),h=n("333d"),v={name:"JobProject",components:{Pagination:h["a"]},directives:{waves:f["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>22?e.slice(0,22)+"...":e:""},intervals:function(e){return null==e||""==e?"-":e}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tpId:"",itemId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,tenantOptions:[],itemOptions:[],itemTempOptions:[],identifyOptions:[],threadPoolTempOptions:[],threadPoolOptions:[],platformTypes:[{key:"DING",display_name:"DING"},{key:"LARK",display_name:"LARK"},{key:"WECHAT",display_name:"WECHAT"}],typeTypes:[{key:"CONFIG",display_name:"CONFIG"},{key:"ALARM",display_name:"ALARM"}],enableTypes:[{key:1,display_name:"启用"},{key:0,display_name:"停用"}],dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],receives:[{required:!0,message:"this is required",trigger:"blur"}],secretKey:[{required:!0,message:"this is required",trigger:"blur"}],platform:[{required:!0,message:"this is required",trigger:"blur"}],configType:[{required:!0,message:"this is required",trigger:"blur"}],enable:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",interval:void 0,configType:!1,alarmType:!1},visible:!0}},created:function(){this.fetchData(),this.initSelect()},methods:{fetchData:function(){var e=this;this.listLoading=!0,s(this.listQuery).then((function(t){var n=t.records,i=t.total;e.total=i,e.list=n,e.listLoading=!1}))},initSelect:function(){var e=this;r["c"]({}).then((function(t){for(var n=t.records,i=0;i0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",staticStyle:{width:"400px","margin-left":"50px"},attrs:{rules:e.rules,model:e.temp,"label-position":"right","label-width":"100px"}},[a("el-form-item",{attrs:{label:"用户名",prop:"userName"}},[a("el-input",{attrs:{placeholder:"用户名"},model:{value:e.temp.userName,callback:function(t){e.$set(e.temp,"userName",t)},expression:"temp.userName"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"密 码",prop:"password"}},[a("el-input",{attrs:{placeholder:"密码",minlength:"6"},model:{value:e.temp.password,callback:function(t){e.$set(e.temp,"password",t)},expression:"temp.password"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"角色",prop:"role"}},[a("el-select",{staticClass:"filter-item",attrs:{placeholder:"角色类型"},model:{value:e.temp.role,callback:function(t){e.$set(e.temp,"role",t)},expression:"temp.role"}},e._l(e.roles,(function(e){return a("el-option",{key:e.key,attrs:{label:e,value:e}})})),1)],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确定\n ")])],1)],1)],1)},i=[],r=a("cc68"),o=a("6724"),s=a("333d"),l={name:"User",components:{Pagination:s["a"]},directives:{waves:o["a"]},filters:{statusFilter:function(e){var t={ROLE_ADMIN:"danger",ROLE_USER:""};return t[e]}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,userName:void 0},roles:["ROLE_USER","ROLE_ADMIN"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{role:[{required:!0,message:"role is required",trigger:"change"}],userName:[{required:!0,message:"userName is required",trigger:"blur"}],password:[{required:!1,message:"password is required",trigger:"blur"}]},temp:{id:void 0,role:"",userName:"",password:"",permission:""},resetTemp:function(){this.temp=this.$options.data().temp}}},created:function(){this.fetchData()},methods:{fetchData:function(){var e=this;this.listLoading=!0,r["d"](this.listQuery).then((function(t){e.total=t.total,e.list=t.records,e.listLoading=!1}))},handleCreate:function(){var e=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},createData:function(){var e=this;this.$refs["dataForm"].validate((function(t){t&&r["a"](e.temp).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(e){var t=this;this.temp=Object.assign({},e),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},updateData:function(){var e=this;this.$refs["dataForm"].validate((function(t){if(t){var a=Object.assign({},e.temp);r["e"](a).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},openDelConfirm:function(e){return this.$confirm("此操作将删除 ".concat(e,", 是否继续?"),"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"})},handleDelete:function(e){var t=this;this.openDelConfirm(e.userName).then((function(){r["b"](e.userName).then((function(e){t.fetchData(),t.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}))}}},u=l,c=a("2877"),d=Object(c["a"])(u,n,i,!1,null,null,null);t["default"]=d.exports},6724:function(e,t,a){"use strict";a("8d41");var n="@@wavesContext";function i(e,t){function a(a){var n=Object.assign({},t.value),i=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},n),r=i.ele;if(r){r.style.position="relative",r.style.overflow="hidden";var o=r.getBoundingClientRect(),s=r.querySelector(".waves-ripple");switch(s?s.className="waves-ripple":(s=document.createElement("span"),s.className="waves-ripple",s.style.height=s.style.width=Math.max(o.width,o.height)+"px",r.appendChild(s)),i.type){case"center":s.style.top=o.height/2-s.offsetHeight/2+"px",s.style.left=o.width/2-s.offsetWidth/2+"px";break;default:s.style.top=(a.pageY-o.top-s.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",s.style.left=(a.pageX-o.left-s.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return s.style.backgroundColor=i.color,s.className="waves-ripple z-active",!1}}return e[n]?e[n].removeHandle=a:e[n]={removeHandle:a},a}var r={bind:function(e,t){e.addEventListener("click",i(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[n].removeHandle,!1),e.addEventListener("click",i(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[n].removeHandle,!1),e[n]=null,delete e[n]}},o=function(e){e.directive("waves",r)};window.Vue&&(window.waves=r,Vue.use(o)),r.install=o;t["a"]=r},"8d41":function(e,t,a){},b36cf:function(e,t,a){},cc68:function(e,t,a){"use strict";a.d(t,"d",(function(){return i})),a.d(t,"e",(function(){return r})),a.d(t,"a",(function(){return o})),a.d(t,"b",(function(){return s})),a.d(t,"c",(function(){return l}));var n=a("b775");function i(e){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/page",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/update",method:"put",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/add",method:"post",data:e})}function s(e){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/remove/"+e,method:"delete"})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/auth/users/info/"+e,method:"get"})}},fe41:function(e,t,a){"use strict";a("b36cf")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-60c39f89.6e27baf6.js b/hippo4j-console/src/main/resources/static/static/js/chunk-60c39f89.6e27baf6.js new file mode 100644 index 00000000..65ad9dbb --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-60c39f89.6e27baf6.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-60c39f89"],{3737:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"d",(function(){return l})),i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return o}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/update",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/save",method:"post",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/item/delete/"+e[0]+"/"+e[1],method:"delete"})}},"47ec":function(e,t,i){"use strict";i.d(t,"a",(function(){return a})),i.d(t,"b",(function(){return l})),i.d(t,"c",(function(){return r}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/query?mark="+e.mark+"&tenant="+e.tenantId+"&item="+e.itemId+"&threadPoolKey="+e.threadPoolKey,method:"get"})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/query/key?mark="+e.mark+"&tenant="+e.tenantId+"&item="+e.itemId,method:"get"})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/adapter/thread-pool/update",method:"post",data:e})}},"4d85":function(e,t,i){"use strict";i.d(t,"e",(function(){return a})),i.d(t,"f",(function(){return l})),i.d(t,"d",(function(){return r})),i.d(t,"g",(function(){return o})),i.d(t,"h",(function(){return s})),i.d(t,"j",(function(){return u})),i.d(t,"k",(function(){return d})),i.d(t,"i",(function(){return c})),i.d(t,"b",(function(){return p})),i.d(t,"c",(function(){return m})),i.d(t,"a",(function(){return h}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/list/client/instance/"+e.itemId,method:"get",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/configs?tpId="+e.tpId+"&itemId="+e.itemId+"&namespace="+e.tenantId+"&instanceId="+e.identify,method:"get"})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/state/"+e.tpId+"?clientAddress="+e.clientAddress,method:"get"})}function s(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/run/thread/state/"+e.tpId+"?clientAddress="+e.clientAddress,method:"get"})}function u(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/run/state?clientAddress="+e.clientAddress,method:"get"})}function d(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/web/update/pool",method:"post",data:e})}function c(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:e})}function p(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/save_or_update",method:"post",data:e})}function m(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/delete",method:"delete",data:e})}function h(e){return Object(n["a"])({url:"/hippo4j/v1/cs/thread/pool/alarm/enable/"+e.id+"/"+e.isAlarm,method:"post"})}},6724:function(e,t,i){"use strict";i("8d41");var n="@@wavesContext";function a(e,t){function i(i){var n=Object.assign({},t.value),a=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},n),l=a.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var r=l.getBoundingClientRect(),o=l.querySelector(".waves-ripple");switch(o?o.className="waves-ripple":(o=document.createElement("span"),o.className="waves-ripple",o.style.height=o.style.width=Math.max(r.width,r.height)+"px",l.appendChild(o)),a.type){case"center":o.style.top=r.height/2-o.offsetHeight/2+"px",o.style.left=r.width/2-o.offsetWidth/2+"px";break;default:o.style.top=(i.pageY-r.top-o.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",o.style.left=(i.pageX-r.left-o.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return o.style.backgroundColor=a.color,o.className="waves-ripple z-active",!1}}return e[n]?e[n].removeHandle=i:e[n]={removeHandle:i},i}var l={bind:function(e,t){e.addEventListener("click",a(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[n].removeHandle,!1),e.addEventListener("click",a(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[n].removeHandle,!1),e[n]=null,delete e[n]}},r=function(e){e.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(r)),l.install=r;t["a"]=l},"8d41":function(e,t,i){},dd71:function(e,t,i){"use strict";i.d(t,"c",(function(){return a})),i.d(t,"d",(function(){return l})),i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return o}));var n=i("b775");function a(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/query/page",method:"post",data:e})}function l(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/update",method:"post",data:e})}function r(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/save",method:"post",data:e})}function o(e){return Object(n["a"])({url:"/hippo4j/v1/cs/tenant/delete/"+e,method:"delete"})}},fd57:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"app-container"},[i("div",{staticClass:"filter-container"},[i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"租户(必填)",filterable:""},on:{change:function(t){return e.tenantSelectList()}},model:{value:e.listQuery.tenantId,callback:function(t){e.$set(e.listQuery,"tenantId",t)},expression:"listQuery.tenantId"}},e._l(e.tenantOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"项目(必填)",filterable:""},on:{change:function(t){return e.itemSelectList()}},model:{value:e.listQuery.itemId,callback:function(t){e.$set(e.listQuery,"itemId",t)},expression:"listQuery.itemId"}},e._l(e.itemOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-select",{staticClass:"filter-item",staticStyle:{width:"220px"},attrs:{placeholder:"线程池标识(必填)",filterable:""},model:{value:e.listQuery.threadPoolKey,callback:function(t){e.$set(e.listQuery,"threadPoolKey",t)},expression:"listQuery.threadPoolKey"}},e._l(e.threadPoolKeyOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",attrs:{type:"primary",icon:"el-icon-search"},on:{click:e.fetchData}},[e._v("\n 搜索\n ")]),e._v(" "),i("el-button",{directives:[{name:"waves",rawName:"v-waves"}],staticClass:"filter-item",staticStyle:{"margin-left":"10px"},attrs:{type:"primary",icon:"el-icon-refresh"},on:{click:e.refreshData}},[e._v("\n 重置\n ")])],1),e._v(" "),i("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.listLoading,expression:"listLoading"}],attrs:{data:e.list,"element-loading-text":"Loading",stripe:"",fit:"",border:"","max-height":"714","highlight-current-row":""}},[i("el-table-column",{attrs:{label:"序号",width:"95"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v(e._s(t.$index+1))]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"实例标识",width:"260"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"primary",underline:!1}},[e._v(e._s(t.row.identify))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"Active"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-tag",{attrs:{type:e._f("statusFilter")(t.row.active)}},[e._v("\n "+e._s(t.row.active)+"\n ")])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"线程池标识"},scopedSlots:e._u([{key:"default",fn:function(t){return[e._v("\n "+e._s(t.row.threadPoolKey)+"\n ")]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"核心线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"success",underline:!1}},[e._v(e._s(t.row.coreSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"最大线程"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("el-link",{attrs:{type:"danger",underline:!1}},[e._v(e._s(t.row.maximumSize))])]}}])}),e._v(" "),i("el-table-column",{attrs:{label:"操作",width:"180","class-name":"small-padding fixed-width"},scopedSlots:e._u([{key:"default",fn:function(t){var n=t.row;return[i("el-button",{attrs:{type:"text",size:"small"},on:{click:function(t){return e.handleUpdate(n)}}},[e._v(" 编辑 ")])]}}])})],1),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[i("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"最大线程",prop:"maximumSize"}},[[i("el-input-number",{attrs:{"controls-position":"right",min:1,max:9999},model:{value:e.temp.maximumSize,callback:function(t){e.$set(e.temp,"maximumSize",t)},expression:"temp.maximumSize"}})]],2),e._v(" "),i("el-form-item",{attrs:{label:"全部修改",prop:"allUpdate"}},[i("el-switch",{model:{value:e.temp.allUpdate,callback:function(t){e.$set(e.temp,"allUpdate",t)},expression:"temp.allUpdate"}})],1)],1),e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v(" 取消 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.updateData()}}},[e._v(" 确认 ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},a=[],l=i("3737"),r=i("dd71"),o=i("4d85"),s=i("47ec"),u=i("6724"),d={name:"JobProject",directives:{waves:u["a"]},filters:{statusFilter:function(e){var t={DEV:"info",TEST:"success",UAT:"warning",PROD:"danger"};return t[e]}},data:function(){var e=this;return{isRejectShow:!1,list:null,listLoading:!1,total:0,listQuery:{itemId:"",mark:"RocketMQ",tenantId:"",threadPoolKey:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,runTimeTemp:{},typeOptions:[{key:"Dubbo",display_name:"Dubbo"},{key:"Kafka",display_name:"Kafka"},{key:"KafkaSpringCloudStream",display_name:"KafkaSpringCloudStream"},{key:"RocketMQ",display_name:"RocketMQ"},{key:"RocketMQSpringCloudStream",display_name:"RocketMQSpringCloudStream"},{key:"RabbitMQ",display_name:"RabbitMQ"},{key:"RabbitMQSpringCloudStream",display_name:"RabbitMQSpringCloudStream"}],tenantOptions:[],instanceDialogFormVisible:!1,threadPoolOptions:[],itemOptions:[],threadPoolKeyOptions:[],itemTempOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"},{key:5,display_name:"RunsOldestTaskPolicy"},{key:6,display_name:"SyncPutQueuePolicy"},{key:99,display_name:"CustomRejectedPolicy(自定义 SPI 策略)"}],alarmTypes:[{key:1,display_name:"报警"},{key:0,display_name:"不报警"}],allowCoreThreadTimeOutTypes:[{key:1,display_name:"超时"},{key:0,display_name:"不超时"}],size:500,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maximumSize:[{required:!0,message:"this is required",trigger:"blur"},{validator:function(t,i,n){parseInt(i)0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),n("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"800px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[n("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"100px"}},[n("el-form-item",{attrs:{label:"租户ID",prop:"tenantId"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{disabled:"create"!==e.dialogStatus,placeholder:"租户ID"},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"租户名称",prop:"tenantName"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"租户名称"},model:{value:e.temp.tenantName,callback:function(t){e.$set(e.temp,"tenantName",t)},expression:"temp.tenantName"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"OWNER",prop:"owner"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"OWNER"},model:{value:e.temp.owner,callback:function(t){e.$set(e.temp,"owner",t)},expression:"temp.owner"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"租户描述",prop:"tenantDesc"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{autosize:{minRows:3,maxRows:6},type:"textarea",placeholder:"租户描述"},model:{value:e.temp.tenantDesc,callback:function(t){e.$set(e.temp,"tenantDesc",t)},expression:"temp.tenantDesc"}})],1)],1),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),n("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),n("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[n("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[n("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),n("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},i=[],l=n("dd71"),r=n("6724"),o=n("333d"),s={name:"JobProject",components:{Pagination:o["a"]},directives:{waves:r["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>26?e.slice(0,26)+"...":e:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tenantId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],tenantName:[{required:!0,message:"this is required",trigger:"blur"}],owner:[{required:!0,message:"this is required",trigger:"blur"}],tenantDesc:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData()},methods:{fetchData:function(){var e=this;this.listLoading=!0,l["c"](this.listQuery).then((function(t){var n=t.records,a=t.total;e.total=a,e.list=n,e.listLoading=!1}))},resetTemp:function(){this.temp={id:void 0,tenantName:"",tenantDesc:""}},handleCreate:function(){var e=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},createData:function(){var e=this;this.$refs["dataForm"].validate((function(t){t&&l["a"](e.temp).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(e){var t=this;this.temp=Object.assign({},e),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},updateData:function(){var e=this;this.$refs["dataForm"].validate((function(t){if(t){var n=Object.assign({},e.temp);l["d"](n).then((function(){e.fetchData(),e.dialogFormVisible=!1,e.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},handleDelete:function(e){var t=this;console.log("删除"),l["b"](e.tenantId).then((function(e){t.fetchData(),t.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}}},u=s,c=n("2877"),d=Object(c["a"])(u,a,i,!1,null,null,null);t["default"]=d.exports},6724:function(e,t,n){"use strict";n("8d41");var a="@@wavesContext";function i(e,t){function n(n){var a=Object.assign({},t.value),i=Object.assign({ele:e,type:"hit",color:"rgba(0, 0, 0, 0.15)"},a),l=i.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var r=l.getBoundingClientRect(),o=l.querySelector(".waves-ripple");switch(o?o.className="waves-ripple":(o=document.createElement("span"),o.className="waves-ripple",o.style.height=o.style.width=Math.max(r.width,r.height)+"px",l.appendChild(o)),i.type){case"center":o.style.top=r.height/2-o.offsetHeight/2+"px",o.style.left=r.width/2-o.offsetWidth/2+"px";break;default:o.style.top=(n.pageY-r.top-o.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",o.style.left=(n.pageX-r.left-o.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return o.style.backgroundColor=i.color,o.className="waves-ripple z-active",!1}}return e[a]?e[a].removeHandle=n:e[a]={removeHandle:n},n}var l={bind:function(e,t){e.addEventListener("click",i(e,t),!1)},update:function(e,t){e.removeEventListener("click",e[a].removeHandle,!1),e.addEventListener("click",i(e,t),!1)},unbind:function(e){e.removeEventListener("click",e[a].removeHandle,!1),e[a]=null,delete e[a]}},r=function(e){e.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(r)),l.install=r;t["a"]=l},7456:function(e,t,n){},"8d41":function(e,t,n){},dd71:function(e,t,n){"use strict";n.d(t,"c",(function(){return i})),n.d(t,"d",(function(){return l})),n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return o}));var a=n("b775");function i(e){return Object(a["a"])({url:"/v1/cs/tenant/query/page",method:"post",data:e})}function l(e){return Object(a["a"])({url:"/v1/cs/tenant/update",method:"post",data:e})}function r(e){return Object(a["a"])({url:"/v1/cs/tenant/save",method:"post",data:e})}function o(e){return Object(a["a"])({url:"/v1/cs/tenant/delete/"+e,method:"delete"})}},e498:function(e,t,n){"use strict";n("7456")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-6a55e40a.76e66e91.js b/hippo4j-console/src/main/resources/static/static/js/chunk-6a55e40a.76e66e91.js new file mode 100644 index 00000000..95f65ebb --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-6a55e40a.76e66e91.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-6a55e40a"],{"333d":function(e,t,i){"use strict";var a=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"pagination-container",class:{hidden:e.hidden}},[i("el-pagination",e._b({attrs:{background:e.background,"current-page":e.currentPage,"page-size":e.pageSize,layout:e.layout,"page-sizes":e.pageSizes,total:e.total,"hide-on-single-page":!0},on:{"update:currentPage":function(t){e.currentPage=t},"update:current-page":function(t){e.currentPage=t},"update:pageSize":function(t){e.pageSize=t},"update:page-size":function(t){e.pageSize=t},"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}},"el-pagination",e.$attrs,!1))],1)},n=[];i("c5f6");Math.easeInOutQuad=function(e,t,i,a){return e/=a/2,e<1?i/2*e*e+t:(e--,-i/2*(e*(e-2)-1)+t)};var l=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}();function r(e){document.documentElement.scrollTop=e,document.body.parentNode.scrollTop=e,document.body.scrollTop=e}function s(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function o(e,t,i){var a=s(),n=e-a,o=20,u=0;t="undefined"===typeof t?500:t;var c=function e(){u+=o;var s=Math.easeInOutQuad(u,a,n,t);r(s),u0,expression:"total > 0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),i("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"950px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"100px"}},[i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"租户",prop:"tenantId"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},on:{change:function(t){return e.tenantTempSelectList()}},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[i("el-input-number",{attrs:{placeholder:"核心线程","controls-position":"right",min:1,max:9999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"项目",prop:"itemId"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemTempOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"最大线程",prop:"maxSize"}},[i("el-input-number",{attrs:{placeholder:"最大线程","controls-position":"right",min:1,max:9999},model:{value:e.temp.maxSize,callback:function(t){e.$set(e.temp,"maxSize",t)},expression:"temp.maxSize"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"线程池",prop:"tpId"}},[i("el-input",{attrs:{size:"medium",placeholder:"请输入线程池 ",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}})],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"队列类型",prop:"queueType"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"队列类型"},on:{change:e.selectQueueType},model:{value:e.temp.queueType,callback:function(t){e.$set(e.temp,"queueType",t)},expression:"temp.queueType"}},e._l(e.queueTypeOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"队列容量",prop:"capacity"}},[i("el-input-number",{attrs:{placeholder:"队列容量","controls-position":"right",min:0,max:2147483647,disabled:4===e.temp.queueType||5===e.temp.queueType},model:{value:e.temp.capacity,callback:function(t){e.$set(e.temp,"capacity",t)},expression:"temp.capacity"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"线程超时",prop:"isAlarm"}},[[i("div",[i("el-radio-group",{model:{value:e.temp.allowCoreThreadTimeOut,callback:function(t){e.$set(e.temp,"allowCoreThreadTimeOut",t)},expression:"temp.allowCoreThreadTimeOut"}},[i("el-radio-button",{attrs:{label:1}},[e._v("超时")]),e._v(" "),i("el-radio-button",{attrs:{label:0}},[e._v("不超时")])],1)],1)]],2)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"空闲回收",prop:"keepAliveTime"}},[i("el-input-number",{attrs:{placeholder:"空闲回收 / S","controls-position":"right",min:1,max:9999},model:{value:e.temp.keepAliveTime,callback:function(t){e.$set(e.temp,"keepAliveTime",t)},expression:"temp.keepAliveTime"}})],1)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"是否报警",prop:"isAlarm"}},[[i("div",[i("el-radio-group",{model:{value:e.temp.isAlarm,callback:function(t){e.$set(e.temp,"isAlarm",t)},expression:"temp.isAlarm"}},[i("el-radio-button",{attrs:{label:1}},[e._v("报警")]),e._v(" "),i("el-radio-button",{attrs:{label:0}},[e._v("不报警")])],1)],1)]],2)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"活跃度报警",prop:"livenessAlarm"}},[[i("div",[i("el-radio-group",{model:{value:e.temp.livenessAlarm,callback:function(t){e.$set(e.temp,"livenessAlarm",t)},expression:"temp.livenessAlarm"}},[i("el-radio-button",{attrs:{label:40}},[e._v("40%")]),e._v(" "),i("el-radio-button",{attrs:{label:60}},[e._v("60%")]),e._v(" "),i("el-radio-button",{attrs:{label:80}},[e._v("80%")])],1)],1)]],2)],1)],1),e._v(" "),i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"拒绝策略",prop:"rejectedType"}},[i("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"拒绝策略"},on:{change:e.selectRejectedType},model:{value:e.temp.rejectedType,callback:function(t){e.$set(e.temp,"rejectedType",t)},expression:"temp.rejectedType"}},e._l(e.rejectedOptions,(function(e){return i("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"容量报警",prop:"capacityAlarm"}},[[i("div",[i("el-radio-group",{model:{value:e.temp.capacityAlarm,callback:function(t){e.$set(e.temp,"capacityAlarm",t)},expression:"temp.capacityAlarm"}},[i("el-radio-button",{attrs:{label:40}},[e._v("40%")]),e._v(" "),i("el-radio-button",{attrs:{label:60}},[e._v("60%")]),e._v(" "),i("el-radio-button",{attrs:{label:80}},[e._v("80%")])],1)],1)]],2)],1)],1),e._v(" "),e.isRejectShow?i("el-row",{attrs:{gutter:20}},[i("el-col",{attrs:{span:12}},[i("el-form-item",{attrs:{label:"SPI 拒绝策略",prop:"customRejectedType"}},[i("el-input",{attrs:{placeholder:"请输入自定义 SPI 拒绝策略标识"},on:{input:function(t){return e.onInput()}},model:{value:e.temp.customRejectedType,callback:function(t){e.$set(e.temp,"customRejectedType",t)},expression:"temp.customRejectedType"}})],1)],1)],1):e._e()],1),e._v(" "),i("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v(" 取消 ")]),e._v(" "),i("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),i("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[i("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[i("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),i("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),i("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[i("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},n=[],l=i("3737"),r=i("dd71"),s=i("4d85"),o=i("6724"),u=i("333d"),c={name:"JobProject",components:{Pagination:u["a"]},directives:{waves:o["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},queueFilter:function(e){return"1"==e?"ArrayBlockingQueue":"2"==e?"LinkedBlockingQueue":"3"==e?"LinkedBlockingDeque":"4"==e?"SynchronousQueue":"5"==e?"LinkedTransferQueue":"6"==e?"PriorityBlockingQueue":"9"==e?"ResizableLinkedBlockingQueue":void 0}},data:function(){var e=this;return{isRejectShow:!1,list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tpId:"",itemId:"",desc:!0},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],isEditDisabled:!1,dialogFormVisible:!1,tenantOptions:[],threadPoolOptions:[],itemOptions:[],itemTempOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"},{key:5,display_name:"RunsOldestTaskPolicy"},{key:6,display_name:"SyncPutQueuePolicy"},{key:99,display_name:"CustomRejectedPolicy(自定义 SPI 策略)"}],alarmTypes:[{key:1,display_name:"报警"},{key:0,display_name:"不报警"}],allowCoreThreadTimeOutTypes:[{key:1,display_name:"超时"},{key:0,display_name:"不超时"}],size:500,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maxSize:[{required:!0,message:"this is required",trigger:"blur"},{validator:function(t,i,a){parseInt(i)0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),a("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"1000px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[a("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"110px"}},[a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"《基本信息》"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"租户ID",prop:"tenantId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择租户",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"核心线程",prop:"coreSize"}},[a("el-input-number",{attrs:{placeholder:"核心线程",min:1,max:999},model:{value:e.temp.coreSize,callback:function(t){e.$set(e.temp,"coreSize",t)},expression:"temp.coreSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"项目ID",prop:"itemId"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"请选择项目",disabled:"create"!==e.dialogStatus},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}},e._l(e.itemOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"最大线程",prop:"maxSize"}},[a("el-input-number",{attrs:{placeholder:"最大线程",min:1,max:999},model:{value:e.temp.maxSize,callback:function(t){e.$set(e.temp,"maxSize",t)},expression:"temp.maxSize"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"线程池ID",prop:"tpId"}},[a("el-input",{attrs:{size:"medium",placeholder:"请输入线程池ID",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tpId,callback:function(t){e.$set(e.temp,"tpId",t)},expression:"temp.tpId"}})],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"KVTime",prop:"keepAliveTime"}},[a("el-input-number",{attrs:{placeholder:"Time / S",min:20,max:90},model:{value:e.temp.keepAliveTime,callback:function(t){e.$set(e.temp,"keepAliveTime",t)},expression:"temp.keepAliveTime"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"《扩展信息》"}})],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列类型",prop:"queueType"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"队列类型"},on:{change:e.selectQueueType},model:{value:e.temp.queueType,callback:function(t){e.$set(e.temp,"queueType",t)},expression:"temp.queueType"}},e._l(e.queueTypeOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"队列容量",prop:"capacity"}},[a("el-input-number",{attrs:{placeholder:"队列容量",min:0,max:2147483647,disabled:4===e.temp.queueType||5===e.temp.queueType},model:{value:e.temp.capacity,callback:function(t){e.$set(e.temp,"capacity",t)},expression:"temp.capacity"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"拒绝策略",prop:"rejectedType"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"拒绝策略"},model:{value:e.temp.rejectedType,callback:function(t){e.$set(e.temp,"rejectedType",t)},expression:"temp.rejectedType"}},e._l(e.rejectedOptions,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"活跃度报警",prop:"livenessAlarm"}},[a("el-input-number",{attrs:{placeholder:"活跃度报警",min:30,max:90},model:{value:e.temp.livenessAlarm,callback:function(t){e.$set(e.temp,"livenessAlarm",t)},expression:"temp.livenessAlarm"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"是否报警",prop:"isAlarm"}},[a("el-select",{staticStyle:{display:"block"},attrs:{placeholder:"是否报警"},model:{value:e.temp.isAlarm,callback:function(t){e.$set(e.temp,"isAlarm",t)},expression:"temp.isAlarm"}},e._l(e.alarmTypes,(function(e){return a("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1)],1),e._v(" "),a("el-col",{attrs:{span:12}},[a("el-form-item",{attrs:{label:"容量报警",prop:"capacityAlarm"}},[a("el-input-number",{attrs:{placeholder:"容量报警",min:30,max:90},model:{value:e.temp.capacityAlarm,callback:function(t){e.$set(e.temp,"capacityAlarm",t)},expression:"temp.capacityAlarm"}})],1)],1)],1),e._v(" "),a("el-row",{attrs:{gutter:20}})],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),a("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[a("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),a("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},l=[],r=a("bd86"),s=a("3737"),o=a("dd71"),u=a("4d856"),c=a("6724"),d=a("333d"),p=(i={name:"JobProject",components:{Pagination:d["a"]},directives:{waves:c["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]}}},Object(r["a"])(i,"filters",{queueFilter:function(e){return"1"==e?"ArrayBlockingQueue":"2"==e?"LinkedBlockingQueue":"3"==e?"LinkedBlockingDeque":"4"==e?"SynchronousQueue":"5"==e?"LinkedTransferQueue":"6"==e?"PriorityBlockingQueue":"9"==e?"ResizableLinkedBlockingQueue":void 0}}),Object(r["a"])(i,"data",(function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,itemId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,tenantOptions:[],threadPoolOptions:[],itemOptions:[],queueTypeOptions:[{key:1,display_name:"ArrayBlockingQueue"},{key:2,display_name:"LinkedBlockingQueue"},{key:3,display_name:"LinkedBlockingDeque"},{key:4,display_name:"SynchronousQueue"},{key:5,display_name:"LinkedTransferQueue"},{key:6,display_name:"PriorityBlockingQueue"},{key:9,display_name:"ResizableLinkedBlockingQueue (支持动态修改队列大小)"}],rejectedOptions:[{key:1,display_name:"CallerRunsPolicy"},{key:2,display_name:"AbortPolicy"},{key:3,display_name:"DiscardPolicy"},{key:4,display_name:"DiscardOldestPolicy"}],alarmTypes:[{key:0,display_name:"报警"},{key:1,display_name:"不报警"}],dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],tpId:[{required:!0,message:"this is required",trigger:"blur"}],coreSize:[{required:!0,message:"this is required",trigger:"blur"}],maxSize:[{required:!0,message:"this is required",trigger:"blur"}],queueType:[{required:!0,message:"this is required",trigger:"blur"}],keepAliveTime:[{required:!0,message:"this is required",trigger:"blur"}],isAlarm:[{required:!0,message:"this is required",trigger:"blur"}],capacityAlarm:[{required:!0,message:"this is required",trigger:"blur"}],livenessAlarm:[{required:!0,message:"this is required",trigger:"blur"}],rejectedType:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:""},visible:!0}})),Object(r["a"])(i,"created",(function(){this.fetchData(),this.initSelect()})),Object(r["a"])(i,"methods",{fetchData:function(){var e=this;this.listLoading=!0,u["d"](this.listQuery).then((function(t){var a=t.records,i=t.total;e.total=i,e.list=a,e.listLoading=!1}))},changeAlarm:function(e){var t=this;u["a"](e).then((function(){t.fetchData(),t.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))},initSelect:function(){var e=this;o["c"]({}).then((function(t){for(var a=t.records,i=0;in.parts.length&&(r.parts.length=n.parts.length)}else{var o=[];for(i=0;i=0},required:!0},className:String},computed:{userSelect:function(){return this.active?"none":""},cursor:function(){return this.active?"col-resize":""}},watch:{defaultPercent:function(e,t){this.percent=e}},data:function(){return{active:!1,hasMoved:!1,height:null,percent:this.defaultPercent,type:"vertical"===this.split?"width":"height",resizeType:"vertical"===this.split?"left":"top"}},methods:{onClick:function(){this.hasMoved||(this.percent=50,this.$emit("resize"))},onMouseDown:function(){this.active=!0,this.hasMoved=!1},onMouseUp:function(){this.active=!1},onMouseMove:function(e){if(0!==e.buttons&&0!==e.which||(this.active=!1),this.active){var t=0,n=e.currentTarget;if("vertical"===this.split)for(;n;)t+=n.offsetLeft,n=n.offsetParent;else for(;n;)t+=n.offsetTop,n=n.offsetParent;var r="vertical"===this.split?e.pageX:e.pageY,i="vertical"===this.split?e.currentTarget.offsetWidth:e.currentTarget.offsetHeight,o=Math.floor((r-t)/i*1e4)/100;o>this.minPercent&&o<100-this.minPercent&&(this.percent=o),this.$emit("resize"),this.hasMoved=!0}}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"Pane",props:{className:String},data:function(){return{classes:[this.$parent.split,this.className].join(" "),percent:50}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={props:{split:{validator:function(e){return["vertical","horizontal"].indexOf(e)>=0},required:!0},className:String},computed:{classes:function(){return["splitter-pane-resizer",this.split,this.className].join(" ")}}}},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,".splitter-pane-resizer[data-v-212fa2a4]{box-sizing:border-box;background:#000;position:absolute;opacity:.2;z-index:1;background-clip:padding-box}.splitter-pane-resizer.horizontal[data-v-212fa2a4]{height:11px;margin:-5px 0;border-top:5px solid hsla(0,0%,100%,0);border-bottom:5px solid hsla(0,0%,100%,0);cursor:row-resize;width:100%}.splitter-pane-resizer.vertical[data-v-212fa2a4]{width:11px;height:100%;margin-left:-5px;border-left:5px solid hsla(0,0%,100%,0);border-right:5px solid hsla(0,0%,100%,0);cursor:col-resize}",""])},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,'.clearfix[data-v-566a42b8]:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vue-splitter-container[data-v-566a42b8]{height:100%;position:relative}.vue-splitter-container-mask[data-v-566a42b8]{z-index:9999;width:100%;height:100%;position:absolute;top:0;left:0}',""])},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,".splitter-pane.vertical.splitter-paneL[data-v-815c801c]{position:absolute;left:0;height:100%;padding-right:3px}.splitter-pane.vertical.splitter-paneR[data-v-815c801c]{position:absolute;right:0;height:100%;padding-left:3px}.splitter-pane.horizontal.splitter-paneL[data-v-815c801c]{position:absolute;top:0;width:100%}.splitter-pane.horizontal.splitter-paneR[data-v-815c801c]{position:absolute;bottom:0;width:100%;padding-top:3px}",""])},function(e,t,n){n(17);var r=n(1)(n(5),n(14),"data-v-815c801c",null);e.exports=r.exports},function(e,t,n){n(15);var r=n(1)(n(6),n(12),"data-v-212fa2a4",null);e.exports=r.exports},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:e.classes})},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e,t,n,r=this,i=r.$createElement,o=r._self._c||i;return o("div",{staticClass:"vue-splitter-container clearfix",style:{cursor:r.cursor,userSelect:r.userSelect},on:{mouseup:r.onMouseUp,mousemove:r.onMouseMove}},[o("pane",{staticClass:"splitter-pane splitter-paneL",style:(e={},e[r.type]=r.percent+"%",e),attrs:{split:r.split}},[r._t("paneL")],2),r._v(" "),o("resizer",{style:(t={},t[r.resizeType]=r.percent+"%",t),attrs:{className:r.className,split:r.split},nativeOn:{mousedown:function(e){r.onMouseDown(e)},click:function(e){r.onClick(e)}}}),r._v(" "),o("pane",{staticClass:"splitter-pane splitter-paneR",style:(n={},n[r.type]=100-r.percent+"%",n),attrs:{split:r.split}},[r._t("paneR")],2),r._v(" "),r.active?o("div",{staticClass:"vue-splitter-container-mask"}):r._e()],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:e.classes},[e._t("default")],2)},staticRenderFns:[]}},function(e,t,n){var r=n(7);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("93b24118",r,!0)},function(e,t,n){var r=n(8);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("084fcb29",r,!0)},function(e,t,n){var r=n(9);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("2e723840",r,!0)},function(e,t){e.exports=function(e,t){for(var n=[],r={},i=0;in.parts.length&&(r.parts.length=n.parts.length)}else{var o=[];for(i=0;i=0},required:!0},className:String},computed:{userSelect:function(){return this.active?"none":""},cursor:function(){return this.active?"col-resize":""}},watch:{defaultPercent:function(e,t){this.percent=e}},data:function(){return{active:!1,hasMoved:!1,height:null,percent:this.defaultPercent,type:"vertical"===this.split?"width":"height",resizeType:"vertical"===this.split?"left":"top"}},methods:{onClick:function(){this.hasMoved||(this.percent=50,this.$emit("resize"))},onMouseDown:function(){this.active=!0,this.hasMoved=!1},onMouseUp:function(){this.active=!1},onMouseMove:function(e){if(0!==e.buttons&&0!==e.which||(this.active=!1),this.active){var t=0,n=e.currentTarget;if("vertical"===this.split)for(;n;)t+=n.offsetLeft,n=n.offsetParent;else for(;n;)t+=n.offsetTop,n=n.offsetParent;var r="vertical"===this.split?e.pageX:e.pageY,i="vertical"===this.split?e.currentTarget.offsetWidth:e.currentTarget.offsetHeight,o=Math.floor((r-t)/i*1e4)/100;o>this.minPercent&&o<100-this.minPercent&&(this.percent=o),this.$emit("resize"),this.hasMoved=!0}}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"Pane",props:{className:String},data:function(){return{classes:[this.$parent.split,this.className].join(" "),percent:50}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={props:{split:{validator:function(e){return["vertical","horizontal"].indexOf(e)>=0},required:!0},className:String},computed:{classes:function(){return["splitter-pane-resizer",this.split,this.className].join(" ")}}}},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,".splitter-pane-resizer[data-v-212fa2a4]{box-sizing:border-box;background:#000;position:absolute;opacity:.2;z-index:1;background-clip:padding-box}.splitter-pane-resizer.horizontal[data-v-212fa2a4]{height:11px;margin:-5px 0;border-top:5px solid hsla(0,0%,100%,0);border-bottom:5px solid hsla(0,0%,100%,0);cursor:row-resize;width:100%}.splitter-pane-resizer.vertical[data-v-212fa2a4]{width:11px;height:100%;margin-left:-5px;border-left:5px solid hsla(0,0%,100%,0);border-right:5px solid hsla(0,0%,100%,0);cursor:col-resize}",""])},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,'.clearfix[data-v-566a42b8]:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vue-splitter-container[data-v-566a42b8]{height:100%;position:relative}.vue-splitter-container-mask[data-v-566a42b8]{z-index:9999;width:100%;height:100%;position:absolute;top:0;left:0}',""])},function(e,t,n){t=e.exports=n(0)(),t.push([e.i,".splitter-pane.vertical.splitter-paneL[data-v-815c801c]{position:absolute;left:0;height:100%;padding-right:3px}.splitter-pane.vertical.splitter-paneR[data-v-815c801c]{position:absolute;right:0;height:100%;padding-left:3px}.splitter-pane.horizontal.splitter-paneL[data-v-815c801c]{position:absolute;top:0;width:100%}.splitter-pane.horizontal.splitter-paneR[data-v-815c801c]{position:absolute;bottom:0;width:100%;padding-top:3px}",""])},function(e,t,n){n(17);var r=n(1)(n(5),n(14),"data-v-815c801c",null);e.exports=r.exports},function(e,t,n){n(15);var r=n(1)(n(6),n(12),"data-v-212fa2a4",null);e.exports=r.exports},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:e.classes})},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e,t,n,r=this,i=r.$createElement,o=r._self._c||i;return o("div",{staticClass:"vue-splitter-container clearfix",style:{cursor:r.cursor,userSelect:r.userSelect},on:{mouseup:r.onMouseUp,mousemove:r.onMouseMove}},[o("pane",{staticClass:"splitter-pane splitter-paneL",style:(e={},e[r.type]=r.percent+"%",e),attrs:{split:r.split}},[r._t("paneL")],2),r._v(" "),o("resizer",{style:(t={},t[r.resizeType]=r.percent+"%",t),attrs:{className:r.className,split:r.split},nativeOn:{mousedown:function(e){r.onMouseDown(e)},click:function(e){r.onClick(e)}}}),r._v(" "),o("pane",{staticClass:"splitter-pane splitter-paneR",style:(n={},n[r.type]=100-r.percent+"%",n),attrs:{split:r.split}},[r._t("paneR")],2),r._v(" "),r.active?o("div",{staticClass:"vue-splitter-container-mask"}):r._e()],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{class:e.classes},[e._t("default")],2)},staticRenderFns:[]}},function(e,t,n){var r=n(7);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("93b24118",r,!0)},function(e,t,n){var r=n(8);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("084fcb29",r,!0)},function(e,t,n){var r=n(9);"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals),n(2)("2e723840",r,!0)},function(e,t){e.exports=function(e,t){for(var n=[],r={},i=0;i diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-8bb94e76.84ead3ab.js b/hippo4j-console/src/main/resources/static/static/js/chunk-8bb94e76.84ead3ab.js deleted file mode 100644 index 42c73d5b..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-8bb94e76.84ead3ab.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-8bb94e76"],{"133c":function(t,e,s){"use strict";s("d785")},"2f9c":function(t,e,s){},"6e50":function(t,e,s){"use strict";s("df1c")},bb707:function(t,e,s){"use strict";s("2f9c")},d785:function(t,e,s){},df1c:function(t,e,s){},ecac:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"app-container"},[t.user?s("div",[s("el-row",{attrs:{gutter:20}},[s("el-col",{attrs:{span:6,xs:24}},[s("user-card",{attrs:{user:t.user}})],1),t._v(" "),s("el-col",{attrs:{span:18,xs:24}},[s("el-card",[s("el-tabs",{model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[s("el-tab-pane",{attrs:{label:"Activity",name:"activity"}},[s("activity")],1),t._v(" "),s("el-tab-pane",{attrs:{label:"Timeline",name:"timeline"}},[s("timeline")],1),t._v(" "),s("el-tab-pane",{attrs:{label:"Account",name:"account"}},[s("account",{attrs:{user:t.user}})],1)],1)],1)],1)],1)],1):t._e()])},i=[],n=(s("7f7f"),s("db72")),l=s("2f62"),r=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("el-card",{staticStyle:{"margin-bottom":"20px"}},[s("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[s("span",[t._v("About me")])]),t._v(" "),s("div",{staticClass:"user-profile"},[s("div",{staticClass:"box-center"},[s("pan-thumb",{attrs:{image:t.user.avatar,height:"100px",width:"100px",hoverable:!1}},[s("div",[t._v("Hello")]),t._v("\n "+t._s(t.user.role)+"\n ")])],1),t._v(" "),s("div",{staticClass:"box-center"},[s("div",{staticClass:"user-name text-center"},[t._v(t._s(t.user.name))]),t._v(" "),s("div",{staticClass:"user-role text-center text-muted"},[t._v(t._s(t._f("uppercaseFirst")(t.user.role)))])])]),t._v(" "),s("div",{staticClass:"user-bio"},[s("div",{staticClass:"user-education user-bio-section"},[s("div",{staticClass:"user-bio-section-header"},[s("svg-icon",{attrs:{"icon-class":"education"}}),s("span",[t._v("Education")])],1),t._v(" "),s("div",{staticClass:"user-bio-section-body"},[s("div",{staticClass:"text-muted"},[t._v("\n JS in Computer Science from the University of Technology\n ")])])]),t._v(" "),s("div",{staticClass:"user-skills user-bio-section"},[s("div",{staticClass:"user-bio-section-header"},[s("svg-icon",{attrs:{"icon-class":"skill"}}),s("span",[t._v("Skills")])],1),t._v(" "),s("div",{staticClass:"user-bio-section-body"},[s("div",{staticClass:"progress-item"},[s("span",[t._v("Vue")]),t._v(" "),s("el-progress",{attrs:{percentage:70}})],1),t._v(" "),s("div",{staticClass:"progress-item"},[s("span",[t._v("JavaScript")]),t._v(" "),s("el-progress",{attrs:{percentage:18}})],1),t._v(" "),s("div",{staticClass:"progress-item"},[s("span",[t._v("Css")]),t._v(" "),s("el-progress",{attrs:{percentage:12}})],1),t._v(" "),s("div",{staticClass:"progress-item"},[s("span",[t._v("ESLint")]),t._v(" "),s("el-progress",{attrs:{percentage:100,status:"success"}})],1)])])])])},c=[],o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"pan-item",style:{zIndex:t.zIndex,height:t.height,width:t.width}},[s("div",{staticClass:"pan-info"},[s("div",{staticClass:"pan-info-roles-container"},[t._t("default")],2)]),t._v(" "),s("div",{staticClass:"pan-thumb",style:{backgroundImage:"url("+t.image+")"}})])},u=[],m=(s("c5f6"),{name:"PanThumb",props:{image:{type:String,required:!0},zIndex:{type:Number,default:1},width:{type:String,default:"150px"},height:{type:String,default:"150px"}}}),p=m,v=(s("133c"),s("2877")),d=Object(v["a"])(p,o,u,!1,null,"799537af",null),f=d.exports,_={components:{PanThumb:f},props:{user:{type:Object,default:function(){return{name:"",email:"",avatar:"",roles:""}}}}},h=_,b=(s("bb707"),Object(v["a"])(h,r,c,!1,null,"72e10cd6",null)),g=b.exports,C=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"user-activity"},[s("div",{staticClass:"post"},[s("div",{staticClass:"user-block"},[s("img",{staticClass:"img-circle",attrs:{src:"https://wpimg.wallstcn.com/57ed425a-c71e-4201-9428-68760c0537c4.jpg"+t.avatarPrefix}}),t._v(" "),s("span",{staticClass:"username text-muted"},[t._v("Iron Man")]),t._v(" "),s("span",{staticClass:"description"},[t._v("Shared publicly - 7:30 PM today")])]),t._v(" "),s("p",[t._v("\n Lorem ipsum represents a long-held tradition for designers,\n typographers and the like. Some people hate it and argue for\n its demise, but others ignore the hate as they create awesome\n tools to help create filler text for everyone from bacon lovers\n to Charlie Sheen fans.\n ")]),t._v(" "),s("ul",{staticClass:"list-inline"},[t._m(0),t._v(" "),s("li",[s("span",{staticClass:"link-black text-sm"},[s("svg-icon",{attrs:{"icon-class":"like"}}),t._v("\n Like\n ")],1)])])]),t._v(" "),s("div",{staticClass:"post"},[s("div",{staticClass:"user-block"},[s("img",{staticClass:"img-circle",attrs:{src:"https://wpimg.wallstcn.com/9e2a5d0a-bd5b-457f-ac8e-86554616c87b.jpg"+t.avatarPrefix}}),t._v(" "),s("span",{staticClass:"username text-muted"},[t._v("Captain American")]),t._v(" "),s("span",{staticClass:"description"},[t._v("Sent you a message - yesterday")])]),t._v(" "),s("p",[t._v("\n Lorem ipsum represents a long-held tradition for designers,\n typographers and the like. Some people hate it and argue for\n its demise, but others ignore the hate as they create awesome\n tools to help create filler text for everyone from bacon lovers\n to Charlie Sheen fans.\n ")]),t._v(" "),s("ul",{staticClass:"list-inline"},[t._m(1),t._v(" "),s("li",[s("span",{staticClass:"link-black text-sm"},[s("svg-icon",{attrs:{"icon-class":"like"}}),t._v("\n Like\n ")],1)])])]),t._v(" "),s("div",{staticClass:"post"},[s("div",{staticClass:"user-block"},[s("img",{staticClass:"img-circle",attrs:{src:"https://wpimg.wallstcn.com/fb57f689-e1ab-443c-af12-8d4066e202e2.jpg"+t.avatarPrefix}}),t._v(" "),s("span",{staticClass:"username"},[t._v("Spider Man")]),t._v(" "),s("span",{staticClass:"description"},[t._v("Posted 4 photos - 2 days ago")])]),t._v(" "),s("div",{staticClass:"user-images"},[s("el-carousel",{attrs:{interval:6e3,type:"card",height:"220px"}},t._l(t.carouselImages,(function(e){return s("el-carousel-item",{key:e},[s("img",{staticClass:"image",attrs:{src:e+t.carouselPrefix}})])})),1)],1),t._v(" "),s("ul",{staticClass:"list-inline"},[t._m(2),t._v(" "),s("li",[s("span",{staticClass:"link-black text-sm"},[s("svg-icon",{attrs:{"icon-class":"like"}}),t._v(" Like")],1)])])])])},x=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("li",[s("span",{staticClass:"link-black text-sm"},[s("i",{staticClass:"el-icon-share"}),t._v("\n Share\n ")])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("li",[s("span",{staticClass:"link-black text-sm"},[s("i",{staticClass:"el-icon-share"}),t._v("\n Share\n ")])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("li",[s("span",{staticClass:"link-black text-sm"},[s("i",{staticClass:"el-icon-share"}),t._v(" Share")])])}],y="?imageView2/1/w/80/h/80",k="?imageView2/2/h/440",w={data:function(){return{carouselImages:["https://wpimg.wallstcn.com/9679ffb0-9e0b-4451-9916-e21992218054.jpg","https://wpimg.wallstcn.com/bcce3734-0837-4b9f-9261-351ef384f75a.jpg","https://wpimg.wallstcn.com/d1d7b033-d75e-4cd6-ae39-fcd5f1c0a7c5.jpg","https://wpimg.wallstcn.com/50530061-851b-4ca5-9dc5-2fead928a939.jpg"],avatarPrefix:y,carouselPrefix:k}}},S=w,j=(s("6e50"),Object(v["a"])(S,C,x,!1,null,"1066d76c",null)),P=j.exports,E=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"block"},[s("el-timeline",t._l(t.timeline,(function(e,a){return s("el-timeline-item",{key:a,attrs:{timestamp:e.timestamp,placement:"top"}},[s("el-card",[s("h4",[t._v(t._s(e.title))]),t._v(" "),s("p",[t._v(t._s(e.content))])])],1)})),1)],1)},$=[],O={data:function(){return{timeline:[{timestamp:"2019/4/20",title:"Update Github template",content:"PanJiaChen committed 2019/4/20 20:46"},{timestamp:"2019/4/21",title:"Update Github template",content:"PanJiaChen committed 2019/4/21 20:46"},{timestamp:"2019/4/22",title:"Build Template",content:"PanJiaChen committed 2019/4/22 20:46"},{timestamp:"2019/4/23",title:"Release New Version",content:"PanJiaChen committed 2019/4/23 20:46"}]}}},T=O,J=Object(v["a"])(T,E,$,!1,null,null,null),U=J.exports,I=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("el-form",[s("el-form-item",{attrs:{label:"Name"}},[s("el-input",{model:{value:t.user.name,callback:function(e){t.$set(t.user,"name","string"===typeof e?e.trim():e)},expression:"user.name"}})],1),t._v(" "),s("el-form-item",{attrs:{label:"Email"}},[s("el-input",{model:{value:t.user.email,callback:function(e){t.$set(t.user,"email","string"===typeof e?e.trim():e)},expression:"user.email"}})],1),t._v(" "),s("el-form-item",[s("el-button",{attrs:{type:"primary"},on:{click:t.submit}},[t._v("Update")])],1)],1)},A=[],L={props:{user:{type:Object,default:function(){return{name:"",email:""}}}},methods:{submit:function(){this.$message({message:"User information has been updated successfully",type:"success",duration:5e3})}}},V=L,z=Object(v["a"])(V,I,A,!1,null,null,null),M=z.exports,N={name:"Profile",components:{UserCard:g,Activity:P,Timeline:U,Account:M},data:function(){return{user:{},activeTab:"activity"}},computed:Object(n["a"])({},Object(l["b"])(["name","avatar","roles"])),created:function(){this.getUser()},methods:{getUser:function(){this.user={name:this.name,role:this.roles.join(" | "),email:"admin@test.com",avatar:this.avatar}}}},G=N,q=Object(v["a"])(G,a,i,!1,null,null,null);e["default"]=q.exports}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-90a072fe.a22e41ae.js b/hippo4j-console/src/main/resources/static/static/js/chunk-90a072fe.a22e41ae.js new file mode 100644 index 00000000..f3c163e8 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-90a072fe.a22e41ae.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-90a072fe"],{"333d":function(t,e,n){"use strict";var a=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"pagination-container",class:{hidden:t.hidden}},[n("el-pagination",t._b({attrs:{background:t.background,"current-page":t.currentPage,"page-size":t.pageSize,layout:t.layout,"page-sizes":t.pageSizes,total:t.total,"hide-on-single-page":!0},on:{"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e},"update:pageSize":function(e){t.pageSize=e},"update:page-size":function(e){t.pageSize=e},"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}},"el-pagination",t.$attrs,!1))],1)},i=[];n("c5f6");Math.easeInOutQuad=function(t,e,n,a){return t/=a/2,t<1?n/2*t*t+e:(t--,-n/2*(t*(t-2)-1)+e)};var l=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();function o(t){document.documentElement.scrollTop=t,document.body.parentNode.scrollTop=t,document.body.scrollTop=t}function s(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function r(t,e,n){var a=s(),i=t-a,r=20,u=0;e="undefined"===typeof e?500:e;var c=function t(){u+=r;var s=Math.easeInOutQuad(u,a,i,e);o(s),u0,expression:"total > 0"}],attrs:{total:t.total,page:t.listQuery.current,limit:t.listQuery.size},on:{"update:page":function(e){return t.$set(t.listQuery,"current",e)},"update:limit":function(e){return t.$set(t.listQuery,"size",e)},pagination:t.fetchData}}),t._v(" "),n("el-dialog",{attrs:{title:t.textMap[t.dialogStatus],visible:t.dialogFormVisible,width:"800px"},on:{"update:visible":function(e){t.dialogFormVisible=e}}},[n("el-form",{ref:"dataForm",attrs:{rules:t.rules,model:t.temp,"label-position":"left","label-width":"100px"}},[n("el-form-item",{attrs:{label:"租户",prop:"tenantId"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{disabled:"create"!==t.dialogStatus,placeholder:"租户"},model:{value:t.temp.tenantId,callback:function(e){t.$set(t.temp,"tenantId",e)},expression:"temp.tenantId"}})],1),t._v(" "),n("el-form-item",{attrs:{label:"租户名称",prop:"tenantName"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"租户名称"},model:{value:t.temp.tenantName,callback:function(e){t.$set(t.temp,"tenantName",e)},expression:"temp.tenantName"}})],1),t._v(" "),n("el-form-item",{attrs:{label:"OWNER",prop:"owner"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"OWNER"},model:{value:t.temp.owner,callback:function(e){t.$set(t.temp,"owner",e)},expression:"temp.owner"}})],1),t._v(" "),n("el-form-item",{attrs:{label:"租户描述",prop:"tenantDesc"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{autosize:{minRows:3,maxRows:6},type:"textarea",placeholder:"租户描述"},model:{value:t.temp.tenantDesc,callback:function(e){t.$set(t.temp,"tenantDesc",e)},expression:"temp.tenantDesc"}})],1)],1),t._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{on:{click:function(e){t.dialogFormVisible=!1}}},[t._v(" 取消 ")]),t._v(" "),n("el-button",{attrs:{type:"primary"},on:{click:function(e){"create"===t.dialogStatus?t.createData():t.updateData()}}},[t._v("\n 确认\n ")])],1)],1),t._v(" "),n("el-dialog",{attrs:{visible:t.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(e){t.dialogPluginVisible=e}}},[n("el-table",{staticStyle:{width:"100%"},attrs:{data:t.pluginData,border:"",fit:"","highlight-current-row":""}},[n("el-table-column",{attrs:{prop:"key",label:"Channel"}}),t._v(" "),n("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),t._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(e){t.dialogPvVisible=!1}}},[t._v("Confirm")])],1)],1)],1)},i=[],l=n("dd71"),o=n("6724"),s=n("333d"),r={name:"JobProject",components:{Pagination:s["a"]},directives:{waves:o["a"]},filters:{statusFilter:function(t){var e={published:"success",draft:"gray",deleted:"danger"};return e[t]},ellipsis:function(t){return t?t.length>26?t.slice(0,26)+"...":t:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,tenantId:"",desc:!0},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],isEditDisabled:!1,dialogFormVisible:!1,dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],tenantName:[{required:!0,message:"this is required",trigger:"blur"}],owner:[{required:!0,message:"this is required",trigger:"blur"}],tenantDesc:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData()},mounted:function(){this.isEditDisabled="admin"!==this.$cookie.get("userName")},methods:{fetchData:function(){var t=this;this.listLoading=!0,l["c"](this.listQuery).then((function(e){var n=e.records,a=e.total;t.total=a,t.list=n,t.listLoading=!1}))},resetTemp:function(){this.temp={id:void 0,tenantName:"",tenantDesc:""}},handleCreate:function(){var t=this;this.resetTemp(),this.dialogStatus="create",this.dialogFormVisible=!0,this.$nextTick((function(){t.$refs["dataForm"].clearValidate()}))},createData:function(){var t=this;this.$refs["dataForm"].validate((function(e){e&&l["a"](t.temp).then((function(){t.fetchData(),t.dialogFormVisible=!1,t.$notify({title:"Success",message:"Created Successfully",type:"success",duration:2e3})}))}))},handleUpdate:function(t){var e=this;this.temp=Object.assign({},t),this.dialogStatus="update",this.dialogFormVisible=!0,this.$nextTick((function(){e.$refs["dataForm"].clearValidate()}))},updateData:function(){var t=this;this.$refs["dataForm"].validate((function(e){if(e){var n=Object.assign({},t.temp);l["d"](n).then((function(){t.fetchData(),t.dialogFormVisible=!1,t.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))}}))},openDelConfirm:function(t){return this.$confirm("此操作将删除 ".concat(t,", 是否继续?"),"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"})},handleDelete:function(t){var e=this;this.openDelConfirm(t.tenantId).then((function(){l["b"](t.tenantId).then((function(t){e.fetchData(),e.$notify({title:"Success",message:"Delete Successfully",type:"success",duration:2e3})}))}))}}},u=r,c=n("2877"),d=Object(c["a"])(u,a,i,!1,null,null,null);e["default"]=d.exports},6724:function(t,e,n){"use strict";n("8d41");var a="@@wavesContext";function i(t,e){function n(n){var a=Object.assign({},e.value),i=Object.assign({ele:t,type:"hit",color:"rgba(0, 0, 0, 0.15)"},a),l=i.ele;if(l){l.style.position="relative",l.style.overflow="hidden";var o=l.getBoundingClientRect(),s=l.querySelector(".waves-ripple");switch(s?s.className="waves-ripple":(s=document.createElement("span"),s.className="waves-ripple",s.style.height=s.style.width=Math.max(o.width,o.height)+"px",l.appendChild(s)),i.type){case"center":s.style.top=o.height/2-s.offsetHeight/2+"px",s.style.left=o.width/2-s.offsetWidth/2+"px";break;default:s.style.top=(n.pageY-o.top-s.offsetHeight/2-document.documentElement.scrollTop||document.body.scrollTop)+"px",s.style.left=(n.pageX-o.left-s.offsetWidth/2-document.documentElement.scrollLeft||document.body.scrollLeft)+"px"}return s.style.backgroundColor=i.color,s.className="waves-ripple z-active",!1}}return t[a]?t[a].removeHandle=n:t[a]={removeHandle:n},n}var l={bind:function(t,e){t.addEventListener("click",i(t,e),!1)},update:function(t,e){t.removeEventListener("click",t[a].removeHandle,!1),t.addEventListener("click",i(t,e),!1)},unbind:function(t){t.removeEventListener("click",t[a].removeHandle,!1),t[a]=null,delete t[a]}},o=function(t){t.directive("waves",l)};window.Vue&&(window.waves=l,Vue.use(o)),l.install=o;e["a"]=l},"8d41":function(t,e,n){},b36cf:function(t,e,n){},dd71:function(t,e,n){"use strict";n.d(e,"c",(function(){return i})),n.d(e,"d",(function(){return l})),n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return s}));var a=n("b775");function i(t){return Object(a["a"])({url:"/hippo4j/v1/cs/tenant/query/page",method:"post",data:t})}function l(t){return Object(a["a"])({url:"/hippo4j/v1/cs/tenant/update",method:"post",data:t})}function o(t){return Object(a["a"])({url:"/hippo4j/v1/cs/tenant/save",method:"post",data:t})}function s(t){return Object(a["a"])({url:"/hippo4j/v1/cs/tenant/delete/"+t,method:"delete"})}},fe41:function(t,e,n){"use strict";n("b36cf")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-a7c68c10.ca6856ab.js b/hippo4j-console/src/main/resources/static/static/js/chunk-a7c68c10.ca6856ab.js deleted file mode 100644 index 980ce5b1..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-a7c68c10.ca6856ab.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-a7c68c10"],{"076b":function(t,e,a){"use strict";a("a8ed")},"3f2c":function(t,e,a){"use strict";a.r(e);var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.show?a("div",{staticClass:"dashboard-editor-container"},[a("panel-group",{attrs:{countSucTotal:t.countSucTotal,countRunningTotal:t.countRunningTotal,countFailTotal:t.countFailTotal},on:{handleSetLineChartData:t.handleSetLineChartData}}),t._v(" "),a("el-row",{staticStyle:{background:"#fff",padding:"16px 16px 0","margin-bottom":"32px"}},[a("line-chart",{attrs:{"chart-data":t.lineChartData}})],1),t._v(" "),a("el-row",{attrs:{gutter:32}})],1):t._e()},i=[],r=(a("96cf"),a("3b8d")),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-row",{staticClass:"panel-group",attrs:{gutter:80}},[a("el-col",{staticClass:"card-panel-col",attrs:{xs:16,sm:16,lg:8}},[a("div",{staticClass:"card-panel",on:{click:function(e){return t.handleSetLineChartData("chartInfo")}}},[a("div",{staticClass:"card-panel-icon-wrapper icon-people"},[a("svg-icon",{attrs:{"icon-class":"tenant_logo","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n 租户\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.successCount,duration:2600}})],1)])]),t._v(" "),a("el-col",{staticClass:"card-panel-col",attrs:{xs:16,sm:16,lg:8}},[a("div",{staticClass:"card-panel"},[a("div",{staticClass:"card-panel-icon-wrapper icon-message"},[a("svg-icon",{attrs:{"icon-class":"item_logo","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n 项目\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.failCount,duration:3e3}})],1)])]),t._v(" "),a("el-col",{staticClass:"card-panel-col",attrs:{xs:16,sm:16,lg:8}},[a("div",{staticClass:"card-panel"},[a("div",{staticClass:"card-panel-icon-wrapper icon-money"},[a("svg-icon",{attrs:{"icon-class":"threadpool_logo","class-name":"card-panel-icon"}})],1),t._v(" "),a("div",{staticClass:"card-panel-description"},[a("div",{staticClass:"card-panel-text"},[t._v("\n 线程池\n ")]),t._v(" "),a("count-to",{staticClass:"card-panel-num",attrs:{"start-val":0,"end-val":t.runningCount,duration:3200}})],1)])])],1)},s=[],l=(a("c5f6"),a("ec1b")),c=a.n(l),u={components:{CountTo:c.a},props:{countSucTotal:{type:Number,default:0},countFailTotal:{type:Number,default:0},countRunningTotal:{type:Number,default:0}},data:function(){return{successCount:this.countSucTotal,failCount:this.countFailTotal,runningCount:this.countRunningTotal}},methods:{handleSetLineChartData:function(t){this.$emit("handleSetLineChartData",t)}}},d=u,h=(a("076b"),a("2877")),f=Object(h["a"])(d,o,s,!1,null,"36757f12",null),p=f.exports,m=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:t.className,style:{height:t.height,width:t.width}})},v=[],y=a("313e"),b=a.n(y),g=a("ed08"),w={data:function(){return{$_sidebarElm:null}},mounted:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},beforeDestroy:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},activated:function(){this.$_initResizeEvent(),this.$_initSidebarResizeEvent()},deactivated:function(){this.$_destroyResizeEvent(),this.$_destroySidebarResizeEvent()},methods:{$_resizeHandler:function(){var t=this;return Object(g["b"])((function(){t.chart&&t.chart.resize()}),100)()},$_initResizeEvent:function(){window.addEventListener("resize",this.$_resizeHandler)},$_destroyResizeEvent:function(){window.removeEventListener("resize",this.$_resizeHandler)},$_sidebarResizeHandler:function(t){"width"===t.propertyName&&this.$_resizeHandler()},$_initSidebarResizeEvent:function(){this.$_sidebarElm=document.getElementsByClassName("sidebar-container")[0],this.$_sidebarElm&&this.$_sidebarElm.addEventListener("transitionend",this.$_sidebarResizeHandler)},$_destroySidebarResizeEvent:function(){this.$_sidebarElm&&this.$_sidebarElm.removeEventListener("transitionend",this.$_sidebarResizeHandler)}}};a("817d");var S={mixins:[w],props:{className:{type:String,default:"chart"},width:{type:String,default:"100%"},height:{type:String,default:"350px"},autoResize:{type:Boolean,default:!0},chartData:{type:Object,required:!0}},data:function(){return{chart:null}},watch:{chartData:{deep:!0,handler:function(t){this.setOptions(t)}}},mounted:function(){var t=this;this.$nextTick((function(){t.initChart()}))},beforeDestroy:function(){this.chart&&(this.chart.dispose(),this.chart=null)},methods:{initChart:function(){this.chart=b.a.init(this.$el,"macarons"),this.setOptions(this.chartData)},setOptions:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.failData,a=t.successData,n=t.dayList;this.chart.setOption({xAxis:{data:n,boundaryGap:!1,axisTick:{show:!1}},grid:{left:10,right:10,bottom:20,top:30,containLabel:!0},tooltip:{trigger:"axis",axisPointer:{type:"cross"},padding:[5,10]},yAxis:{axisTick:{show:!1}},legend:{data:["暂无数据","暂无数据"]},series:[{name:"暂无数据",itemStyle:{normal:{color:"#FF005A",lineStyle:{color:"#FF005A",width:2}}},smooth:!0,type:"line",data:e,animationDuration:2800,animationEasing:"cubicInOut"},{name:"暂无数据",smooth:!0,type:"line",itemStyle:{normal:{color:"#3888fa",lineStyle:{color:"#3888fa",width:2},areaStyle:{color:"#f3f8ff"}}},data:a,animationDuration:2800,animationEasing:"quadraticOut"}]})}}},_=S,C=Object(h["a"])(_,m,v,!1,null,null,null),x=C.exports,V=a("b775");function F(){return Object(V["a"])({url:"/v1/cs/dashboard",method:"get"})}var $={chartInfo:{failData:[],successData:[],dayList:[]}},A={name:"DashboardAdmin",components:{PanelGroup:p,LineChart:x},data:function(){return{lineChartData:$.chartInfo,countSucTotal:0,countRunningTotal:0,countFailTotal:0,show:!1}},created:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.chartInfo();case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{handleSetLineChartData:function(t){console.log("111",t),this.lineChartData=$[t]},chartInfo:function(){var t=this;F().then((function(e){t.show=!0,t.countSucTotal=e.tenantCount,t.countRunningTotal=e.threadPoolCount,t.countFailTotal=e.itemCount}))}}},D=A,T=(a("9173"),Object(h["a"])(D,n,i,!1,null,"79bf050c",null));e["default"]=T.exports},"817d":function(t,e,a){var n,i,r;(function(o,s){i=[e,a("313e")],n=s,r="function"===typeof n?n.apply(e,i):n,void 0===r||(t.exports=r)})(0,(function(t,e){var a=function(t){"undefined"!==typeof console&&console&&console.error&&console.error(t)};if(e){var n=["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],i={color:n,title:{textStyle:{fontWeight:"normal",color:"#008acd"}},visualMap:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{iconStyle:{normal:{borderColor:n[0]}}},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{color:"#008acd",borderColor:"#008acd"},symbol:"emptyCircle",symbolSize:3},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},candlestick:{itemStyle:{color:"#d87a80",color0:"#2ec7c9"},lineStyle:{width:1,color:"#d87a80",color0:"#2ec7c9"},areaStyle:{color:"#2ec7c9",color0:"#b6a2de"}},scatter:{symbol:"circle",symbolSize:4},map:{itemStyle:{color:"#ddd"},areaStyle:{color:"#fe994e"},label:{color:"#d87a80"}},graph:{itemStyle:{color:"#d87a80"},linkStyle:{color:"#2ec7c9"}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}}};e.registerTheme("macarons",i)}else a("ECharts is not Loaded")}))},9173:function(t,e,a){"use strict";a("e1c9")},a8ed:function(t,e,a){},e1c9:function(t,e,a){},ec1b:function(t,e,a){!function(e,a){t.exports=a()}(0,(function(){return function(t){function e(n){if(a[n])return a[n].exports;var i=a[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var a={};return e.m=t,e.c=a,e.i=function(t){return t},e.d=function(t,a,n){e.o(t,a)||Object.defineProperty(t,a,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var a=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(a,"a",a),a},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/dist/",e(e.s=2)}([function(t,e,a){var n=a(4)(a(1),a(5),null,null);t.exports=n.exports},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(3);e.default={props:{startVal:{type:Number,required:!1,default:0},endVal:{type:Number,required:!1,default:2017},duration:{type:Number,required:!1,default:3e3},autoplay:{type:Boolean,required:!1,default:!0},decimals:{type:Number,required:!1,default:0,validator:function(t){return t>=0}},decimal:{type:String,required:!1,default:"."},separator:{type:String,required:!1,default:","},prefix:{type:String,required:!1,default:""},suffix:{type:String,required:!1,default:""},useEasing:{type:Boolean,required:!1,default:!0},easingFn:{type:Function,default:function(t,e,a,n){return a*(1-Math.pow(2,-10*t/n))*1024/1023+e}}},data:function(){return{localStartVal:this.startVal,displayValue:this.formatNumber(this.startVal),printVal:null,paused:!1,localDuration:this.duration,startTime:null,timestamp:null,remaining:null,rAF:null}},computed:{countDown:function(){return this.startVal>this.endVal}},watch:{startVal:function(){this.autoplay&&this.start()},endVal:function(){this.autoplay&&this.start()}},mounted:function(){this.autoplay&&this.start(),this.$emit("mountedCallback")},methods:{start:function(){this.localStartVal=this.startVal,this.startTime=null,this.localDuration=this.duration,this.paused=!1,this.rAF=(0,n.requestAnimationFrame)(this.count)},pauseResume:function(){this.paused?(this.resume(),this.paused=!1):(this.pause(),this.paused=!0)},pause:function(){(0,n.cancelAnimationFrame)(this.rAF)},resume:function(){this.startTime=null,this.localDuration=+this.remaining,this.localStartVal=+this.printVal,(0,n.requestAnimationFrame)(this.count)},reset:function(){this.startTime=null,(0,n.cancelAnimationFrame)(this.rAF),this.displayValue=this.formatNumber(this.startVal)},count:function(t){this.startTime||(this.startTime=t),this.timestamp=t;var e=t-this.startTime;this.remaining=this.localDuration-e,this.useEasing?this.countDown?this.printVal=this.localStartVal-this.easingFn(e,0,this.localStartVal-this.endVal,this.localDuration):this.printVal=this.easingFn(e,this.localStartVal,this.endVal-this.localStartVal,this.localDuration):this.countDown?this.printVal=this.localStartVal-(this.localStartVal-this.endVal)*(e/this.localDuration):this.printVal=this.localStartVal+(this.localStartVal-this.startVal)*(e/this.localDuration),this.countDown?this.printVal=this.printValthis.endVal?this.endVal:this.printVal,this.displayValue=this.formatNumber(this.printVal),e1?this.decimal+e[1]:"",i=/(\d+)(\d{3})/;if(this.separator&&!this.isNumber(this.separator))for(;i.test(a);)a=a.replace(i,"$1"+this.separator+"$2");return this.prefix+a+n+this.suffix}},destroyed:function(){(0,n.cancelAnimationFrame)(this.rAF)}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(0),i=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=i.default,"undefined"!=typeof window&&window.Vue&&window.Vue.component("count-to",i.default)},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=0,i="webkit moz ms o".split(" "),r=void 0,o=void 0;if("undefined"==typeof window)e.requestAnimationFrame=r=function(){},e.cancelAnimationFrame=o=function(){};else{e.requestAnimationFrame=r=window.requestAnimationFrame,e.cancelAnimationFrame=o=window.cancelAnimationFrame;for(var s=void 0,l=0;l0,expression:"total>0"}],attrs:{total:e.total,page:e.listQuery.current,limit:e.listQuery.size},on:{"update:page":function(t){return e.$set(e.listQuery,"current",t)},"update:limit":function(t){return e.$set(e.listQuery,"size",t)},pagination:e.fetchData}}),e._v(" "),n("el-dialog",{attrs:{title:e.textMap[e.dialogStatus],visible:e.dialogFormVisible,width:"800px"},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[n("el-form",{ref:"dataForm",attrs:{rules:e.rules,model:e.temp,"label-position":"left","label-width":"100px"}},[n("el-form-item",{attrs:{label:"租户ID",prop:"tenantId"}},[n("el-select",{staticClass:"filter-item",staticStyle:{width:"40%"},attrs:{placeholder:"租户ID",filterable:"",clearable:"",disabled:"create"!==e.dialogStatus},model:{value:e.temp.tenantId,callback:function(t){e.$set(e.temp,"tenantId",t)},expression:"temp.tenantId"}},e._l(e.tenantOptions,(function(e){return n("el-option",{key:e.key,attrs:{label:e.display_name,value:e.key}})})),1)],1),e._v(" "),n("el-form-item",{attrs:{label:"项目ID",prop:"itemId"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{disabled:"create"!==e.dialogStatus,placeholder:"项目ID"},model:{value:e.temp.itemId,callback:function(t){e.$set(e.temp,"itemId",t)},expression:"temp.itemId"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"项目名称",prop:"itemName"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"项目名称"},model:{value:e.temp.itemName,callback:function(t){e.$set(e.temp,"itemName",t)},expression:"temp.itemName"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"OWNER",prop:"owner"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{placeholder:"OWNER"},model:{value:e.temp.owner,callback:function(t){e.$set(e.temp,"owner",t)},expression:"temp.owner"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"项目描述",prop:"itemDesc"}},[n("el-input",{staticStyle:{width:"40%"},attrs:{autosize:{minRows:3,maxRows:6},type:"textarea",placeholder:"项目描述"},model:{value:e.temp.itemDesc,callback:function(t){e.$set(e.temp,"itemDesc",t)},expression:"temp.itemDesc"}})],1)],1),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{on:{click:function(t){e.dialogFormVisible=!1}}},[e._v("\n 取消\n ")]),e._v(" "),n("el-button",{attrs:{type:"primary"},on:{click:function(t){"create"===e.dialogStatus?e.createData():e.updateData()}}},[e._v("\n 确认\n ")])],1)],1),e._v(" "),n("el-dialog",{attrs:{visible:e.dialogPluginVisible,title:"Reading statistics"},on:{"update:visible":function(t){e.dialogPluginVisible=t}}},[n("el-table",{staticStyle:{width:"100%"},attrs:{data:e.pluginData,border:"",fit:"","highlight-current-row":""}},[n("el-table-column",{attrs:{prop:"key",label:"Channel"}}),e._v(" "),n("el-table-column",{attrs:{prop:"pv",label:"Pv"}})],1),e._v(" "),n("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(t){e.dialogPvVisible=!1}}},[e._v("Confirm")])],1)],1)],1)},i=[],l=n("3737"),r=n("dd71"),o=n("6724"),s=n("333d"),u={name:"JobProject",components:{Pagination:s["a"]},directives:{waves:o["a"]},filters:{statusFilter:function(e){var t={published:"success",draft:"gray",deleted:"danger"};return t[e]},ellipsis:function(e){return e?e.length>26?e.slice(0,26)+"...":e:""}},data:function(){return{list:null,listLoading:!0,total:0,listQuery:{current:1,size:10,itemId:""},pluginTypeOptions:["reader","writer"],dialogPluginVisible:!1,pluginData:[],dialogFormVisible:!1,tenantOptions:[],dialogStatus:"",textMap:{update:"Edit",create:"Create"},rules:{tenantId:[{required:!0,message:"this is required",trigger:"blur"}],itemId:[{required:!0,message:"this is required",trigger:"blur"}],itemName:[{required:!0,message:"this is required",trigger:"blur"}],owner:[{required:!0,message:"this is required",trigger:"blur"}],itemDesc:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",tenantName:"",owner:"",tenantDesc:""},visible:!0}},created:function(){this.fetchData(),this.initSelect()},methods:{fetchData:function(){var e=this;this.listLoading=!0,l["c"](this.listQuery).then((function(t){var n=t.records,a=t.total;e.total=a,e.list=n,e.listLoading=!1}))},initSelect:function(){var e=this;r["c"]({}).then((function(t){for(var n=t.records,a=0;a0&&void 0!==arguments[0]?arguments[0]:{},n=t.shiftKey,e=t.key;e&&1===e.length&&(this.capsTooltip=!!(n&&e>="a"&&e<="z"||!n&&e>="A"&&e<="Z")),"CapsLock"===e&&!0===this.capsTooltip&&(this.capsTooltip=!1)},showPwd:function(){var t=this;"password"===this.passwordType?this.passwordType="":this.passwordType="password",this.$nextTick((function(){t.$refs.password.focus()}))},handleLogin:function(){var t=this;this.$refs.loginForm.validate((function(n){if(!n)return console.log("error submit."),!1;t.loading=!0,t.$store.dispatch("user/login",t.loginForm).then((function(){t.$cookie.set("userName",t.loginForm.username),console.log("success submit."),t.$router.push({path:t.redirect||"/",query:t.otherQuery}),t.loading=!1})).catch((function(){console.log("error catch."),t.loading=!1}))}))},getOtherQuery:function(t){return Object.keys(t).reduce((function(n,e){return"redirect"!==e&&(n[e]=t[e]),n}),{})}}},h=d,g=(e("2017"),e("1494"),Object(l["a"])(h,s,o,!1,null,"0189cd00",null));n["default"]=g.exports},b12d:function(t,n,e){},d9fb:function(t,n,e){"use strict";e("9067")}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-ef888edc.611f049e.js b/hippo4j-console/src/main/resources/static/static/js/chunk-ef888edc.611f049e.js new file mode 100644 index 00000000..87e1faae --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-ef888edc.611f049e.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-ef888edc"],{"24e2":function(t,a,i){"use strict";i.r(a);var e=function(){var t=this,a=t.$createElement,i=t._self._c||a;return i("div",{staticClass:"errPage-container"},[i("el-button",{staticClass:"pan-back-btn",attrs:{icon:"arrow-left"},on:{click:t.back}},[t._v("\n 返回\n ")]),t._v(" "),i("el-row",[i("el-col",{attrs:{span:12}},[i("h1",{staticClass:"text-jumbo text-ginormous"},[t._v("\n Oops!\n ")]),t._v("\n gif来源"),i("a",{attrs:{href:"https://zh.airbnb.com/",target:"_blank"}},[t._v("airbnb")]),t._v(" 页面\n "),i("h2",[t._v("你没有权限去该页面")]),t._v(" "),i("h6",[t._v("如有不满请联系你领导")]),t._v(" "),i("ul",{staticClass:"list-unstyled"},[i("li",[t._v("或者你可以去:")]),t._v(" "),i("li",{staticClass:"link-type"},[i("router-link",{attrs:{to:"/dashboard"}},[t._v("\n 回首页\n ")])],1),t._v(" "),i("li",{staticClass:"link-type"},[i("a",{attrs:{href:"https://www.taobao.com/"}},[t._v("随便看看")])]),t._v(" "),i("li",[i("a",{attrs:{href:"#"},on:{click:function(a){a.preventDefault(),t.dialogVisible=!0}}},[t._v("点我看图")])])])]),t._v(" "),i("el-col",{attrs:{span:12}},[i("img",{attrs:{src:t.errGif,width:"313",height:"428",alt:"Girl has dropped her ice cream."}})])],1),t._v(" "),i("el-dialog",{attrs:{visible:t.dialogVisible,title:"随便看"},on:{"update:visible":function(a){t.dialogVisible=a}}},[i("img",{staticClass:"pan-img",attrs:{src:t.ewizardClap}})])],1)},s=[],n=i("cc6c"),r=i.n(n),l={name:"Page401",data:function(){return{errGif:r.a+"?"+ +new Date,ewizardClap:"https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646",dialogVisible:!1}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/dashboard"}):this.$router.go(-1)}}},c=l,o=(i("6f5a"),i("2877")),u=Object(o["a"])(c,e,s,!1,null,"6fb1594e",null);a["default"]=u.exports},"6f5a":function(t,a,i){"use strict";i("a68a")},a68a:function(t,a,i){},cc6c:function(t,a,i){t.exports=i.p+"static/img/401.089007e7.gif"}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.04171b28.js b/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.04171b28.js deleted file mode 100644 index dae7acfe..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.04171b28.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-elementUI"],{"12f2":function(e,t,i){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},"14e9":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=132)}({132:function(e,t,i){"use strict";i.r(t);var n=i(16),s=i(38),r=i.n(s),a=i(3),o=i(2),l={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function c(e){var t=e.move,i=e.size,n=e.bar,s={},r="translate"+n.axis+"("+t+"%)";return s[n.size]=i,s.transform=r,s.msTransform=r,s.webkitTransform=r,s}var u={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return l[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,i=this.move,n=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+n.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:c({size:t,move:i,bar:n})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]/2,n=100*(t-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=n*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(o["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(o["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var i=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]-t,s=100*(i-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=s*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(o["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(o["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},h={name:"ElScrollbar",components:{Bar:u},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=r()(),i=this.wrapStyle;if(t){var n="-"+t+"px",s="margin-bottom: "+n+"; margin-right: "+n+";";Array.isArray(this.wrapStyle)?(i=Object(a["toObject"])(this.wrapStyle),i.marginRight=i.marginBottom=n):"string"===typeof this.wrapStyle?i+=s:i=s}var o=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),l=e("div",{ref:"wrap",style:i,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[o]]),c=void 0;return c=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:i},[[o]])]:[l,e(u,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(u,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},c)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,i=this.wrap;i&&(e=100*i.clientHeight/i.scrollHeight,t=100*i.clientWidth/i.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(n["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(n["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(h.name,h)}};t["default"]=h},16:function(e,t){e.exports=i("4010")},2:function(e,t){e.exports=i("5924")},3:function(e,t){e.exports=i("8122")},38:function(e,t){e.exports=i("e62d")}})},"299c":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=140)}({140:function(e,t,i){"use strict";i.r(t);var n=i(5),s=i.n(n),r=i(18),a=i.n(r),o=i(2),l=i(3),c=i(7),u=i.n(c),h={name:"ElTooltip",mixins:[s.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new u.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var i=this.getFirstElement();if(!i)return null;var n=i.data=i.data||{};return n.staticClass=this.addTooltipClass(n.staticClass),i},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(o["on"])(this.referenceElm,"mouseenter",this.show),Object(o["on"])(this.referenceElm,"mouseleave",this.hide),Object(o["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(o["on"])(this.referenceElm,"blur",this.handleBlur),Object(o["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(o["addClass"])(this.referenceElm,"focusing"):Object(o["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,i=0;il&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"2bb5":function(e,t,i){"use strict";t.__esModule=!0;i("8122");t.default={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}}},4010:function(e,t,i){"use strict";t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var n=i("6dd8"),s=r(n);function r(e){return e&&e.__esModule?e:{default:e}}var a="undefined"===typeof window,o=function(e){var t=e,i=Array.isArray(t),n=0;for(t=i?t:t[Symbol.iterator]();;){var s;if(i){if(n>=t.length)break;s=t[n++]}else{if(n=t.next(),n.done)break;s=n.value}var r=s,a=r.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){a||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new s.default(o),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"417f":function(e,t,i){"use strict";t.__esModule=!0;var n=i("2b0e"),s=a(n),r=i("5924");function a(e){return e&&e.__esModule?e:{default:e}}var o=[],l="@@clickoutsideContext",c=void 0,u=0;function h(e,t,i){return function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(i&&i.context&&n.target&&s.target)||e.contains(n.target)||e.contains(s.target)||e===n.target||i.context.popperElm&&(i.context.popperElm.contains(n.target)||i.context.popperElm.contains(s.target))||(t.expression&&e[l].methodName&&i.context[e[l].methodName]?i.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!s.default.prototype.$isServer&&(0,r.on)(document,"mousedown",(function(e){return c=e})),!s.default.prototype.$isServer&&(0,r.on)(document,"mouseup",(function(e){o.forEach((function(t){return t[l].documentHandler(e,c)}))})),t.default={bind:function(e,t,i){o.push(e);var n=u++;e[l]={id:n,documentHandler:h(e,t,i),methodName:t.expression,bindingFn:t.value}},update:function(e,t,i){e[l].documentHandler=h(e,t,i),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=o.length,i=0;i\n \n '}else i||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,i=this.panel.isHoverMenu,n={on:{}};i&&(n.on.expand=this.handleExpand);var s=this.nodes.map((function(i,s){var r=i.hasChildren;return e("cascader-node",l()([{key:i.uid,attrs:{node:i,"node-id":t+"-"+s,"aria-haspopup":r,"aria-owns":r?t:null}},n]))}));return[].concat(s,[i?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,i=this.menuId,n={nativeOn:{}};return this.panel.isHoverMenu&&(n.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:i,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},n]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},$=D,O=Object(y["a"])($,x,C,!1,null,null,null);O.options.__file="packages/cascader-panel/src/cascader-menu.vue";var E=O.exports,T=i(21),P=function(){function e(e,t){for(var i=0;i1?t-1:0),n=1;n1?n-1:0),r=1;r0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),i=this.isSameNode(e,t);this.doCheck(i)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},P(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,i=this.config,n=i.disabled,s=i.checkStrictly;return e[n]||!s&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,i=this.hasChildren,n=this.children,s=this.config,r=s.lazy,a=s.leaf;if(r){var o=Object(T["isDef"])(e[a])?e[a]:!!t&&!n.length;return this.hasChildren=!o,o}return!i}}]),e}(),j=I;function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var L=function e(t,i){return t.reduce((function(t,n){return n.isLeaf?t.push(n):(!i&&t.push(n),t=t.concat(e(n.children,i))),t}),[])},A=function(){function e(t,i){F(this,e),this.config=i,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(m["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new j(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var i=new j(e,this.config,t),n=t?t.children:this.nodes;n.push(i)},e.prototype.appendNodes=function(e,t){var i=this;e=Object(m["coerceTruthyValueToArray"])(e),e.forEach((function(e){return i.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e?this.leafNodes:this.flattedNodes;return t?i:L(this.nodes,e)},e.prototype.getNodeByValue=function(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(m["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null},e}(),V=A,B=i(9),z=i.n(B),R=i(40),H=i.n(R),W=i(31),q=i.n(W),Y=Object.assign||function(e){for(var t=1;t0){var l=i.store.getNodeByValue(r);l.data[o]||i.lazyLoad(l,(function(){i.handleExpand(l)})),i.loadCount===i.checkedValue.length&&i.$parent.computePresentText()}}t&&t(n)};n.lazyLoad(e,s)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var i=t.querySelector(".el-scrollbar__wrap"),n=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");q()(i,n)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,i=this.multiple;if(i){var n=this.getFlattedNodes(e);return n.filter((function(e){return e.checked}))}return this.isEmptyValue(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,i=e.multiple,n=e.emitPath;i?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=n?[]:null}}},te=ee,ie=Object(y["a"])(te,n,s,!1,null,null,null);ie.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ne=ie.exports;ne.install=function(e){e.component(ne.name,ne)};t["default"]=ne},6:function(e,t){e.exports=i("6b7c")},9:function(e,t){e.exports=i("7f4d")}})},4897:function(e,t,i){"use strict";t.__esModule=!0,t.i18n=t.use=t.t=void 0;var n=i("f0d9"),s=h(n),r=i("2b0e"),a=h(r),o=i("3c4e"),l=h(o),c=i("9d7e"),u=h(c);function h(e){return e&&e.__esModule?e:{default:e}}var d=(0,u.default)(a.default),p=s.default,f=!1,m=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return f||(f=!0,a.default.locale(a.default.config.lang,(0,l.default)(p,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},v=t.t=function(e,t){var i=m.apply(this,arguments);if(null!==i&&void 0!==i)return i;for(var n=e.split("."),s=p,r=0,a=n.length;r0){var n=t[t.length-1];if(n.id===e){if(n.modalClass){var s=n.modalClass.trim().split(/\s+/);s.forEach((function(e){return(0,r.removeClass)(i,e)}))}t.pop(),t.length>0&&(i.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,r.addClass)(i,"v-modal-leave"),setTimeout((function(){0===t.length&&(i.parentNode&&i.parentNode.removeChild(i),i.style.display="none",d.modalDom=void 0),(0,r.removeClass)(i,"v-modal-leave")}),200))}};Object.defineProperty(d,"zIndex",{configurable:!0,get:function(){return l||(c=c||(s.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),c},set:function(e){c=e}});var p=function(){if(!s.default.prototype.$isServer&&d.modalStack.length>0){var e=d.modalStack[d.modalStack.length-1];if(!e)return;var t=d.getInstance(e.id);return t}};s.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=p();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=d},"4e4b":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=61)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},10:function(e,t){e.exports=i("f3ad")},12:function(e,t){e.exports=i("417f")},15:function(e,t){e.exports=i("14e9")},16:function(e,t){e.exports=i("4010")},18:function(e,t){e.exports=i("0e15")},21:function(e,t){e.exports=i("d397")},22:function(e,t){e.exports=i("12f2")},3:function(e,t){e.exports=i("8122")},31:function(e,t){e.exports=i("2a5e")},33:function(e,t,i){"use strict";var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[i("span",[e._v(e._s(e.currentLabel))])])],2)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(o["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/select/src/option.vue";t["a"]=d.exports},37:function(e,t){e.exports=i("8bbc")},4:function(e,t){e.exports=i("d010")},5:function(e,t){e.exports=i("e974")},6:function(e,t){e.exports=i("6b7c")},61:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?i("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?i("span",[i("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?i("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[i("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():i("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return i("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(i){e.deleteTag(i,t)}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?i("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),i("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.debouncedOnInputChange},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),i("template",{slot:"suffix"},[i("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?i("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[i("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?i("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):i("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(22),l=i.n(o),c=i(6),u=i.n(c),h=i(10),d=i.n(h),p=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},f=[];p._withStripped=!0;var m=i(5),v=i.n(m),g={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[v.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},b=g,y=i(0),_=Object(y["a"])(b,p,f,!1,null,null,null);_.options.__file="packages/select/src/select-dropdown.vue";var x=_.exports,C=i(33),w=i(37),k=i.n(w),S=i(15),D=i.n(S),$=i(18),O=i.n($),E=i(12),T=i.n(E),P=i(16),M=i(31),N=i.n(M),I=i(3),j={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var i=this.options[this.hoverIndex];!0!==i.disabled&&!0!==i.groupDisabled&&i.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},F=i(21),L={mixins:[a.a,u.a,l()("reference"),j],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(I["isIE"])()&&!Object(I["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"},propPlaceholder:function(){return"undefined"!==typeof this.placeholder?this.placeholder:this.t("el.select.placeholder")}},components:{ElInput:d.a,ElSelectMenu:x,ElOption:C["a"],ElTag:k.a,ElScrollbar:D.a},directives:{Clickoutside:T.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,required:!1},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},propPlaceholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(I["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,i=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(i)}));else{var n=i[i.length-1]||"";this.isOnComposition=!Object(F["isKorean"])(n)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var i=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");N()(i,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(I["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,i="[object object]"===Object.prototype.toString.call(e).toLowerCase(),n="[object null]"===Object.prototype.toString.call(e).toLowerCase(),s="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),r=this.cachedOptions.length-1;r>=0;r--){var a=this.cachedOptions[r],o=i?Object(I["getValueByPath"])(a.value,this.valueKey)===Object(I["getValueByPath"])(e,this.valueKey):a.value===e;if(o){t=a;break}}if(t)return t;var l=i||n||s?"":String(e),c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var i=[];Array.isArray(this.value)&&this.value.forEach((function(t){i.push(e.getOption(t))})),this.selected=i,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,i=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],n=e.$refs.tags,s=n?Math.round(n.getBoundingClientRect().height):0,r=e.initialInputHeight||40;i.style.height=0===e.selected.length?r+"px":Math.max(n?s+(s>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var i=this;if(this.multiple){var n=(this.value||[]).slice(),s=this.getValueIndex(n,e.value);s>-1?n.splice(s,1):(this.multipleLimit<=0||n.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],i="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(i){var n=this.valueKey,s=-1;return e.some((function(e,i){return Object(I["getValueByPath"])(e,n)===Object(I["getValueByPath"])(t,n)&&(s=i,!0)})),s}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var i=this.selected.indexOf(t);if(i>-1&&!this.selectDisabled){var n=this.value.slice();n.splice(i,1),this.$emit("input",n),this.emitChange(n),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var i=0;i!==this.options.length;++i){var n=this.options[i];if(this.query){if(!n.disabled&&!n.groupDisabled&&n.visible){this.hoverIndex=i;break}}else if(n.itemSelected){this.hoverIndex=i;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(I["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.propPlaceholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=O()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=O()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(P["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var i={medium:36,small:32,mini:28},n=t.$el.querySelector("input");this.initialInputHeight=n.getBoundingClientRect().height||i[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(P["removeResizeListener"])(this.$el,this.handleResize)}},A=L,V=Object(y["a"])(A,n,s,!1,null,null,null);V.options.__file="packages/select/src/select.vue";var B=V.exports;B.install=function(e){e.component(B.name,B)};t["default"]=B}})},5128:function(e,t,i){"use strict";t.__esModule=!0,t.PopupManager=void 0;var n=i("2b0e"),s=d(n),r=i("7f4d"),a=d(r),o=i("4b26"),l=d(o),c=i("e62d"),u=d(c),h=i("5924");function d(e){return e&&e.__esModule?e:{default:e}}var p=1,f=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+p++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,s.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var i=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var n=Number(i.openDelay);n>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(i)}),n):this.doOpen(i)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,i=e.modal,n=e.zIndex;if(n&&(l.default.zIndex=n),i&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,h.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,h.getStyle)(document.body,"paddingRight"),10)),f=(0,u.default)();var s=document.documentElement.clientHeight0&&(s||"scroll"===r)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+f+"px"),(0,h.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,h.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},5488:function(e,t,i){"use strict";t.__esModule=!0;var n=i("5924");function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(){s(this,e)}return e.prototype.beforeEnter=function(e){(0,n.addClass)(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0},e.prototype.enter=function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"},e.prototype.afterEnter=function(e){(0,n.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow},e.prototype.beforeLeave=function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"},e.prototype.leave=function(e){0!==e.scrollHeight&&((0,n.addClass)(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)},e.prototype.afterLeave=function(e){(0,n.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom},e}();t.default={name:"ElCollapseTransition",functional:!0,render:function(e,t){var i=t.children,n={on:new r};return e("transition",n,i)}}},5924:function(e,t,i){"use strict";t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.hasClass=m,t.addClass=v,t.removeClass=g,t.setStyle=y;var s=i("2b0e"),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}var o=r.default.prototype.$isServer,l=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/,u=o?0:Number(document.documentMode),h=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},d=function(e){return e.replace(l,(function(e,t,i,n){return n?i.toUpperCase():i})).replace(c,"Moz$1")},p=t.on=function(){return!o&&document.addEventListener?function(e,t,i){e&&t&&i&&e.addEventListener(t,i,!1)}:function(e,t,i){e&&t&&i&&e.attachEvent("on"+t,i)}}(),f=t.off=function(){return!o&&document.removeEventListener?function(e,t,i){e&&t&&e.removeEventListener(t,i,!1)}:function(e,t,i){e&&t&&e.detachEvent("on"+t,i)}}();t.once=function(e,t,i){var n=function n(){i&&i.apply(this,arguments),f(e,t,n)};p(e,t,n)};function m(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function v(e,t){if(e){for(var i=e.className,n=(t||"").split(" "),s=0,r=n.length;sn.top&&i.right>n.left&&i.left0?i("li",{staticClass:"number",class:{active:1===e.currentPage,disabled:e.disabled}},[e._v("1")]):e._e(),e.showPrevMore?i("li",{staticClass:"el-icon more btn-quickprev",class:[e.quickprevIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("left")},mouseleave:function(t){e.quickprevIconClass="el-icon-more"}}}):e._e(),e._l(e.pagers,(function(t){return i("li",{key:t,staticClass:"number",class:{active:e.currentPage===t,disabled:e.disabled}},[e._v(e._s(t))])})),e.showNextMore?i("li",{staticClass:"el-icon more btn-quicknext",class:[e.quicknextIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("right")},mouseleave:function(t){e.quicknextIconClass="el-icon-more"}}}):e._e(),e.pageCount>1?i("li",{staticClass:"number",class:{active:e.currentPage===e.pageCount,disabled:e.disabled}},[e._v(e._s(e.pageCount))]):e._e()],2)},s=[];n._withStripped=!0;var r={name:"ElPager",props:{currentPage:Number,pageCount:Number,pagerCount:Number,disabled:Boolean},watch:{showPrevMore:function(e){e||(this.quickprevIconClass="el-icon-more")},showNextMore:function(e){e||(this.quicknextIconClass="el-icon-more")}},methods:{onPagerClick:function(e){var t=e.target;if("UL"!==t.tagName&&!this.disabled){var i=Number(e.target.textContent),n=this.pageCount,s=this.currentPage,r=this.pagerCount-2;-1!==t.className.indexOf("more")&&(-1!==t.className.indexOf("quickprev")?i=s-r:-1!==t.className.indexOf("quicknext")&&(i=s+r)),isNaN(i)||(i<1&&(i=1),i>n&&(i=n)),i!==s&&this.$emit("change",i)}},onMouseenter:function(e){this.disabled||("left"===e?this.quickprevIconClass="el-icon-d-arrow-left":this.quicknextIconClass="el-icon-d-arrow-right")}},computed:{pagers:function(){var e=this.pagerCount,t=(e-1)/2,i=Number(this.currentPage),n=Number(this.pageCount),s=!1,r=!1;n>e&&(i>e-t&&(s=!0),i4&&e<22&&e%2===1},default:7},currentPage:{type:Number,default:1},layout:{default:"prev, pager, next, jumper, ->, total"},pageSizes:{type:Array,default:function(){return[10,20,30,40,50,100]}},popperClass:String,prevText:String,nextText:String,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean},data:function(){return{internalCurrentPage:1,internalPageSize:0,lastEmittedPage:-1,userChangePageSize:!1}},render:function(e){var t=this.layout;if(!t)return null;if(this.hideOnSinglePage&&(!this.internalPageCount||1===this.internalPageCount))return null;var i=e("div",{class:["el-pagination",{"is-background":this.background,"el-pagination--small":this.small}]}),n={prev:e("prev"),jumper:e("jumper"),pager:e("pager",{attrs:{currentPage:this.internalCurrentPage,pageCount:this.internalPageCount,pagerCount:this.pagerCount,disabled:this.disabled},on:{change:this.handleCurrentChange}}),next:e("next"),sizes:e("sizes",{attrs:{pageSizes:this.pageSizes}}),slot:e("slot",[this.$slots.default?this.$slots.default:""]),total:e("total")},s=t.split(",").map((function(e){return e.trim()})),r=e("div",{class:"el-pagination__rightwrapper"}),a=!1;return i.children=i.children||[],r.children=r.children||[],s.forEach((function(e){"->"!==e?a?r.children.push(n[e]):i.children.push(n[e]):a=!0})),a&&i.children.unshift(r),i},components:{Prev:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage<=1},class:"btn-prev",on:{click:this.$parent.prev}},[this.$parent.prevText?e("span",[this.$parent.prevText]):e("i",{class:"el-icon el-icon-arrow-left"})])}},Next:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage===this.$parent.internalPageCount||0===this.$parent.internalPageCount},class:"btn-next",on:{click:this.$parent.next}},[this.$parent.nextText?e("span",[this.$parent.nextText]):e("i",{class:"el-icon el-icon-arrow-right"})])}},Sizes:{mixins:[g.a],props:{pageSizes:Array},watch:{pageSizes:{immediate:!0,handler:function(e,t){Object(b["valueEquals"])(e,t)||Array.isArray(e)&&(this.$parent.internalPageSize=e.indexOf(this.$parent.pageSize)>-1?this.$parent.pageSize:this.pageSizes[0])}}},render:function(e){var t=this;return e("span",{class:"el-pagination__sizes"},[e("el-select",{attrs:{value:this.$parent.internalPageSize,popperClass:this.$parent.popperClass||"",size:"mini",disabled:this.$parent.disabled},on:{input:this.handleChange}},[this.pageSizes.map((function(i){return e("el-option",{attrs:{value:i,label:i+t.t("el.pagination.pagesize")}})}))])])},components:{ElSelect:h.a,ElOption:p.a},methods:{handleChange:function(e){e!==this.$parent.internalPageSize&&(this.$parent.internalPageSize=e=parseInt(e,10),this.$parent.userChangePageSize=!0,this.$parent.$emit("update:pageSize",e),this.$parent.$emit("size-change",e))}}},Jumper:{mixins:[g.a],components:{ElInput:m.a},data:function(){return{userInput:null}},watch:{"$parent.internalCurrentPage":function(){this.userInput=null}},methods:{handleKeyup:function(e){var t=e.keyCode,i=e.target;13===t&&this.handleChange(i.value)},handleInput:function(e){this.userInput=e},handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.userInput=null}},render:function(e){return e("span",{class:"el-pagination__jump"},[this.t("el.pagination.goto"),e("el-input",{class:"el-pagination__editor is-in-pagination",attrs:{min:1,max:this.$parent.internalPageCount,value:null!==this.userInput?this.userInput:this.$parent.internalCurrentPage,type:"number",disabled:this.$parent.disabled},nativeOn:{keyup:this.handleKeyup},on:{input:this.handleInput,change:this.handleChange}}),this.t("el.pagination.pageClassifier")])}},Total:{mixins:[g.a],render:function(e){return"number"===typeof this.$parent.total?e("span",{class:"el-pagination__total"},[this.t("el.pagination.total",{total:this.$parent.total})]):""}},Pager:c},methods:{handleCurrentChange:function(e){this.internalCurrentPage=this.getValidCurrentPage(e),this.userChangePageSize=!0,this.emitChange()},prev:function(){if(!this.disabled){var e=this.internalCurrentPage-1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("prev-click",this.internalCurrentPage),this.emitChange()}},next:function(){if(!this.disabled){var e=this.internalCurrentPage+1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("next-click",this.internalCurrentPage),this.emitChange()}},getValidCurrentPage:function(e){e=parseInt(e,10);var t="number"===typeof this.internalPageCount,i=void 0;return t?e<1?i=1:e>this.internalPageCount&&(i=this.internalPageCount):(isNaN(e)||e<1)&&(i=1),(void 0===i&&isNaN(e)||0===i)&&(i=1),void 0===i?e:i},emitChange:function(){var e=this;this.$nextTick((function(){(e.internalCurrentPage!==e.lastEmittedPage||e.userChangePageSize)&&(e.$emit("current-change",e.internalCurrentPage),e.lastEmittedPage=e.internalCurrentPage,e.userChangePageSize=!1)}))}},computed:{internalPageCount:function(){return"number"===typeof this.total?Math.max(1,Math.ceil(this.total/this.internalPageSize)):"number"===typeof this.pageCount?Math.max(1,this.pageCount):null}},watch:{currentPage:{immediate:!0,handler:function(e){this.internalCurrentPage=this.getValidCurrentPage(e)}},pageSize:{immediate:!0,handler:function(e){this.internalPageSize=isNaN(e)?10:e}},internalCurrentPage:{immediate:!0,handler:function(e){this.$emit("update:currentPage",e),this.lastEmittedPage=-1}},internalPageCount:function(e){var t=this.internalCurrentPage;e>0&&0===t?this.internalCurrentPage=1:t>e&&(this.internalCurrentPage=0===e?1:e,this.userChangePageSize&&this.emitChange()),this.userChangePageSize=!1}},install:function(e){e.component(y.name,y)}},_=y,x=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[i("div",{key:e.key,ref:"dialog",class:["el-dialog",{"is-fullscreen":e.fullscreen,"el-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"}},[i("div",{staticClass:"el-dialog__header"},[e._t("title",[i("span",{staticClass:"el-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?i("button",{staticClass:"el-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[i("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?i("div",{staticClass:"el-dialog__body"},[e._t("default")],2):e._e(),e.$slots.footer?i("div",{staticClass:"el-dialog__footer"},[e._t("footer")],2):e._e()])])])},C=[];x._withStripped=!0;var w=i(11),k=i.n(w),S=i(9),D=i.n(S),$=i(3),O=i.n($),E={name:"ElDialog",mixins:[k.a,O.a,D.a],props:{title:{type:String,default:""},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{closed:!1,key:0}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el)):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("ElSelectDropdown","updatePopper"),this.broadcast("ElDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},T=E,P=o(T,x,C,!1,null,null,null);P.options.__file="packages/dialog/src/component.vue";var M=P.exports;M.install=function(e){e.component(M.name,M)};var N=M,I=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.close,expression:"close"}],staticClass:"el-autocomplete",attrs:{"aria-haspopup":"listbox",role:"combobox","aria-expanded":e.suggestionVisible,"aria-owns":e.id}},[i("el-input",e._b({ref:"input",on:{input:e.handleInput,change:e.handleChange,focus:e.handleFocus,blur:e.handleBlur,clear:e.handleClear},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex-1)},function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex+1)},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleKeyEnter(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:e.close(t)}]}},"el-input",[e.$props,e.$attrs],!1),[e.$slots.prepend?i("template",{slot:"prepend"},[e._t("prepend")],2):e._e(),e.$slots.append?i("template",{slot:"append"},[e._t("append")],2):e._e(),e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),e.$slots.suffix?i("template",{slot:"suffix"},[e._t("suffix")],2):e._e()],2),i("el-autocomplete-suggestions",{ref:"suggestions",class:[e.popperClass?e.popperClass:""],attrs:{"visible-arrow":"","popper-options":e.popperOptions,"append-to-body":e.popperAppendToBody,placement:e.placement,id:e.id}},e._l(e.suggestions,(function(t,n){return i("li",{key:n,class:{highlighted:e.highlightedIndex===n},attrs:{id:e.id+"-item-"+n,role:"option","aria-selected":e.highlightedIndex===n},on:{click:function(i){e.select(t)}}},[e._t("default",[e._v("\n "+e._s(t[e.valueKey])+"\n ")],{item:t})],2)})),0)],1)},j=[];I._withStripped=!0;var F=i(16),L=i.n(F),A=i(10),V=i.n(A),B=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-autocomplete-suggestion el-popper",class:{"is-loading":!e.parent.hideLoading&&e.parent.loading},style:{width:e.dropdownWidth},attrs:{role:"region"}},[i("el-scrollbar",{attrs:{tag:"ul","wrap-class":"el-autocomplete-suggestion__wrap","view-class":"el-autocomplete-suggestion__list"}},[!e.parent.hideLoading&&e.parent.loading?i("li",[i("i",{staticClass:"el-icon-loading"})]):e._t("default")],2)],1)])},z=[];B._withStripped=!0;var R=i(5),H=i.n(R),W=i(18),q=i.n(W),Y={components:{ElScrollbar:q.a},mixins:[H.a,O.a],componentName:"ElAutocompleteSuggestions",data:function(){return{parent:this.$parent,dropdownWidth:""}},props:{options:{default:function(){return{gpuAcceleration:!1}}},id:String},methods:{select:function(e){this.dispatch("ElAutocomplete","item-click",e)}},updated:function(){var e=this;this.$nextTick((function(t){e.popperJS&&e.updatePopper()}))},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$refs.input.$refs.input||this.$parent.$refs.input.$refs.textarea,this.referenceList=this.$el.querySelector(".el-autocomplete-suggestion__list"),this.referenceList.setAttribute("role","listbox"),this.referenceList.setAttribute("id",this.id)},created:function(){var e=this;this.$on("visible",(function(t,i){e.dropdownWidth=i+"px",e.showPopper=t}))}},K=Y,U=o(K,B,z,!1,null,null,null);U.options.__file="packages/autocomplete/src/autocomplete-suggestions.vue";var G=U.exports,X=i(23),Z=i.n(X),Q={name:"ElAutocomplete",mixins:[O.a,Z()("input"),D.a],inheritAttrs:!1,componentName:"ElAutocomplete",components:{ElInput:m.a,ElAutocompleteSuggestions:G},directives:{Clickoutside:V.a},props:{valueKey:{type:String,default:"value"},popperClass:String,popperOptions:Object,placeholder:String,clearable:{type:Boolean,default:!1},disabled:Boolean,name:String,size:String,value:String,maxlength:Number,minlength:Number,autofocus:Boolean,fetchSuggestions:Function,triggerOnFocus:{type:Boolean,default:!0},customItem:String,selectWhenUnmatched:{type:Boolean,default:!1},prefixIcon:String,suffixIcon:String,label:String,debounce:{type:Number,default:300},placement:{type:String,default:"bottom-start"},hideLoading:Boolean,popperAppendToBody:{type:Boolean,default:!0},highlightFirstItem:{type:Boolean,default:!1}},data:function(){return{activated:!1,suggestions:[],loading:!1,highlightedIndex:-1,suggestionDisabled:!1}},computed:{suggestionVisible:function(){var e=this.suggestions,t=Array.isArray(e)&&e.length>0;return(t||this.loading)&&this.activated},id:function(){return"el-autocomplete-"+Object(b["generateId"])()}},watch:{suggestionVisible:function(e){var t=this.getInput();t&&this.broadcast("ElAutocompleteSuggestions","visible",[e,t.offsetWidth])}},methods:{getMigratingConfig:function(){return{props:{"custom-item":"custom-item is removed, use scoped slot instead.",props:"props is removed, use value-key instead."}}},getData:function(e){var t=this;this.suggestionDisabled||(this.loading=!0,this.fetchSuggestions(e,(function(e){t.loading=!1,t.suggestionDisabled||(Array.isArray(e)?(t.suggestions=e,t.highlightedIndex=t.highlightFirstItem?0:-1):console.error("[Element Error][Autocomplete]autocomplete suggestions must be an array"))})))},handleInput:function(e){if(this.$emit("input",e),this.suggestionDisabled=!1,!this.triggerOnFocus&&!e)return this.suggestionDisabled=!0,void(this.suggestions=[]);this.debouncedGetData(e)},handleChange:function(e){this.$emit("change",e)},handleFocus:function(e){this.activated=!0,this.$emit("focus",e),this.triggerOnFocus&&this.debouncedGetData(this.value)},handleBlur:function(e){this.$emit("blur",e)},handleClear:function(){this.activated=!1,this.$emit("clear")},close:function(e){this.activated=!1},handleKeyEnter:function(e){var t=this;this.suggestionVisible&&this.highlightedIndex>=0&&this.highlightedIndex=this.suggestions.length&&(e=this.suggestions.length-1);var t=this.$refs.suggestions.$el.querySelector(".el-autocomplete-suggestion__wrap"),i=t.querySelectorAll(".el-autocomplete-suggestion__list li"),n=i[e],s=t.scrollTop,r=n.offsetTop;r+n.scrollHeight>s+t.clientHeight&&(t.scrollTop+=n.scrollHeight),r=0&&this.resetTabindex(this.triggerElm),clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!1}),"click"===this.trigger?0:this.hideTimeout))},handleClick:function(){this.disabled||(this.visible?this.hide():this.show())},handleTriggerKeyDown:function(e){var t=e.keyCode;[38,40].indexOf(t)>-1?(this.removeTabindex(),this.resetTabindex(this.menuItems[0]),this.menuItems[0].focus(),e.preventDefault(),e.stopPropagation()):13===t?this.handleClick():[9,27].indexOf(t)>-1&&this.hide()},handleItemKeyDown:function(e){var t=e.keyCode,i=e.target,n=this.menuItemsArray.indexOf(i),s=this.menuItemsArray.length-1,r=void 0;[38,40].indexOf(t)>-1?(r=38===t?0!==n?n-1:0:n-1&&(this.hide(),this.triggerElmFocus())},resetTabindex:function(e){this.removeTabindex(),e.setAttribute("tabindex","0")},removeTabindex:function(){this.triggerElm.setAttribute("tabindex","-1"),this.menuItemsArray.forEach((function(e){e.setAttribute("tabindex","-1")}))},initAria:function(){this.dropdownElm.setAttribute("id",this.listId),this.triggerElm.setAttribute("aria-haspopup","list"),this.triggerElm.setAttribute("aria-controls",this.listId),this.splitButton||(this.triggerElm.setAttribute("role","button"),this.triggerElm.setAttribute("tabindex",this.tabindex),this.triggerElm.setAttribute("class",(this.triggerElm.getAttribute("class")||"")+" el-dropdown-selfdefine"))},initEvent:function(){var e=this,t=this.trigger,i=this.show,n=this.hide,s=this.handleClick,r=this.splitButton,a=this.handleTriggerKeyDown,o=this.handleItemKeyDown;this.triggerElm=r?this.$refs.trigger.$el:this.$slots.default[0].elm;var l=this.dropdownElm;this.triggerElm.addEventListener("keydown",a),l.addEventListener("keydown",o,!0),r||(this.triggerElm.addEventListener("focus",(function(){e.focusing=!0})),this.triggerElm.addEventListener("blur",(function(){e.focusing=!1})),this.triggerElm.addEventListener("click",(function(){e.focusing=!1}))),"hover"===t?(this.triggerElm.addEventListener("mouseenter",i),this.triggerElm.addEventListener("mouseleave",n),l.addEventListener("mouseenter",i),l.addEventListener("mouseleave",n)):"click"===t&&this.triggerElm.addEventListener("click",s)},handleMenuItemClick:function(e,t){this.hideOnClick&&(this.visible=!1),this.$emit("command",e,t)},triggerElmFocus:function(){this.triggerElm.focus&&this.triggerElm.focus()},initDomOperation:function(){this.dropdownElm=this.popperElm,this.menuItems=this.dropdownElm.querySelectorAll("[tabindex='-1']"),this.menuItemsArray=[].slice.call(this.menuItems),this.initEvent(),this.initAria()}},render:function(e){var t=this,i=this.hide,n=this.splitButton,s=this.type,r=this.dropdownSize,a=this.disabled,o=function(e){t.$emit("click",e),i()},l=null;if(n)l=e("el-button-group",[e("el-button",{attrs:{type:s,size:r,disabled:a},nativeOn:{click:o}},[this.$slots.default]),e("el-button",{ref:"trigger",attrs:{type:s,size:r,disabled:a},class:"el-dropdown__caret-button"},[e("i",{class:"el-dropdown__icon el-icon-arrow-down"})])]);else{l=this.$slots.default;var c=l[0].data||{},u=c.attrs,h=void 0===u?{}:u;a&&!h.disabled&&(h.disabled=!0,c.attrs=h)}var d=a?null:this.$slots.dropdown;return e("div",{class:"el-dropdown",directives:[{name:"clickoutside",value:i}],attrs:{"aria-disabled":a}},[l,d])}},ue=ce,he=o(ue,ie,ne,!1,null,null,null);he.options.__file="packages/dropdown/src/dropdown.vue";var de=he.exports;de.install=function(e){e.component(de.name,de)};var pe=de,fe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("ul",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-dropdown-menu el-popper",class:[e.size&&"el-dropdown-menu--"+e.size]},[e._t("default")],2)])},me=[];fe._withStripped=!0;var ve={name:"ElDropdownMenu",componentName:"ElDropdownMenu",mixins:[H.a],props:{visibleArrow:{type:Boolean,default:!0},arrowOffset:{type:Number,default:0}},data:function(){return{size:this.dropdown.dropdownSize}},inject:["dropdown"],created:function(){var e=this;this.$on("updatePopper",(function(){e.showPopper&&e.updatePopper()})),this.$on("visible",(function(t){e.showPopper=t}))},mounted:function(){this.dropdown.popperElm=this.popperElm=this.$el,this.referenceElm=this.dropdown.$el,this.dropdown.initDomOperation()},watch:{"dropdown.placement":{immediate:!0,handler:function(e){this.currentPlacement=e}}}},ge=ve,be=o(ge,fe,me,!1,null,null,null);be.options.__file="packages/dropdown/src/dropdown-menu.vue";var ye=be.exports;ye.install=function(e){e.component(ye.name,ye)};var _e=ye,xe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-dropdown-menu__item",class:{"is-disabled":e.disabled,"el-dropdown-menu__item--divided":e.divided},attrs:{"aria-disabled":e.disabled,tabindex:e.disabled?null:-1},on:{click:e.handleClick}},[e.icon?i("i",{class:e.icon}):e._e(),e._t("default")],2)},Ce=[];xe._withStripped=!0;var we={name:"ElDropdownItem",mixins:[O.a],props:{command:{},disabled:Boolean,divided:Boolean,icon:String},methods:{handleClick:function(e){this.dispatch("ElDropdown","menu-item-click",[this.command,this])}}},ke=we,Se=o(ke,xe,Ce,!1,null,null,null);Se.options.__file="packages/dropdown/src/dropdown-item.vue";var De=Se.exports;De.install=function(e){e.component(De.name,De)};var $e=De,Oe=Oe||{};Oe.Utils=Oe.Utils||{},Oe.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var i=e.childNodes[t];if(Oe.Utils.attemptFocus(i)||Oe.Utils.focusLastDescendant(i))return!0}return!1},Oe.Utils.attemptFocus=function(e){if(!Oe.Utils.isFocusable(e))return!1;Oe.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return Oe.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},Oe.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Oe.Utils.triggerEvent=function(e,t){var i=void 0;i=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var n=document.createEvent(i),s=arguments.length,r=Array(s>2?s-2:0),a=2;a=0;t--)e.splice(t,0,e[t]);e=e.join("")}return/^[0-9a-fA-F]{6}$/.test(e)?{red:parseInt(e.slice(0,2),16),green:parseInt(e.slice(2,4),16),blue:parseInt(e.slice(4,6),16)}:{red:255,green:255,blue:255}},mixColor:function(e,t){var i=this.getColorChannels(e),n=i.red,s=i.green,r=i.blue;return t>0?(n*=1-t,s*=1-t,r*=1-t):(n+=(255-n)*t,s+=(255-s)*t,r+=(255-r)*t),"rgb("+Math.round(n)+", "+Math.round(s)+", "+Math.round(r)+")"},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},openMenu:function(e,t){var i=this.openedMenus;-1===i.indexOf(e)&&(this.uniqueOpened&&(this.openedMenus=i.filter((function(e){return-1!==t.indexOf(e)}))),this.openedMenus.push(e))},closeMenu:function(e){var t=this.openedMenus.indexOf(e);-1!==t&&this.openedMenus.splice(t,1)},handleSubmenuClick:function(e){var t=e.index,i=e.indexPath,n=-1!==this.openedMenus.indexOf(t);n?(this.closeMenu(t),this.$emit("close",t,i)):(this.openMenu(t,i),this.$emit("open",t,i))},handleItemClick:function(e){var t=this,i=e.index,n=e.indexPath,s=this.activeIndex,r=null!==e.index;r&&(this.activeIndex=e.index),this.$emit("select",i,n,e),("horizontal"===this.mode||this.collapse)&&(this.openedMenus=[]),this.router&&r&&this.routeToItem(e,(function(e){if(t.activeIndex=s,e){if("NavigationDuplicated"===e.name)return;console.error(e)}}))},initOpenedMenu:function(){var e=this,t=this.activeIndex,i=this.items[t];if(i&&"horizontal"!==this.mode&&!this.collapse){var n=i.indexPath;n.forEach((function(t){var i=e.submenus[t];i&&e.openMenu(t,i.indexPath)}))}},routeToItem:function(e,t){var i=e.route||e.index;try{this.$router.push(i,(function(){}),t)}catch(n){console.error(n)}},open:function(e){var t=this,i=this.submenus[e.toString()].indexPath;i.forEach((function(e){return t.openMenu(e,i)}))},close:function(e){this.closeMenu(e)}},mounted:function(){this.initOpenedMenu(),this.$on("item-click",this.handleItemClick),this.$on("submenu-click",this.handleSubmenuClick),"horizontal"===this.mode&&new Le(this.$el),this.$watch("items",this.updateActiveIndex)}},Be=Ve,ze=o(Be,je,Fe,!1,null,null,null);ze.options.__file="packages/menu/src/menu.vue";var Re=ze.exports;Re.install=function(e){e.component(Re.name,Re)};var He,We,qe=Re,Ye=i(21),Ke=i.n(Ye),Ue={inject:["rootMenu"],computed:{indexPath:function(){var e=[this.index],t=this.$parent;while("ElMenu"!==t.$options.componentName)t.index&&e.unshift(t.index),t=t.$parent;return e},parentMenu:function(){var e=this.$parent;while(e&&-1===["ElMenu","ElSubmenu"].indexOf(e.$options.componentName))e=e.$parent;return e},paddingStyle:function(){if("vertical"!==this.rootMenu.mode)return{};var e=20,t=this.$parent;if(this.rootMenu.collapse)e=20;else while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return{paddingLeft:e+"px"}}}},Ge={props:{transformOrigin:{type:[Boolean,String],default:!1},offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},data:H.a.data,methods:H.a.methods,beforeDestroy:H.a.beforeDestroy,deactivated:H.a.deactivated},Xe={name:"ElSubmenu",componentName:"ElSubmenu",mixins:[Ue,O.a,Ge],components:{ElCollapseTransition:Ke.a},props:{index:{type:String,required:!0},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0}},data:function(){return{popperJS:null,timeout:null,items:{},submenus:{},mouseInChild:!1}},watch:{opened:function(e){var t=this;this.isMenuPopup&&this.$nextTick((function(e){t.updatePopper()}))}},computed:{appendToBody:function(){return void 0===this.popperAppendToBody?this.isFirstLevel:this.popperAppendToBody},menuTransitionName:function(){return this.rootMenu.collapse?"el-zoom-in-left":"el-zoom-in-top"},opened:function(){return this.rootMenu.openedMenus.indexOf(this.index)>-1},active:function(){var e=!1,t=this.submenus,i=this.items;return Object.keys(i).forEach((function(t){i[t].active&&(e=!0)})),Object.keys(t).forEach((function(i){t[i].active&&(e=!0)})),e},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},isMenuPopup:function(){return this.rootMenu.isMenuPopup},titleStyle:function(){return"horizontal"!==this.mode?{color:this.textColor}:{borderBottomColor:this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent",color:this.active?this.activeTextColor:this.textColor}},isFirstLevel:function(){var e=!0,t=this.$parent;while(t&&t!==this.rootMenu){if(["ElSubmenu","ElMenuItemGroup"].indexOf(t.$options.componentName)>-1){e=!1;break}t=t.$parent}return e}},methods:{handleCollapseToggle:function(e){e?this.initPopper():this.doDestroy()},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},handleClick:function(){var e=this.rootMenu,t=this.disabled;"hover"===e.menuTrigger&&"horizontal"===e.mode||e.collapse&&"vertical"===e.mode||t||this.dispatch("ElMenu","submenu-click",this)},handleMouseenter:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.showTimeout;if("ActiveXObject"in window||"focus"!==e.type||e.relatedTarget){var n=this.rootMenu,s=this.disabled;"click"===n.menuTrigger&&"horizontal"===n.mode||!n.collapse&&"vertical"===n.mode||s||(this.dispatch("ElSubmenu","mouse-enter-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){t.rootMenu.openMenu(t.index,t.indexPath)}),i),this.appendToBody&&this.$parent.$el.dispatchEvent(new MouseEvent("mouseenter")))}},handleMouseleave:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.rootMenu;"click"===i.menuTrigger&&"horizontal"===i.mode||!i.collapse&&"vertical"===i.mode||(this.dispatch("ElSubmenu","mouse-leave-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){!e.mouseInChild&&e.rootMenu.closeMenu(e.index)}),this.hideTimeout),this.appendToBody&&t&&"ElSubmenu"===this.$parent.$options.name&&this.$parent.handleMouseleave(!0))},handleTitleMouseenter:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.hoverBackground)}},handleTitleMouseleave:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.backgroundColor||"")}},updatePlacement:function(){this.currentPlacement="horizontal"===this.mode&&this.isFirstLevel?"bottom-start":"right-start"},initPopper:function(){this.referenceElm=this.$el,this.popperElm=this.$refs.menu,this.updatePlacement()}},created:function(){var e=this;this.$on("toggle-collapse",this.handleCollapseToggle),this.$on("mouse-enter-child",(function(){e.mouseInChild=!0,clearTimeout(e.timeout)})),this.$on("mouse-leave-child",(function(){e.mouseInChild=!1,clearTimeout(e.timeout)}))},mounted:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this),this.initPopper()},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)},render:function(e){var t=this,i=this.active,n=this.opened,s=this.paddingStyle,r=this.titleStyle,a=this.backgroundColor,o=this.rootMenu,l=this.currentPlacement,c=this.menuTransitionName,u=this.mode,h=this.disabled,d=this.popperClass,p=this.$slots,f=this.isFirstLevel,m=e("transition",{attrs:{name:c}},[e("div",{ref:"menu",directives:[{name:"show",value:n}],class:["el-menu--"+u,d],on:{mouseenter:function(e){return t.handleMouseenter(e,100)},mouseleave:function(){return t.handleMouseleave(!0)},focus:function(e){return t.handleMouseenter(e,100)}}},[e("ul",{attrs:{role:"menu"},class:["el-menu el-menu--popup","el-menu--popup-"+l],style:{backgroundColor:o.backgroundColor||""}},[p.default])])]),v=e("el-collapse-transition",[e("ul",{attrs:{role:"menu"},class:"el-menu el-menu--inline",directives:[{name:"show",value:n}],style:{backgroundColor:o.backgroundColor||""}},[p.default])]),g="horizontal"===o.mode&&f||"vertical"===o.mode&&!o.collapse?"el-icon-arrow-down":"el-icon-arrow-right";return e("li",{class:{"el-submenu":!0,"is-active":i,"is-opened":n,"is-disabled":h},attrs:{role:"menuitem","aria-haspopup":"true","aria-expanded":n},on:{mouseenter:this.handleMouseenter,mouseleave:function(){return t.handleMouseleave(!1)},focus:this.handleMouseenter}},[e("div",{class:"el-submenu__title",ref:"submenu-title",on:{click:this.handleClick,mouseenter:this.handleTitleMouseenter,mouseleave:this.handleTitleMouseleave},style:[s,r,{backgroundColor:a}]},[p.title,e("i",{class:["el-submenu__icon-arrow",g]})]),this.isMenuPopup?m:v])}},Ze=Xe,Qe=o(Ze,He,We,!1,null,null,null);Qe.options.__file="packages/menu/src/submenu.vue";var Je=Qe.exports;Je.install=function(e){e.component(Je.name,Je)};var et=Je,tt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-menu-item",class:{"is-active":e.active,"is-disabled":e.disabled},style:[e.paddingStyle,e.itemStyle,{backgroundColor:e.backgroundColor}],attrs:{role:"menuitem",tabindex:"-1"},on:{click:e.handleClick,mouseenter:e.onMouseEnter,focus:e.onMouseEnter,blur:e.onMouseLeave,mouseleave:e.onMouseLeave}},["ElMenu"===e.parentMenu.$options.componentName&&e.rootMenu.collapse&&e.$slots.title?i("el-tooltip",{attrs:{effect:"dark",placement:"right"}},[i("div",{attrs:{slot:"content"},slot:"content"},[e._t("title")],2),i("div",{staticStyle:{position:"absolute",left:"0",top:"0",height:"100%",width:"100%",display:"inline-block","box-sizing":"border-box",padding:"0 20px"}},[e._t("default")],2)]):[e._t("default"),e._t("title")]],2)},it=[];tt._withStripped=!0;var nt=i(26),st=i.n(nt),rt={name:"ElMenuItem",componentName:"ElMenuItem",mixins:[Ue,O.a],components:{ElTooltip:st.a},props:{index:{default:null,validator:function(e){return"string"===typeof e||null===e}},route:[String,Object],disabled:Boolean},computed:{active:function(){return this.index===this.rootMenu.activeIndex},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},itemStyle:function(){var e={color:this.active?this.activeTextColor:this.textColor};return"horizontal"!==this.mode||this.isNested||(e.borderBottomColor=this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent"),e},isNested:function(){return this.parentMenu!==this.rootMenu}},methods:{onMouseEnter:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.hoverBackground)},onMouseLeave:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.backgroundColor)},handleClick:function(){this.disabled||(this.dispatch("ElMenu","item-click",this),this.$emit("click",this))}},mounted:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},at=rt,ot=o(at,tt,it,!1,null,null,null);ot.options.__file="packages/menu/src/menu-item.vue";var lt=ot.exports;lt.install=function(e){e.component(lt.name,lt)};var ct=lt,ut=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-menu-item-group"},[i("div",{staticClass:"el-menu-item-group__title",style:{paddingLeft:e.levelPadding+"px"}},[e.$slots.title?e._t("title"):[e._v(e._s(e.title))]],2),i("ul",[e._t("default")],2)])},ht=[];ut._withStripped=!0;var dt={name:"ElMenuItemGroup",componentName:"ElMenuItemGroup",inject:["rootMenu"],props:{title:{type:String}},data:function(){return{paddingLeft:20}},computed:{levelPadding:function(){var e=20,t=this.$parent;if(this.rootMenu.collapse)return 20;while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return e}}},pt=dt,ft=o(pt,ut,ht,!1,null,null,null);ft.options.__file="packages/menu/src/menu-item-group.vue";var mt=ft.exports;mt.install=function(e){e.component(mt.name,mt)};var vt=mt,gt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?i("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?i("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?i("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?i("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?i("span",{staticClass:"el-input__suffix"},[i("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?i("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?i("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?i("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?i("span",{staticClass:"el-input__count"},[i("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?i("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?i("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:i("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?i("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},bt=[];gt._withStripped=!0;var yt=void 0,_t="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",xt=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function Ct(e){var t=window.getComputedStyle(e),i=t.getPropertyValue("box-sizing"),n=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),s=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),r=xt.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:r,paddingSize:n,borderSize:s,boxSizing:i}}function wt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;yt||(yt=document.createElement("textarea"),document.body.appendChild(yt));var n=Ct(e),s=n.paddingSize,r=n.borderSize,a=n.boxSizing,o=n.contextStyle;yt.setAttribute("style",o+";"+_t),yt.value=e.value||e.placeholder||"";var l=yt.scrollHeight,c={};"border-box"===a?l+=r:"content-box"===a&&(l-=s),yt.value="";var u=yt.scrollHeight-s;if(null!==t){var h=u*t;"border-box"===a&&(h=h+s+r),l=Math.max(h,l),c.minHeight=h+"px"}if(null!==i){var d=u*i;"border-box"===a&&(d=d+s+r),l=Math.min(d,l)}return c.height=l+"px",yt.parentNode&&yt.parentNode.removeChild(yt),yt=null,c}var kt=i(7),St=i.n(kt),Dt=i(19),$t={name:"ElInput",componentName:"ElInput",mixins:[O.a,D.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return St()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var i=e.minRows,n=e.maxRows;this.textareaCalcStyle=wt(this.$refs.textarea,i,n)}else this.textareaCalcStyle={minHeight:wt(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,i=t[t.length-1]||"";this.isComposing=!Object(Dt["isKorean"])(i)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var i=null,n=0;n=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var i=this.getPrecision(this.step),n=Math.pow(10,i);t=Math.round(t/this.step)*n*this.step/n}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,i=this.getPrecision,n=this.precision,s=i(t);return void 0!==n?(s>n&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),n):Math.max(i(e),s)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),i=Math.pow(10,t);e=Math.round(e/this.step)*i*this.step/i}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),i=t.indexOf("."),n=0;return-1!==i&&(n=t.length-i-1),n},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e+i*t)/i)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e-i*t)/i)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},Ft=jt,Lt=o(Ft,Mt,Nt,!1,null,null,null);Lt.options.__file="packages/input-number/src/input-number.vue";var At=Lt.exports;At.install=function(e){e.component(At.name,At)};var Vt=At,Bt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[i("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[i("span",{staticClass:"el-radio__inner"}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1",autocomplete:"off"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),i("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},zt=[];Bt._withStripped=!0;var Rt={name:"ElRadio",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},Ht=Rt,Wt=o(Ht,Bt,zt,!1,null,null,null);Wt.options.__file="packages/radio/src/radio.vue";var qt=Wt.exports;qt.install=function(e){e.component(qt.name,qt)};var Yt=qt,Kt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e._elTag,{tag:"component",staticClass:"el-radio-group",attrs:{role:"radiogroup"},on:{keydown:e.handleKeydown}},[e._t("default")],2)},Ut=[];Kt._withStripped=!0;var Gt=Object.freeze({LEFT:37,UP:38,RIGHT:39,DOWN:40}),Xt={name:"ElRadioGroup",componentName:"ElRadioGroup",inject:{elFormItem:{default:""}},mixins:[O.a],props:{value:{},size:String,fill:String,textColor:String,disabled:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},_elTag:function(){var e=(this.$vnode.data||{}).tag;return e&&"component"!==e||(e="div"),e},radioGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},created:function(){var e=this;this.$on("handleChange",(function(t){e.$emit("change",t)}))},mounted:function(){var e=this.$el.querySelectorAll("[type=radio]"),t=this.$el.querySelectorAll("[role=radio]")[0];![].some.call(e,(function(e){return e.checked}))&&t&&(t.tabIndex=0)},methods:{handleKeydown:function(e){var t=e.target,i="INPUT"===t.nodeName?"[type=radio]":"[role=radio]",n=this.$el.querySelectorAll(i),s=n.length,r=[].indexOf.call(n,t),a=this.$el.querySelectorAll("[role=radio]");switch(e.keyCode){case Gt.LEFT:case Gt.UP:e.stopPropagation(),e.preventDefault(),0===r?(a[s-1].click(),a[s-1].focus()):(a[r-1].click(),a[r-1].focus());break;case Gt.RIGHT:case Gt.DOWN:r===s-1?(e.stopPropagation(),e.preventDefault(),a[0].click(),a[0].focus()):(a[r+1].click(),a[r+1].focus());break;default:break}}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[this.value])}}},Zt=Xt,Qt=o(Zt,Kt,Ut,!1,null,null,null);Qt.options.__file="packages/radio/src/radio-group.vue";var Jt=Qt.exports;Jt.install=function(e){e.component(Jt.name,Jt)};var ei=Jt,ti=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-radio-button",class:[e.size?"el-radio-button--"+e.size:"",{"is-active":e.value===e.label},{"is-disabled":e.isDisabled},{"is-focus":e.focus}],attrs:{role:"radio","aria-checked":e.value===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.value=e.isDisabled?e.value:e.label}}},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"el-radio-button__orig-radio",attrs:{type:"radio",name:e.name,disabled:e.isDisabled,tabindex:"-1",autocomplete:"off"},domProps:{value:e.label,checked:e._q(e.value,e.label)},on:{change:[function(t){e.value=e.label},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),i("span",{staticClass:"el-radio-button__inner",style:e.value===e.label?e.activeStyle:null,on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},ii=[];ti._withStripped=!0;var ni={name:"ElRadioButton",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},props:{label:{},disabled:Boolean,name:String},data:function(){return{focus:!1}},computed:{value:{get:function(){return this._radioGroup.value},set:function(e){this._radioGroup.$emit("input",e)}},_radioGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return e;e=e.$parent}return!1},activeStyle:function(){return{backgroundColor:this._radioGroup.fill||"",borderColor:this._radioGroup.fill||"",boxShadow:this._radioGroup.fill?"-1px 0 0 0 "+this._radioGroup.fill:"",color:this._radioGroup.textColor||""}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._radioGroup.radioGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isDisabled:function(){return this.disabled||this._radioGroup.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this._radioGroup&&this.value!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.dispatch("ElRadioGroup","handleChange",e.value)}))}}},si=ni,ri=o(si,ti,ii,!1,null,null,null);ri.options.__file="packages/radio/src/radio-button.vue";var ai=ri.exports;ai.install=function(e){e.component(ai.name,ai)};var oi=ai,li=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[i("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[i("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},ci=[];li._withStripped=!0;var ui={name:"ElCheckbox",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},hi=ui,di=o(hi,li,ci,!1,null,null,null);di.options.__file="packages/checkbox/src/checkbox.vue";var pi=di.exports;pi.install=function(e){e.component(pi.name,pi)};var fi=pi,mi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox-button",class:[e.size?"el-checkbox-button--"+e.size:"",{"is-disabled":e.isDisabled},{"is-checked":e.isChecked},{"is-focus":e.focus}],attrs:{role:"checkbox","aria-checked":e.isChecked,"aria-disabled":e.isDisabled}},[e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox-button__inner",style:e.isChecked?e.activeStyle:null},[e._t("default",[e._v(e._s(e.label))])],2):e._e()])},vi=[];mi._withStripped=!0;var gi={name:"ElCheckboxButton",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},props:{value:{},label:{},disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number]},computed:{model:{get:function(){return this._checkboxGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this._checkboxGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):void 0!==this.value?this.$emit("input",e):this.selfModel=e}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},_checkboxGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return e;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},activeStyle:function(){return{backgroundColor:this._checkboxGroup.fill||"",borderColor:this._checkboxGroup.fill||"",color:this._checkboxGroup.textColor||"","box-shadow":"-1px 0 0 0 "+this._checkboxGroup.fill}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._checkboxGroup.checkboxGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this._checkboxGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled}},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t._checkboxGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()}},bi=gi,yi=o(bi,mi,vi,!1,null,null,null);yi.options.__file="packages/checkbox/src/checkbox-button.vue";var _i=yi.exports;_i.install=function(e){e.component(_i.name,_i)};var xi=_i,Ci=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},wi=[];Ci._withStripped=!0;var ki={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[O.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},Si=ki,Di=o(Si,Ci,wi,!1,null,null,null);Di.options.__file="packages/checkbox/src/checkbox-group.vue";var $i=Di.exports;$i.install=function(e){e.component($i.name,$i)};var Oi=$i,Ei=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-switch",class:{"is-disabled":e.switchDisabled,"is-checked":e.checked},attrs:{role:"switch","aria-checked":e.checked,"aria-disabled":e.switchDisabled},on:{click:function(t){return t.preventDefault(),e.switchValue(t)}}},[i("input",{ref:"input",staticClass:"el-switch__input",attrs:{type:"checkbox",id:e.id,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:e.switchDisabled},on:{change:e.handleChange,keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.switchValue(t)}}}),e.inactiveIconClass||e.inactiveText?i("span",{class:["el-switch__label","el-switch__label--left",e.checked?"":"is-active"]},[e.inactiveIconClass?i("i",{class:[e.inactiveIconClass]}):e._e(),!e.inactiveIconClass&&e.inactiveText?i("span",{attrs:{"aria-hidden":e.checked}},[e._v(e._s(e.inactiveText))]):e._e()]):e._e(),i("span",{ref:"core",staticClass:"el-switch__core",style:{width:e.coreWidth+"px"}}),e.activeIconClass||e.activeText?i("span",{class:["el-switch__label","el-switch__label--right",e.checked?"is-active":""]},[e.activeIconClass?i("i",{class:[e.activeIconClass]}):e._e(),!e.activeIconClass&&e.activeText?i("span",{attrs:{"aria-hidden":!e.checked}},[e._v(e._s(e.activeText))]):e._e()]):e._e()])},Ti=[];Ei._withStripped=!0;var Pi={name:"ElSwitch",mixins:[Z()("input"),D.a,O.a],inject:{elForm:{default:""}},props:{value:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},width:{type:Number,default:40},activeIconClass:{type:String,default:""},inactiveIconClass:{type:String,default:""},activeText:String,inactiveText:String,activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},id:String},data:function(){return{coreWidth:this.width}},created:function(){~[this.activeValue,this.inactiveValue].indexOf(this.value)||this.$emit("input",this.inactiveValue)},computed:{checked:function(){return this.value===this.activeValue},switchDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{checked:function(){this.$refs.input.checked=this.checked,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[this.value])}},methods:{handleChange:function(e){var t=this,i=this.checked?this.inactiveValue:this.activeValue;this.$emit("input",i),this.$emit("change",i),this.$nextTick((function(){t.$refs.input.checked=t.checked}))},setBackgroundColor:function(){var e=this.checked?this.activeColor:this.inactiveColor;this.$refs.core.style.borderColor=e,this.$refs.core.style.backgroundColor=e},switchValue:function(){!this.switchDisabled&&this.handleChange()},getMigratingConfig:function(){return{props:{"on-color":"on-color is renamed to active-color.","off-color":"off-color is renamed to inactive-color.","on-text":"on-text is renamed to active-text.","off-text":"off-text is renamed to inactive-text.","on-value":"on-value is renamed to active-value.","off-value":"off-value is renamed to inactive-value.","on-icon-class":"on-icon-class is renamed to active-icon-class.","off-icon-class":"off-icon-class is renamed to inactive-icon-class."}}}},mounted:function(){this.coreWidth=this.width||40,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.$refs.input.checked=this.checked}},Mi=Pi,Ni=o(Mi,Ei,Ti,!1,null,null,null);Ni.options.__file="packages/switch/src/component.vue";var Ii=Ni.exports;Ii.install=function(e){e.component(Ii.name,Ii)};var ji=Ii,Fi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?i("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?i("span",[i("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?i("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[i("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():i("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return i("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(i){e.deleteTag(i,t)}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?i("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),i("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.debouncedOnInputChange},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),i("template",{slot:"suffix"},[i("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?i("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[i("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?i("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):i("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},Li=[];Fi._withStripped=!0;var Ai=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},Vi=[];Ai._withStripped=!0;var Bi={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[H.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},zi=Bi,Ri=o(zi,Ai,Vi,!1,null,null,null);Ri.options.__file="packages/select/src/select-dropdown.vue";var Hi=Ri.exports,Wi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[i("span",[e._v(e._s(e.currentLabel))])])],2)},qi=[];Wi._withStripped=!0;var Yi="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ki={mixins:[O.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":Yi(e))&&"object"===("undefined"===typeof t?"undefined":Yi(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(b["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},Ui=Ki,Gi=o(Ui,Wi,qi,!1,null,null,null);Gi.options.__file="packages/select/src/option.vue";var Xi=Gi.exports,Zi=i(29),Qi=i.n(Zi),Ji=i(14),en=i(27),tn=i.n(en),nn={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var i=this.options[this.hoverIndex];!0!==i.disabled&&!0!==i.groupDisabled&&i.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},sn={mixins:[O.a,g.a,Z()("reference"),nn],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(b["isIE"])()&&!Object(b["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"},propPlaceholder:function(){return"undefined"!==typeof this.placeholder?this.placeholder:this.t("el.select.placeholder")}},components:{ElInput:m.a,ElSelectMenu:Hi,ElOption:Xi,ElTag:Qi.a,ElScrollbar:q.a},directives:{Clickoutside:V.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,required:!1},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},propPlaceholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(b["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,i=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(i)}));else{var n=i[i.length-1]||"";this.isOnComposition=!Object(Dt["isKorean"])(n)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var i=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");tn()(i,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(b["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,i="[object object]"===Object.prototype.toString.call(e).toLowerCase(),n="[object null]"===Object.prototype.toString.call(e).toLowerCase(),s="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),r=this.cachedOptions.length-1;r>=0;r--){var a=this.cachedOptions[r],o=i?Object(b["getValueByPath"])(a.value,this.valueKey)===Object(b["getValueByPath"])(e,this.valueKey):a.value===e;if(o){t=a;break}}if(t)return t;var l=i||n||s?"":String(e),c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var i=[];Array.isArray(this.value)&&this.value.forEach((function(t){i.push(e.getOption(t))})),this.selected=i,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,i=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],n=e.$refs.tags,s=n?Math.round(n.getBoundingClientRect().height):0,r=e.initialInputHeight||40;i.style.height=0===e.selected.length?r+"px":Math.max(n?s+(s>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var i=this;if(this.multiple){var n=(this.value||[]).slice(),s=this.getValueIndex(n,e.value);s>-1?n.splice(s,1):(this.multipleLimit<=0||n.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],i="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(i){var n=this.valueKey,s=-1;return e.some((function(e,i){return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)&&(s=i,!0)})),s}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var i=this.selected.indexOf(t);if(i>-1&&!this.selectDisabled){var n=this.value.slice();n.splice(i,1),this.$emit("input",n),this.emitChange(n),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var i=0;i!==this.options.length;++i){var n=this.options[i];if(this.query){if(!n.disabled&&!n.groupDisabled&&n.visible){this.hoverIndex=i;break}}else if(n.itemSelected){this.hoverIndex=i;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(b["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.propPlaceholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=L()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=L()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(Ji["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var i={medium:36,small:32,mini:28},n=t.$el.querySelector("input");this.initialInputHeight=n.getBoundingClientRect().height||i[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(Ji["removeResizeListener"])(this.$el,this.handleResize)}},rn=sn,an=o(rn,Fi,Li,!1,null,null,null);an.options.__file="packages/select/src/select.vue";var on=an.exports;on.install=function(e){e.component(on.name,on)};var ln=on;Xi.install=function(e){e.component(Xi.name,Xi)};var cn=Xi,un=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-group__wrap"},[i("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))]),i("li",[i("ul",{staticClass:"el-select-group"},[e._t("default")],2)])])},hn=[];un._withStripped=!0;var dn={mixins:[O.a],name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:{type:Boolean,default:!1}},data:function(){return{visible:!0}},watch:{disabled:function(e){this.broadcast("ElOption","handleGroupDisabled",e)}},methods:{queryChange:function(){this.visible=this.$children&&Array.isArray(this.$children)&&this.$children.some((function(e){return!0===e.visible}))}},created:function(){this.$on("queryChange",this.queryChange)},mounted:function(){this.disabled&&this.broadcast("ElOption","handleGroupDisabled",this.disabled)}},pn=dn,fn=o(pn,un,hn,!1,null,null,null);fn.options.__file="packages/select/src/option-group.vue";var mn=fn.exports;mn.install=function(e){e.component(mn.name,mn)};var vn=mn,gn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?i("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",[e._t("default")],2):e._e()])},bn=[];gn._withStripped=!0;var yn={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},_n=yn,xn=o(_n,gn,bn,!1,null,null,null);xn.options.__file="packages/button/src/button.vue";var Cn=xn.exports;Cn.install=function(e){e.component(Cn.name,Cn)};var wn=Cn,kn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-button-group"},[e._t("default")],2)},Sn=[];kn._withStripped=!0;var Dn={name:"ElButtonGroup"},$n=Dn,On=o($n,kn,Sn,!1,null,null,null);On.options.__file="packages/button/src/button-group.vue";var En=On.exports;En.install=function(e){e.component(En.name,En)};var Tn=En,Pn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[i("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[i("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),i("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():i("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[i("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?i("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[i("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?i("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[i("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),i("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?i("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[i("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?i("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[i("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),i("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?i("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[i("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?i("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},Mn=[];Pn._withStripped=!0;var Nn=i(17),In=i.n(Nn),jn=i(35),Fn=i(38),Ln=i.n(Fn),An="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Vn=function(e,t){e&&e.addEventListener&&e.addEventListener(An?"DOMMouseScroll":"mousewheel",(function(e){var i=Ln()(e);t&&t.apply(this,[e,i])}))},Bn={bind:function(e,t){Vn(e,t.value)}},zn=i(6),Rn=i.n(zn),Hn="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wn=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},qn=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":Hn(e))},Yn=function(e,t,i,n,s){if(!t&&!n&&(!s||Array.isArray(s)&&!s.length))return e;i="string"===typeof i?"descending"===i?-1:1:i&&i<0?-1:1;var r=n?null:function(i,n){return s?(Array.isArray(s)||(s=[s]),s.map((function(t){return"string"===typeof t?Object(b["getValueByPath"])(i,t):t(i,n,e)}))):("$key"!==t&&qn(i)&&"$value"in i&&(i=i.$value),[qn(i)?Object(b["getValueByPath"])(i,t):i])},a=function(e,t){if(n)return n(e.value,t.value);for(var i=0,s=e.key.length;it.key[i])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:r?r(e,t):null}})).sort((function(e,t){var n=a(e,t);return n||(n=e.index-t.index),n*i})).map((function(e){return e.value}))},Kn=function(e,t){var i=null;return e.columns.forEach((function(e){e.id===t&&(i=e)})),i},Un=function(e,t){for(var i=null,n=0;n2&&void 0!==arguments[2]?arguments[2]:"children",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",s=function(e){return!(Array.isArray(e)&&e.length)};function r(e,a,o){t(e,a,o),a.forEach((function(e){if(e[n])t(e,null,o+1);else{var a=e[i];s(a)||r(e,a,o+1)}}))}e.forEach((function(e){if(e[n])t(e,null,0);else{var a=e[i];s(a)||r(e,a,0)}}))}var as={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,i=void 0===t?[]:t,n=e.rowKey,s=e.defaultExpandAll,r=e.expandRows;if(s)this.states.expandRows=i.slice();else if(n){var a=Zn(r,n);this.states.expandRows=i.reduce((function(e,t){var i=Xn(t,n),s=a[i];return s&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var i=ss(this.states.expandRows,e,t);i&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,i=t.data,n=t.rowKey,s=Zn(i,n);this.states.expandRows=e.reduce((function(e,t){var i=s[t];return i&&e.push(i.row),e}),[])},isRowExpanded:function(e){var t=this.states,i=t.expandRows,n=void 0===i?[]:i,s=t.rowKey;if(s){var r=Zn(n,s);return!!r[Xn(e,s)]}return-1!==n.indexOf(e)}}},os={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,i=t.data,n=void 0===i?[]:i,s=t.rowKey,r=null;s&&(r=Object(b["arrayFind"])(n,(function(t){return Xn(t,s)===e}))),t.currentRow=r},updateCurrentRow:function(e){var t=this.states,i=this.table,n=t.currentRow;if(e&&e!==n)return t.currentRow=e,void i.$emit("current-change",e,n);!e&&n&&(t.currentRow=null,i.$emit("current-change",null,n))},updateCurrentRowData:function(){var e=this.states,t=this.table,i=e.rowKey,n=e._currentRowKey,s=e.data||[],r=e.currentRow;if(-1===s.indexOf(r)&&r){if(i){var a=Xn(r,i);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,r)}else n&&(this.setCurrentRowByKey(n),this.restoreCurrentRowKey())}}},ls=Object.assign||function(e){for(var t=1;t0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var i=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(i).concat(e.rightFixedColumns);var n=hs(i),s=hs(e.fixedColumns),r=hs(e.rightFixedColumns);e.leafColumnsLength=n.length,e.fixedLeafColumnsLength=s.length,e.rightFixedLeafColumnsLength=r.length,e.columns=[].concat(s).concat(n).concat(r),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,i=void 0===t?[]:t;return i.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,i=e.rowKey,n=e.selection,s=void 0;if(i){s=[];var r=Zn(n,i),a=Zn(t,i);for(var o in r)r.hasOwnProperty(o)&&!a[o]&&s.push(r[o].row)}else s=n.filter((function(e){return-1===t.indexOf(e)}));if(s.length){var l=n.filter((function(e){return-1===s.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=ss(this.states.selection,e,t);if(n){var s=(this.states.selection||[]).slice();i&&this.table.$emit("select",s,e),this.table.$emit("selection-change",s)}},_toggleAllSelection:function(){var e=this.states,t=e.data,i=void 0===t?[]:t,n=e.selection,s=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||n.length);e.isAllSelected=s;var r=!1;i.forEach((function(t,i){e.selectable?e.selectable.call(null,t,i)&&ss(n,t,s)&&(r=!0):ss(n,t,s)&&(r=!0)})),r&&this.table.$emit("selection-change",n?n.slice():[]),this.table.$emit("select-all",n)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,i=e.rowKey,n=e.data,s=Zn(t,i);n.forEach((function(e){var n=Xn(e,i),r=s[n];r&&(t[r.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,i=e.rowKey,n=e.selectable,s=e.data||[];if(0!==s.length){var r=void 0;i&&(r=Zn(t,i));for(var a=function(e){return r?!!r[Xn(e,i)]:-1!==t.indexOf(e)},o=!0,l=0,c=0,u=s.length;c1?i-1:0),s=1;s1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var i=new ps;return i.table=e,i.toggleAllSelection=L()(10,i._toggleAllSelection),Object.keys(t).forEach((function(e){i.states[e]=t[e]})),i}function ms(e){var t={};return Object.keys(e).forEach((function(i){var n=e[i],s=void 0;"string"===typeof n?s=function(){return this.store.states[n]}:"function"===typeof n?s=function(){return n.call(this,this.store.states)}:console.error("invalid value type"),s&&(t[i]=s)})),t}var vs=i(30),gs=i.n(vs);function bs(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var ys=function(){function e(t){for(var i in bs(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=gs()(),t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var i=t.querySelector(".el-table__body"),n=this.scrollY,s=i.offsetHeight>this.bodyHeight;return this.scrollY=s,n!==s}return!1},e.prototype.setHeight=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!Rn.a.prototype.$isServer){var n=this.table.$el;if(e=is(e),this.height=e,!n&&(e||0===e))return Rn.a.nextTick((function(){return t.setHeight(e,i)}));"number"===typeof e?(n.style[i]=e+"px",this.updateElsHeight()):"string"===typeof e&&(n.style[i]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return Rn.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,i=t.headerWrapper,n=t.appendWrapper,s=t.footerWrapper;if(this.appendHeight=n?n.offsetHeight:0,!this.showHeader||i){var r=i?i.querySelector(".el-table__header tr"):null,a=this.headerDisplayNone(r),o=this.headerHeight=this.showHeader?i.offsetHeight:0;if(this.showHeader&&!a&&i.offsetWidth>0&&(this.table.columns||[]).length>0&&o<2)return Rn.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,c=this.footerHeight=s?s.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-o-c+(s?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var u=!(this.store.states.data&&this.store.states.data.length);this.viewportHeight=this.scrollX?l-(u?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){if(!e)return!0;var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!Rn.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,i=0,n=this.getFlattenColumns(),s=n.filter((function(e){return"number"!==typeof e.width}));if(n.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),s.length>0&&e){n.forEach((function(e){i+=e.width||e.minWidth||80}));var r=this.scrollY?this.gutterWidth:0;if(i<=t-r){this.scrollX=!1;var a=t-r-i;if(1===s.length)s[0].realWidth=(s[0].minWidth||80)+a;else{var o=s.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/o,c=0;s.forEach((function(e,t){if(0!==t){var i=Math.floor((e.minWidth||80)*l);c+=i,e.realWidth=(e.minWidth||80)+i}})),s[0].realWidth=(s[0].minWidth||80)+a-c}}else this.scrollX=!0,s.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(i,t),this.table.resizeState.width=this.bodyWidth}else n.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,i+=e.realWidth})),this.scrollX=i>t,this.bodyWidth=i;var u=this.store.states.fixedColumns;if(u.length>0){var h=0;u.forEach((function(e){h+=e.realWidth||e.width})),this.fixedWidth=h}var d=this.store.states.rightFixedColumns;if(d.length>0){var p=0;d.forEach((function(e){p+=e.realWidth||e.width})),this.rightFixedWidth=p}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,i=this.observers;i.forEach((function(i){switch(e){case"columns":i.onColumnsChange(t);break;case"scrollable":i.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),_s=ys,xs={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(e){var t=this.$el.querySelectorAll("colgroup > col");if(t.length){var i=e.getFlattenColumns(),n={};i.forEach((function(e){n[e.id]=e}));for(var s=0,r=t.length;s col[name=gutter]"),i=0,n=t.length;i=this.leftFixedLeafCount:"right"===this.fixed?e=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,i,n){var s=1,r=1,a=this.table.spanMethod;if("function"===typeof a){var o=a({row:e,column:t,rowIndex:i,columnIndex:n});Array.isArray(o)?(s=o[0],r=o[1]):"object"===("undefined"===typeof o?"undefined":Cs(o))&&(s=o.rowspan,r=o.colspan)}return{rowspan:s,colspan:r}},getRowStyle:function(e,t){var i=this.table.rowStyle;return"function"===typeof i?i.call(null,{row:e,rowIndex:t}):i||null},getRowClass:function(e,t){var i=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&i.push("current-row"),this.stripe&&t%2===1&&i.push("el-table__row--striped");var n=this.table.rowClassName;return"string"===typeof n?i.push(n):"function"===typeof n&&i.push(n.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&i.push("expanded"),i},getCellStyle:function(e,t,i,n){var s=this.table.cellStyle;return"function"===typeof s?s.call(null,{rowIndex:e,columnIndex:t,row:i,column:n}):s},getCellClass:function(e,t,i,n){var s=[n.id,n.align,n.className];this.isColumnHidden(t)&&s.push("is-hidden");var r=this.table.cellClassName;return"string"===typeof r?s.push(r):"function"===typeof r&&s.push(r.call(null,{rowIndex:e,columnIndex:t,row:i,column:n})),s.push("el-table__cell"),s.join(" ")},getColspanRealWidth:function(e,t,i){if(t<1)return e[i].realWidth;var n=e.map((function(e){var t=e.realWidth;return t})).slice(i,i+t);return n.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var i=this.table,n=Wn(e);if(n){var s=Gn(i,n),r=i.hoverState={cell:n,column:s,row:t};i.$emit("cell-mouse-enter",r.row,r.column,r.cell,e)}var a=e.target.querySelector(".cell");if(Object(Ae["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var o=document.createRange();o.setStart(a,0),o.setEnd(a,a.childNodes.length);var l=o.getBoundingClientRect().width,c=(parseInt(Object(Ae["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(Ae["getStyle"])(a,"paddingRight"),10)||0);if((l+c>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var u=this.$refs.tooltip;this.tooltipContent=n.innerText||n.textContent,u.referenceElm=n,u.$refs.popper&&(u.$refs.popper.style.display="none"),u.doDestroy(),u.setExpectedState(!0),this.activateTooltip(u)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var i=Wn(e);if(i){var n=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",n.row,n.column,n.cell,e)}},handleMouseEnter:L()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:L()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,i){var n=this.table,s=Wn(e),r=void 0;s&&(r=Gn(n,s),r&&n.$emit("cell-"+i,t,r,s,e)),n.$emit("row-"+i,t,r,e)},rowRender:function(e,t,i){var n=this,s=this.$createElement,r=this.treeIndent,a=this.columns,o=this.firstDefaultColumnIndex,l=a.map((function(e,t){return n.isColumnHidden(t)})),c=this.getRowClass(e,t),u=!0;i&&(c.push("el-table__row--level-"+i.level),u=i.display);var h=u?null:{display:"none"};return s("tr",{style:[h,this.getRowStyle(e,t)],class:c,key:this.getKeyOfRow(e,t),on:{dblclick:function(t){return n.handleDoubleClick(t,e)},click:function(t){return n.handleClick(t,e)},contextmenu:function(t){return n.handleContextMenu(t,e)},mouseenter:function(e){return n.handleMouseEnter(t)},mouseleave:this.handleMouseLeave}},[a.map((function(c,u){var h=n.getSpan(e,c,t,u),d=h.rowspan,p=h.colspan;if(!d||!p)return null;var f=ws({},c);f.realWidth=n.getColspanRealWidth(a,p,u);var m={store:n.store,_self:n.context||n.table.$vnode.context,column:f,row:e,$index:t};return u===o&&i&&(m.treeNode={indent:i.level*r,level:i.level},"boolean"===typeof i.expanded&&(m.treeNode.expanded=i.expanded,"loading"in i&&(m.treeNode.loading=i.loading),"noLazyChildren"in i&&(m.treeNode.noLazyChildren=i.noLazyChildren))),s("td",{style:n.getCellStyle(t,u,e,c),class:n.getCellClass(t,u,e,c),attrs:{rowspan:d,colspan:p},on:{mouseenter:function(t){return n.handleCellMouseEnter(t,e)},mouseleave:n.handleCellMouseLeave}},[c.renderCell.call(n._renderProxy,n.$createElement,m,l[u])])}))])},wrappedRowRender:function(e,t){var i=this,n=this.$createElement,s=this.store,r=s.isRowExpanded,a=s.assertRowKey,o=s.states,l=o.treeData,c=o.lazyTreeNodeMap,u=o.childrenColumnName,h=o.rowKey;if(this.hasExpandColumn&&r(e)){var d=this.table.renderExpanded,p=this.rowRender(e,t);return d?[[p,n("tr",{key:"expanded-row__"+p.key},[n("td",{attrs:{colspan:this.columnsCount},class:"el-table__cell el-table__expanded-cell"},[d(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),p)}if(Object.keys(l).length){a();var f=Xn(e,h),m=l[f],v=null;m&&(v={expanded:m.expanded,level:m.level,display:!0},"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(v.noLazyChildren=!(m.children&&m.children.length)),v.loading=m.loading));var g=[this.rowRender(e,t,v)];if(m){var b=0,y=function e(n,s){n&&n.length&&s&&n.forEach((function(n){var r={display:s.display&&s.expanded,level:s.level+1},a=Xn(n,h);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(m=ws({},l[a]),m&&(r.expanded=m.expanded,m.level=m.level||r.level,m.display=!(!m.expanded||!r.display),"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(r.noLazyChildren=!(m.children&&m.children.length)),r.loading=m.loading)),b++,g.push(i.rowRender(n,t+b,r)),m){var o=c[a]||n[u];e(o,m)}}))};m.display=!0;var _=c[f]||e[u];y(_,m)}return g}return this.rowRender(e,t)}}},Ss=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[i("div",{staticClass:"el-table-filter__content"},[i("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[i("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return i("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),i("div",{staticClass:"el-table-filter__bottom"},[i("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),i("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[i("ul",{staticClass:"el-table-filter__list"},[i("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return i("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(i){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},Ds=[];Ss._withStripped=!0;var $s=[];!Rn.a.prototype.$isServer&&document.addEventListener("click",(function(e){$s.forEach((function(t){var i=e.target;t&&t.$el&&(i===t.$el||t.$el.contains(i)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var Os={open:function(e){e&&$s.push(e)},close:function(e){var t=$s.indexOf(e);-1!==t&&$s.splice(e,1)}},Es=i(31),Ts=i.n(Es),Ps={name:"ElTableFilterPanel",mixins:[H.a,g.a],directives:{Clickoutside:V.a},components:{ElCheckbox:In.a,ElCheckboxGroup:Ts.a,ElScrollbar:q.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?Os.open(e):Os.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)1;return s&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":s,"has-gutter":this.hasGutter}]},[this._l(n,(function(i,n){return e("tr",{style:t.getHeaderRowStyle(n),class:t.getHeaderRowClass(n)},[i.map((function(s,r){return e("th",{attrs:{colspan:s.colSpan,rowspan:s.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,s)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,s)},click:function(e){return t.handleHeaderClick(e,s)},contextmenu:function(e){return t.handleHeaderContextMenu(e,s)}},style:t.getHeaderCellStyle(n,r,i,s),class:t.getHeaderCellClass(n,r,i,s),key:s.id},[e("div",{class:["cell",s.filteredValue&&s.filteredValue.length>0?"highlight":"",s.labelClassName]},[s.renderHeader?s.renderHeader.call(t._renderProxy,e,{column:s,$index:r,store:t.store,_self:t.$parent.$vnode.context}):s.label,s.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,s)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,s,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,s,"descending")}}})]):"",s.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,s)}}},[e("i",{class:["el-icon-arrow-down",s.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"el-table__cell gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:In.a},computed:js({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},ms({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,i=t.prop,n=t.order,s=!0;e.store.commit("sort",{prop:i,order:n,init:s})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var i=0,n=0;n=this.leftFixedLeafCount:"right"===this.fixed?i=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],i=this.table.headerRowClassName;return"string"===typeof i?t.push(i):"function"===typeof i&&t.push(i.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,i,n){var s=this.table.headerCellStyle;return"function"===typeof s?s.call(null,{rowIndex:e,columnIndex:t,row:i,column:n}):s},getHeaderCellClass:function(e,t,i,n){var s=[n.id,n.order,n.headerAlign,n.className,n.labelClassName];0===e&&this.isCellHidden(t,i)&&s.push("is-hidden"),n.children||s.push("is-leaf"),n.sortable&&s.push("is-sortable");var r=this.table.headerCellClassName;return"string"===typeof r?s.push(r):"function"===typeof r&&s.push(r.call(null,{rowIndex:e,columnIndex:t,row:i,column:n})),s.push("el-table__cell"),s.join(" ")},toggleAllSelection:function(e){e.stopPropagation(),this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var i=e.target,n="TH"===i.tagName?i:i.parentNode;if(!Object(Ae["hasClass"])(n,"noclick")){n=n.querySelector(".el-table__column-filter-trigger")||n;var s=this.$parent,r=this.filterPanels[t.id];r&&t.filterOpened?r.showPopper=!1:(r||(r=new Rn.a(Is),this.filterPanels[t.id]=r,t.filterPlacement&&(r.placement=t.filterPlacement),r.table=s,r.cell=n,r.column=t,!this.$isServer&&r.$mount(document.createElement("div"))),setTimeout((function(){r.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var i=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var n=this.$parent,s=n.$el,r=s.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),o=a.getBoundingClientRect(),l=o.left-r+30;Object(Ae["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:o.right-r,startColumnLeft:o.left-r,tableLeft:r};var c=n.$refs.resizeProxy;c.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var u=function(e){var t=e.clientX-i.dragState.startMouseLeft,n=i.dragState.startLeft+t;c.style.left=Math.max(l,n)+"px"},h=function s(){if(i.dragging){var r=i.dragState,o=r.startColumnLeft,l=r.startLeft,h=parseInt(c.style.left,10),d=h-o;t.width=t.realWidth=d,n.$emit("header-dragend",t.width,l-o,t,e),i.store.scheduleLayout(),document.body.style.cursor="",i.dragging=!1,i.draggingColumn=null,i.dragState={},n.resizeProxyVisible=!1}document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",s),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(Ae["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",u),document.addEventListener("mouseup",h)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var i=e.target;while(i&&"TH"!==i.tagName)i=i.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var n=i.getBoundingClientRect(),s=document.body.style;n.width>12&&n.right-e.pageX<8?(s.cursor="col-resize",Object(Ae["hasClass"])(i,"is-sortable")&&(i.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(s.cursor="",Object(Ae["hasClass"])(i,"is-sortable")&&(i.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,i=e.sortOrders;if(""===t)return i[0];var n=i.indexOf(t||null);return i[n>i.length-2?0:n+1]},handleSortClick:function(e,t,i){e.stopPropagation();var n=t.order===i?null:i||this.toggleOrder(t),s=e.target;while(s&&"TH"!==s.tagName)s=s.parentNode;if(s&&"TH"===s.tagName&&Object(Ae["hasClass"])(s,"noclick"))Object(Ae["removeClass"])(s,"noclick");else if(t.sortable){var r=this.store.states,a=r.sortProp,o=void 0,l=r.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),r.sortingColumn=t,a=t.property),o=t.order=n||null,r.sortProp=a,r.sortOrder=o,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},Vs=Object.assign||function(e){for(var t=1;t=this.leftFixedLeafCount;if("right"===this.fixed){for(var n=0,s=0;s=this.columnsCount-this.rightFixedCount)},getRowClasses:function(e,t){var i=[e.id,e.align,e.labelClassName];return e.className&&i.push(e.className),this.isCellHidden(t,this.columns,e)&&i.push("is-hidden"),e.children||i.push("is-leaf"),i}}},zs=Object.assign||function(e){for(var t=1;t0){var n=i.scrollTop;t.pixelY<0&&0!==n&&e.preventDefault(),t.pixelY>0&&i.scrollHeight-i.clientHeight>n&&e.preventDefault(),i.scrollTop+=Math.ceil(t.pixelY/5)}else i.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var i=t.pixelX,n=t.pixelY;Math.abs(i)>=Math.abs(n)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:Object(jn["throttle"])(20,(function(){var e=this.bodyWrapper,t=e.scrollLeft,i=e.scrollTop,n=e.offsetWidth,s=e.scrollWidth,r=this.$refs,a=r.headerWrapper,o=r.footerWrapper,l=r.fixedBodyWrapper,c=r.rightFixedBodyWrapper;a&&(a.scrollLeft=t),o&&(o.scrollLeft=t),l&&(l.scrollTop=i),c&&(c.scrollTop=i);var u=s-n-1;this.scrollPosition=t>=u?"right":0===t?"left":"middle"})),bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(Ji["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(Ji["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,i=this.resizeState,n=i.width,s=i.height,r=t.offsetWidth;n!==r&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&s!==a&&(e=!0),e&&(this.resizeState.width=r,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:zs({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,i=e.scrollY,n=e.gutterWidth;return t?t-(i?n:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,i=void 0===t?0:t,n=e.bodyHeight,s=e.footerHeight,r=void 0===s?0:s;if(this.height)return{height:n?n+"px":""};if(this.maxHeight){var a=is(this.maxHeight);if("number"===typeof a)return{"max-height":a-r-(this.showHeader?i:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=is(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},ms({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+Rs++,this.debouncedUpdateLayout=Object(jn["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,i=void 0===t?"hasChildren":t,n=e.children,s=void 0===n?"children":n;this.store=fs(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:i,childrenColumnName:s});var r=new _s({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:r,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},Ws=Hs,qs=o(Ws,Pn,Mn,!1,null,null,null);qs.options.__file="packages/table/src/table.vue";var Ys=qs.exports;Ys.install=function(e){e.component(Ys.name,Ys)};var Ks=Ys,Us={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:"",className:"el-table-column--selection"},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Gs={selection:{renderHeader:function(e,t){var i=t.store;return e("el-checkbox",{attrs:{disabled:i.states.data&&0===i.states.data.length,indeterminate:i.states.selection.length>0&&!this.isAllSelected,value:this.isAllSelected},nativeOn:{click:this.toggleAllSelection}})},renderCell:function(e,t){var i=t.row,n=t.column,s=t.store,r=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:s.isSelected(i),disabled:!!n.selectable&&!n.selectable.call(null,i,r)},on:{input:function(){s.commit("rowSelectedChanged",i)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var i=t.column;return i.label||"#"},renderCell:function(e,t){var i=t.$index,n=t.column,s=i+1,r=n.index;return"number"===typeof r?s=i+r:"function"===typeof r&&(s=r(i)),e("div",[s])},sortable:!1},expand:{renderHeader:function(e,t){var i=t.column;return i.label||""},renderCell:function(e,t){var i=t.row,n=t.store,s=["el-table__expand-icon"];n.states.expandRows.indexOf(i)>-1&&s.push("el-table__expand-icon--expanded");var r=function(e){e.stopPropagation(),n.toggleRowExpansion(i)};return e("div",{class:s,on:{click:r}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function Xs(e,t){var i=t.row,n=t.column,s=t.$index,r=n.property,a=r&&Object(b["getPropByPath"])(i,r).v;return n&&n.formatter?n.formatter(i,n,a,s):a}function Zs(e,t){var i=t.row,n=t.treeNode,s=t.store;if(!n)return null;var r=[],a=function(e){e.stopPropagation(),s.loadOrToggle(i)};if(n.indent&&r.push(e("span",{class:"el-table__indent",style:{"padding-left":n.indent+"px"}})),"boolean"!==typeof n.expanded||n.noLazyChildren)r.push(e("span",{class:"el-table__placeholder"}));else{var o=["el-table__expand-icon",n.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];n.loading&&(l=["el-icon-loading"]),r.push(e("div",{class:o,on:{click:a}},[e("i",{class:l})]))}return r}var Qs=Object.assign||function(e){for(var t=1;t-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return es(this.width)},realMinWidth:function(){return ts(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,i=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:"-";if(!e)return null;var s=(dr[i]||dr["default"]).parser,r=t||ar[i];return s(e,r,n)},mr=function(e,t,i){if(!e)return null;var n=(dr[i]||dr["default"]).formatter,s=t||ar[i];return n(e,s)},vr=function(e,t){var i=function(e,t){var i=e instanceof Date,n=t instanceof Date;return i&&n?e.getTime()===t.getTime():!i&&!n&&e===t},n=e instanceof Array,s=t instanceof Array;return n&&s?e.length===t.length&&e.every((function(e,n){return i(e,t[n])})):!n&&!s&&i(e,t)},gr=function(e){return"string"===typeof e||e instanceof String},br=function(e){return null===e||void 0===e||gr(e)||Array.isArray(e)&&2===e.length&&e.every(gr)},yr={mixins:[O.a,rr],inject:{elForm:{default:""},elFormItem:{default:""}},props:{size:String,format:String,valueFormat:String,readonly:Boolean,placeholder:String,startPlaceholder:String,endPlaceholder:String,prefixIcon:String,clearIcon:{type:String,default:"el-icon-circle-close"},name:{default:"",validator:br},disabled:Boolean,clearable:{type:Boolean,default:!0},id:{default:"",validator:br},popperClass:String,editable:{type:Boolean,default:!0},align:{type:String,default:"left"},value:{},defaultValue:{},defaultTime:{},rangeSeparator:{default:"-"},pickerOptions:{},unlinkPanels:Boolean,validateEvent:{type:Boolean,default:!0}},components:{ElInput:m.a},directives:{Clickoutside:V.a},data:function(){return{pickerVisible:!1,showClose:!1,userInput:null,valueOnOpen:null,unwatchPickerOptions:null}},watch:{pickerVisible:function(e){this.readonly||this.pickerDisabled||(e?(this.showPicker(),this.valueOnOpen=Array.isArray(this.value)?[].concat(this.value):this.value):(this.hidePicker(),this.emitChange(this.value),this.userInput=null,this.validateEvent&&this.dispatch("ElFormItem","el.form.blur"),this.$emit("blur",this),this.blur()))},parsedValue:{immediate:!0,handler:function(e){this.picker&&(this.picker.value=e)}},defaultValue:function(e){this.picker&&(this.picker.defaultValue=e)},value:function(e,t){vr(e,t)||this.pickerVisible||!this.validateEvent||this.dispatch("ElFormItem","el.form.change",e)}},computed:{ranged:function(){return this.type.indexOf("range")>-1},reference:function(){var e=this.$refs.reference;return e.$el||e},refInput:function(){return this.reference?[].slice.call(this.reference.querySelectorAll("input")):[]},valueIsEmpty:function(){var e=this.value;if(Array.isArray(e)){for(var t=0,i=e.length;t0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.userInput=null,e.pickerVisible=e.picker.visible=i,e.emitInput(t),e.picker.resetView&&e.picker.resetView()})),this.picker.$on("select-range",(function(t,i,n){0!==e.refInput.length&&(n&&"min"!==n?"max"===n&&(e.refInput[1].setSelectionRange(t,i),e.refInput[1].focus()):(e.refInput[0].setSelectionRange(t,i),e.refInput[0].focus()))}))},unmountPicker:function(){this.picker&&(this.picker.$destroy(),this.picker.$off(),"function"===typeof this.unwatchPickerOptions&&this.unwatchPickerOptions(),this.picker.$el.parentNode.removeChild(this.picker.$el))},emitChange:function(e){vr(e,this.valueOnOpen)||(this.$emit("change",e),this.valueOnOpen=e,this.validateEvent&&this.dispatch("ElFormItem","el.form.change",e))},emitInput:function(e){var t=this.formatToValue(e);vr(this.value,t)||this.$emit("input",t)},isValidValue:function(e){return this.picker||this.mountPicker(),!this.picker.isValidValue||e&&this.picker.isValidValue(e)}}},_r=yr,xr=o(_r,ir,nr,!1,null,null,null);xr.options.__file="packages/date-picker/src/picker.vue";var Cr=xr.exports,wr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-enter":e.handleEnter,"after-leave":e.handleLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[e.showTime?i("div",{staticClass:"el-date-picker__time-header"},[i("span",{staticClass:"el-date-picker__editor-wrap"},[i("el-input",{attrs:{placeholder:e.t("el.datepicker.selectDate"),value:e.visibleDate,size:"small"},on:{input:function(t){return e.userInputDate=t},change:e.handleVisibleDateChange}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleTimePickClose,expression:"handleTimePickClose"}],staticClass:"el-date-picker__editor-wrap"},[i("el-input",{ref:"input",attrs:{placeholder:e.t("el.datepicker.selectTime"),value:e.visibleTime,size:"small"},on:{focus:function(t){e.timePickerVisible=!0},input:function(t){return e.userInputTime=t},change:e.handleVisibleTimeChange}}),i("time-picker",{ref:"timepicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.timePickerVisible},on:{pick:e.handleTimePick,mounted:e.proxyTimePickerDataProperties}})],1)]):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:"time"!==e.currentView,expression:"currentView !== 'time'"}],staticClass:"el-date-picker__header",class:{"el-date-picker__header--bordered":"year"===e.currentView||"month"===e.currentView}},[i("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevYear")},on:{click:e.prevYear}}),i("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevMonth")},on:{click:e.prevMonth}}),i("span",{staticClass:"el-date-picker__header-label",attrs:{role:"button"},on:{click:e.showYearPicker}},[e._v(e._s(e.yearLabel))]),i("span",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-date-picker__header-label",class:{active:"month"===e.currentView},attrs:{role:"button"},on:{click:e.showMonthPicker}},[e._v(e._s(e.t("el.datepicker.month"+(e.month+1))))]),i("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextYear")},on:{click:e.nextYear}}),i("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextMonth")},on:{click:e.nextMonth}})]),i("div",{staticClass:"el-picker-panel__content"},[i("date-table",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],attrs:{"selection-mode":e.selectionMode,"first-day-of-week":e.firstDayOfWeek,value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"cell-class-name":e.cellClassName,"disabled-date":e.disabledDate},on:{pick:e.handleDatePick}}),i("year-table",{directives:[{name:"show",rawName:"v-show",value:"year"===e.currentView,expression:"currentView === 'year'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleYearPick}}),i("month-table",{directives:[{name:"show",rawName:"v-show",value:"month"===e.currentView,expression:"currentView === 'month'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleMonthPick}})],1)])],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.footerVisible&&"date"===e.currentView,expression:"footerVisible && currentView === 'date'"}],staticClass:"el-picker-panel__footer"},[i("el-button",{directives:[{name:"show",rawName:"v-show",value:"dates"!==e.selectionMode,expression:"selectionMode !== 'dates'"}],staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.changeToNow}},[e._v("\n "+e._s(e.t("el.datepicker.now"))+"\n ")]),i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini"},on:{click:e.confirm}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1)])])},kr=[];wr._withStripped=!0;var Sr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-panel el-popper",class:e.popperClass},[i("div",{staticClass:"el-time-panel__content",class:{"has-seconds":e.showSeconds}},[i("time-spinner",{ref:"spinner",attrs:{"arrow-control":e.useArrow,"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,date:e.date},on:{change:e.handleChange,"select-range":e.setSelectionRange}})],1),i("div",{staticClass:"el-time-panel__footer"},[i("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:e.handleCancel}},[e._v(e._s(e.t("el.datepicker.cancel")))]),i("button",{staticClass:"el-time-panel__btn",class:{confirm:!e.disabled},attrs:{type:"button"},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Dr=[];Sr._withStripped=!0;var $r=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-time-spinner",class:{"has-seconds":e.showSeconds}},[e.arrowControl?e._e():[i("el-scrollbar",{ref:"hours",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("hours")},mousemove:function(t){e.adjustCurrentSpinner("hours")}}},e._l(e.hoursList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.hours,disabled:t},on:{click:function(i){e.handleClick("hours",{value:n,disabled:t})}}},[e._v(e._s(("0"+(e.amPmMode?n%12||12:n)).slice(-2))+e._s(e.amPm(n)))])})),0),i("el-scrollbar",{ref:"minutes",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("minutes")},mousemove:function(t){e.adjustCurrentSpinner("minutes")}}},e._l(e.minutesList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.minutes,disabled:!t},on:{click:function(t){e.handleClick("minutes",{value:n,disabled:!1})}}},[e._v(e._s(("0"+n).slice(-2)))])})),0),i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.showSeconds,expression:"showSeconds"}],ref:"seconds",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("seconds")},mousemove:function(t){e.adjustCurrentSpinner("seconds")}}},e._l(60,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.seconds},on:{click:function(t){e.handleClick("seconds",{value:n,disabled:!1})}}},[e._v(e._s(("0"+n).slice(-2)))])})),0)],e.arrowControl?[i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("hours")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"hours",staticClass:"el-time-spinner__list"},e._l(e.arrowHourList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.hours,disabled:e.hoursList[t]}},[e._v(e._s(void 0===t?"":("0"+(e.amPmMode?t%12||12:t)).slice(-2)+e.amPm(t)))])})),0)]),i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("minutes")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"minutes",staticClass:"el-time-spinner__list"},e._l(e.arrowMinuteList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.minutes}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]),e.showSeconds?i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("seconds")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"seconds",staticClass:"el-time-spinner__list"},e._l(e.arrowSecondList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.seconds}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]):e._e()]:e._e()],2)},Or=[];$r._withStripped=!0;var Er={components:{ElScrollbar:q.a},directives:{repeatClick:It},props:{date:{},defaultValue:{},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""}},computed:{hours:function(){return this.date.getHours()},minutes:function(){return this.date.getMinutes()},seconds:function(){return this.date.getSeconds()},hoursList:function(){return Object(sr["getRangeHours"])(this.selectableRange)},minutesList:function(){return Object(sr["getRangeMinutes"])(this.selectableRange,this.hours)},arrowHourList:function(){var e=this.hours;return[e>0?e-1:void 0,e,e<23?e+1:void 0]},arrowMinuteList:function(){var e=this.minutes;return[e>0?e-1:void 0,e,e<59?e+1:void 0]},arrowSecondList:function(){var e=this.seconds;return[e>0?e-1:void 0,e,e<59?e+1:void 0]}},data:function(){return{selectableRange:[],currentScrollbar:null}},mounted:function(){var e=this;this.$nextTick((function(){!e.arrowControl&&e.bindScrollEvent()}))},methods:{increase:function(){this.scrollDown(1)},decrease:function(){this.scrollDown(-1)},modifyDateField:function(e,t){switch(e){case"hours":this.$emit("change",Object(sr["modifyTime"])(this.date,t,this.minutes,this.seconds));break;case"minutes":this.$emit("change",Object(sr["modifyTime"])(this.date,this.hours,t,this.seconds));break;case"seconds":this.$emit("change",Object(sr["modifyTime"])(this.date,this.hours,this.minutes,t));break}},handleClick:function(e,t){var i=t.value,n=t.disabled;n||(this.modifyDateField(e,i),this.emitSelectRange(e),this.adjustSpinner(e,i))},emitSelectRange:function(e){"hours"===e?this.$emit("select-range",0,2):"minutes"===e?this.$emit("select-range",3,5):"seconds"===e&&this.$emit("select-range",6,8),this.currentScrollbar=e},bindScrollEvent:function(){var e=this,t=function(t){e.$refs[t].wrap.onscroll=function(i){e.handleScroll(t,i)}};t("hours"),t("minutes"),t("seconds")},handleScroll:function(e){var t=Math.min(Math.round((this.$refs[e].wrap.scrollTop-(.5*this.scrollBarHeight(e)-10)/this.typeItemHeight(e)+3)/this.typeItemHeight(e)),"hours"===e?23:59);this.modifyDateField(e,t)},adjustSpinners:function(){this.adjustSpinner("hours",this.hours),this.adjustSpinner("minutes",this.minutes),this.adjustSpinner("seconds",this.seconds)},adjustCurrentSpinner:function(e){this.adjustSpinner(e,this[e])},adjustSpinner:function(e,t){if(!this.arrowControl){var i=this.$refs[e].wrap;i&&(i.scrollTop=Math.max(0,t*this.typeItemHeight(e)))}},scrollDown:function(e){var t=this;this.currentScrollbar||this.emitSelectRange("hours");var i=this.currentScrollbar,n=this.hoursList,s=this[i];if("hours"===this.currentScrollbar){var r=Math.abs(e);e=e>0?1:-1;var a=n.length;while(a--&&r)s=(s+e+n.length)%n.length,n[s]||r--;if(n[s])return}else s=(s+e+60)%60;this.modifyDateField(i,s),this.adjustSpinner(i,s),this.$nextTick((function(){return t.emitSelectRange(t.currentScrollbar)}))},amPm:function(e){var t="a"===this.amPmMode.toLowerCase();if(!t)return"";var i="A"===this.amPmMode,n=e<12?" am":" pm";return i&&(n=n.toUpperCase()),n},typeItemHeight:function(e){return this.$refs[e].$el.querySelector("li").offsetHeight},scrollBarHeight:function(e){return this.$refs[e].$el.offsetHeight}}},Tr=Er,Pr=o(Tr,$r,Or,!1,null,null,null);Pr.options.__file="packages/date-picker/src/basic/time-spinner.vue";var Mr=Pr.exports,Nr={mixins:[g.a],components:{TimeSpinner:Mr},props:{visible:Boolean,timeArrowControl:Boolean},watch:{visible:function(e){var t=this;e?(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.spinner.emitSelectRange("hours")}))):this.needInitAdjust=!0},value:function(e){var t=this,i=void 0;e instanceof Date?i=Object(sr["limitTimeRange"])(e,this.selectableRange,this.format):e||(i=this.defaultValue?new Date(this.defaultValue):new Date),this.date=i,this.visible&&this.needInitAdjust&&(this.$nextTick((function(e){return t.adjustSpinners()})),this.needInitAdjust=!1)},selectableRange:function(e){this.$refs.spinner.selectableRange=e},defaultValue:function(e){Object(sr["isDate"])(this.value)||(this.date=e?new Date(e):new Date)}},data:function(){return{popperClass:"",format:"HH:mm:ss",value:"",defaultValue:null,date:new Date,oldValue:new Date,selectableRange:[],selectionRange:[0,2],disabled:!1,arrowControl:!1,needInitAdjust:!0}},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},useArrow:function(){return this.arrowControl||this.timeArrowControl||!1},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},methods:{handleCancel:function(){this.$emit("pick",this.oldValue,!1)},handleChange:function(e){this.visible&&(this.date=Object(sr["clearMilliseconds"])(e),this.isValidValue(this.date)&&this.$emit("pick",this.date,!0))},setSelectionRange:function(e,t){this.$emit("select-range",e,t),this.selectionRange=[e,t]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(!t){var i=Object(sr["clearMilliseconds"])(Object(sr["limitTimeRange"])(this.date,this.selectableRange,this.format));this.$emit("pick",i,e,t)}},handleKeydown:function(e){var t=e.keyCode,i={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var n=i[t];return this.changeSelectionRange(n),void e.preventDefault()}if(38===t||40===t){var s=i[t];return this.$refs.spinner.scrollDown(s),void e.preventDefault()}},isValidValue:function(e){return Object(sr["timeWithinRange"])(e,this.selectableRange,this.format)},adjustSpinners:function(){return this.$refs.spinner.adjustSpinners()},changeSelectionRange:function(e){var t=[0,3].concat(this.showSeconds?[6]:[]),i=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),n=t.indexOf(this.selectionRange[0]),s=(n+e+t.length)%t.length;this.$refs.spinner.emitSelectRange(i[s])}},mounted:function(){var e=this;this.$nextTick((function(){return e.handleConfirm(!0,!0)})),this.$emit("mounted")}},Ir=Nr,jr=o(Ir,Sr,Dr,!1,null,null,null);jr.options.__file="packages/date-picker/src/panel/time.vue";var Fr=jr.exports,Lr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-year-table",on:{click:e.handleYearTableClick}},[i("tbody",[i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+0)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+1)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+1))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+2)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+2))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+3)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+3))])])]),i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+4)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+4))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+5)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+5))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+6)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+6))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+7)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+7))])])]),i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+8)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+8))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+9)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+9))])]),i("td"),i("td")])])])},Ar=[];Lr._withStripped=!0;var Vr=function(e){var t=Object(sr["getDayCountOfYear"])(e),i=new Date(e,0,1);return Object(sr["range"])(t).map((function(e){return Object(sr["nextDate"])(i,e)}))},Br={props:{disabledDate:{},value:{},defaultValue:{validator:function(e){return null===e||e instanceof Date&&Object(sr["isDate"])(e)}},date:{}},computed:{startYear:function(){return 10*Math.floor(this.date.getFullYear()/10)}},methods:{getCellStyle:function(e){var t={},i=new Date;return t.disabled="function"===typeof this.disabledDate&&Vr(e).every(this.disabledDate),t.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(t){return t.getFullYear()===e}))>=0,t.today=i.getFullYear()===e,t.default=this.defaultValue&&this.defaultValue.getFullYear()===e,t},handleYearTableClick:function(e){var t=e.target;if("A"===t.tagName){if(Object(Ae["hasClass"])(t.parentNode,"disabled"))return;var i=t.textContent||t.innerText;this.$emit("pick",Number(i))}}}},zr=Br,Rr=o(zr,Lr,Ar,!1,null,null,null);Rr.options.__file="packages/date-picker/src/basic/year-table.vue";var Hr=Rr.exports,Wr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-month-table",on:{click:e.handleMonthTableClick,mousemove:e.handleMouseMove}},[i("tbody",e._l(e.rows,(function(t,n){return i("tr",{key:n},e._l(t,(function(t,n){return i("td",{key:n,class:e.getCellStyle(t)},[i("div",[i("a",{staticClass:"cell"},[e._v(e._s(e.t("el.datepicker.months."+e.months[t.text])))])])])})),0)})),0)])},qr=[];Wr._withStripped=!0;var Yr=function(e,t){var i=Object(sr["getDayCountOfMonth"])(e,t),n=new Date(e,t,1);return Object(sr["range"])(i).map((function(e){return Object(sr["nextDate"])(n,e)}))},Kr=function(e){return new Date(e.getFullYear(),e.getMonth())},Ur=function(e){return"number"===typeof e||"string"===typeof e?Kr(new Date(e)).getTime():e instanceof Date?Kr(e).getTime():NaN},Gr={props:{disabledDate:{},value:{},selectionMode:{default:"month"},minDate:{},maxDate:{},defaultValue:{validator:function(e){return null===e||Object(sr["isDate"])(e)||Array.isArray(e)&&e.every(sr["isDate"])}},date:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},mixins:[g.a],watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){Ur(e)!==Ur(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){Ur(e)!==Ur(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{months:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tableRows:[[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var i=new Date(t);return this.date.getFullYear()===i.getFullYear()&&Number(e.text)===i.getMonth()},getCellStyle:function(e){var t=this,i={},n=this.date.getFullYear(),s=new Date,r=e.text,a=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[];return i.disabled="function"===typeof this.disabledDate&&Yr(n,r).every(this.disabledDate),i.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(e){return e.getFullYear()===n&&e.getMonth()===r}))>=0,i.today=s.getFullYear()===n&&s.getMonth()===r,i.default=a.some((function(i){return t.cellMatchesDate(e,i)})),e.inRange&&(i["in-range"]=!0,e.start&&(i["start-date"]=!0),e.end&&(i["end-date"]=!0)),i},getMonthOfCell:function(e){var t=this.date.getFullYear();return new Date(t,e,1)},markRange:function(e,t){e=Ur(e),t=Ur(t)||e;var i=[Math.min(e,t),Math.max(e,t)];e=i[0],t=i[1];for(var n=this.rows,s=0,r=n.length;s=e&&h<=t,c.start=e&&h===e,c.end=t&&h===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex,n=t.cellIndex;this.rows[i][n].disabled||i===this.lastRow&&n===this.lastColumn||(this.lastRow=i,this.lastColumn=n,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getMonthOfCell(4*i+n)}}))}}},handleMonthTableClick:function(e){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName&&!Object(Ae["hasClass"])(t,"disabled")){var i=t.cellIndex,n=t.parentNode.rowIndex,s=4*n+i,r=this.getMonthOfCell(s);"range"===this.selectionMode?this.rangeState.selecting?(r>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:r}):this.$emit("pick",{minDate:r,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:r,maxDate:null}),this.rangeState.selecting=!0):this.$emit("pick",s)}}},computed:{rows:function(){for(var e=this,t=this.tableRows,i=this.disabledDate,n=[],s=Ur(new Date),r=0;r<3;r++)for(var a=t[r],o=function(t){var o=a[t];o||(o={row:r,column:t,type:"normal",inRange:!1,start:!1,end:!1}),o.type="normal";var l=4*r+t,c=new Date(e.date.getFullYear(),l).getTime();o.inRange=c>=Ur(e.minDate)&&c<=Ur(e.maxDate),o.start=e.minDate&&c===Ur(e.minDate),o.end=e.maxDate&&c===Ur(e.maxDate);var u=c===s;u&&(o.type="today"),o.text=l;var h=new Date(c);o.disabled="function"===typeof i&&i(h),o.selected=Object(b["arrayFind"])(n,(function(e){return e.getTime()===h.getTime()})),e.$set(a,t,o)},l=0;l<4;l++)o(l);return t}}},Xr=Gr,Zr=o(Xr,Wr,qr,!1,null,null,null);Zr.options.__file="packages/date-picker/src/basic/month-table.vue";var Qr=Zr.exports,Jr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-date-table",class:{"is-week-mode":"week"===e.selectionMode},attrs:{cellspacing:"0",cellpadding:"0"},on:{click:e.handleClick,mousemove:e.handleMouseMove}},[i("tbody",[i("tr",[e.showWeekNumber?i("th",[e._v(e._s(e.t("el.datepicker.week")))]):e._e(),e._l(e.WEEKS,(function(t,n){return i("th",{key:n},[e._v(e._s(e.t("el.datepicker.weeks."+t)))])}))],2),e._l(e.rows,(function(t,n){return i("tr",{key:n,staticClass:"el-date-table__row",class:{current:e.isWeekActive(t[1])}},e._l(t,(function(t,n){return i("td",{key:n,class:e.getCellClasses(t)},[i("div",[i("span",[e._v("\n "+e._s(t.text)+"\n ")])])])})),0)}))],2)])},ea=[];Jr._withStripped=!0;var ta=["sun","mon","tue","wed","thu","fri","sat"],ia=function(e){return"number"===typeof e||"string"===typeof e?Object(sr["clearTime"])(new Date(e)).getTime():e instanceof Date?Object(sr["clearTime"])(e).getTime():NaN},na=function(e,t){var i="function"===typeof t?Object(b["arrayFindIndex"])(e,t):e.indexOf(t);return i>=0?[].concat(e.slice(0,i),e.slice(i+1)):e},sa={mixins:[g.a],props:{firstDayOfWeek:{default:7,type:Number,validator:function(e){return e>=1&&e<=7}},value:{},defaultValue:{validator:function(e){return null===e||Object(sr["isDate"])(e)||Array.isArray(e)&&e.every(sr["isDate"])}},date:{},selectionMode:{default:"day"},showWeekNumber:{type:Boolean,default:!1},disabledDate:{},cellClassName:{},minDate:{},maxDate:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},computed:{offsetDay:function(){var e=this.firstDayOfWeek;return e>3?7-e:-e},WEEKS:function(){var e=this.firstDayOfWeek;return ta.concat(ta).slice(e,e+7)},year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},startDate:function(){return Object(sr["getStartDateOfMonth"])(this.year,this.month)},rows:function(){var e=this,t=new Date(this.year,this.month,1),i=Object(sr["getFirstDayOfMonth"])(t),n=Object(sr["getDayCountOfMonth"])(t.getFullYear(),t.getMonth()),s=Object(sr["getDayCountOfMonth"])(t.getFullYear(),0===t.getMonth()?11:t.getMonth()-1);i=0===i?7:i;for(var r=this.offsetDay,a=this.tableRows,o=1,l=this.startDate,c=this.disabledDate,u=this.cellClassName,h="dates"===this.selectionMode?Object(b["coerceTruthyValueToArray"])(this.value):[],d=ia(new Date),p=0;p<6;p++){var f=a[p];this.showWeekNumber&&(f[0]||(f[0]={type:"week",text:Object(sr["getWeekNumber"])(Object(sr["nextDate"])(l,7*p+1))}));for(var m=function(t){var a=f[e.showWeekNumber?t+1:t];a||(a={row:p,column:t,type:"normal",inRange:!1,start:!1,end:!1}),a.type="normal";var m=7*p+t,v=Object(sr["nextDate"])(l,m-r).getTime();a.inRange=v>=ia(e.minDate)&&v<=ia(e.maxDate),a.start=e.minDate&&v===ia(e.minDate),a.end=e.maxDate&&v===ia(e.maxDate);var g=v===d;if(g&&(a.type="today"),p>=0&&p<=1){var y=i+r<0?7+i+r:i+r;t+7*p>=y?a.text=o++:(a.text=s-(y-t%7)+1+7*p,a.type="prev-month")}else o<=n?a.text=o++:(a.text=o++-n,a.type="next-month");var _=new Date(v);a.disabled="function"===typeof c&&c(_),a.selected=Object(b["arrayFind"])(h,(function(e){return e.getTime()===_.getTime()})),a.customClass="function"===typeof u&&u(_),e.$set(f,e.showWeekNumber?t+1:t,a)},v=0;v<7;v++)m(v);if("week"===this.selectionMode){var g=this.showWeekNumber?1:0,y=this.showWeekNumber?7:6,_=this.isWeekActive(f[g+1]);f[g].inRange=_,f[g].start=_,f[y].inRange=_,f[y].end=_}}return a}},watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){ia(e)!==ia(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){ia(e)!==ia(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{tableRows:[[],[],[],[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var i=new Date(t);return this.year===i.getFullYear()&&this.month===i.getMonth()&&Number(e.text)===i.getDate()},getCellClasses:function(e){var t=this,i=this.selectionMode,n=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[],s=[];return"normal"!==e.type&&"today"!==e.type||e.disabled?s.push(e.type):(s.push("available"),"today"===e.type&&s.push("today")),"normal"===e.type&&n.some((function(i){return t.cellMatchesDate(e,i)}))&&s.push("default"),"day"!==i||"normal"!==e.type&&"today"!==e.type||!this.cellMatchesDate(e,this.value)||s.push("current"),!e.inRange||"normal"!==e.type&&"today"!==e.type&&"week"!==this.selectionMode||(s.push("in-range"),e.start&&s.push("start-date"),e.end&&s.push("end-date")),e.disabled&&s.push("disabled"),e.selected&&s.push("selected"),e.customClass&&s.push(e.customClass),s.join(" ")},getDateOfCell:function(e,t){var i=7*e+(t-(this.showWeekNumber?1:0))-this.offsetDay;return Object(sr["nextDate"])(this.startDate,i)},isWeekActive:function(e){if("week"!==this.selectionMode)return!1;var t=new Date(this.year,this.month,1),i=t.getFullYear(),n=t.getMonth();if("prev-month"===e.type&&(t.setMonth(0===n?11:n-1),t.setFullYear(0===n?i-1:i)),"next-month"===e.type&&(t.setMonth(11===n?0:n+1),t.setFullYear(11===n?i+1:i)),t.setDate(parseInt(e.text,10)),Object(sr["isDate"])(this.value)){var s=(this.value.getDay()-this.firstDayOfWeek+7)%7-1,r=Object(sr["prevDate"])(this.value,s);return r.getTime()===t.getTime()}return!1},markRange:function(e,t){e=ia(e),t=ia(t)||e;var i=[Math.min(e,t),Math.max(e,t)];e=i[0],t=i[1];for(var n=this.startDate,s=this.rows,r=0,a=s.length;r=e&&d<=t,u.start=e&&d===e,u.end=t&&d===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex-1,n=t.cellIndex;this.rows[i][n].disabled||i===this.lastRow&&n===this.lastColumn||(this.lastRow=i,this.lastColumn=n,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getDateOfCell(i,n)}}))}}},handleClick:function(e){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex-1,n="week"===this.selectionMode?1:t.cellIndex,s=this.rows[i][n];if(!s.disabled&&"week"!==s.type){var r=this.getDateOfCell(i,n);if("range"===this.selectionMode)this.rangeState.selecting?(r>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:r}):this.$emit("pick",{minDate:r,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:r,maxDate:null}),this.rangeState.selecting=!0);else if("day"===this.selectionMode)this.$emit("pick",r);else if("week"===this.selectionMode){var a=Object(sr["getWeekNumber"])(r),o=r.getFullYear()+"w"+a;this.$emit("pick",{year:r.getFullYear(),week:a,value:o,date:r})}else if("dates"===this.selectionMode){var l=this.value||[],c=s.selected?na(l,(function(e){return e.getTime()===r.getTime()})):[].concat(l,[r]);this.$emit("pick",c)}}}}}},ra=sa,aa=o(ra,Jr,ea,!1,null,null,null);aa.options.__file="packages/date-picker/src/basic/date-table.vue";var oa=aa.exports,la={mixins:[g.a],directives:{Clickoutside:V.a},watch:{showTime:function(e){var t=this;e&&this.$nextTick((function(e){var i=t.$refs.input.$el;i&&(t.pickerWidth=i.getBoundingClientRect().width+10)}))},value:function(e){"dates"===this.selectionMode&&this.value||(Object(sr["isDate"])(e)?this.date=new Date(e):this.date=this.getDefaultValue())},defaultValue:function(e){Object(sr["isDate"])(this.value)||(this.date=e?new Date(e):new Date)},timePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$refs.timepicker.adjustSpinners()}))},selectionMode:function(e){"month"===e?"year"===this.currentView&&"month"===this.currentView||(this.currentView="month"):"dates"===e&&(this.currentView="date")}},methods:{proxyTimePickerDataProperties:function(){var e=this,t=function(t){e.$refs.timepicker.format=t},i=function(t){e.$refs.timepicker.value=t},n=function(t){e.$refs.timepicker.date=t},s=function(t){e.$refs.timepicker.selectableRange=t};this.$watch("value",i),this.$watch("date",n),this.$watch("selectableRange",s),t(this.timeFormat),i(this.value),n(this.date),s(this.selectableRange)},handleClear:function(){this.date=this.getDefaultValue(),this.$emit("pick",null)},emit:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s0)||Object(sr["timeWithinRange"])(e,this.selectableRange,this.format||"HH:mm:ss")}},components:{TimePicker:Fr,YearTable:Hr,MonthTable:Qr,DateTable:oa,ElInput:m.a,ElButton:ae.a},data:function(){return{popperClass:"",date:new Date,value:"",defaultValue:null,defaultTime:null,showTime:!1,selectionMode:"day",shortcuts:"",visible:!1,currentView:"date",disabledDate:"",cellClassName:"",selectableRange:[],firstDayOfWeek:7,showWeekNumber:!1,timePickerVisible:!1,format:"",arrowControl:!1,userInputDate:null,userInputTime:null}},computed:{year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},week:function(){return Object(sr["getWeekNumber"])(this.date)},monthDate:function(){return this.date.getDate()},footerVisible:function(){return this.showTime||"dates"===this.selectionMode},visibleTime:function(){return null!==this.userInputTime?this.userInputTime:Object(sr["formatDate"])(this.value||this.defaultValue,this.timeFormat)},visibleDate:function(){return null!==this.userInputDate?this.userInputDate:Object(sr["formatDate"])(this.value||this.defaultValue,this.dateFormat)},yearLabel:function(){var e=this.t("el.datepicker.year");if("year"===this.currentView){var t=10*Math.floor(this.year/10);return e?t+" "+e+" - "+(t+9)+" "+e:t+" - "+(t+9)}return this.year+" "+e},timeFormat:function(){return this.format?Object(sr["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(sr["extractDateFormat"])(this.format):"yyyy-MM-dd"}}},ca=la,ua=o(ca,wr,kr,!1,null,null,null);ua.options.__file="packages/date-picker/src/panel/date.vue";var ha=ua.exports,da=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[e.showTime?i("div",{staticClass:"el-date-range-picker__time-header"},[i("span",{staticClass:"el-date-range-picker__editors-wrap"},[i("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{ref:"minInput",staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startDate"),value:e.minVisibleDate},on:{input:function(t){return e.handleDateInput(t,"min")},change:function(t){return e.handleDateChange(t,"min")}}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMinTimeClose,expression:"handleMinTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startTime"),value:e.minVisibleTime},on:{focus:function(t){e.minTimePickerVisible=!0},input:function(t){return e.handleTimeInput(t,"min")},change:function(t){return e.handleTimeChange(t,"min")}}}),i("time-picker",{ref:"minTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.minTimePickerVisible},on:{pick:e.handleMinTimePick,mounted:function(t){e.$refs.minTimePicker.format=e.timeFormat}}})],1)]),i("span",{staticClass:"el-icon-arrow-right"}),i("span",{staticClass:"el-date-range-picker__editors-wrap is-right"},[i("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endDate"),value:e.maxVisibleDate,readonly:!e.minDate},on:{input:function(t){return e.handleDateInput(t,"max")},change:function(t){return e.handleDateChange(t,"max")}}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMaxTimeClose,expression:"handleMaxTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endTime"),value:e.maxVisibleTime,readonly:!e.minDate},on:{focus:function(t){e.minDate&&(e.maxTimePickerVisible=!0)},input:function(t){return e.handleTimeInput(t,"max")},change:function(t){return e.handleTimeChange(t,"max")}}}),i("time-picker",{ref:"maxTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.maxTimePickerVisible},on:{pick:e.handleMaxTimePick,mounted:function(t){e.$refs.maxTimePicker.format=e.timeFormat}}})],1)])]):e._e(),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[i("div",{staticClass:"el-date-range-picker__header"},[i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevMonth}}),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.leftNextMonth}}):e._e(),i("div",[e._v(e._s(e.leftLabel))])]),i("date-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[i("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.rightPrevMonth}}):e._e(),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",attrs:{type:"button"},on:{click:e.rightNextMonth}}),i("div",[e._v(e._s(e.rightLabel))])]),i("date-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2),e.showTime?i("div",{staticClass:"el-picker-panel__footer"},[i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.handleClear}},[e._v("\n "+e._s(e.t("el.datepicker.clear"))+"\n ")]),i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm(!1)}}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1):e._e()])])},pa=[];da._withStripped=!0;var fa=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(sr["nextDate"])(new Date(e),1)]:[new Date,Object(sr["nextDate"])(new Date,1)]},ma={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.leftDate.getMonth()+1))},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.rightDate.getMonth()+1))},leftYear:function(){return this.leftDate.getFullYear()},leftMonth:function(){return this.leftDate.getMonth()},leftMonthDate:function(){return this.leftDate.getDate()},rightYear:function(){return this.rightDate.getFullYear()},rightMonth:function(){return this.rightDate.getMonth()},rightMonthDate:function(){return this.rightDate.getDate()},minVisibleDate:function(){return null!==this.dateUserInput.min?this.dateUserInput.min:this.minDate?Object(sr["formatDate"])(this.minDate,this.dateFormat):""},maxVisibleDate:function(){return null!==this.dateUserInput.max?this.dateUserInput.max:this.maxDate||this.minDate?Object(sr["formatDate"])(this.maxDate||this.minDate,this.dateFormat):""},minVisibleTime:function(){return null!==this.timeUserInput.min?this.timeUserInput.min:this.minDate?Object(sr["formatDate"])(this.minDate,this.timeFormat):""},maxVisibleTime:function(){return null!==this.timeUserInput.max?this.timeUserInput.max:this.maxDate||this.minDate?Object(sr["formatDate"])(this.maxDate||this.minDate,this.timeFormat):""},timeFormat:function(){return this.format?Object(sr["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(sr["extractDateFormat"])(this.format):"yyyy-MM-dd"},enableMonthArrow:function(){var e=(this.leftMonth+1)%12,t=this.leftMonth+1>=12?1:0;return this.unlinkPanels&&new Date(this.leftYear+t,e)=12}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(sr["nextMonth"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},showTime:!1,shortcuts:"",visible:"",disabledDate:"",cellClassName:"",firstDayOfWeek:7,minTimePickerVisible:!1,maxTimePickerVisible:!1,format:"",arrowControl:!1,unlinkPanels:!1,dateUserInput:{min:null,max:null},timeUserInput:{min:null,max:null}}},watch:{minDate:function(e){var t=this;this.dateUserInput.min=null,this.timeUserInput.min=null,this.$nextTick((function(){if(t.$refs.maxTimePicker&&t.maxDate&&t.maxDatethis.maxDate&&(this.maxDate=this.minDate)):(this.maxDate=Object(sr["modifyDate"])(this.maxDate,i.getFullYear(),i.getMonth(),i.getDate()),this.maxDatethis.maxDate&&(this.maxDate=this.minDate),this.$refs.minTimePicker.value=this.minDate,this.minTimePickerVisible=!1):(this.maxDate=Object(sr["modifyTime"])(this.maxDate,i.getHours(),i.getMinutes(),i.getSeconds()),this.maxDate1&&void 0!==arguments[1])||arguments[1],n=this.defaultTime||[],s=Object(sr["modifyWithTimeString"])(e.minDate,n[0]),r=Object(sr["modifyWithTimeString"])(e.maxDate,n[1]);this.maxDate===r&&this.minDate===s||(this.onPick&&this.onPick(e),this.maxDate=r,this.minDate=s,setTimeout((function(){t.maxDate=r,t.minDate=s}),10),i&&!this.showTime&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleMinTimePick:function(e,t,i){this.minDate=this.minDate||new Date,e&&(this.minDate=Object(sr["modifyTime"])(this.minDate,e.getHours(),e.getMinutes(),e.getSeconds())),i||(this.minTimePickerVisible=t),(!this.maxDate||this.maxDate&&this.maxDate.getTime()this.maxDate.getTime()&&(this.minDate=new Date(this.maxDate))},handleMaxTimeClose:function(){this.maxTimePickerVisible=!1},leftPrevYear:function(){this.leftDate=Object(sr["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(sr["nextMonth"])(this.leftDate))},leftPrevMonth:function(){this.leftDate=Object(sr["prevMonth"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(sr["nextMonth"])(this.leftDate))},rightNextYear:function(){this.unlinkPanels?this.rightDate=Object(sr["nextYear"])(this.rightDate):(this.leftDate=Object(sr["nextYear"])(this.leftDate),this.rightDate=Object(sr["nextMonth"])(this.leftDate))},rightNextMonth:function(){this.unlinkPanels?this.rightDate=Object(sr["nextMonth"])(this.rightDate):(this.leftDate=Object(sr["nextMonth"])(this.leftDate),this.rightDate=Object(sr["nextMonth"])(this.leftDate))},leftNextYear:function(){this.leftDate=Object(sr["nextYear"])(this.leftDate)},leftNextMonth:function(){this.leftDate=Object(sr["nextMonth"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(sr["prevYear"])(this.rightDate)},rightPrevMonth:function(){this.rightDate=Object(sr["prevMonth"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(sr["isDate"])(e[0])&&Object(sr["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate&&null==this.maxDate&&(this.rangeState.selecting=!1),this.minDate=this.value&&Object(sr["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(sr["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{TimePicker:Fr,DateTable:oa,ElInput:m.a,ElButton:ae.a}},va=ma,ga=o(va,da,pa,!1,null,null,null);ga.options.__file="packages/date-picker/src/panel/date-range.vue";var ba=ga.exports,ya=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[i("div",{staticClass:"el-date-range-picker__header"},[i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),i("div",[e._v(e._s(e.leftLabel))])]),i("month-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[i("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),i("div",[e._v(e._s(e.rightLabel))])]),i("month-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2)])])},_a=[];ya._withStripped=!0;var xa=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(sr["nextMonth"])(new Date(e))]:[new Date,Object(sr["nextMonth"])(new Date)]},Ca={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")},leftYear:function(){return this.leftDate.getFullYear()},rightYear:function(){return this.rightDate.getFullYear()===this.leftDate.getFullYear()?this.leftDate.getFullYear()+1:this.rightDate.getFullYear()},enableYearArrow:function(){return this.unlinkPanels&&this.rightYear>this.leftYear+1}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(sr["nextYear"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},shortcuts:"",visible:"",disabledDate:"",format:"",arrowControl:!1,unlinkPanels:!1}},watch:{value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(sr["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(sr["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),i=this.maxDate.getFullYear();this.rightDate=t===i?Object(sr["nextYear"])(this.maxDate):this.maxDate}else this.rightDate=Object(sr["nextYear"])(this.leftDate);else this.leftDate=xa(this.defaultValue)[0],this.rightDate=Object(sr["nextYear"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=xa(e),i=t[0],n=t[1];this.leftDate=i,this.rightDate=e&&e[1]&&i.getFullYear()!==n.getFullYear()&&this.unlinkPanels?n:Object(sr["nextYear"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=xa(this.defaultValue)[0],this.rightDate=Object(sr["nextYear"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleRangePick:function(e){var t=this,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.defaultTime||[],s=Object(sr["modifyWithTimeString"])(e.minDate,n[0]),r=Object(sr["modifyWithTimeString"])(e.maxDate,n[1]);this.maxDate===r&&this.minDate===s||(this.onPick&&this.onPick(e),this.maxDate=r,this.minDate=s,setTimeout((function(){t.maxDate=r,t.minDate=s}),10),i&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},leftPrevYear:function(){this.leftDate=Object(sr["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(sr["prevYear"])(this.rightDate))},rightNextYear:function(){this.unlinkPanels||(this.leftDate=Object(sr["nextYear"])(this.leftDate)),this.rightDate=Object(sr["nextYear"])(this.rightDate)},leftNextYear:function(){this.leftDate=Object(sr["nextYear"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(sr["prevYear"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(sr["isDate"])(e[0])&&Object(sr["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(sr["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(sr["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{MonthTable:Qr,ElInput:m.a,ElButton:ae.a}},wa=Ca,ka=o(wa,ya,_a,!1,null,null,null);ka.options.__file="packages/date-picker/src/panel/month-range.vue";var Sa=ka.exports,Da=function(e){return"daterange"===e||"datetimerange"===e?ba:"monthrange"===e?Sa:ha},$a={mixins:[Cr],name:"ElDatePicker",props:{type:{type:String,default:"date"},timeArrowControl:Boolean},watch:{type:function(e){this.picker?(this.unmountPicker(),this.panel=Da(e),this.mountPicker()):this.panel=Da(e)}},created:function(){this.panel=Da(this.type)},install:function(e){e.component($a.name,$a)}},Oa=$a,Ea=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],ref:"popper",staticClass:"el-picker-panel time-select el-popper",class:e.popperClass,style:{width:e.width+"px"}},[i("el-scrollbar",{attrs:{noresize:"","wrap-class":"el-picker-panel__content"}},e._l(e.items,(function(t){return i("div",{key:t.value,staticClass:"time-select-item",class:{selected:e.value===t.value,disabled:t.disabled,default:t.value===e.defaultValue},attrs:{disabled:t.disabled},on:{click:function(i){e.handleClick(t)}}},[e._v(e._s(t.value))])})),0)],1)])},Ta=[];Ea._withStripped=!0;var Pa=function(e){var t=(e||"").split(":");if(t.length>=2){var i=parseInt(t[0],10),n=parseInt(t[1],10);return{hours:i,minutes:n}}return null},Ma=function(e,t){var i=Pa(e),n=Pa(t),s=i.minutes+60*i.hours,r=n.minutes+60*n.hours;return s===r?0:s>r?1:-1},Na=function(e){return(e.hours<10?"0"+e.hours:e.hours)+":"+(e.minutes<10?"0"+e.minutes:e.minutes)},Ia=function(e,t){var i=Pa(e),n=Pa(t),s={hours:i.hours,minutes:i.minutes};return s.minutes+=n.minutes,s.hours+=n.hours,s.hours+=Math.floor(s.minutes/60),s.minutes=s.minutes%60,Na(s)},ja={components:{ElScrollbar:q.a},watch:{value:function(e){var t=this;e&&this.$nextTick((function(){return t.scrollToOption()}))}},methods:{handleClick:function(e){e.disabled||this.$emit("pick",e.value)},handleClear:function(){this.$emit("pick",null)},scrollToOption:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".selected",t=this.$refs.popper.querySelector(".el-picker-panel__content");tn()(t,t.querySelector(e))},handleMenuEnter:function(){var e=this,t=-1!==this.items.map((function(e){return e.value})).indexOf(this.value),i=-1!==this.items.map((function(e){return e.value})).indexOf(this.defaultValue),n=(t?".selected":i&&".default")||".time-select-item:not(.disabled)";this.$nextTick((function(){return e.scrollToOption(n)}))},scrollDown:function(e){var t=this.items,i=t.length,n=t.length,s=t.map((function(e){return e.value})).indexOf(this.value);while(n--)if(s=(s+e+i)%i,!t[s].disabled)return void this.$emit("pick",t[s].value,!0)},isValidValue:function(e){return-1!==this.items.filter((function(e){return!e.disabled})).map((function(e){return e.value})).indexOf(e)},handleKeydown:function(e){var t=e.keyCode;if(38===t||40===t){var i={40:1,38:-1},n=i[t.toString()];return this.scrollDown(n),void e.stopPropagation()}}},data:function(){return{popperClass:"",start:"09:00",end:"18:00",step:"00:30",value:"",defaultValue:"",visible:!1,minTime:"",maxTime:"",width:0}},computed:{items:function(){var e=this.start,t=this.end,i=this.step,n=[];if(e&&t&&i){var s=e;while(Ma(s,t)<=0)n.push({value:s,disabled:Ma(s,this.minTime||"-1:-1")<=0||Ma(s,this.maxTime||"100:100")>=0}),s=Ia(s,i)}return n}}},Fa=ja,La=o(Fa,Ea,Ta,!1,null,null,null);La.options.__file="packages/date-picker/src/panel/time-select.vue";var Aa=La.exports,Va={mixins:[Cr],name:"ElTimeSelect",componentName:"ElTimeSelect",props:{type:{type:String,default:"time-select"}},beforeCreate:function(){this.panel=Aa},install:function(e){e.component(Va.name,Va)}},Ba=Va,za=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-range-picker el-picker-panel el-popper",class:e.popperClass},[i("div",{staticClass:"el-time-range-picker__content"},[i("div",{staticClass:"el-time-range-picker__cell"},[i("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.startTime")))]),i("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[i("time-spinner",{ref:"minSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.minDate},on:{change:e.handleMinChange,"select-range":e.setMinSelectionRange}})],1)]),i("div",{staticClass:"el-time-range-picker__cell"},[i("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.endTime")))]),i("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[i("time-spinner",{ref:"maxSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.maxDate},on:{change:e.handleMaxChange,"select-range":e.setMaxSelectionRange}})],1)])]),i("div",{staticClass:"el-time-panel__footer"},[i("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:function(t){e.handleCancel()}}},[e._v(e._s(e.t("el.datepicker.cancel")))]),i("button",{staticClass:"el-time-panel__btn confirm",attrs:{type:"button",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Ra=[];za._withStripped=!0;var Ha=Object(sr["parseDate"])("00:00:00","HH:mm:ss"),Wa=Object(sr["parseDate"])("23:59:59","HH:mm:ss"),qa=function(e){return Object(sr["modifyDate"])(Ha,e.getFullYear(),e.getMonth(),e.getDate())},Ya=function(e){return Object(sr["modifyDate"])(Wa,e.getFullYear(),e.getMonth(),e.getDate())},Ka=function(e,t){return new Date(Math.min(e.getTime()+t,Ya(e).getTime()))},Ua={mixins:[g.a],components:{TimeSpinner:Mr},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},offset:function(){return this.showSeconds?11:8},spinner:function(){return this.selectionRange[0]this.maxDate.getTime()},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},data:function(){return{popperClass:"",minDate:new Date,maxDate:new Date,value:[],oldValue:[new Date,new Date],defaultValue:null,format:"HH:mm:ss",visible:!1,selectionRange:[0,2],arrowControl:!1}},watch:{value:function(e){Array.isArray(e)?(this.minDate=new Date(e[0]),this.maxDate=new Date(e[1])):Array.isArray(this.defaultValue)?(this.minDate=new Date(this.defaultValue[0]),this.maxDate=new Date(this.defaultValue[1])):this.defaultValue?(this.minDate=new Date(this.defaultValue),this.maxDate=Ka(new Date(this.defaultValue),36e5)):(this.minDate=new Date,this.maxDate=Ka(new Date,36e5))},visible:function(e){var t=this;e&&(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.minSpinner.emitSelectRange("hours")})))}},methods:{handleClear:function(){this.$emit("pick",null)},handleCancel:function(){this.$emit("pick",this.oldValue)},handleMinChange:function(e){this.minDate=Object(sr["clearMilliseconds"])(e),this.handleChange()},handleMaxChange:function(e){this.maxDate=Object(sr["clearMilliseconds"])(e),this.handleChange()},handleChange:function(){this.isValidValue([this.minDate,this.maxDate])&&(this.$refs.minSpinner.selectableRange=[[qa(this.minDate),this.maxDate]],this.$refs.maxSpinner.selectableRange=[[this.minDate,Ya(this.maxDate)]],this.$emit("pick",[this.minDate,this.maxDate],!0))},setMinSelectionRange:function(e,t){this.$emit("select-range",e,t,"min"),this.selectionRange=[e,t]},setMaxSelectionRange:function(e,t){this.$emit("select-range",e,t,"max"),this.selectionRange=[e+this.offset,t+this.offset]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.$refs.minSpinner.selectableRange,i=this.$refs.maxSpinner.selectableRange;this.minDate=Object(sr["limitTimeRange"])(this.minDate,t,this.format),this.maxDate=Object(sr["limitTimeRange"])(this.maxDate,i,this.format),this.$emit("pick",[this.minDate,this.maxDate],e)},adjustSpinners:function(){this.$refs.minSpinner.adjustSpinners(),this.$refs.maxSpinner.adjustSpinners()},changeSelectionRange:function(e){var t=this.showSeconds?[0,3,6,11,14,17]:[0,3,8,11],i=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),n=t.indexOf(this.selectionRange[0]),s=(n+e+t.length)%t.length,r=t.length/2;s-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(b["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),t&&(Object(Ae["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),i.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(Ae["on"])(t,"focusin",(function(){e.handleFocus();var i=t.__vue__;i&&"function"===typeof i.focus&&i.focus()})),Object(Ae["on"])(i,"focusin",this.handleFocus),Object(Ae["on"])(t,"focusout",this.handleBlur),Object(Ae["on"])(i,"focusout",this.handleBlur)),Object(Ae["on"])(t,"keydown",this.handleKeydown),Object(Ae["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(Ae["on"])(t,"click",this.doToggle),Object(Ae["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(Ae["on"])(t,"mouseenter",this.handleMouseEnter),Object(Ae["on"])(i,"mouseenter",this.handleMouseEnter),Object(Ae["on"])(t,"mouseleave",this.handleMouseLeave),Object(Ae["on"])(i,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(Ae["on"])(t,"focusin",this.doShow),Object(Ae["on"])(t,"focusout",this.doClose)):(Object(Ae["on"])(t,"mousedown",this.doShow),Object(Ae["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(Ae["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(Ae["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(Ae["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&i&&!i.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(Ae["off"])(e,"click",this.doToggle),Object(Ae["off"])(e,"mouseup",this.doClose),Object(Ae["off"])(e,"mousedown",this.doShow),Object(Ae["off"])(e,"focusin",this.doShow),Object(Ae["off"])(e,"focusout",this.doClose),Object(Ae["off"])(e,"mousedown",this.doShow),Object(Ae["off"])(e,"mouseup",this.doClose),Object(Ae["off"])(e,"mouseleave",this.handleMouseLeave),Object(Ae["off"])(e,"mouseenter",this.handleMouseEnter),Object(Ae["off"])(document,"click",this.handleDocumentClick)}},no=io,so=o(no,eo,to,!1,null,null,null);so.options.__file="packages/popover/src/main.vue";var ro=so.exports,ao=function(e,t,i){var n=t.expression?t.value:t.arg,s=i.context.$refs[n];s&&(Array.isArray(s)?s[0].$refs.reference=e:s.$refs.reference=e)},oo={bind:function(e,t,i){ao(e,t,i)},inserted:function(e,t,i){ao(e,t,i)}};Rn.a.directive("popover",oo),ro.install=function(e){e.directive("popover",oo),e.component(ro.name,ro)},ro.directive=oo;var lo=ro,co={name:"ElTooltip",mixins:[H.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(b["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new Rn.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=L()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var i=this.getFirstElement();if(!i)return null;var n=i.data=i.data||{};return n.staticClass=this.addTooltipClass(n.staticClass),i},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(Ae["on"])(this.referenceElm,"mouseenter",this.show),Object(Ae["on"])(this.referenceElm,"mouseleave",this.hide),Object(Ae["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(Ae["on"])(this.referenceElm,"blur",this.handleBlur),Object(Ae["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(Ae["addClass"])(this.referenceElm,"focusing"):Object(Ae["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,i=0;i0){Oo=To.shift();var t=Oo.options;for(var i in t)t.hasOwnProperty(i)&&(Eo[i]=t[i]);void 0===t.callback&&(Eo.callback=Po);var n=Eo.callback;Eo.callback=function(t,i){n(t,i),e()},Object(ko["isVNode"])(Eo.message)?(Eo.$slots.default=[Eo.message],Eo.message=null):delete Eo.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Eo[e]&&(Eo[e]=!0)})),document.body.appendChild(Eo.$el),Rn.a.nextTick((function(){Eo.visible=!0}))}},Io=function e(t,i){if(!Rn.a.prototype.$isServer){if("string"===typeof t||Object(ko["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!i&&(i=t.callback),"undefined"!==typeof Promise)return new Promise((function(n,s){To.push({options:St()({},Do,e.defaults,t),callback:i,resolve:n,reject:s}),No()}));To.push({options:St()({},Do,e.defaults,t),callback:i}),No()}};Io.setDefaults=function(e){Io.defaults=e},Io.alert=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":So(t))?(i=t,t=""):void 0===t&&(t=""),Io(St()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},i))},Io.confirm=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":So(t))?(i=t,t=""):void 0===t&&(t=""),Io(St()({title:t,message:e,$type:"confirm",showCancelButton:!0},i))},Io.prompt=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":So(t))?(i=t,t=""):void 0===t&&(t=""),Io(St()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},i))},Io.close=function(){Eo.doClose(),Eo.visible=!1,To=[],Oo=null};var jo=Io,Fo=jo,Lo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},Ao=[];Lo._withStripped=!0;var Vo={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},Bo=Vo,zo=o(Bo,Lo,Ao,!1,null,null,null);zo.options.__file="packages/breadcrumb/src/breadcrumb.vue";var Ro=zo.exports;Ro.install=function(e){e.component(Ro.name,Ro)};var Ho=Ro,Wo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"el-breadcrumb__item"},[i("span",{ref:"link",class:["el-breadcrumb__inner",e.to?"is-link":""],attrs:{role:"link"}},[e._t("default")],2),e.separatorClass?i("i",{staticClass:"el-breadcrumb__separator",class:e.separatorClass}):i("span",{staticClass:"el-breadcrumb__separator",attrs:{role:"presentation"}},[e._v(e._s(e.separator))])])},qo=[];Wo._withStripped=!0;var Yo={name:"ElBreadcrumbItem",props:{to:{},replace:Boolean},data:function(){return{separator:"",separatorClass:""}},inject:["elBreadcrumb"],mounted:function(){var e=this;this.separator=this.elBreadcrumb.separator,this.separatorClass=this.elBreadcrumb.separatorClass;var t=this.$refs.link;t.setAttribute("role","link"),t.addEventListener("click",(function(t){var i=e.to,n=e.$router;i&&n&&(e.replace?n.replace(i):n.push(i))}))}},Ko=Yo,Uo=o(Ko,Wo,qo,!1,null,null,null);Uo.options.__file="packages/breadcrumb/src/breadcrumb-item.vue";var Go=Uo.exports;Go.install=function(e){e.component(Go.name,Go)};var Xo=Go,Zo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{staticClass:"el-form",class:[e.labelPosition?"el-form--label-"+e.labelPosition:"",{"el-form--inline":e.inline}]},[e._t("default")],2)},Qo=[];Zo._withStripped=!0;var Jo={name:"ElForm",componentName:"ElForm",provide:function(){return{elForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:Boolean,validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,this.potentialLabelWidthArr);return e?e+"px":""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("el.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("el.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Element Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var i=void 0;"function"!==typeof e&&window.Promise&&(i=new window.Promise((function(t,i){e=function(e){e?t(e):i(e)}})));var n=!0,s=0;0===this.fields.length&&e&&e(!0);var r={};return this.fields.forEach((function(i){i.validate("",(function(i,a){i&&(n=!1),r=St()({},r,a),"function"===typeof e&&++s===t.fields.length&&e(n,r)}))})),i||void 0}console.warn("[Element Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var i=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));i.length?i.forEach((function(e){e.validate("",t)})):console.warn("[Element Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[ElementForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var i=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(i,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},el=Jo,tl=o(el,Zo,Qo,!1,null,null,null);tl.options.__file="packages/form/src/form.vue";var il=tl.exports;il.install=function(e){e.component(il.name,il)};var nl=il,sl=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-form-item",class:[{"el-form-item--feedback":e.elForm&&e.elForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.elForm&&e.elForm.hideRequiredAsterisk},e.sizeClass?"el-form-item--"+e.sizeClass:""]},[i("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?i("label",{staticClass:"el-form-item__label",style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),i("div",{staticClass:"el-form-item__content",style:e.contentStyle},[e._t("default"),i("transition",{attrs:{name:"el-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[i("div",{staticClass:"el-form-item__error",class:{"el-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.elForm&&e.elForm.inlineMessage||!1}},[e._v("\n "+e._s(e.validateMessage)+"\n ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},rl=[];sl._withStripped=!0;var al,ol,ll=i(40),cl=i.n(ll),ul={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["elForm","elFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var i=this.elForm.autoLabelWidth,n={};if(i&&"auto"!==i){var s=parseInt(i,10)-this.computedWidth;s&&(n.marginLeft=s+"px")}return e("div",{class:"el-form-item__label-wrap",style:n},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},hl=ul,dl=o(hl,al,ol,!1,null,null,null);dl.options.__file="packages/form/src/label-wrap.vue";var pl=dl.exports,fl={name:"ElFormItem",componentName:"ElFormItem",mixins:[O.a],provide:function(){return{elFormItem:this}},inject:["elForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:pl},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var i=this.labelWidth||this.form.labelWidth;return"auto"===i?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.elForm.autoLabelWidth):e.marginLeft=i,e},form:function(){var e=this.$parent,t=e.$options.componentName;while("ElForm"!==t)"ElFormItem"===t&&(this.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),Object(b["getPropByPath"])(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.elForm.size},elFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.elFormItemSize||(this.$ELEMENT||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b["noop"];this.validateDisabled=!1;var n=this.getFilteredRule(e);if((!n||0===n.length)&&void 0===this.required)return i(),!0;this.validateState="validating";var s={};n&&n.length>0&&n.forEach((function(e){delete e.trigger})),s[this.prop]=n;var r=new cl.a(s),a={};a[this.prop]=this.fieldValue,r.validate(a,{firstFields:!0},(function(e,n){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",i(t.validateMessage,n),t.elForm&&t.elForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,i=this.fieldValue,n=this.prop;-1!==n.indexOf(":")&&(n=n.replace(/:/,"."));var s=Object(b["getPropByPath"])(t,n,!0);this.validateDisabled=!0,Array.isArray(i)?s.o[s.k]=[].concat(this.initialValue):s.o[s.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("ElTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,i=void 0!==this.required?{required:!!this.required}:[],n=Object(b["getPropByPath"])(e,this.prop||"");return e=e?n.o[this.prop||""]||n.v:[],[].concat(t||e||[]).concat(i)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return St()({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?e+"px":""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("el.form.blur",this.onFieldBlur),this.$on("el.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("ElForm","el.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("ElForm","el.form.removeField",[this])}},ml=fl,vl=o(ml,sl,rl,!1,null,null,null);vl.options.__file="packages/form/src/form-item.vue";var gl=vl.exports;gl.install=function(e){e.component(gl.name,gl)};var bl=gl,yl=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},_l=[];yl._withStripped=!0;var xl={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},i=0,n=0,s=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",r="width"===s?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,r){var o=Object(b["arrayFind"])(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!o)return!1;if(t.active){n=o["client"+a(s)];var l=window.getComputedStyle(o);return"width"===s&&e.tabs.length>1&&(n-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===s&&(i+=parseFloat(l.paddingLeft)),!1}return i+=o["client"+a(s)],!0}));var o="translate"+a(r)+"("+i+"px)";return t[s]=n+"px",t.transform=o,t.msTransform=o,t.webkitTransform=o,t}}}},Cl=xl,wl=o(Cl,yl,_l,!1,null,null,null);wl.options.__file="packages/tabs/src/tab-bar.vue";var kl=wl.exports;function Sl(){}var Dl,$l,Ol=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},El={name:"TabNav",components:{TabBar:kl},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Sl},onTabRemove:{type:Function,default:Sl},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate"+e+"(-"+this.navOffset+"px)"}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset"+Ol(this.sizeName)],t=this.navOffset;if(t){var i=t>e?t-e:0;this.navOffset=i}},scrollNext:function(){var e=this.$refs.nav["offset"+Ol(this.sizeName)],t=this.$refs.navScroll["offset"+Ol(this.sizeName)],i=this.navOffset;if(!(e-i<=t)){var n=e-i>2*t?i+t:e-t;this.navOffset=n}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var i=this.$refs.navScroll,n=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),s=t.getBoundingClientRect(),r=i.getBoundingClientRect(),a=n?e.offsetWidth-r.width:e.offsetHeight-r.height,o=this.navOffset,l=o;n?(s.leftr.right&&(l=o+s.right-r.right)):(s.topr.bottom&&(l=o+(s.bottom-r.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset"+Ol(e)],i=this.$refs.navScroll["offset"+Ol(e)],n=this.navOffset;if(i0&&(this.navOffset=0)}},changeTab:function(e){var t=e.keyCode,i=void 0,n=void 0,s=void 0;-1!==[37,38,39,40].indexOf(t)&&(s=e.currentTarget.querySelectorAll("[role=tab]"),n=Array.prototype.indexOf.call(s,e.target),i=37===t||38===t?0===n?s.length-1:n-1:n0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var i=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"ElTabPane"===e.componentOptions.Ctor.options.name})),n=i.map((function(e){var t=e.componentInstance;return t})),s=!(n.length===this.panes.length&&n.every((function(t,i){return t===e.panes[i]})));(t||s)&&(this.panes=n)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,i){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,i))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,i=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var n=this.beforeLeave(e,this.currentName);n&&n.then?n.then((function(){i(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==n&&i()}else i()}},render:function(e){var t,i=this.type,n=this.handleTabClick,s=this.handleTabRemove,r=this.handleTabAdd,a=this.currentName,o=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,h=this.stretch,d=l||c?e("span",{class:"el-tabs__new-tab",on:{click:r,keydown:function(e){13===e.keyCode&&r()}},attrs:{tabindex:"0"}},[e("i",{class:"el-icon-plus"})]):null,p={props:{currentName:a,onTabClick:n,onTabRemove:s,editable:l,type:i,panes:o,stretch:h},ref:"nav"},f=e("div",{class:["el-tabs__header","is-"+u]},[d,e("tab-nav",p)]),m=e("div",{class:"el-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"el-tabs":!0,"el-tabs--card":"card"===i},t["el-tabs--"+u]=!0,t["el-tabs--border-card"]="border-card"===i,t)},["bottom"!==u?[f,m]:[m,f]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Fl=jl,Ll=o(Fl,Ml,Nl,!1,null,null,null);Ll.options.__file="packages/tabs/src/tabs.vue";var Al=Ll.exports;Al.install=function(e){e.component(Al.name,Al)};var Vl=Al,Bl=function(){var e=this,t=e.$createElement,i=e._self._c||t;return!e.lazy||e.loaded||e.active?i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},zl=[];Bl._withStripped=!0;var Rl={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this.$parent.currentName===(this.name||this.index);return e&&(this.loaded=!0),e},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Hl=Rl,Wl=o(Hl,Bl,zl,!1,null,null,null);Wl.options.__file="packages/tabs/src/tab-pane.vue";var ql=Wl.exports;ql.install=function(e){e.component(ql.name,ql)};var Yl,Kl,Ul=ql,Gl={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,i=this.tagSize,n=this.hit,s=this.effect,r=["el-tag",t?"el-tag--"+t:"",i?"el-tag--"+i:"",s?"el-tag--"+s:"",n&&"is-hit"],a=e("span",{class:r,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},Xl=Gl,Zl=o(Xl,Yl,Kl,!1,null,null,null);Zl.options.__file="packages/tag/src/tag.vue";var Ql=Zl.exports;Ql.install=function(e){e.component(Ql.name,Ql)};var Jl=Ql,ec=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-tree",class:{"el-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e._l(e.root.childNodes,(function(t){return i("el-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?i("div",{staticClass:"el-tree__empty-block"},[i("span",{staticClass:"el-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"el-tree__drop-indicator"})],2)},tc=[];ec._withStripped=!0;var ic="$treeNodeId",nc=function(e,t){t&&!t[ic]&&Object.defineProperty(t,ic,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},sc=function(e,t){return e?t[e]:t[ic]},rc=function(e,t){var i=e;while(i&&"BODY"!==i.tagName){if(i.__vue__&&i.__vue__.$options.name===t)return i.__vue__;i=i.parentNode}return null},ac=function(){function e(e,t){for(var i=0;i0&&n.lazy&&n.defaultExpandAll&&this.expand(),Array.isArray(this.data)||nc(this,this.data),this.data){var a=n.defaultExpandedKeys,o=n.key;o&&a&&-1!==a.indexOf(this.key)&&this.expand(null,n.autoExpandParent),o&&void 0!==n.currentNodeKey&&this.key===n.currentNodeKey&&(n.currentNode=this,n.currentNode.isCurrent=!0),n.lazy&&n._initDefaultCheckedNode(this),this.updateLeafState()}}return e.prototype.setData=function(e){Array.isArray(e)||nc(this,e),this.data=e,this.childNodes=[];var t=void 0;t=0===this.level&&this.data instanceof Array?this.data:uc(this,"children")||[];for(var i=0,n=t.length;i1&&void 0!==arguments[1])||arguments[1],i=function i(n){for(var s=n.childNodes||[],r=!1,a=0,o=s.length;a-1&&t.splice(i,1);var n=this.childNodes.indexOf(e);n>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(n,1)),this.updateLeafState()},e.prototype.removeChildByData=function(e){for(var t=null,i=0;i0)n.expanded=!0,n=n.parent}i.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(i.checked?i.setChecked(!0,!0):i.store.checkStrictly||cc(i),n())})):n()},e.prototype.doCreateChildren=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(St()({data:e},i),void 0,!0)}))},e.prototype.collapse=function(){this.expanded=!1},e.prototype.shouldLoadData=function(){return!0===this.store.lazy&&this.store.load&&!this.loaded},e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser},e.prototype.setChecked=function(e,t,i,n){var s=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var r=lc(this.childNodes),a=r.all,o=r.allWithoutDisable;this.isLeaf||a||!o||(this.checked=!1,e=!1);var l=function(){if(t){for(var i=s.childNodes,r=0,a=i.length;r0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var i=this.store.props,n="children";return i&&(n=i.children||"children"),void 0===t[n]&&(t[n]=null),e&&!t[n]&&(t[n]=[]),t[n]},e.prototype.updateChildren=function(){var e=this,t=this.getChildren()||[],i=this.childNodes.map((function(e){return e.data})),n={},s=[];t.forEach((function(e,t){var r=e[ic],a=!!r&&Object(b["arrayFindIndex"])(i,(function(e){return e[ic]===r}))>=0;a?n[r]={index:t,data:e}:s.push({index:t,data:e})})),this.store.lazy||i.forEach((function(t){n[t[ic]]||e.removeChildByData(t)})),s.forEach((function(t){var i=t.index,n=t.data;e.insertChild({data:n},i)})),this.updateLeafState()},e.prototype.loadData=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(i).length)e&&e.call(this);else{this.loading=!0;var n=function(n){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(n,i),t.updateLeafState(),e&&e.call(t,n)};this.store.load(this,n)}},ac(e,[{key:"label",get:function(){return uc(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return uc(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),pc=dc,fc="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function mc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var vc=function(){function e(t){var i=this;for(var n in mc(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(this.nodesMap={},this.root=new pc({data:this.data,store:this}),this.lazy&&this.load){var s=this.load;s(this.root,(function(e){i.root.doCreateChildren(e),i._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return e.prototype.filter=function(e){var t=this.filterNodeMethod,i=this.lazy,n=function n(s){var r=s.root?s.root.childNodes:s.childNodes;if(r.forEach((function(i){i.visible=t.call(i,e,i.data,i),n(i)})),!s.visible&&r.length){var a=!0;a=!r.some((function(e){return e.visible})),s.root?s.root.visible=!1===a:s.visible=!1===a}e&&(!s.visible||s.isLeaf||i||s.expand())};n(this)},e.prototype.setData=function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()},e.prototype.getNode=function(e){if(e instanceof pc)return e;var t="object"!==("undefined"===typeof e?"undefined":fc(e))?e:sc(this.key,e);return this.nodesMap[t]||null},e.prototype.insertBefore=function(e,t){var i=this.getNode(t);i.parent.insertBefore({data:e},i)},e.prototype.insertAfter=function(e,t){var i=this.getNode(t);i.parent.insertAfter({data:e},i)},e.prototype.remove=function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))},e.prototype.append=function(e,t){var i=t?this.getNode(t):this.root;i&&i.insertChild({data:e})},e.prototype._initDefaultCheckedNodes=function(){var e=this,t=this.defaultCheckedKeys||[],i=this.nodesMap;t.forEach((function(t){var n=i[t];n&&n.setChecked(!0,!e.checkStrictly)}))},e.prototype._initDefaultCheckedNode=function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)},e.prototype.setDefaultCheckedKey=function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())},e.prototype.registerNode=function(e){var t=this.key;if(t&&e&&e.data){var i=e.key;void 0!==i&&(this.nodesMap[e.key]=e)}},e.prototype.deregisterNode=function(e){var t=this,i=this.key;i&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])},e.prototype.getCheckedNodes=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=[],n=function n(s){var r=s.root?s.root.childNodes:s.childNodes;r.forEach((function(s){(s.checked||t&&s.indeterminate)&&(!e||e&&s.isLeaf)&&i.push(s.data),n(s)}))};return n(this),i},e.prototype.getCheckedKeys=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))},e.prototype.getHalfCheckedNodes=function(){var e=[],t=function t(i){var n=i.root?i.root.childNodes:i.childNodes;n.forEach((function(i){i.indeterminate&&e.push(i.data),t(i)}))};return t(this),e},e.prototype.getHalfCheckedKeys=function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))},e.prototype._getAllNodes=function(){var e=[],t=this.nodesMap;for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.prototype.updateChildren=function(e,t){var i=this.nodesMap[e];if(i){for(var n=i.childNodes,s=n.length-1;s>=0;s--){var r=n[s];this.remove(r.data)}for(var a=0,o=t.length;a1&&void 0!==arguments[1]&&arguments[1],i=arguments[2],n=this._getAllNodes().sort((function(e,t){return t.level-e.level})),s=Object.create(null),r=Object.keys(i);n.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,o=n.length;a-1;if(u){var h=l.parent;while(h&&h.level>0)s[h.data[e]]=!0,h=h.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var i=t.childNodes;i.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!s[c]&&l.setChecked(!1,!1)}},e.prototype.setCheckedNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.key,n={};e.forEach((function(e){n[(e||{})[i]]=!0})),this._setCheckedKeys(i,t,n)},e.prototype.setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var i=this.key,n={};e.forEach((function(e){n[e]=!0})),this._setCheckedKeys(i,t,n)},e.prototype.setDefaultExpandedKeys=function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var i=t.getNode(e);i&&i.expand(null,t.autoExpandParent)}))},e.prototype.setChecked=function(e,t,i){var n=this.getNode(e);n&&n.setChecked(!!t,i)},e.prototype.getCurrentNode=function(){return this.currentNode},e.prototype.setCurrentNode=function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0},e.prototype.setUserCurrentNode=function(e){var t=e[this.key],i=this.nodesMap[t];this.setCurrentNode(i)},e.prototype.setCurrentNodeKey=function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)},e}(),gc=vc,bc=function(){var e=this,t=this,i=t.$createElement,n=t._self._c||i;return n("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"el-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[n("div",{staticClass:"el-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[n("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"el-tree-node__expand-icon",t.tree.iconClass?t.tree.iconClass:"el-icon-caret-right"],on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?n("el-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?n("span",{staticClass:"el-tree-node__loading-icon el-icon-loading"}):t._e(),n("node-content",{attrs:{node:t.node}})],1),n("el-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?n("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"el-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return n("el-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},yc=[];bc._withStripped=!0;var _c={name:"ElTreeNode",componentName:"ElTreeNode",mixins:[O.a],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{ElCollapseTransition:Ke.a,ElCheckbox:In.a,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,i=t.tree,n=this.node,s=n.data,r=n.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:i.$vnode.context,node:n,data:s,store:r}):i.$scopedSlots.default?i.$scopedSlots.default({node:n,data:s}):e("span",{class:"el-tree-node__label"},[n.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){return sc(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",this.node.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node),this.tree.$emit("current-change",e.currentNode?e.currentNode.data:null,e.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&this.handleCheckChange(null,{target:{checked:!this.node.checked}}),this.tree.$emit("node-click",this.node.data,this.node,this)},handleContextMenu:function(e){this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,this.node.data,this.node,this)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node.data,this.node,this),this.node.collapse()):(this.node.expand(),this.$emit("node-expand",this.node.data,this.node,this)))},handleCheckChange:function(e,t){var i=this;this.node.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=i.tree.store;i.tree.$emit("check",i.node.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,i){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,i)},handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this,t=this.$parent;t.isTree?this.tree=t:this.tree=t.tree;var i=this.tree;i||console.warn("Can not find node's tree.");var n=i.props||{},s=n["children"]||"children";this.$watch("node.data."+s,(function(){e.node.updateChildren()})),this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(t){e.node!==t&&e.node.collapse()}))}},xc=_c,Cc=o(xc,bc,yc,!1,null,null,null);Cc.options.__file="packages/tree/src/tree-node.vue";var wc=Cc.exports,kc={name:"ElTree",mixins:[O.a],components:{ElTreeNode:wc},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0}}},props:{data:{type:Array},emptyText:{type:String,default:function(){return Object(fo["t"])("el.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},iconClass:String},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return sc(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var i=[t.data],n=t.parent;while(n&&n!==this.root)i.push(n.data),n=n.parent;return i.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,i){this.store.setChecked(e,t,i)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,i){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,i)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("el-tree-node")){var i=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var n=this.treeItemArray.indexOf(t),s=void 0;[38,40].indexOf(i)>-1&&(e.preventDefault(),s=38===i?0!==n?n-1:0:n-1&&(e.preventDefault(),t.click());var r=t.querySelector('[type="checkbox"]');[13,32].indexOf(i)>-1&&r&&(e.preventDefault(),r.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new gc({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(i,n){if("function"===typeof e.allowDrag&&!e.allowDrag(n.node))return i.preventDefault(),!1;i.dataTransfer.effectAllowed="move";try{i.dataTransfer.setData("text/plain","")}catch(s){}t.draggingNode=n,e.$emit("node-drag-start",n.node,i)})),this.$on("tree-node-drag-over",(function(i,n){var s=rc(i.target,"ElTreeNode"),r=t.dropNode;r&&r!==s&&Object(Ae["removeClass"])(r.$el,"is-drop-inner");var a=t.draggingNode;if(a&&s){var o=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(o=e.allowDrop(a.node,s.node,"prev"),u=l=e.allowDrop(a.node,s.node,"inner"),c=e.allowDrop(a.node,s.node,"next")),i.dataTransfer.dropEffect=l?"move":"none",(o||l||c)&&r!==s&&(r&&e.$emit("node-drag-leave",a.node,r.node,i),e.$emit("node-drag-enter",a.node,s.node,i)),(o||l||c)&&(t.dropNode=s),s.node.nextSibling===a.node&&(c=!1),s.node.previousSibling===a.node&&(o=!1),s.node.contains(a.node,!1)&&(l=!1),(a.node===s.node||a.node.contains(s.node))&&(o=!1,l=!1,c=!1);var h=s.$el.getBoundingClientRect(),d=e.$el.getBoundingClientRect(),p=void 0,f=o?l?.25:c?.45:1:-1,m=c?l?.75:o?.55:0:1,v=-9999,g=i.clientY-h.top;p=gh.height*m?"after":l?"inner":"none";var b=s.$el.querySelector(".el-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===p?v=b.top-d.top:"after"===p&&(v=b.bottom-d.top),y.style.top=v+"px",y.style.left=b.right-d.left+"px","inner"===p?Object(Ae["addClass"])(s.$el,"is-drop-inner"):Object(Ae["removeClass"])(s.$el,"is-drop-inner"),t.showDropIndicator="before"===p||"after"===p,t.allowDrop=t.showDropIndicator||u,t.dropType=p,e.$emit("node-drag-over",a.node,s.node,i)}})),this.$on("tree-node-drag-end",(function(i){var n=t.draggingNode,s=t.dropType,r=t.dropNode;if(i.preventDefault(),i.dataTransfer.dropEffect="move",n&&r){var a={data:n.node.data};"none"!==s&&n.node.remove(),"before"===s?r.node.parent.insertBefore(a,r.node):"after"===s?r.node.parent.insertAfter(a,r.node):"inner"===s&&r.node.insertChild(a),"none"!==s&&e.store.registerNode(a),Object(Ae["removeClass"])(r.$el,"is-drop-inner"),e.$emit("node-drag-end",n.node,r.node,s,i),"none"!==s&&e.$emit("node-drop",n.node,r.node,s,i)}n&&!r&&e.$emit("node-drag-end",n.node,null,s,i),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},Sc=kc,Dc=o(Sc,ec,tc,!1,null,null,null);Dc.options.__file="packages/tree/src/tree.vue";var $c=Dc.exports;$c.install=function(e){e.component($c.name,$c)};var Oc=$c,Ec=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-alert-fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-alert",class:[e.typeClass,e.center?"is-center":"","is-"+e.effect],attrs:{role:"alert"}},[e.showIcon?i("i",{staticClass:"el-alert__icon",class:[e.iconClass,e.isBigIcon]}):e._e(),i("div",{staticClass:"el-alert__content"},[e.title||e.$slots.title?i("span",{staticClass:"el-alert__title",class:[e.isBoldTitle]},[e._t("title",[e._v(e._s(e.title))])],2):e._e(),e.$slots.default&&!e.description?i("p",{staticClass:"el-alert__description"},[e._t("default")],2):e._e(),e.description&&!e.$slots.default?i("p",{staticClass:"el-alert__description"},[e._v(e._s(e.description))]):e._e(),i("i",{directives:[{name:"show",rawName:"v-show",value:e.closable,expression:"closable"}],staticClass:"el-alert__closebtn",class:{"is-customed":""!==e.closeText,"el-icon-close":""===e.closeText},on:{click:function(t){e.close()}}},[e._v(e._s(e.closeText))])])])])},Tc=[];Ec._withStripped=!0;var Pc={success:"el-icon-success",warning:"el-icon-warning",error:"el-icon-error"},Mc={name:"ElAlert",props:{title:{type:String,default:""},description:{type:String,default:""},type:{type:String,default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,default:"light",validator:function(e){return-1!==["light","dark"].indexOf(e)}}},data:function(){return{visible:!0}},methods:{close:function(){this.visible=!1,this.$emit("close")}},computed:{typeClass:function(){return"el-alert--"+this.type},iconClass:function(){return Pc[this.type]||"el-icon-info"},isBigIcon:function(){return this.description||this.$slots.default?"is-big":""},isBoldTitle:function(){return this.description||this.$slots.default?"is-bold":""}}},Nc=Mc,Ic=o(Nc,Ec,Tc,!1,null,null,null);Ic.options.__file="packages/alert/src/main.vue";var jc=Ic.exports;jc.install=function(e){e.component(jc.name,jc)};var Fc=jc,Lc=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-notification-fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-notification",e.customClass,e.horizontalClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:function(t){e.clearTimer()},mouseleave:function(t){e.startTimer()},click:e.click}},[e.type||e.iconClass?i("i",{staticClass:"el-notification__icon",class:[e.typeClass,e.iconClass]}):e._e(),i("div",{staticClass:"el-notification__group",class:{"is-with-icon":e.typeClass||e.iconClass}},[i("h2",{staticClass:"el-notification__title",domProps:{textContent:e._s(e.title)}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.message,expression:"message"}],staticClass:"el-notification__content"},[e._t("default",[e.dangerouslyUseHTMLString?i("p",{domProps:{innerHTML:e._s(e.message)}}):i("p",[e._v(e._s(e.message))])])],2),e.showClose?i("div",{staticClass:"el-notification__closeBtn el-icon-close",on:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()])])])},Ac=[];Lc._withStripped=!0;var Vc={success:"success",info:"info",warning:"warning",error:"error"},Bc={data:function(){return{visible:!1,title:"",message:"",duration:4500,type:"",showClose:!0,customClass:"",iconClass:"",onClose:null,onClick:null,closed:!1,verticalOffset:0,timer:null,dangerouslyUseHTMLString:!1,position:"top-right"}},computed:{typeClass:function(){return this.type&&Vc[this.type]?"el-icon-"+Vc[this.type]:""},horizontalClass:function(){return this.position.indexOf("right")>-1?"right":"left"},verticalProperty:function(){return/^top-/.test(this.position)?"top":"bottom"},positionStyle:function(){var e;return e={},e[this.verticalProperty]=this.verticalOffset+"px",e}},watch:{closed:function(e){e&&(this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},click:function(){"function"===typeof this.onClick&&this.onClick()},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose()},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){46===e.keyCode||8===e.keyCode?this.clearTimer():27===e.keyCode?this.closed||this.close():this.startTimer()}},mounted:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration)),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},zc=Bc,Rc=o(zc,Lc,Ac,!1,null,null,null);Rc.options.__file="packages/notification/src/main.vue";var Hc=Rc.exports,Wc=Rn.a.extend(Hc),qc=void 0,Yc=[],Kc=1,Uc=function e(t){if(!Rn.a.prototype.$isServer){t=St()({},t);var i=t.onClose,n="notification_"+Kc++,s=t.position||"top-right";t.onClose=function(){e.close(n,i)},qc=new Wc({data:t}),Object(ko["isVNode"])(t.message)&&(qc.$slots.default=[t.message],t.message="REPLACED_BY_VNODE"),qc.id=n,qc.$mount(),document.body.appendChild(qc.$el),qc.visible=!0,qc.dom=qc.$el,qc.dom.style.zIndex=w["PopupManager"].nextZIndex();var r=t.offset||0;return Yc.filter((function(e){return e.position===s})).forEach((function(e){r+=e.$el.offsetHeight+16})),r+=16,qc.verticalOffset=r,Yc.push(qc),qc}};["success","warning","info","error"].forEach((function(e){Uc[e]=function(t){return("string"===typeof t||Object(ko["isVNode"])(t))&&(t={message:t}),t.type=e,Uc(t)}})),Uc.close=function(e,t){var i=-1,n=Yc.length,s=Yc.filter((function(t,n){return t.id===e&&(i=n,!0)}))[0];if(s&&("function"===typeof t&&t(s),Yc.splice(i,1),!(n<=1)))for(var r=s.position,a=s.dom.offsetHeight,o=i;o=0;e--)Yc[e].close()};var Gc=Uc,Xc=Gc,Zc=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-slider",class:{"is-vertical":e.vertical,"el-slider--with-input":e.showInput},attrs:{role:"slider","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-orientation":e.vertical?"vertical":"horizontal","aria-disabled":e.sliderDisabled}},[e.showInput&&!e.range?i("el-input-number",{ref:"input",staticClass:"el-slider__input",attrs:{step:e.step,disabled:e.sliderDisabled,controls:e.showInputControls,min:e.min,max:e.max,debounce:e.debounce,size:e.inputSize},on:{change:e.emitChange},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}):e._e(),i("div",{ref:"slider",staticClass:"el-slider__runway",class:{"show-input":e.showInput,disabled:e.sliderDisabled},style:e.runwayStyle,on:{click:e.onSliderClick}},[i("div",{staticClass:"el-slider__bar",style:e.barStyle}),i("slider-button",{ref:"button1",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}),e.range?i("slider-button",{ref:"button2",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.secondValue,callback:function(t){e.secondValue=t},expression:"secondValue"}}):e._e(),e._l(e.stops,(function(t,n){return e.showStops?i("div",{key:n,staticClass:"el-slider__stop",style:e.getStopStyle(t)}):e._e()})),e.markList.length>0?[i("div",e._l(e.markList,(function(t,n){return i("div",{key:n,staticClass:"el-slider__stop el-slider__marks-stop",style:e.getStopStyle(t.position)})})),0),i("div",{staticClass:"el-slider__marks"},e._l(e.markList,(function(t,n){return i("slider-marker",{key:n,style:e.getStopStyle(t.position),attrs:{mark:t.mark}})})),1)]:e._e()],2)],1)},Qc=[];Zc._withStripped=!0;var Jc=i(41),eu=i.n(Jc),tu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"button",staticClass:"el-slider__button-wrapper",class:{hover:e.hovering,dragging:e.dragging},style:e.wrapperStyle,attrs:{tabindex:"0"},on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave,mousedown:e.onButtonDown,touchstart:e.onButtonDown,focus:e.handleMouseEnter,blur:e.handleMouseLeave,keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.onLeftKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])||"button"in t&&2!==t.button?null:e.onRightKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.onLeftKeyDown(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.onRightKeyDown(t))}]}},[i("el-tooltip",{ref:"tooltip",attrs:{placement:"top","popper-class":e.tooltipClass,disabled:!e.showTooltip}},[i("span",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(e.formatValue))]),i("div",{staticClass:"el-slider__button",class:{hover:e.hovering,dragging:e.dragging}})])],1)},iu=[];tu._withStripped=!0;var nu={name:"ElSliderButton",components:{ElTooltip:st.a},props:{value:{type:Number,default:0},vertical:{type:Boolean,default:!1},tooltipClass:String},data:function(){return{hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:null,oldValue:this.value}},computed:{disabled:function(){return this.$parent.sliderDisabled},max:function(){return this.$parent.max},min:function(){return this.$parent.min},step:function(){return this.$parent.step},showTooltip:function(){return this.$parent.showTooltip},precision:function(){return this.$parent.precision},currentPosition:function(){return(this.value-this.min)/(this.max-this.min)*100+"%"},enableFormat:function(){return this.$parent.formatTooltip instanceof Function},formatValue:function(){return this.enableFormat&&this.$parent.formatTooltip(this.value)||this.value},wrapperStyle:function(){return this.vertical?{bottom:this.currentPosition}:{left:this.currentPosition}}},watch:{dragging:function(e){this.$parent.dragging=e}},methods:{displayTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!0)},hideTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!1)},handleMouseEnter:function(){this.hovering=!0,this.displayTooltip()},handleMouseLeave:function(){this.hovering=!1,this.hideTooltip()},onButtonDown:function(e){this.disabled||(e.preventDefault(),this.onDragStart(e),window.addEventListener("mousemove",this.onDragging),window.addEventListener("touchmove",this.onDragging),window.addEventListener("mouseup",this.onDragEnd),window.addEventListener("touchend",this.onDragEnd),window.addEventListener("contextmenu",this.onDragEnd))},onLeftKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)-this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onRightKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)+this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onDragStart:function(e){this.dragging=!0,this.isClick=!0,"touchstart"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?this.startY=e.clientY:this.startX=e.clientX,this.startPosition=parseFloat(this.currentPosition),this.newPosition=this.startPosition},onDragging:function(e){if(this.dragging){this.isClick=!1,this.displayTooltip(),this.$parent.resetSize();var t=0;"touchmove"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?(this.currentY=e.clientY,t=(this.startY-this.currentY)/this.$parent.sliderSize*100):(this.currentX=e.clientX,t=(this.currentX-this.startX)/this.$parent.sliderSize*100),this.newPosition=this.startPosition+t,this.setPosition(this.newPosition)}},onDragEnd:function(){var e=this;this.dragging&&(setTimeout((function(){e.dragging=!1,e.hideTooltip(),e.isClick||(e.setPosition(e.newPosition),e.$parent.emitChange())}),0),window.removeEventListener("mousemove",this.onDragging),window.removeEventListener("touchmove",this.onDragging),window.removeEventListener("mouseup",this.onDragEnd),window.removeEventListener("touchend",this.onDragEnd),window.removeEventListener("contextmenu",this.onDragEnd))},setPosition:function(e){var t=this;if(null!==e&&!isNaN(e)){e<0?e=0:e>100&&(e=100);var i=100/((this.max-this.min)/this.step),n=Math.round(e/i),s=n*i*(this.max-this.min)*.01+this.min;s=parseFloat(s.toFixed(this.precision)),this.$emit("input",s),this.$nextTick((function(){t.displayTooltip(),t.$refs.tooltip&&t.$refs.tooltip.updatePopper()})),this.dragging||this.value===this.oldValue||(this.oldValue=this.value)}}}},su=nu,ru=o(su,tu,iu,!1,null,null,null);ru.options.__file="packages/slider/src/button.vue";var au=ru.exports,ou={name:"ElMarker",props:{mark:{type:[String,Object]}},render:function(){var e=arguments[0],t="string"===typeof this.mark?this.mark:this.mark.label;return e("div",{class:"el-slider__marks-text",style:this.mark.style||{}},[t])}},lu={name:"ElSlider",mixins:[O.a],inject:{elForm:{default:""}},props:{min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:{type:[Number,Array],default:0},showInput:{type:Boolean,default:!1},showInputControls:{type:Boolean,default:!0},inputSize:{type:String,default:"small"},showStops:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},formatTooltip:Function,disabled:{type:Boolean,default:!1},range:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},height:{type:String},debounce:{type:Number,default:300},label:{type:String},tooltipClass:String,marks:Object},components:{ElInputNumber:eu.a,SliderButton:au,SliderMarker:ou},data:function(){return{firstValue:null,secondValue:null,oldValue:null,dragging:!1,sliderSize:1}},watch:{value:function(e,t){this.dragging||Array.isArray(e)&&Array.isArray(t)&&e.every((function(e,i){return e===t[i]}))||this.setValues()},dragging:function(e){e||this.setValues()},firstValue:function(e){this.range?this.$emit("input",[this.minValue,this.maxValue]):this.$emit("input",e)},secondValue:function(){this.range&&this.$emit("input",[this.minValue,this.maxValue])},min:function(){this.setValues()},max:function(){this.setValues()}},methods:{valueChanged:function(){var e=this;return this.range?![this.minValue,this.maxValue].every((function(t,i){return t===e.oldValue[i]})):this.value!==this.oldValue},setValues:function(){if(this.min>this.max)console.error("[Element Error][Slider]min should not be greater than max.");else{var e=this.value;this.range&&Array.isArray(e)?e[1]this.max?this.$emit("input",[this.max,this.max]):e[0]this.max?this.$emit("input",[e[0],this.max]):(this.firstValue=e[0],this.secondValue=e[1],this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",[this.minValue,this.maxValue]),this.oldValue=e.slice())):this.range||"number"!==typeof e||isNaN(e)||(ethis.max?this.$emit("input",this.max):(this.firstValue=e,this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",e),this.oldValue=e)))}},setPosition:function(e){var t=this.min+e*(this.max-this.min)/100;if(this.range){var i=void 0;i=Math.abs(this.minValue-t)this.secondValue?"button1":"button2",this.$refs[i].setPosition(e)}else this.$refs.button1.setPosition(e)},onSliderClick:function(e){if(!this.sliderDisabled&&!this.dragging){if(this.resetSize(),this.vertical){var t=this.$refs.slider.getBoundingClientRect().bottom;this.setPosition((t-e.clientY)/this.sliderSize*100)}else{var i=this.$refs.slider.getBoundingClientRect().left;this.setPosition((e.clientX-i)/this.sliderSize*100)}this.emitChange()}},resetSize:function(){this.$refs.slider&&(this.sliderSize=this.$refs.slider["client"+(this.vertical?"Height":"Width")])},emitChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.range?[e.minValue,e.maxValue]:e.value)}))},getStopStyle:function(e){return this.vertical?{bottom:e+"%"}:{left:e+"%"}}},computed:{stops:function(){var e=this;if(!this.showStops||this.min>this.max)return[];if(0===this.step)return[];for(var t=(this.max-this.min)/this.step,i=100*this.step/(this.max-this.min),n=[],s=1;s100*(e.maxValue-e.min)/(e.max-e.min)})):n.filter((function(t){return t>100*(e.firstValue-e.min)/(e.max-e.min)}))},markList:function(){var e=this;if(!this.marks)return[];var t=Object.keys(this.marks);return t.map(parseFloat).sort((function(e,t){return e-t})).filter((function(t){return t<=e.max&&t>=e.min})).map((function(t){return{point:t,position:100*(t-e.min)/(e.max-e.min),mark:e.marks[t]}}))},minValue:function(){return Math.min(this.firstValue,this.secondValue)},maxValue:function(){return Math.max(this.firstValue,this.secondValue)},barSize:function(){return this.range?100*(this.maxValue-this.minValue)/(this.max-this.min)+"%":100*(this.firstValue-this.min)/(this.max-this.min)+"%"},barStart:function(){return this.range?100*(this.minValue-this.min)/(this.max-this.min)+"%":"0%"},precision:function(){var e=[this.min,this.max,this.step].map((function(e){var t=(""+e).split(".")[1];return t?t.length:0}));return Math.max.apply(null,e)},runwayStyle:function(){return this.vertical?{height:this.height}:{}},barStyle:function(){return this.vertical?{height:this.barSize,bottom:this.barStart}:{width:this.barSize,left:this.barStart}},sliderDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},mounted:function(){var e=void 0;this.range?(Array.isArray(this.value)?(this.firstValue=Math.max(this.min,this.value[0]),this.secondValue=Math.min(this.max,this.value[1])):(this.firstValue=this.min,this.secondValue=this.max),this.oldValue=[this.firstValue,this.secondValue],e=this.firstValue+"-"+this.secondValue):("number"!==typeof this.value||isNaN(this.value)?this.firstValue=this.min:this.firstValue=Math.min(this.max,Math.max(this.min,this.value)),this.oldValue=this.firstValue,e=this.firstValue),this.$el.setAttribute("aria-valuetext",e),this.$el.setAttribute("aria-label",this.label?this.label:"slider between "+this.min+" and "+this.max),this.resetSize(),window.addEventListener("resize",this.resetSize)},beforeDestroy:function(){window.removeEventListener("resize",this.resetSize)}},cu=lu,uu=o(cu,Zc,Qc,!1,null,null,null);uu.options.__file="packages/slider/src/main.vue";var hu=uu.exports;hu.install=function(e){e.component(hu.name,hu)};var du=hu,pu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[i("div",{staticClass:"el-loading-spinner"},[e.spinner?i("i",{class:e.spinner}):i("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[i("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?i("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},fu=[];pu._withStripped=!0;var mu={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},vu=mu,gu=o(vu,pu,fu,!1,null,null,null);gu.options.__file="packages/loading/src/loading.vue";var bu=gu.exports,yu=i(32),_u=i.n(yu),xu=Rn.a.extend(bu),Cu={install:function(e){if(!e.prototype.$isServer){var t=function(t,n){n.value?e.nextTick((function(){n.modifiers.fullscreen?(t.originalPosition=Object(Ae["getStyle"])(document.body,"position"),t.originalOverflow=Object(Ae["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=w["PopupManager"].nextZIndex(),Object(Ae["addClass"])(t.mask,"is-fullscreen"),i(document.body,t,n)):(Object(Ae["removeClass"])(t.mask,"is-fullscreen"),n.modifiers.body?(t.originalPosition=Object(Ae["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var i="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[i]+document.documentElement[i]-parseInt(Object(Ae["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),i(document.body,t,n)):(t.originalPosition=Object(Ae["getStyle"])(t,"position"),i(t,t,n)))})):(_u()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var i=n.modifiers.fullscreen||n.modifiers.body?document.body:t;Object(Ae["removeClass"])(i,"el-loading-parent--relative"),Object(Ae["removeClass"])(i,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},i=function(t,i,n){i.domVisible||"none"===Object(Ae["getStyle"])(i,"display")||"hidden"===Object(Ae["getStyle"])(i,"visibility")?i.domVisible&&!0===i.instance.hiding&&(i.instance.visible=!0,i.instance.hiding=!1):(Object.keys(i.maskStyle).forEach((function(e){i.mask.style[e]=i.maskStyle[e]})),"absolute"!==i.originalPosition&&"fixed"!==i.originalPosition&&Object(Ae["addClass"])(t,"el-loading-parent--relative"),n.modifiers.fullscreen&&n.modifiers.lock&&Object(Ae["addClass"])(t,"el-loading-parent--hidden"),i.domVisible=!0,t.appendChild(i.mask),e.nextTick((function(){i.instance.hiding?i.instance.$emit("after-leave"):i.instance.visible=!0})),i.domInserted=!0)};e.directive("loading",{bind:function(e,i,n){var s=e.getAttribute("element-loading-text"),r=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),o=e.getAttribute("element-loading-custom-class"),l=n.context,c=new xu({el:document.createElement("div"),data:{text:l&&l[s]||s,spinner:l&&l[r]||r,background:l&&l[a]||a,customClass:l&&l[o]||o,fullscreen:!!i.modifiers.fullscreen}});e.instance=c,e.mask=c.$el,e.maskStyle={},i.value&&t(e,i)},update:function(e,i){e.instance.setText(e.getAttribute("element-loading-text")),i.oldValue!==i.value&&t(e,i)},unbind:function(e,i){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:i.modifiers})),e.instance&&e.instance.$destroy()}})}}},wu=Cu,ku=Rn.a.extend(bu),Su={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},Du=void 0;ku.prototype.originalPosition="",ku.prototype.originalOverflow="",ku.prototype.close=function(){var e=this;this.fullscreen&&(Du=void 0),_u()(this,(function(t){var i=e.fullscreen||e.body?document.body:e.target;Object(Ae["removeClass"])(i,"el-loading-parent--relative"),Object(Ae["removeClass"])(i,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var $u=function(e,t,i){var n={};e.fullscreen?(i.originalPosition=Object(Ae["getStyle"])(document.body,"position"),i.originalOverflow=Object(Ae["getStyle"])(document.body,"overflow"),n.zIndex=w["PopupManager"].nextZIndex()):e.body?(i.originalPosition=Object(Ae["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var i="top"===t?"scrollTop":"scrollLeft";n[t]=e.target.getBoundingClientRect()[t]+document.body[i]+document.documentElement[i]+"px"})),["height","width"].forEach((function(t){n[t]=e.target.getBoundingClientRect()[t]+"px"}))):i.originalPosition=Object(Ae["getStyle"])(t,"position"),Object.keys(n).forEach((function(e){i.$el.style[e]=n[e]}))},Ou=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Rn.a.prototype.$isServer){if(e=St()({},Su,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&Du)return Du;var t=e.body?document.body:e.target,i=new ku({el:document.createElement("div"),data:e});return $u(e,t,i),"absolute"!==i.originalPosition&&"fixed"!==i.originalPosition&&Object(Ae["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(Ae["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(i.$el),Rn.a.nextTick((function(){i.visible=!0})),e.fullscreen&&(Du=i),i}},Eu=Ou,Tu={install:function(e){e.use(wu),e.prototype.$loading=Eu},directive:wu,service:Eu},Pu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("i",{class:"el-icon-"+e.name})},Mu=[];Pu._withStripped=!0;var Nu={name:"ElIcon",props:{name:String}},Iu=Nu,ju=o(Iu,Pu,Mu,!1,null,null,null);ju.options.__file="packages/icon/src/icon.vue";var Fu=ju.exports;Fu.install=function(e){e.component(Fu.name,Fu)};var Lu=Fu,Au={name:"ElRow",componentName:"ElRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:String},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-"+this.gutter/2+"px",e.marginRight=e.marginLeft),e}},render:function(e){return e(this.tag,{class:["el-row","start"!==this.justify?"is-justify-"+this.justify:"",this.align?"is-align-"+this.align:"",{"el-row--flex":"flex"===this.type}],style:this.style},this.$slots.default)},install:function(e){e.component(Au.name,Au)}},Vu=Au,Bu="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},zu={name:"ElCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"ElRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,i=[],n={};return this.gutter&&(n.paddingLeft=this.gutter/2+"px",n.paddingRight=n.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&i.push("span"!==e?"el-col-"+e+"-"+t[e]:"el-col-"+t[e])})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])i.push("el-col-"+e+"-"+t[e]);else if("object"===Bu(t[e])){var n=t[e];Object.keys(n).forEach((function(t){i.push("span"!==t?"el-col-"+e+"-"+t+"-"+n[t]:"el-col-"+e+"-"+n[t])}))}})),e(this.tag,{class:["el-col",i],style:n},this.$slots.default)},install:function(e){e.component(zu.name,zu)}},Ru=zu,Hu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return i("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(i){if(!("button"in i)&&e._k(i.keyCode,"delete",[8,46],i.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?i("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),i("a",{staticClass:"el-upload-list__item-name",on:{click:function(i){e.handleClick(t)}}},[i("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+"\n ")]),i("label",{staticClass:"el-upload-list__item-status-label"},[i("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():i("i",{staticClass:"el-icon-close",on:{click:function(i){e.$emit("remove",t)}}}),e.disabled?e._e():i("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),"uploading"===t.status?i("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?i("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?i("span",{staticClass:"el-upload-list__item-preview",on:{click:function(i){e.handlePreview(t)}}},[i("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():i("span",{staticClass:"el-upload-list__item-delete",on:{click:function(i){e.$emit("remove",t)}}},[i("i",{staticClass:"el-icon-delete"})])]):e._e()],{file:t})],2)})),0)},Wu=[];Hu._withStripped=!0;var qu=i(33),Yu=i.n(qu),Ku={name:"ElUploadList",mixins:[g.a],data:function(){return{focusing:!1}},components:{ElProgress:Yu.a},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},Uu=Ku,Gu=o(Uu,Hu,Wu,!1,null,null,null);Gu.options.__file="packages/upload/src/upload-list.vue";var Xu=Gu.exports,Zu=i(24),Qu=i.n(Zu);function Ju(e,t,i){var n=void 0;n=i.response?""+(i.response.error||i.response):i.responseText?""+i.responseText:"fail to post "+e+" "+i.status;var s=new Error(n);return s.status=i.status,s.method="post",s.url=e,s}function eh(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(i){return t}}function th(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,i=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new FormData;e.data&&Object.keys(e.data).forEach((function(t){n.append(t,e.data[t])})),n.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(Ju(i,e,t));e.onSuccess(eh(t))},t.open("post",i,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var s=e.headers||{};for(var r in s)s.hasOwnProperty(r)&&null!==s[r]&&t.setRequestHeader(r,s[r]);return t.send(n),t}}var ih=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop(t)},dragover:function(t){return t.preventDefault(),e.onDragover(t)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},nh=[];ih._withStripped=!0;var sh={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var i=e.type,n=e.name,s=n.indexOf(".")>-1?"."+n.split(".").pop():"",r=i.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?s===e:/\/\*$/.test(e)?r===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&i===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},rh=sh,ah=o(rh,ih,nh,!1,null,null,null);ah.options.__file="packages/upload/src/upload-dragger.vue";var oh,lh,ch=ah.exports,uh={inject:["uploader"],components:{UploadDragger:ch},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:th},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var i=Array.prototype.slice.call(e);this.multiple||(i=i.slice(0,1)),0!==i.length&&i.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var i=this.beforeUpload(e);i&&i.then?i.then((function(i){var n=Object.prototype.toString.call(i);if("[object File]"===n||"[object Blob]"===n){for(var s in"[object Blob]"===n&&(i=new File([i],e.name,{type:e.type})),e)e.hasOwnProperty(s)&&(i[s]=e[s]);t.post(i)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==i?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var i=e;e.uid&&(i=e.uid),t[i]&&t[i].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,i=e.uid,n={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(i){t.onProgress(i,e)},onSuccess:function(n){t.onSuccess(n,e),delete t.reqs[i]},onError:function(n){t.onError(n,e),delete t.reqs[i]}},s=this.httpRequest(n);this.reqs[i]=s,s&&s.then&&s.then(n.onSuccess,n.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,i=this.drag,n=this.name,s=this.handleChange,r=this.multiple,a=this.accept,o=this.listType,l=this.uploadFiles,c=this.disabled,u=this.handleKeydown,h={class:{"el-upload":!0},on:{click:t,keydown:u}};return h.class["el-upload--"+o]=!0,e("div",Qu()([h,{attrs:{tabindex:"0"}}]),[i?e("upload-dragger",{attrs:{disabled:c},on:{file:l}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:n,multiple:r,accept:a},ref:"input",on:{change:s}})])}},hh=uh,dh=o(hh,oh,lh,!1,null,null,null);dh.options.__file="packages/upload/src/upload.vue";var ph=dh.exports;function fh(){}var mh,vh,gh={name:"ElUpload",mixins:[D.a],components:{ElProgress:Yu.a,UploadList:Xu,Upload:ph},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,required:!0},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:fh},onChange:{type:Function,default:fh},onPreview:{type:Function},onSuccess:{type:Function,default:fh},onProgress:{type:Function,default:fh},onError:{type:Function,default:fh},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:fh}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(i){return void console.error("[Element Error][Upload]",i)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var i=this.getFile(t);this.onProgress(e,i,this.uploadFiles),i.status="uploading",i.percentage=e.percent||0},handleSuccess:function(e,t){var i=this.getFile(t);i&&(i.status="success",i.response=e,this.onSuccess(e,i,this.uploadFiles),this.onChange(i,this.uploadFiles))},handleError:function(e,t){var i=this.getFile(t),n=this.uploadFiles;i.status="fail",n.splice(n.indexOf(i),1),this.onError(e,i,this.uploadFiles),this.onChange(i,this.uploadFiles)},handleRemove:function(e,t){var i=this;t&&(e=this.getFile(t));var n=function(){i.abort(e);var t=i.uploadFiles;t.splice(t.indexOf(e),1),i.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var s=this.beforeRemove(e,this.uploadFiles);s&&s.then?s.then((function(){n()}),fh):!1!==s&&n()}}else n()},getFile:function(e){var t=this.uploadFiles,i=void 0;return t.every((function(t){return i=e.uid===t.uid?t:null,!i})),i},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t=this,i=void 0;this.showFileList&&(i=e(Xu,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(t.$scopedSlots.file)return t.$scopedSlots.file({file:e.file})}]));var n={props:{type:this.type,drag:this.drag,action:this.action,multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest},ref:"upload-inner"},s=this.$slots.trigger||this.$slots.default,r=e("upload",n,[s]);return e("div",["picture-card"===this.listType?i:"",this.$slots.trigger?[r,this.$slots.default]:r,this.$slots.tip,"picture-card"!==this.listType?i:""])}},bh=gh,yh=o(bh,mh,vh,!1,null,null,null);yh.options.__file="packages/upload/src/index.vue";var _h=yh.exports;_h.install=function(e){e.component(_h.name,_h)};var xh=_h,Ch=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?i("div",{staticClass:"el-progress-bar"},[i("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[i("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?i("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):i("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[i("svg",{attrs:{viewBox:"0 0 100 100"}},[i("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),i("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":e.strokeLinecap,"stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?i("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?i("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},wh=[];Ch._withStripped=!0;var kh={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),i=0;ie)return t[i].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,i){return"string"===typeof e?{color:e,percentage:(i+1)*t}:e}))}}},Sh=kh,Dh=o(Sh,Ch,wh,!1,null,null,null);Dh.options.__file="packages/progress/src/progress.vue";var $h=Dh.exports;$h.install=function(e){e.component($h.name,$h)};var Oh=$h,Eh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"el-spinner"},[i("svg",{staticClass:"el-spinner-inner",style:{width:e.radius/2+"px",height:e.radius/2+"px"},attrs:{viewBox:"0 0 50 50"}},[i("circle",{staticClass:"path",attrs:{cx:"25",cy:"25",r:"20",fill:"none",stroke:e.strokeColor,"stroke-width":e.strokeWidth}})])])},Th=[];Eh._withStripped=!0;var Ph={name:"ElSpinner",props:{type:String,radius:{type:Number,default:100},strokeWidth:{type:Number,default:5},strokeColor:{type:String,default:"#efefef"}}},Mh=Ph,Nh=o(Mh,Eh,Th,!1,null,null,null);Nh.options.__file="packages/spinner/src/spinner.vue";var Ih=Nh.exports;Ih.install=function(e){e.component(Ih.name,Ih)};var jh=Ih,Fh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?i("i",{class:e.iconClass}):i("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?i("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):i("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?i("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},Lh=[];Fh._withStripped=!0;var Ah={success:"success",info:"info",warning:"warning",error:"error"},Vh={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+Ah[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Bh=Vh,zh=o(Bh,Fh,Lh,!1,null,null,null);zh.options.__file="packages/message/src/main.vue";var Rh=zh.exports,Hh=i(15),Wh=Object.assign||function(e){for(var t=1;tKh.length-1))for(var a=n;a=0;e--)Kh[e].close()};var Xh=Gh,Zh=Xh,Qh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-badge"},[e._t("default"),i("transition",{attrs:{name:"el-zoom-in-center"}},[i("sup",{directives:[{name:"show",rawName:"v-show",value:!e.hidden&&(e.content||0===e.content||e.isDot),expression:"!hidden && (content || content === 0 || isDot)"}],staticClass:"el-badge__content",class:["el-badge__content--"+e.type,{"is-fixed":e.$slots.default,"is-dot":e.isDot}],domProps:{textContent:e._s(e.content)}})])],2)},Jh=[];Qh._withStripped=!0;var ed={name:"ElBadge",props:{value:[String,Number],max:Number,isDot:Boolean,hidden:Boolean,type:{type:String,validator:function(e){return["primary","success","warning","info","danger"].indexOf(e)>-1}}},computed:{content:function(){if(!this.isDot){var e=this.value,t=this.max;return"number"===typeof e&&"number"===typeof t&&t0&&e-1this.value,i=this.allowHalf&&this.pointerAtLeftHalf&&e-.5<=this.currentValue&&e>this.currentValue;return t||i},getIconStyle:function(e){var t=this.rateDisabled?this.disabledVoidColor:this.voidColor;return{color:e<=this.currentValue?this.activeColor:t}},selectValue:function(e){this.rateDisabled||(this.allowHalf&&this.pointerAtLeftHalf?(this.$emit("input",this.currentValue),this.$emit("change",this.currentValue)):(this.$emit("input",e),this.$emit("change",e)))},handleKey:function(e){if(!this.rateDisabled){var t=this.currentValue,i=e.keyCode;38===i||39===i?(this.allowHalf?t+=.5:t+=1,e.stopPropagation(),e.preventDefault()):37!==i&&40!==i||(this.allowHalf?t-=.5:t-=1,e.stopPropagation(),e.preventDefault()),t=t<0?0:t,t=t>this.max?this.max:t,this.$emit("input",t),this.$emit("change",t)}},setCurrentValue:function(e,t){if(!this.rateDisabled){if(this.allowHalf){var i=t.target;Object(Ae["hasClass"])(i,"el-rate__item")&&(i=i.querySelector(".el-rate__icon")),Object(Ae["hasClass"])(i,"el-rate__decimal")&&(i=i.parentNode),this.pointerAtLeftHalf=2*t.offsetX<=i.clientWidth,this.currentValue=this.pointerAtLeftHalf?e-.5:e}else this.currentValue=e;this.hoverIndex=e}},resetCurrentValue:function(){this.rateDisabled||(this.allowHalf&&(this.pointerAtLeftHalf=this.value!==Math.floor(this.value)),this.currentValue=this.value,this.hoverIndex=-1)}},created:function(){this.value||this.$emit("input",0)}},md=fd,vd=o(md,dd,pd,!1,null,null,null);vd.options.__file="packages/rate/src/main.vue";var gd=vd.exports;gd.install=function(e){e.component(gd.name,gd)};var bd=gd,yd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-steps",class:[!e.simple&&"el-steps--"+e.direction,e.simple&&"el-steps--simple"]},[e._t("default")],2)},_d=[];yd._withStripped=!0;var xd={name:"ElSteps",mixins:[D.a],props:{space:[Number,String],active:Number,direction:{type:String,default:"horizontal"},alignCenter:Boolean,simple:Boolean,finishStatus:{type:String,default:"finish"},processStatus:{type:String,default:"process"}},data:function(){return{steps:[],stepOffset:0}},methods:{getMigratingConfig:function(){return{props:{center:"center is removed."}}}},watch:{active:function(e,t){this.$emit("change",e,t)},steps:function(e){e.forEach((function(e,t){e.index=t}))}}},Cd=xd,wd=o(Cd,yd,_d,!1,null,null,null);wd.options.__file="packages/steps/src/steps.vue";var kd=wd.exports;kd.install=function(e){e.component(kd.name,kd)};var Sd=kd,Dd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-step",class:[!e.isSimple&&"is-"+e.$parent.direction,e.isSimple&&"is-simple",e.isLast&&!e.space&&!e.isCenter&&"is-flex",e.isCenter&&!e.isVertical&&!e.isSimple&&"is-center"],style:e.style},[i("div",{staticClass:"el-step__head",class:"is-"+e.currentStatus},[i("div",{staticClass:"el-step__line",style:e.isLast?"":{marginRight:e.$parent.stepOffset+"px"}},[i("i",{staticClass:"el-step__line-inner",style:e.lineStyle})]),i("div",{staticClass:"el-step__icon",class:"is-"+(e.icon?"icon":"text")},["success"!==e.currentStatus&&"error"!==e.currentStatus?e._t("icon",[e.icon?i("i",{staticClass:"el-step__icon-inner",class:[e.icon]}):e._e(),e.icon||e.isSimple?e._e():i("div",{staticClass:"el-step__icon-inner"},[e._v(e._s(e.index+1))])]):i("i",{staticClass:"el-step__icon-inner is-status",class:["el-icon-"+("success"===e.currentStatus?"check":"close")]})],2)]),i("div",{staticClass:"el-step__main"},[i("div",{ref:"title",staticClass:"el-step__title",class:["is-"+e.currentStatus]},[e._t("title",[e._v(e._s(e.title))])],2),e.isSimple?i("div",{staticClass:"el-step__arrow"}):i("div",{staticClass:"el-step__description",class:["is-"+e.currentStatus]},[e._t("description",[e._v(e._s(e.description))])],2)])])},$d=[];Dd._withStripped=!0;var Od={name:"ElStep",props:{title:String,icon:String,description:String,status:String},data:function(){return{index:-1,lineStyle:{},internalStatus:""}},beforeCreate:function(){this.$parent.steps.push(this)},beforeDestroy:function(){var e=this.$parent.steps,t=e.indexOf(this);t>=0&&e.splice(t,1)},computed:{currentStatus:function(){return this.status||this.internalStatus},prevStatus:function(){var e=this.$parent.steps[this.index-1];return e?e.currentStatus:"wait"},isCenter:function(){return this.$parent.alignCenter},isVertical:function(){return"vertical"===this.$parent.direction},isSimple:function(){return this.$parent.simple},isLast:function(){var e=this.$parent;return e.steps[e.steps.length-1]===this},stepsCount:function(){return this.$parent.steps.length},space:function(){var e=this.isSimple,t=this.$parent.space;return e?"":t},style:function(){var e={},t=this.$parent,i=t.steps.length,n="number"===typeof this.space?this.space+"px":this.space?this.space:100/(i-(this.isCenter?0:1))+"%";return e.flexBasis=n,this.isVertical||(this.isLast?e.maxWidth=100/this.stepsCount+"%":e.marginRight=-this.$parent.stepOffset+"px"),e}},methods:{updateStatus:function(e){var t=this.$parent.$children[this.index-1];e>this.index?this.internalStatus=this.$parent.finishStatus:e===this.index&&"error"!==this.prevStatus?this.internalStatus=this.$parent.processStatus:this.internalStatus="wait",t&&t.calcProgress(this.internalStatus)},calcProgress:function(e){var t=100,i={};i.transitionDelay=150*this.index+"ms",e===this.$parent.processStatus?(this.currentStatus,t=0):"wait"===e&&(t=0,i.transitionDelay=-150*this.index+"ms"),i.borderWidth=t&&!this.isSimple?"1px":0,"vertical"===this.$parent.direction?i.height=t+"%":i.width=t+"%",this.lineStyle=i}},mounted:function(){var e=this,t=this.$watch("index",(function(i){e.$watch("$parent.active",e.updateStatus,{immediate:!0}),e.$watch("$parent.processStatus",(function(){var t=e.$parent.active;e.updateStatus(t)}),{immediate:!0}),t()}))}},Ed=Od,Td=o(Ed,Dd,$d,!1,null,null,null);Td.options.__file="packages/steps/src/step.vue";var Pd=Td.exports;Pd.install=function(e){e.component(Pd.name,Pd)};var Md=Pd,Nd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.carouselClasses,on:{mouseenter:function(t){return t.stopPropagation(),e.handleMouseEnter(t)},mouseleave:function(t){return t.stopPropagation(),e.handleMouseLeave(t)}}},[i("div",{staticClass:"el-carousel__container",style:{height:e.height}},[e.arrowDisplay?i("transition",{attrs:{name:"carousel-arrow-left"}},[i("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex>0),expression:"(arrow === 'always' || hover) && (loop || activeIndex > 0)"}],staticClass:"el-carousel__arrow el-carousel__arrow--left",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("left")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex-1)}}},[i("i",{staticClass:"el-icon-arrow-left"})])]):e._e(),e.arrowDisplay?i("transition",{attrs:{name:"carousel-arrow-right"}},[i("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex0}))},carouselClasses:function(){var e=["el-carousel","el-carousel--"+this.direction];return"card"===this.type&&e.push("el-carousel--card"),e},indicatorsClasses:function(){var e=["el-carousel__indicators","el-carousel__indicators--"+this.direction];return this.hasLabel&&e.push("el-carousel__indicators--labels"),"outside"!==this.indicatorPosition&&"card"!==this.type||e.push("el-carousel__indicators--outside"),e}},watch:{items:function(e){e.length>0&&this.setActiveItem(this.initialIndex)},activeIndex:function(e,t){this.resetItemPosition(t),t>-1&&this.$emit("change",e,t)},autoplay:function(e){e?this.startTimer():this.pauseTimer()},loop:function(){this.setActiveItem(this.activeIndex)},interval:function(){this.pauseTimer(),this.startTimer()}},methods:{handleMouseEnter:function(){this.hover=!0,this.pauseTimer()},handleMouseLeave:function(){this.hover=!1,this.startTimer()},itemInStage:function(e,t){var i=this.items.length;return t===i-1&&e.inStage&&this.items[0].active||e.inStage&&this.items[t+1]&&this.items[t+1].active?"left":!!(0===t&&e.inStage&&this.items[i-1].active||e.inStage&&this.items[t-1]&&this.items[t-1].active)&&"right"},handleButtonEnter:function(e){var t=this;"vertical"!==this.direction&&this.items.forEach((function(i,n){e===t.itemInStage(i,n)&&(i.hover=!0)}))},handleButtonLeave:function(){"vertical"!==this.direction&&this.items.forEach((function(e){e.hover=!1}))},updateItems:function(){this.items=this.$children.filter((function(e){return"ElCarouselItem"===e.$options.name}))},resetItemPosition:function(e){var t=this;this.items.forEach((function(i,n){i.translateItem(n,t.activeIndex,e)}))},playSlides:function(){this.activeIndex0&&(e=this.items.indexOf(t[0]))}if(e=Number(e),isNaN(e)||e!==Math.floor(e))console.warn("[Element Warn][Carousel]index must be an integer.");else{var i=this.items.length,n=this.activeIndex;this.activeIndex=e<0?this.loop?i-1:0:e>=i?this.loop?0:i-1:e,n===this.activeIndex&&this.resetItemPosition(n),this.resetTimer()}},prev:function(){this.setActiveItem(this.activeIndex-1)},next:function(){this.setActiveItem(this.activeIndex+1)},handleIndicatorClick:function(e){this.activeIndex=e},handleIndicatorHover:function(e){"hover"===this.trigger&&e!==this.activeIndex&&(this.activeIndex=e)}},created:function(){var e=this;this.throttledArrowClick=Fd()(300,!0,(function(t){e.setActiveItem(t)})),this.throttledIndicatorHover=Fd()(300,(function(t){e.handleIndicatorHover(t)}))},mounted:function(){var e=this;this.updateItems(),this.$nextTick((function(){Object(Ji["addResizeListener"])(e.$el,e.resetItemPosition),e.initialIndex=0&&(e.activeIndex=e.initialIndex),e.startTimer()}))},beforeDestroy:function(){this.$el&&Object(Ji["removeResizeListener"])(this.$el,this.resetItemPosition),this.pauseTimer()}},Ad=Ld,Vd=o(Ad,Nd,Id,!1,null,null,null);Vd.options.__file="packages/carousel/src/main.vue";var Bd=Vd.exports;Bd.install=function(e){e.component(Bd.name,Bd)};var zd=Bd,Rd={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function Hd(e){var t=e.move,i=e.size,n=e.bar,s={},r="translate"+n.axis+"("+t+"%)";return s[n.size]=i,s.transform=r,s.msTransform=r,s.webkitTransform=r,s}var Wd={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return Rd[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,i=this.move,n=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+n.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:Hd({size:t,move:i,bar:n})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]/2,n=100*(t-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=n*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(Ae["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(Ae["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var i=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]-t,s=100*(i-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=s*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(Ae["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(Ae["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},qd={name:"ElScrollbar",components:{Bar:Wd},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=gs()(),i=this.wrapStyle;if(t){var n="-"+t+"px",s="margin-bottom: "+n+"; margin-right: "+n+";";Array.isArray(this.wrapStyle)?(i=Object(b["toObject"])(this.wrapStyle),i.marginRight=i.marginBottom=n):"string"===typeof this.wrapStyle?i+=s:i=s}var r=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),a=e("div",{ref:"wrap",style:i,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[r]]),o=void 0;return o=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:i},[[r]])]:[a,e(Wd,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(Wd,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},o)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,i=this.wrap;i&&(e=100*i.clientHeight/i.scrollHeight,t=100*i.clientWidth/i.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(Ji["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(Ji["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(qd.name,qd)}},Yd=qd,Kd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.ready,expression:"ready"}],staticClass:"el-carousel__item",class:{"is-active":e.active,"el-carousel__item--card":"card"===e.$parent.type,"is-in-stage":e.inStage,"is-hover":e.hover,"is-animating":e.animating},style:e.itemStyle,on:{click:e.handleItemClick}},["card"===e.$parent.type?i("div",{directives:[{name:"show",rawName:"v-show",value:!e.active,expression:"!active"}],staticClass:"el-carousel__mask"}):e._e(),e._t("default")],2)},Ud=[];Kd._withStripped=!0;var Gd=.83,Xd={name:"ElCarouselItem",props:{name:String,label:{type:[String,Number],default:""}},data:function(){return{hover:!1,translate:0,scale:1,active:!1,ready:!1,inStage:!1,animating:!1}},methods:{processIndex:function(e,t,i){return 0===t&&e===i-1?-1:t===i-1&&0===e?i:e=i/2?i+1:e>t+1&&e-t>=i/2?-2:e},calcCardTranslate:function(e,t){var i=this.$parent.$el.offsetWidth;return this.inStage?i*((2-Gd)*(e-t)+1)/4:e2&&this.$parent.loop&&(e=this.processIndex(e,t,r)),"card"===n)"vertical"===s&&console.warn("[Element Warn][Carousel]vertical direction is not supported in card mode"),this.inStage=Math.round(Math.abs(e-t))<=1,this.active=e===t,this.translate=this.calcCardTranslate(e,t),this.scale=this.active?1:Gd;else{this.active=e===t;var a="vertical"===s;this.translate=this.calcTranslate(e,t,a),this.scale=1}this.ready=!0},handleItemClick:function(){var e=this.$parent;if(e&&"card"===e.type){var t=e.items.indexOf(this);e.setActiveItem(t)}}},computed:{parentDirection:function(){return this.$parent.direction},itemStyle:function(){var e="vertical"===this.parentDirection?"translateY":"translateX",t=e+"("+this.translate+"px) scale("+this.scale+")",i={transform:t};return Object(b["autoprefixer"])(i)}},created:function(){this.$parent&&this.$parent.updateItems()},destroyed:function(){this.$parent&&this.$parent.updateItems()}},Zd=Xd,Qd=o(Zd,Kd,Ud,!1,null,null,null);Qd.options.__file="packages/carousel/src/item.vue";var Jd=Qd.exports;Jd.install=function(e){e.component(Jd.name,Jd)};var ep=Jd,tp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-collapse",attrs:{role:"tablist","aria-multiselectable":"true"}},[e._t("default")],2)},ip=[];tp._withStripped=!0;var np={name:"ElCollapse",componentName:"ElCollapse",props:{accordion:Boolean,value:{type:[Array,String,Number],default:function(){return[]}}},data:function(){return{activeNames:[].concat(this.value)}},provide:function(){return{collapse:this}},watch:{value:function(e){this.activeNames=[].concat(e)}},methods:{setActiveNames:function(e){e=[].concat(e);var t=this.accordion?e[0]:e;this.activeNames=e,this.$emit("input",t),this.$emit("change",t)},handleItemClick:function(e){if(this.accordion)this.setActiveNames(!this.activeNames[0]&&0!==this.activeNames[0]||this.activeNames[0]!==e.name?e.name:"");else{var t=this.activeNames.slice(0),i=t.indexOf(e.name);i>-1?t.splice(i,1):t.push(e.name),this.setActiveNames(t)}}},created:function(){this.$on("item-click",this.handleItemClick)}},sp=np,rp=o(sp,tp,ip,!1,null,null,null);rp.options.__file="packages/collapse/src/collapse.vue";var ap=rp.exports;ap.install=function(e){e.component(ap.name,ap)};var op=ap,lp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-collapse-item",class:{"is-active":e.isActive,"is-disabled":e.disabled}},[i("div",{attrs:{role:"tab","aria-expanded":e.isActive,"aria-controls":"el-collapse-content-"+e.id,"aria-describedby":"el-collapse-content-"+e.id}},[i("div",{staticClass:"el-collapse-item__header",class:{focusing:e.focusing,"is-active":e.isActive},attrs:{role:"button",id:"el-collapse-head-"+e.id,tabindex:e.disabled?void 0:0},on:{click:e.handleHeaderClick,keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.stopPropagation(),e.handleEnterClick(t))},focus:e.handleFocus,blur:function(t){e.focusing=!1}}},[e._t("title",[e._v(e._s(e.title))]),i("i",{staticClass:"el-collapse-item__arrow el-icon-arrow-right",class:{"is-active":e.isActive}})],2)]),i("el-collapse-transition",[i("div",{directives:[{name:"show",rawName:"v-show",value:e.isActive,expression:"isActive"}],staticClass:"el-collapse-item__wrap",attrs:{role:"tabpanel","aria-hidden":!e.isActive,"aria-labelledby":"el-collapse-head-"+e.id,id:"el-collapse-content-"+e.id}},[i("div",{staticClass:"el-collapse-item__content"},[e._t("default")],2)])])],1)},cp=[];lp._withStripped=!0;var up={name:"ElCollapseItem",componentName:"ElCollapseItem",mixins:[O.a],components:{ElCollapseTransition:Ke.a},data:function(){return{contentWrapStyle:{height:"auto",display:"block"},contentHeight:0,focusing:!1,isClick:!1,id:Object(b["generateId"])()}},inject:["collapse"],props:{title:String,name:{type:[String,Number],default:function(){return this._uid}},disabled:Boolean},computed:{isActive:function(){return this.collapse.activeNames.indexOf(this.name)>-1}},methods:{handleFocus:function(){var e=this;setTimeout((function(){e.isClick?e.isClick=!1:e.focusing=!0}),50)},handleHeaderClick:function(){this.disabled||(this.dispatch("ElCollapse","item-click",this),this.focusing=!1,this.isClick=!0)},handleEnterClick:function(){this.dispatch("ElCollapse","item-click",this)}}},hp=up,dp=o(hp,lp,cp,!1,null,null,null);dp.options.__file="packages/collapse/src/collapse-item.vue";var pp=dp.exports;pp.install=function(e){e.component(pp.name,pp)};var fp=pp,mp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:function(){return e.toggleDropDownVisible(!1)},expression:"() => toggleDropDownVisible(false)"}],ref:"reference",class:["el-cascader",e.realSize&&"el-cascader--"+e.realSize,{"is-disabled":e.isDisabled}],on:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1},click:function(){return e.toggleDropDownVisible(!e.readonly||void 0)},keydown:e.handleKeyDown}},[i("el-input",{ref:"input",class:{"is-focus":e.dropDownVisible},attrs:{size:e.realSize,placeholder:e.placeholder,readonly:e.readonly,disabled:e.isDisabled,"validate-event":!1},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput},model:{value:e.multiple?e.presentText:e.inputValue,callback:function(t){e.multiple?e.presentText:e.inputValue=t},expression:"multiple ? presentText : inputValue"}},[i("template",{slot:"suffix"},[e.clearBtnVisible?i("i",{key:"clear",staticClass:"el-input__icon el-icon-circle-close",on:{click:function(t){return t.stopPropagation(),e.handleClear(t)}}}):i("i",{key:"arrow-down",class:["el-input__icon","el-icon-arrow-down",e.dropDownVisible&&"is-reverse"],on:{click:function(t){t.stopPropagation(),e.toggleDropDownVisible()}}})])],2),e.multiple?i("div",{staticClass:"el-cascader__tags"},[e._l(e.presentTags,(function(t){return i("el-tag",{key:t.key,attrs:{type:"info",size:e.tagSize,hit:t.hitState,closable:t.closable,"disable-transitions":""},on:{close:function(i){e.deleteTag(t)}}},[i("span",[e._v(e._s(t.text))])])})),e.filterable&&!e.isDisabled?i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.inputValue,expression:"inputValue",modifiers:{trim:!0}}],staticClass:"el-cascader__search-input",attrs:{type:"text",placeholder:e.presentTags.length?"":e.placeholder},domProps:{value:e.inputValue},on:{input:[function(t){t.target.composing||(e.inputValue=t.target.value.trim())},function(t){return e.handleInput(e.inputValue,t)}],click:function(t){t.stopPropagation(),e.toggleDropDownVisible(!0)},keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.handleDelete(t)},blur:function(t){e.$forceUpdate()}}}):e._e()],2):e._e(),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.handleDropdownLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.dropDownVisible,expression:"dropDownVisible"}],ref:"popper",class:["el-popper","el-cascader__dropdown",e.popperClass]},[i("el-cascader-panel",{directives:[{name:"show",rawName:"v-show",value:!e.filtering,expression:"!filtering"}],ref:"panel",attrs:{options:e.options,props:e.config,border:!1,"render-label":e.$scopedSlots.default},on:{"expand-change":e.handleExpandChange,close:function(t){e.toggleDropDownVisible(!1)}},model:{value:e.checkedValue,callback:function(t){e.checkedValue=t},expression:"checkedValue"}}),e.filterable?i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.filtering,expression:"filtering"}],ref:"suggestionPanel",staticClass:"el-cascader__suggestion-panel",attrs:{tag:"ul","view-class":"el-cascader__suggestion-list"},nativeOn:{keydown:function(t){return e.handleSuggestionKeyDown(t)}}},[e.suggestions.length?e._l(e.suggestions,(function(t,n){return i("li",{key:t.uid,class:["el-cascader__suggestion-item",t.checked&&"is-checked"],attrs:{tabindex:-1},on:{click:function(t){e.handleSuggestionClick(n)}}},[i("span",[e._v(e._s(t.text))]),t.checked?i("i",{staticClass:"el-icon-check"}):e._e()])})):e._t("empty",[i("li",{staticClass:"el-cascader__empty-text"},[e._v(e._s(e.t("el.cascader.noMatch")))])])],2):e._e()],1)])],1)},vp=[];mp._withStripped=!0;var gp=i(42),bp=i.n(gp),yp=i(34),_p=i.n(yp),xp=_p.a.keys,Cp={expandTrigger:{newProp:"expandTrigger",type:String},changeOnSelect:{newProp:"checkStrictly",type:Boolean},hoverThreshold:{newProp:"hoverThreshold",type:Number}},wp={props:{placement:{type:String,default:"bottom-start"},appendToBody:H.a.props.appendToBody,visibleArrow:{type:Boolean,default:!0},arrowOffset:H.a.props.arrowOffset,offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},methods:H.a.methods,data:H.a.data,beforeDestroy:H.a.beforeDestroy},kp={medium:36,small:32,mini:28},Sp={name:"ElCascader",directives:{Clickoutside:V.a},mixins:[wp,O.a,g.a,D.a],inject:{elForm:{default:""},elFormItem:{default:""}},components:{ElInput:m.a,ElTag:Qi.a,ElScrollbar:q.a,ElCascaderPanel:bp.a},props:{value:{},options:Array,props:Object,size:String,placeholder:{type:String,default:function(){return Object(fo["t"])("el.cascader.placeholder")}},disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:Function,separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,debounce:{type:Number,default:300},beforeFilter:{type:Function,default:function(){return function(){}}},popperClass:String},data:function(){return{dropDownVisible:!1,checkedValue:this.value,inputHover:!1,inputValue:null,presentText:null,presentTags:[],checkedNodes:[],filtering:!1,suggestions:[],inputInitialHeight:0,pressDeleteCount:0}},computed:{realSize:function(){var e=(this.elFormItem||{}).elFormItemSize;return this.size||e||(this.$ELEMENT||{}).size},tagSize:function(){return["small","mini"].indexOf(this.realSize)>-1?"mini":"small"},isDisabled:function(){return this.disabled||(this.elForm||{}).disabled},config:function(){var e=this.props||{},t=this.$attrs;return Object.keys(Cp).forEach((function(i){var n=Cp[i],s=n.newProp,r=n.type,a=t[i]||t[Object(b["kebabCase"])(i)];Object(Dt["isDef"])(i)&&!Object(Dt["isDef"])(e[s])&&(r===Boolean&&""===a&&(a=!0),e[s]=a)})),e},multiple:function(){return this.config.multiple},leafOnly:function(){return!this.config.checkStrictly},readonly:function(){return!this.filterable||this.multiple},clearBtnVisible:function(){return!(!this.clearable||this.isDisabled||this.filtering||!this.inputHover)&&(this.multiple?!!this.checkedNodes.filter((function(e){return!e.isDisabled})).length:!!this.presentText)},panel:function(){return this.$refs.panel}},watch:{disabled:function(){this.computePresentContent()},value:function(e){Object(b["isEqual"])(e,this.checkedValue)||(this.checkedValue=e,this.computePresentContent())},checkedValue:function(e){var t=this.value,i=this.dropDownVisible,n=this.config,s=n.checkStrictly,r=n.multiple;Object(b["isEqual"])(e,t)&&!Object(Hh["isUndefined"])(t)||(this.computePresentContent(),r||s||!i||this.toggleDropDownVisible(!1),this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",[e]))},options:{handler:function(){this.$nextTick(this.computePresentContent)},deep:!0},presentText:function(e){this.inputValue=e},presentTags:function(e,t){this.multiple&&(e.length||t.length)&&this.$nextTick(this.updateStyle)},filtering:function(e){this.$nextTick(this.updatePopper)}},mounted:function(){var e=this,t=this.$refs.input;t&&t.$el&&(this.inputInitialHeight=t.$el.offsetHeight||kp[this.realSize]||40),this.isEmptyValue(this.value)||this.computePresentContent(),this.filterHandler=L()(this.debounce,(function(){var t=e.inputValue;if(t){var i=e.beforeFilter(t);i&&i.then?i.then(e.getSuggestions):!1!==i?e.getSuggestions():e.filtering=!1}else e.filtering=!1})),Object(Ji["addResizeListener"])(this.$el,this.updateStyle)},beforeDestroy:function(){Object(Ji["removeResizeListener"])(this.$el,this.updateStyle)},methods:{getMigratingConfig:function(){return{props:{"expand-trigger":"expand-trigger is removed, use `props.expandTrigger` instead.","change-on-select":"change-on-select is removed, use `props.checkStrictly` instead.","hover-threshold":"hover-threshold is removed, use `props.hoverThreshold` instead"},events:{"active-item-change":"active-item-change is renamed to expand-change"}}},toggleDropDownVisible:function(e){var t=this;if(!this.isDisabled){var i=this.dropDownVisible,n=this.$refs.input;e=Object(Dt["isDef"])(e)?e:!i,e!==i&&(this.dropDownVisible=e,e&&this.$nextTick((function(){t.updatePopper(),t.panel.scrollIntoView()})),n.$refs.input.setAttribute("aria-expanded",e),this.$emit("visible-change",e))}},handleDropdownLeave:function(){this.filtering=!1,this.inputValue=this.presentText,this.doDestroy()},handleKeyDown:function(e){switch(e.keyCode){case xp.enter:this.toggleDropDownVisible();break;case xp.down:this.toggleDropDownVisible(!0),this.focusFirstNode(),e.preventDefault();break;case xp.esc:case xp.tab:this.toggleDropDownVisible(!1);break}},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleInput:function(e,t){!this.dropDownVisible&&this.toggleDropDownVisible(!0),t&&t.isComposing||(e?this.filterHandler():this.filtering=!1)},handleClear:function(){this.presentText="",this.panel.clearCheckedNodes()},handleExpandChange:function(e){this.$nextTick(this.updatePopper.bind(this)),this.$emit("expand-change",e),this.$emit("active-item-change",e)},focusFirstNode:function(){var e=this;this.$nextTick((function(){var t=e.filtering,i=e.$refs,n=i.popper,s=i.suggestionPanel,r=null;if(t&&s)r=s.$el.querySelector(".el-cascader__suggestion-item");else{var a=n.querySelector(".el-cascader-menu");r=a.querySelector('.el-cascader-node[tabindex="-1"]')}r&&(r.focus(),!t&&r.click())}))},computePresentContent:function(){var e=this;this.$nextTick((function(){e.config.multiple?(e.computePresentTags(),e.presentText=e.presentTags.length?" ":null):e.computePresentText()}))},isEmptyValue:function(e){var t=this.multiple,i=this.panel.config.emitPath;return!(!t&&!i)&&Object(b["isEmpty"])(e)},computePresentText:function(){var e=this.checkedValue,t=this.config;if(!this.isEmptyValue(e)){var i=this.panel.getNodeByValue(e);if(i&&(t.checkStrictly||i.isLeaf))return void(this.presentText=i.getText(this.showAllLevels,this.separator))}this.presentText=null},computePresentTags:function(){var e=this.isDisabled,t=this.leafOnly,i=this.showAllLevels,n=this.separator,s=this.collapseTags,r=this.getCheckedNodes(t),a=[],o=function(t){return{node:t,key:t.uid,text:t.getText(i,n),hitState:!1,closable:!e&&!t.isDisabled}};if(r.length){var l=r[0],c=r.slice(1),u=c.length;a.push(o(l)),u&&(s?a.push({key:-1,text:"+ "+u,closable:!1}):c.forEach((function(e){return a.push(o(e))})))}this.checkedNodes=r,this.presentTags=a},getSuggestions:function(){var e=this,t=this.filterMethod;Object(Hh["isFunction"])(t)||(t=function(e,t){return e.text.includes(t)});var i=this.panel.getFlattedNodes(this.leafOnly).filter((function(i){return!i.isDisabled&&(i.text=i.getText(e.showAllLevels,e.separator)||"",t(i,e.inputValue))}));this.multiple?this.presentTags.forEach((function(e){e.hitState=!1})):i.forEach((function(t){t.checked=Object(b["isEqual"])(e.checkedValue,t.getValueByOption())})),this.filtering=!0,this.suggestions=i,this.$nextTick(this.updatePopper)},handleSuggestionKeyDown:function(e){var t=e.keyCode,i=e.target;switch(t){case xp.enter:i.click();break;case xp.up:var n=i.previousElementSibling;n&&n.focus();break;case xp.down:var s=i.nextElementSibling;s&&s.focus();break;case xp.esc:case xp.tab:this.toggleDropDownVisible(!1);break}},handleDelete:function(){var e=this.inputValue,t=this.pressDeleteCount,i=this.presentTags,n=i.length-1,s=i[n];this.pressDeleteCount=e?0:t+1,s&&this.pressDeleteCount&&(s.hitState?this.deleteTag(s):s.hitState=!0)},handleSuggestionClick:function(e){var t=this.multiple,i=this.suggestions[e];if(t){var n=i.checked;i.doCheck(!n),this.panel.calculateMultiCheckedValue()}else this.checkedValue=i.getValueByOption(),this.toggleDropDownVisible(!1)},deleteTag:function(e){var t=this.checkedValue,i=e.node.getValueByOption(),n=t.find((function(e){return Object(b["isEqual"])(e,i)}));this.checkedValue=t.filter((function(e){return!Object(b["isEqual"])(e,i)})),this.$emit("remove-tag",n)},updateStyle:function(){var e=this.$el,t=this.inputInitialHeight;if(!this.$isServer&&e){var i=this.$refs.suggestionPanel,n=e.querySelector(".el-input__inner");if(n){var s=e.querySelector(".el-cascader__tags"),r=null;if(i&&(r=i.$el)){var a=r.querySelector(".el-cascader__suggestion-list");a.style.minWidth=n.offsetWidth+"px"}if(s){var o=Math.round(s.getBoundingClientRect().height),l=Math.max(o+6,t)+"px";n.style.height=l,this.dropDownVisible&&this.updatePopper()}}}},getCheckedNodes:function(e){return this.panel.getCheckedNodes(e)}}},Dp=Sp,$p=o(Dp,mp,vp,!1,null,null,null);$p.options.__file="packages/cascader/src/cascader.vue";var Op=$p.exports;Op.install=function(e){e.component(Op.name,Op)};var Ep=Op,Tp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.hide,expression:"hide"}],class:["el-color-picker",e.colorDisabled?"is-disabled":"",e.colorSize?"el-color-picker--"+e.colorSize:""]},[e.colorDisabled?i("div",{staticClass:"el-color-picker__mask"}):e._e(),i("div",{staticClass:"el-color-picker__trigger",on:{click:e.handleTrigger}},[i("span",{staticClass:"el-color-picker__color",class:{"is-alpha":e.showAlpha}},[i("span",{staticClass:"el-color-picker__color-inner",style:{backgroundColor:e.displayedColor}}),e.value||e.showPanelColor?e._e():i("span",{staticClass:"el-color-picker__empty el-icon-close"})]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.value||e.showPanelColor,expression:"value || showPanelColor"}],staticClass:"el-color-picker__icon el-icon-arrow-down"})]),i("picker-dropdown",{ref:"dropdown",class:["el-color-picker__panel",e.popperClass||""],attrs:{color:e.color,"show-alpha":e.showAlpha,predefine:e.predefine},on:{pick:e.confirmValue,clear:e.clearValue},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},Pp=[];Tp._withStripped=!0;var Mp="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function Np(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Ip=function(e,t,i){return[e,t*i/((e=(2-t)*i)<1?e:2-e)||0,e/2]},jp=function(e){return"string"===typeof e&&-1!==e.indexOf(".")&&1===parseFloat(e)},Fp=function(e){return"string"===typeof e&&-1!==e.indexOf("%")},Lp=function(e,t){jp(e)&&(e="100%");var i=Fp(e);return e=Math.min(t,Math.max(0,parseFloat(e))),i&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},Ap={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Vp=function(e){var t=e.r,i=e.g,n=e.b,s=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),i=e%16;return""+(Ap[t]||t)+(Ap[i]||i)};return isNaN(t)||isNaN(i)||isNaN(n)?"":"#"+s(t)+s(i)+s(n)},Bp={A:10,B:11,C:12,D:13,E:14,F:15},zp=function(e){return 2===e.length?16*(Bp[e[0].toUpperCase()]||+e[0])+(Bp[e[1].toUpperCase()]||+e[1]):Bp[e[1].toUpperCase()]||+e[1]},Rp=function(e,t,i){t/=100,i/=100;var n=t,s=Math.max(i,.01),r=void 0,a=void 0;return i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s,a=(i+t)/2,r=0===i?2*n/(s+n):2*t/(i+t),{h:e,s:100*r,v:100*a}},Hp=function(e,t,i){e=Lp(e,255),t=Lp(t,255),i=Lp(i,255);var n=Math.max(e,t,i),s=Math.min(e,t,i),r=void 0,a=void 0,o=n,l=n-s;if(a=0===n?0:l/n,n===s)r=0;else{switch(n){case e:r=(t-i)/l+(t2?parseFloat(e):parseInt(e,10)}));if(4===n.length?this._alpha=Math.floor(100*parseFloat(n[3])):3===n.length&&(this._alpha=100),n.length>=3){var s=Rp(n[0],n[1],n[2]),r=s.h,a=s.s,o=s.v;i(r,a,o)}}else if(-1!==e.indexOf("hsv")){var l=e.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));4===l.length?this._alpha=Math.floor(100*parseFloat(l[3])):3===l.length&&(this._alpha=100),l.length>=3&&i(l[0],l[1],l[2])}else if(-1!==e.indexOf("rgb")){var c=e.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===c.length?this._alpha=Math.floor(100*parseFloat(c[3])):3===c.length&&(this._alpha=100),c.length>=3){var u=Hp(c[0],c[1],c[2]),h=u.h,d=u.s,p=u.v;i(h,d,p)}}else if(-1!==e.indexOf("#")){var f=e.replace("#","").trim();if(!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(f))return;var m=void 0,v=void 0,g=void 0;3===f.length?(m=zp(f[0]+f[0]),v=zp(f[1]+f[1]),g=zp(f[2]+f[2])):6!==f.length&&8!==f.length||(m=zp(f.substring(0,2)),v=zp(f.substring(2,4)),g=zp(f.substring(4,6))),8===f.length?this._alpha=Math.floor(zp(f.substring(6))/255*100):3!==f.length&&6!==f.length||(this._alpha=100);var b=Hp(m,v,g),y=b.h,_=b.s,x=b.v;i(y,_,x)}},e.prototype.compare=function(e){return Math.abs(e._hue-this._hue)<2&&Math.abs(e._saturation-this._saturation)<1&&Math.abs(e._value-this._value)<1&&Math.abs(e._alpha-this._alpha)<1},e.prototype.doOnChange=function(){var e=this._hue,t=this._saturation,i=this._value,n=this._alpha,s=this.format;if(this.enableAlpha)switch(s){case"hsl":var r=Ip(e,t/100,i/100);this.value="hsla("+e+", "+Math.round(100*r[1])+"%, "+Math.round(100*r[2])+"%, "+n/100+")";break;case"hsv":this.value="hsva("+e+", "+Math.round(t)+"%, "+Math.round(i)+"%, "+n/100+")";break;default:var a=Wp(e,t,i),o=a.r,l=a.g,c=a.b;this.value="rgba("+o+", "+l+", "+c+", "+n/100+")"}else switch(s){case"hsl":var u=Ip(e,t/100,i/100);this.value="hsl("+e+", "+Math.round(100*u[1])+"%, "+Math.round(100*u[2])+"%)";break;case"hsv":this.value="hsv("+e+", "+Math.round(t)+"%, "+Math.round(i)+"%)";break;case"rgb":var h=Wp(e,t,i),d=h.r,p=h.g,f=h.b;this.value="rgb("+d+", "+p+", "+f+")";break;default:this.value=Vp(Wp(e,t,i))}},e}(),Yp=qp,Kp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-color-dropdown"},[i("div",{staticClass:"el-color-dropdown__main-wrapper"},[i("hue-slider",{ref:"hue",staticStyle:{float:"right"},attrs:{color:e.color,vertical:""}}),i("sv-panel",{ref:"sl",attrs:{color:e.color}})],1),e.showAlpha?i("alpha-slider",{ref:"alpha",attrs:{color:e.color}}):e._e(),e.predefine?i("predefine",{attrs:{color:e.color,colors:e.predefine}}):e._e(),i("div",{staticClass:"el-color-dropdown__btns"},[i("span",{staticClass:"el-color-dropdown__value"},[i("el-input",{attrs:{"validate-event":!1,size:"mini"},on:{blur:e.handleConfirm},nativeOn:{keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleConfirm(t)}},model:{value:e.customInput,callback:function(t){e.customInput=t},expression:"customInput"}})],1),i("el-button",{staticClass:"el-color-dropdown__link-btn",attrs:{size:"mini",type:"text"},on:{click:function(t){e.$emit("clear")}}},[e._v("\n "+e._s(e.t("el.colorpicker.clear"))+"\n ")]),i("el-button",{staticClass:"el-color-dropdown__btn",attrs:{plain:"",size:"mini"},on:{click:e.confirmValue}},[e._v("\n "+e._s(e.t("el.colorpicker.confirm"))+"\n ")])],1)],1)])},Up=[];Kp._withStripped=!0;var Gp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-svpanel",style:{backgroundColor:e.background}},[i("div",{staticClass:"el-color-svpanel__white"}),i("div",{staticClass:"el-color-svpanel__black"}),i("div",{staticClass:"el-color-svpanel__cursor",style:{top:e.cursorTop+"px",left:e.cursorLeft+"px"}},[i("div")])])},Xp=[];Gp._withStripped=!0;var Zp=!1,Qp=function(e,t){if(!Rn.a.prototype.$isServer){var i=function(e){t.drag&&t.drag(e)},n=function e(n){document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",e),document.onselectstart=null,document.ondragstart=null,Zp=!1,t.end&&t.end(n)};e.addEventListener("mousedown",(function(e){Zp||(document.onselectstart=function(){return!1},document.ondragstart=function(){return!1},document.addEventListener("mousemove",i),document.addEventListener("mouseup",n),Zp=!0,t.start&&t.start(e))}))}},Jp={name:"el-sl-panel",props:{color:{required:!0}},computed:{colorValue:function(){var e=this.color.get("hue"),t=this.color.get("value");return{hue:e,value:t}}},watch:{colorValue:function(){this.update()}},methods:{update:function(){var e=this.color.get("saturation"),t=this.color.get("value"),i=this.$el,n=i.clientWidth,s=i.clientHeight;this.cursorLeft=e*n/100,this.cursorTop=(100-t)*s/100,this.background="hsl("+this.color.get("hue")+", 100%, 50%)"},handleDrag:function(e){var t=this.$el,i=t.getBoundingClientRect(),n=e.clientX-i.left,s=e.clientY-i.top;n=Math.max(0,n),n=Math.min(n,i.width),s=Math.max(0,s),s=Math.min(s,i.height),this.cursorLeft=n,this.cursorTop=s,this.color.set({saturation:n/i.width*100,value:100-s/i.height*100})}},mounted:function(){var e=this;Qp(this.$el,{drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}}),this.update()},data:function(){return{cursorTop:0,cursorLeft:0,background:"hsl(0, 100%, 50%)"}}},ef=Jp,tf=o(ef,Gp,Xp,!1,null,null,null);tf.options.__file="packages/color-picker/src/components/sv-panel.vue";var nf=tf.exports,sf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-hue-slider",class:{"is-vertical":e.vertical}},[i("div",{ref:"bar",staticClass:"el-color-hue-slider__bar",on:{click:e.handleClick}}),i("div",{ref:"thumb",staticClass:"el-color-hue-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},rf=[];sf._withStripped=!0;var af={name:"el-color-hue-slider",props:{color:{required:!0},vertical:Boolean},data:function(){return{thumbLeft:0,thumbTop:0}},computed:{hueValue:function(){var e=this.color.get("hue");return e}},watch:{hueValue:function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,i=e.target;i!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),i=this.$refs.thumb,n=void 0;if(this.vertical){var s=e.clientY-t.top;s=Math.min(s,t.height-i.offsetHeight/2),s=Math.max(i.offsetHeight/2,s),n=Math.round((s-i.offsetHeight/2)/(t.height-i.offsetHeight)*360)}else{var r=e.clientX-t.left;r=Math.min(r,t.width-i.offsetWidth/2),r=Math.max(i.offsetWidth/2,r),n=Math.round((r-i.offsetWidth/2)/(t.width-i.offsetWidth)*360)}this.color.set("hue",n)},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetWidth-i.offsetWidth/2)/360)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetHeight-i.offsetHeight/2)/360)},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop()}},mounted:function(){var e=this,t=this.$refs,i=t.bar,n=t.thumb,s={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Qp(i,s),Qp(n,s),this.update()}},of=af,lf=o(of,sf,rf,!1,null,null,null);lf.options.__file="packages/color-picker/src/components/hue-slider.vue";var cf=lf.exports,uf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-alpha-slider",class:{"is-vertical":e.vertical}},[i("div",{ref:"bar",staticClass:"el-color-alpha-slider__bar",style:{background:e.background},on:{click:e.handleClick}}),i("div",{ref:"thumb",staticClass:"el-color-alpha-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},hf=[];uf._withStripped=!0;var df={name:"el-color-alpha-slider",props:{color:{required:!0},vertical:Boolean},watch:{"color._alpha":function(){this.update()},"color.value":function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,i=e.target;i!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),i=this.$refs.thumb;if(this.vertical){var n=e.clientY-t.top;n=Math.max(i.offsetHeight/2,n),n=Math.min(n,t.height-i.offsetHeight/2),this.color.set("alpha",Math.round((n-i.offsetHeight/2)/(t.height-i.offsetHeight)*100))}else{var s=e.clientX-t.left;s=Math.max(i.offsetWidth/2,s),s=Math.min(s,t.width-i.offsetWidth/2),this.color.set("alpha",Math.round((s-i.offsetWidth/2)/(t.width-i.offsetWidth)*100))}},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetWidth-i.offsetWidth/2)/100)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetHeight-i.offsetHeight/2)/100)},getBackground:function(){if(this.color&&this.color.value){var e=this.color.toRgb(),t=e.r,i=e.g,n=e.b;return"linear-gradient(to right, rgba("+t+", "+i+", "+n+", 0) 0%, rgba("+t+", "+i+", "+n+", 1) 100%)"}return null},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop(),this.background=this.getBackground()}},data:function(){return{thumbLeft:0,thumbTop:0,background:null}},mounted:function(){var e=this,t=this.$refs,i=t.bar,n=t.thumb,s={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Qp(i,s),Qp(n,s),this.update()}},pf=df,ff=o(pf,uf,hf,!1,null,null,null);ff.options.__file="packages/color-picker/src/components/alpha-slider.vue";var mf=ff.exports,vf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-predefine"},[i("div",{staticClass:"el-color-predefine__colors"},e._l(e.rgbaColors,(function(t,n){return i("div",{key:e.colors[n],staticClass:"el-color-predefine__color-selector",class:{selected:t.selected,"is-alpha":t._alpha<100},on:{click:function(t){e.handleSelect(n)}}},[i("div",{style:{"background-color":t.value}})])})),0)])},gf=[];vf._withStripped=!0;var bf={props:{colors:{type:Array,required:!0},color:{required:!0}},data:function(){return{rgbaColors:this.parseColors(this.colors,this.color)}},methods:{handleSelect:function(e){this.color.fromString(this.colors[e])},parseColors:function(e,t){return e.map((function(e){var i=new Yp;return i.enableAlpha=!0,i.format="rgba",i.fromString(e),i.selected=i.value===t.value,i}))}},watch:{"$parent.currentColor":function(e){var t=new Yp;t.fromString(e),this.rgbaColors.forEach((function(e){e.selected=t.compare(e)}))},colors:function(e){this.rgbaColors=this.parseColors(e,this.color)},color:function(e){this.rgbaColors=this.parseColors(this.colors,e)}}},yf=bf,_f=o(yf,vf,gf,!1,null,null,null);_f.options.__file="packages/color-picker/src/components/predefine.vue";var xf=_f.exports,Cf={name:"el-color-picker-dropdown",mixins:[H.a,g.a],components:{SvPanel:nf,HueSlider:cf,AlphaSlider:mf,ElInput:m.a,ElButton:ae.a,Predefine:xf},props:{color:{required:!0},showAlpha:Boolean,predefine:Array},data:function(){return{customInput:""}},computed:{currentColor:function(){var e=this.$parent;return e.value||e.showPanelColor?e.color.value:""}},methods:{confirmValue:function(){this.$emit("pick")},handleConfirm:function(){this.color.fromString(this.customInput)}},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$el},watch:{showPopper:function(e){var t=this;!0===e&&this.$nextTick((function(){var e=t.$refs,i=e.sl,n=e.hue,s=e.alpha;i&&i.update(),n&&n.update(),s&&s.update()}))},currentColor:{immediate:!0,handler:function(e){this.customInput=e}}}},wf=Cf,kf=o(wf,Kp,Up,!1,null,null,null);kf.options.__file="packages/color-picker/src/components/picker-dropdown.vue";var Sf=kf.exports,Df={name:"ElColorPicker",mixins:[O.a],props:{value:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:String,popperClass:String,predefine:Array},inject:{elForm:{default:""},elFormItem:{default:""}},directives:{Clickoutside:V.a},computed:{displayedColor:function(){return this.value||this.showPanelColor?this.displayedRgb(this.color,this.showAlpha):"transparent"},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},colorSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},colorDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){e?e&&e!==this.color.value&&this.color.fromString(e):this.showPanelColor=!1},color:{deep:!0,handler:function(){this.showPanelColor=!0}},displayedColor:function(e){if(this.showPicker){var t=new Yp({enableAlpha:this.showAlpha,format:this.colorFormat});t.fromString(this.value);var i=this.displayedRgb(t,this.showAlpha);e!==i&&this.$emit("active-change",e)}}},methods:{handleTrigger:function(){this.colorDisabled||(this.showPicker=!this.showPicker)},confirmValue:function(){var e=this.color.value;this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",e),this.showPicker=!1},clearValue:function(){this.$emit("input",null),this.$emit("change",null),null!==this.value&&this.dispatch("ElFormItem","el.form.change",null),this.showPanelColor=!1,this.showPicker=!1,this.resetColor()},hide:function(){this.showPicker=!1,this.resetColor()},resetColor:function(){var e=this;this.$nextTick((function(t){e.value?e.color.fromString(e.value):e.showPanelColor=!1}))},displayedRgb:function(e,t){if(!(e instanceof Yp))throw Error("color should be instance of Color Class");var i=e.toRgb(),n=i.r,s=i.g,r=i.b;return t?"rgba("+n+", "+s+", "+r+", "+e.get("alpha")/100+")":"rgb("+n+", "+s+", "+r+")"}},mounted:function(){var e=this.value;e&&this.color.fromString(e),this.popperElm=this.$refs.dropdown.$el},data:function(){var e=new Yp({enableAlpha:this.showAlpha,format:this.colorFormat});return{color:e,showPicker:!1,showPanelColor:!1}},components:{PickerDropdown:Sf}},$f=Df,Of=o($f,Tp,Pp,!1,null,null,null);Of.options.__file="packages/color-picker/src/main.vue";var Ef=Of.exports;Ef.install=function(e){e.component(Ef.name,Ef)};var Tf=Ef,Pf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-transfer"},[i("transfer-panel",e._b({ref:"leftPanel",attrs:{data:e.sourceData,title:e.titles[0]||e.t("el.transfer.titles.0"),"default-checked":e.leftDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onSourceCheckedChange}},"transfer-panel",e.$props,!1),[e._t("left-footer")],2),i("div",{staticClass:"el-transfer__buttons"},[i("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.rightChecked.length},nativeOn:{click:function(t){return e.addToLeft(t)}}},[i("i",{staticClass:"el-icon-arrow-left"}),void 0!==e.buttonTexts[0]?i("span",[e._v(e._s(e.buttonTexts[0]))]):e._e()]),i("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.leftChecked.length},nativeOn:{click:function(t){return e.addToRight(t)}}},[void 0!==e.buttonTexts[1]?i("span",[e._v(e._s(e.buttonTexts[1]))]):e._e(),i("i",{staticClass:"el-icon-arrow-right"})])],1),i("transfer-panel",e._b({ref:"rightPanel",attrs:{data:e.targetData,title:e.titles[1]||e.t("el.transfer.titles.1"),"default-checked":e.rightDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onTargetCheckedChange}},"transfer-panel",e.$props,!1),[e._t("right-footer")],2)],1)},Mf=[];Pf._withStripped=!0;var Nf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-transfer-panel"},[i("p",{staticClass:"el-transfer-panel__header"},[i("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleAllCheckedChange},model:{value:e.allChecked,callback:function(t){e.allChecked=t},expression:"allChecked"}},[e._v("\n "+e._s(e.title)+"\n "),i("span",[e._v(e._s(e.checkedSummary))])])],1),i("div",{class:["el-transfer-panel__body",e.hasFooter?"is-with-footer":""]},[e.filterable?i("el-input",{staticClass:"el-transfer-panel__filter",attrs:{size:"small",placeholder:e.placeholder},nativeOn:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1}},model:{value:e.query,callback:function(t){e.query=t},expression:"query"}},[i("i",{class:["el-input__icon","el-icon-"+e.inputIcon],attrs:{slot:"prefix"},on:{click:e.clearQuery},slot:"prefix"})]):e._e(),i("el-checkbox-group",{directives:[{name:"show",rawName:"v-show",value:!e.hasNoMatch&&e.data.length>0,expression:"!hasNoMatch && data.length > 0"}],staticClass:"el-transfer-panel__list",class:{"is-filterable":e.filterable},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},e._l(e.filteredData,(function(t){return i("el-checkbox",{key:t[e.keyProp],staticClass:"el-transfer-panel__item",attrs:{label:t[e.keyProp],disabled:t[e.disabledProp]}},[i("option-content",{attrs:{option:t}})],1)})),1),i("p",{directives:[{name:"show",rawName:"v-show",value:e.hasNoMatch,expression:"hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noMatch")))]),i("p",{directives:[{name:"show",rawName:"v-show",value:0===e.data.length&&!e.hasNoMatch,expression:"data.length === 0 && !hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noData")))])],1),e.hasFooter?i("p",{staticClass:"el-transfer-panel__footer"},[e._t("default")],2):e._e()])},If=[];Nf._withStripped=!0;var jf={mixins:[g.a],name:"ElTransferPanel",componentName:"ElTransferPanel",components:{ElCheckboxGroup:Ts.a,ElCheckbox:In.a,ElInput:m.a,OptionContent:{props:{option:Object},render:function(e){var t=function e(t){return"ElTransferPanel"===t.$options.componentName?t:t.$parent?e(t.$parent):t},i=t(this),n=i.$parent||i;return i.renderContent?i.renderContent(e,this.option):n.$scopedSlots.default?n.$scopedSlots.default({option:this.option}):e("span",[this.option[i.labelProp]||this.option[i.keyProp]])}}},props:{data:{type:Array,default:function(){return[]}},renderContent:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},data:function(){return{checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}},watch:{checked:function(e,t){if(this.updateAllChecked(),this.checkChangeByUser){var i=e.concat(t).filter((function(i){return-1===e.indexOf(i)||-1===t.indexOf(i)}));this.$emit("checked-change",e,i)}else this.$emit("checked-change",e),this.checkChangeByUser=!0},data:function(){var e=this,t=[],i=this.filteredData.map((function(t){return t[e.keyProp]}));this.checked.forEach((function(e){i.indexOf(e)>-1&&t.push(e)})),this.checkChangeByUser=!1,this.checked=t},checkableData:function(){this.updateAllChecked()},defaultChecked:{immediate:!0,handler:function(e,t){var i=this;if(!t||e.length!==t.length||!e.every((function(e){return t.indexOf(e)>-1}))){var n=[],s=this.checkableData.map((function(e){return e[i.keyProp]}));e.forEach((function(e){s.indexOf(e)>-1&&n.push(e)})),this.checkChangeByUser=!1,this.checked=n}}}},computed:{filteredData:function(){var e=this;return this.data.filter((function(t){if("function"===typeof e.filterMethod)return e.filterMethod(e.query,t);var i=t[e.labelProp]||t[e.keyProp].toString();return i.toLowerCase().indexOf(e.query.toLowerCase())>-1}))},checkableData:function(){var e=this;return this.filteredData.filter((function(t){return!t[e.disabledProp]}))},checkedSummary:function(){var e=this.checked.length,t=this.data.length,i=this.format,n=i.noChecked,s=i.hasChecked;return n&&s?e>0?s.replace(/\${checked}/g,e).replace(/\${total}/g,t):n.replace(/\${total}/g,t):e+"/"+t},isIndeterminate:function(){var e=this.checked.length;return e>0&&e0&&0===this.filteredData.length},inputIcon:function(){return this.query.length>0&&this.inputHover?"circle-close":"search"},labelProp:function(){return this.props.label||"label"},keyProp:function(){return this.props.key||"key"},disabledProp:function(){return this.props.disabled||"disabled"},hasFooter:function(){return!!this.$slots.default}},methods:{updateAllChecked:function(){var e=this,t=this.checkableData.map((function(t){return t[e.keyProp]}));this.allChecked=t.length>0&&t.every((function(t){return e.checked.indexOf(t)>-1}))},handleAllCheckedChange:function(e){var t=this;this.checked=e?this.checkableData.map((function(e){return e[t.keyProp]})):[]},clearQuery:function(){"circle-close"===this.inputIcon&&(this.query="")}}},Ff=jf,Lf=o(Ff,Nf,If,!1,null,null,null);Lf.options.__file="packages/transfer/src/transfer-panel.vue";var Af=Lf.exports,Vf={name:"ElTransfer",mixins:[O.a,g.a,D.a],components:{TransferPanel:Af,ElButton:ae.a},props:{data:{type:Array,default:function(){return[]}},titles:{type:Array,default:function(){return[]}},buttonTexts:{type:Array,default:function(){return[]}},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:function(){return[]}},rightDefaultChecked:{type:Array,default:function(){return[]}},renderContent:Function,value:{type:Array,default:function(){return[]}},format:{type:Object,default:function(){return{}}},filterable:Boolean,props:{type:Object,default:function(){return{label:"label",key:"key",disabled:"disabled"}}},targetOrder:{type:String,default:"original"}},data:function(){return{leftChecked:[],rightChecked:[]}},computed:{dataObj:function(){var e=this.props.key;return this.data.reduce((function(t,i){return(t[i[e]]=i)&&t}),{})},sourceData:function(){var e=this;return this.data.filter((function(t){return-1===e.value.indexOf(t[e.props.key])}))},targetData:function(){var e=this;return"original"===this.targetOrder?this.data.filter((function(t){return e.value.indexOf(t[e.props.key])>-1})):this.value.reduce((function(t,i){var n=e.dataObj[i];return n&&t.push(n),t}),[])},hasButtonTexts:function(){return 2===this.buttonTexts.length}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}},methods:{getMigratingConfig:function(){return{props:{"footer-format":"footer-format is renamed to format."}}},onSourceCheckedChange:function(e,t){this.leftChecked=e,void 0!==t&&this.$emit("left-check-change",e,t)},onTargetCheckedChange:function(e,t){this.rightChecked=e,void 0!==t&&this.$emit("right-check-change",e,t)},addToLeft:function(){var e=this.value.slice();this.rightChecked.forEach((function(t){var i=e.indexOf(t);i>-1&&e.splice(i,1)})),this.$emit("input",e),this.$emit("change",e,"left",this.rightChecked)},addToRight:function(){var e=this,t=this.value.slice(),i=[],n=this.props.key;this.data.forEach((function(t){var s=t[n];e.leftChecked.indexOf(s)>-1&&-1===e.value.indexOf(s)&&i.push(s)})),t="unshift"===this.targetOrder?i.concat(t):t.concat(i),this.$emit("input",t),this.$emit("change",t,"right",this.leftChecked)},clearQuery:function(e){"left"===e?this.$refs.leftPanel.query="":"right"===e&&(this.$refs.rightPanel.query="")}}},Bf=Vf,zf=o(Bf,Pf,Mf,!1,null,null,null);zf.options.__file="packages/transfer/src/main.vue";var Rf=zf.exports;Rf.install=function(e){e.component(Rf.name,Rf)};var Hf=Rf,Wf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",{staticClass:"el-container",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},qf=[];Wf._withStripped=!0;var Yf={name:"ElContainer",componentName:"ElContainer",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&(!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"el-header"===t||"el-footer"===t})))}}},Kf=Yf,Uf=o(Kf,Wf,qf,!1,null,null,null);Uf.options.__file="packages/container/src/main.vue";var Gf=Uf.exports;Gf.install=function(e){e.component(Gf.name,Gf)};var Xf=Gf,Zf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("header",{staticClass:"el-header",style:{height:e.height}},[e._t("default")],2)},Qf=[];Zf._withStripped=!0;var Jf={name:"ElHeader",componentName:"ElHeader",props:{height:{type:String,default:"60px"}}},em=Jf,tm=o(em,Zf,Qf,!1,null,null,null);tm.options.__file="packages/header/src/main.vue";var im=tm.exports;im.install=function(e){e.component(im.name,im)};var nm=im,sm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("aside",{staticClass:"el-aside",style:{width:e.width}},[e._t("default")],2)},rm=[];sm._withStripped=!0;var am={name:"ElAside",componentName:"ElAside",props:{width:{type:String,default:"300px"}}},om=am,lm=o(om,sm,rm,!1,null,null,null);lm.options.__file="packages/aside/src/main.vue";var cm=lm.exports;cm.install=function(e){e.component(cm.name,cm)};var um=cm,hm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("main",{staticClass:"el-main"},[e._t("default")],2)},dm=[];hm._withStripped=!0;var pm={name:"ElMain",componentName:"ElMain"},fm=pm,mm=o(fm,hm,dm,!1,null,null,null);mm.options.__file="packages/main/src/main.vue";var vm=mm.exports;vm.install=function(e){e.component(vm.name,vm)};var gm=vm,bm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("footer",{staticClass:"el-footer",style:{height:e.height}},[e._t("default")],2)},ym=[];bm._withStripped=!0;var _m={name:"ElFooter",componentName:"ElFooter",props:{height:{type:String,default:"60px"}}},xm=_m,Cm=o(xm,bm,ym,!1,null,null,null);Cm.options.__file="packages/footer/src/main.vue";var wm=Cm.exports;wm.install=function(e){e.component(wm.name,wm)};var km,Sm,Dm=wm,$m={name:"ElTimeline",props:{reverse:{type:Boolean,default:!1}},provide:function(){return{timeline:this}},render:function(){var e=arguments[0],t=this.reverse,i={"el-timeline":!0,"is-reverse":t},n=this.$slots.default||[];return t&&(n=n.reverse()),e("ul",{class:i},[n])}},Om=$m,Em=o(Om,km,Sm,!1,null,null,null);Em.options.__file="packages/timeline/src/main.vue";var Tm=Em.exports;Tm.install=function(e){e.component(Tm.name,Tm)};var Pm=Tm,Mm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-timeline-item"},[i("div",{staticClass:"el-timeline-item__tail"}),e.$slots.dot?e._e():i("div",{staticClass:"el-timeline-item__node",class:["el-timeline-item__node--"+(e.size||""),"el-timeline-item__node--"+(e.type||"")],style:{backgroundColor:e.color}},[e.icon?i("i",{staticClass:"el-timeline-item__icon",class:e.icon}):e._e()]),e.$slots.dot?i("div",{staticClass:"el-timeline-item__dot"},[e._t("dot")],2):e._e(),i("div",{staticClass:"el-timeline-item__wrapper"},[e.hideTimestamp||"top"!==e.placement?e._e():i("div",{staticClass:"el-timeline-item__timestamp is-top"},[e._v("\n "+e._s(e.timestamp)+"\n ")]),i("div",{staticClass:"el-timeline-item__content"},[e._t("default")],2),e.hideTimestamp||"bottom"!==e.placement?e._e():i("div",{staticClass:"el-timeline-item__timestamp is-bottom"},[e._v("\n "+e._s(e.timestamp)+"\n ")])])])},Nm=[];Mm._withStripped=!0;var Im={name:"ElTimelineItem",inject:["timeline"],props:{timestamp:String,hideTimestamp:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:String,color:String,size:{type:String,default:"normal"},icon:String}},jm=Im,Fm=o(jm,Mm,Nm,!1,null,null,null);Fm.options.__file="packages/timeline/src/item.vue";var Lm=Fm.exports;Lm.install=function(e){e.component(Lm.name,Lm)};var Am=Lm,Vm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",e._b({class:["el-link",e.type?"el-link--"+e.type:"",e.disabled&&"is-disabled",e.underline&&!e.disabled&&"is-underline"],attrs:{href:e.disabled?null:e.href},on:{click:e.handleClick}},"a",e.$attrs,!1),[e.icon?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",{staticClass:"el-link--inner"},[e._t("default")],2):e._e(),e.$slots.icon?[e.$slots.icon?e._t("icon"):e._e()]:e._e()],2)},Bm=[];Vm._withStripped=!0;var zm={name:"ElLink",props:{type:{type:String,default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:String,icon:String},methods:{handleClick:function(e){this.disabled||this.href||this.$emit("click",e)}}},Rm=zm,Hm=o(Rm,Vm,Bm,!1,null,null,null);Hm.options.__file="packages/link/src/main.vue";var Wm=Hm.exports;Wm.install=function(e){e.component(Wm.name,Wm)};var qm=Wm,Ym=function(e,t){var i=t._c;return i("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?i("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},Km=[];Ym._withStripped=!0;var Um={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},Gm=Um,Xm=o(Gm,Ym,Km,!0,null,null,null);Xm.options.__file="packages/divider/src/main.vue";var Zm=Xm.exports;Zm.install=function(e){e.component(Zm.name,Zm)};var Qm=Zm,Jm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-image"},[e.loading?e._t("placeholder",[i("div",{staticClass:"el-image__placeholder"})]):e.error?e._t("error",[i("div",{staticClass:"el-image__error"},[e._v(e._s(e.t("el.image.error")))])]):i("img",e._g(e._b({staticClass:"el-image__inner",class:{"el-image__inner--center":e.alignCenter,"el-image__preview":e.preview},style:e.imageStyle,attrs:{src:e.src},on:{click:e.clickHandler}},"img",e.$attrs,!1),e.$listeners)),e.preview?[e.showViewer?i("image-viewer",{attrs:{"z-index":e.zIndex,"initial-index":e.imageIndex,"on-close":e.closeViewer,"url-list":e.previewSrcList}}):e._e()]:e._e()],2)},ev=[];Jm._withStripped=!0;var tv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"viewer-fade"}},[i("div",{ref:"el-image-viewer__wrapper",staticClass:"el-image-viewer__wrapper",style:{"z-index":e.viewerZIndex},attrs:{tabindex:"-1"}},[i("div",{staticClass:"el-image-viewer__mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleMaskClick(t)}}}),i("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:e.hide}},[i("i",{staticClass:"el-icon-close"})]),e.isSingle?e._e():[i("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{"is-disabled":!e.infinite&&e.isFirst},on:{click:e.prev}},[i("i",{staticClass:"el-icon-arrow-left"})]),i("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{"is-disabled":!e.infinite&&e.isLast},on:{click:e.next}},[i("i",{staticClass:"el-icon-arrow-right"})])],i("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[i("div",{staticClass:"el-image-viewer__actions__inner"},[i("i",{staticClass:"el-icon-zoom-out",on:{click:function(t){e.handleActions("zoomOut")}}}),i("i",{staticClass:"el-icon-zoom-in",on:{click:function(t){e.handleActions("zoomIn")}}}),i("i",{staticClass:"el-image-viewer__actions__divider"}),i("i",{class:e.mode.icon,on:{click:e.toggleMode}}),i("i",{staticClass:"el-image-viewer__actions__divider"}),i("i",{staticClass:"el-icon-refresh-left",on:{click:function(t){e.handleActions("anticlocelise")}}}),i("i",{staticClass:"el-icon-refresh-right",on:{click:function(t){e.handleActions("clocelise")}}})])]),i("div",{staticClass:"el-image-viewer__canvas"},e._l(e.urlList,(function(t,n){return n===e.index?i("img",{key:t,ref:"img",refInFor:!0,staticClass:"el-image-viewer__img",style:e.imgStyle,attrs:{src:e.currentImg},on:{load:e.handleImgLoad,error:e.handleImgError,mousedown:e.handleMouseDown}}):e._e()})),0)],2)])},iv=[];tv._withStripped=!0;var nv=Object.assign||function(e){for(var t=1;te?this.zIndex:e}},watch:{index:{handler:function(e){this.reset(),this.onSwitch(e)}},currentImg:function(e){var t=this;this.$nextTick((function(e){var i=t.$refs.img[0];i.complete||(t.loading=!0)}))}},methods:{hide:function(){this.deviceSupportUninstall(),this.onClose()},deviceSupportInstall:function(){var e=this;this._keyDownHandler=function(t){t.stopPropagation();var i=t.keyCode;switch(i){case 27:e.hide();break;case 32:e.toggleMode();break;case 37:e.prev();break;case 38:e.handleActions("zoomIn");break;case 39:e.next();break;case 40:e.handleActions("zoomOut");break}},this._mouseWheelHandler=Object(b["rafThrottle"])((function(t){var i=t.wheelDelta?t.wheelDelta:-t.detail;i>0?e.handleActions("zoomIn",{zoomRate:.015,enableTransition:!1}):e.handleActions("zoomOut",{zoomRate:.015,enableTransition:!1})})),Object(Ae["on"])(document,"keydown",this._keyDownHandler),Object(Ae["on"])(document,rv,this._mouseWheelHandler)},deviceSupportUninstall:function(){Object(Ae["off"])(document,"keydown",this._keyDownHandler),Object(Ae["off"])(document,rv,this._mouseWheelHandler),this._keyDownHandler=null,this._mouseWheelHandler=null},handleImgLoad:function(e){this.loading=!1},handleImgError:function(e){this.loading=!1,e.target.alt="加载失败"},handleMouseDown:function(e){var t=this;if(!this.loading&&0===e.button){var i=this.transform,n=i.offsetX,s=i.offsetY,r=e.pageX,a=e.pageY;this._dragHandler=Object(b["rafThrottle"])((function(e){t.transform.offsetX=n+e.pageX-r,t.transform.offsetY=s+e.pageY-a})),Object(Ae["on"])(document,"mousemove",this._dragHandler),Object(Ae["on"])(document,"mouseup",(function(e){Object(Ae["off"])(document,"mousemove",t._dragHandler)})),e.preventDefault()}},handleMaskClick:function(){this.maskClosable&&this.hide()},reset:function(){this.transform={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}},toggleMode:function(){if(!this.loading){var e=Object.keys(sv),t=Object.values(sv),i=t.indexOf(this.mode),n=(i+1)%e.length;this.mode=sv[e[n]],this.reset()}},prev:function(){if(!this.isFirst||this.infinite){var e=this.urlList.length;this.index=(this.index-1+e)%e}},next:function(){if(!this.isLast||this.infinite){var e=this.urlList.length;this.index=(this.index+1)%e}},handleActions:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.loading){var i=nv({zoomRate:.2,rotateDeg:90,enableTransition:!0},t),n=i.zoomRate,s=i.rotateDeg,r=i.enableTransition,a=this.transform;switch(e){case"zoomOut":a.scale>.2&&(a.scale=parseFloat((a.scale-n).toFixed(3)));break;case"zoomIn":a.scale=parseFloat((a.scale+n).toFixed(3));break;case"clocelise":a.deg+=s;break;case"anticlocelise":a.deg-=s;break}a.enableTransition=r}}},mounted:function(){this.deviceSupportInstall(),this.appendToBody&&document.body.appendChild(this.$el),this.$refs["el-image-viewer__wrapper"].focus()},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},ov=av,lv=o(ov,tv,iv,!1,null,null,null);lv.options.__file="packages/image/src/image-viewer.vue";var cv=lv.exports,uv=function(){return void 0!==document.documentElement.style.objectFit},hv={NONE:"none",CONTAIN:"contain",COVER:"cover",FILL:"fill",SCALE_DOWN:"scale-down"},dv="",pv={name:"ElImage",mixins:[g.a],inheritAttrs:!1,components:{ImageViewer:cv},props:{src:String,fit:String,lazy:Boolean,scrollContainer:{},previewSrcList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3}},data:function(){return{loading:!0,error:!1,show:!this.lazy,imageWidth:0,imageHeight:0,showViewer:!1}},computed:{imageStyle:function(){var e=this.fit;return!this.$isServer&&e?uv()?{"object-fit":e}:this.getImageStyle(e):{}},alignCenter:function(){return!this.$isServer&&!uv()&&this.fit!==hv.FILL},preview:function(){var e=this.previewSrcList;return Array.isArray(e)&&e.length>0},imageIndex:function(){var e=0,t=this.previewSrcList.indexOf(this.src);return t>=0&&(e=t),e}},watch:{src:function(e){this.show&&this.loadImage()},show:function(e){e&&this.loadImage()}},mounted:function(){this.lazy?this.addLazyLoadListener():this.loadImage()},beforeDestroy:function(){this.lazy&&this.removeLazyLoadListener()},methods:{loadImage:function(){var e=this;if(!this.$isServer){this.loading=!0,this.error=!1;var t=new Image;t.onload=function(i){return e.handleLoad(i,t)},t.onerror=this.handleError.bind(this),Object.keys(this.$attrs).forEach((function(i){var n=e.$attrs[i];t.setAttribute(i,n)})),t.src=this.src}},handleLoad:function(e,t){this.imageWidth=t.width,this.imageHeight=t.height,this.loading=!1,this.error=!1},handleError:function(e){this.loading=!1,this.error=!0,this.$emit("error",e)},handleLazyLoad:function(){Object(Ae["isInContainer"])(this.$el,this._scrollContainer)&&(this.show=!0,this.removeLazyLoadListener())},addLazyLoadListener:function(){if(!this.$isServer){var e=this.scrollContainer,t=null;t=Object(Hh["isHtmlElement"])(e)?e:Object(Hh["isString"])(e)?document.querySelector(e):Object(Ae["getScrollContainer"])(this.$el),t&&(this._scrollContainer=t,this._lazyLoadHandler=Fd()(200,this.handleLazyLoad),Object(Ae["on"])(t,"scroll",this._lazyLoadHandler),this.handleLazyLoad())}},removeLazyLoadListener:function(){var e=this._scrollContainer,t=this._lazyLoadHandler;!this.$isServer&&e&&t&&(Object(Ae["off"])(e,"scroll",t),this._scrollContainer=null,this._lazyLoadHandler=null)},getImageStyle:function(e){var t=this.imageWidth,i=this.imageHeight,n=this.$el,s=n.clientWidth,r=n.clientHeight;if(!t||!i||!s||!r)return{};var a=t/i,o=s/r;if(e===hv.SCALE_DOWN){var l=ts)return console.warn("[ElementCalendar]end time should be greater than start time"),[];if(Object(sr["validateRangeInOneMonth"])(n,s))return[[n,s]];var r=[],a=new Date(n.getFullYear(),n.getMonth()+1,1),o=this.toDate(a.getTime()-Tv);if(!Object(sr["validateRangeInOneMonth"])(a,s))return console.warn("[ElementCalendar]start time and end time interval must not exceed two months"),[];r.push([n,o]);var l=this.realFirstDayOfWeek,c=a.getDay(),u=0;return c!==l&&(0===l?u=7-c:(u=l-c,u=u>0?u:7+u)),a=this.toDate(a.getTime()+u*Tv),a.getDate()6?0:Math.floor(this.firstDayOfWeek)}},data:function(){return{selectedDay:"",now:new Date}}},Mv=Pv,Nv=o(Mv,bv,yv,!1,null,null,null);Nv.options.__file="packages/calendar/src/main.vue";var Iv=Nv.exports;Iv.install=function(e){e.component(Iv.name,Iv)};var jv=Iv,Fv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-fade-in"}},[e.visible?i("div",{staticClass:"el-backtop",style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[i("el-icon",{attrs:{name:"caret-top"}})])],2):e._e()])},Lv=[];Fv._withStripped=!0;var Av=function(e){return Math.pow(e,3)},Vv=function(e){return e<.5?Av(2*e)/2:1-Av(2*(1-e))/2},Bv={name:"ElBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40}},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return this.bottom+"px"},styleRight:function(){return this.right+"px"}},mounted:function(){this.init(),this.throttledScrollHandler=Fd()(300,this.onScroll),this.container.addEventListener("scroll",this.throttledScrollHandler)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: "+this.target);this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=Date.now(),i=e.scrollTop,n=window.requestAnimationFrame||function(e){return setTimeout(e,16)},s=function s(){var r=(Date.now()-t)/500;r<1?(e.scrollTop=i*(1-Vv(r)),n(s)):e.scrollTop=0};n(s)}},beforeDestroy:function(){this.container.removeEventListener("scroll",this.throttledScrollHandler)}},zv=Bv,Rv=o(zv,Fv,Lv,!1,null,null,null);Rv.options.__file="packages/backtop/src/main.vue";var Hv=Rv.exports;Hv.install=function(e){e.component(Hv.name,Hv)};var Wv=Hv,qv=function(e,t){if(e===window&&(e=document.documentElement),1!==e.nodeType)return[];var i=window.getComputedStyle(e,null);return t?i[t]:i},Yv=function(e){return Object.keys(e||{}).map((function(t){return[t,e[t]]}))},Kv=function(e,t){return e===window||e===document?document.documentElement[t]:e[t]},Uv=function(e){return Kv(e,"offsetHeight")},Gv=function(e){return Kv(e,"clientHeight")},Xv="ElInfiniteScroll",Zv={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Qv=function(e,t){return Object(Hh["isHtmlElement"])(e)?Yv(Zv).reduce((function(i,n){var s=n[0],r=n[1],a=r.type,o=r.default,l=e.getAttribute("infinite-scroll-"+s);switch(l=Object(Hh["isUndefined"])(t[l])?l:t[l],a){case Number:l=Number(l),l=Number.isNaN(l)?o:l;break;case Boolean:l=Object(Hh["isDefined"])(l)?"false"!==l&&Boolean(l):o;break;default:l=a(l)}return i[s]=l,i}),{}):{}},Jv=function(e){return e.getBoundingClientRect().top},eg=function(e){var t=this[Xv],i=t.el,n=t.vm,s=t.container,r=t.observer,a=Qv(i,n),o=a.distance,l=a.disabled;if(!l){var c=s.getBoundingClientRect();if(c.width||c.height){var u=!1;if(s===i){var h=s.scrollTop+Gv(s);u=s.scrollHeight-h<=o}else{var d=Uv(i)+Jv(i)-Jv(s),p=Uv(s),f=Number.parseFloat(qv(s,"borderBottomWidth"));u=d-p+f<=o}u&&Object(Hh["isFunction"])(e)?e.call(n):r&&(r.disconnect(),this[Xv].observer=null)}}},tg={name:"InfiniteScroll",inserted:function(e,t,i){var n=t.value,s=i.context,r=Object(Ae["getScrollContainer"])(e,!0),a=Qv(e,s),o=a.delay,l=a.immediate,c=L()(o,eg.bind(e,n));if(e[Xv]={el:e,vm:s,container:r,onScroll:c},r&&(r.addEventListener("scroll",c),l)){var u=e[Xv].observer=new MutationObserver(c);u.observe(r,{childList:!0,subtree:!0}),c()}},unbind:function(e){var t=e[Xv],i=t.container,n=t.onScroll;i&&i.removeEventListener("scroll",n)},install:function(e){e.directive(tg.name,tg)}},ig=tg,ng=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-page-header"},[i("div",{staticClass:"el-page-header__left",on:{click:function(t){e.$emit("back")}}},[i("i",{staticClass:"el-icon-back"}),i("div",{staticClass:"el-page-header__title"},[e._t("title",[e._v(e._s(e.title))])],2)]),i("div",{staticClass:"el-page-header__content"},[e._t("content",[e._v(e._s(e.content))])],2)])},sg=[];ng._withStripped=!0;var rg={name:"ElPageHeader",props:{title:{type:String,default:function(){return Object(fo["t"])("el.pageHeader.title")}},content:String}},ag=rg,og=o(ag,ng,sg,!1,null,null,null);og.options.__file="packages/page-header/src/main.vue";var lg=og.exports;lg.install=function(e){e.component(lg.name,lg)};var cg=lg,ug=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return i("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},hg=[];ug._withStripped=!0;var dg,pg,fg=i(43),mg=i.n(fg),vg=function(e){return e.stopPropagation()},gg={inject:["panel"],components:{ElCheckbox:In.a,ElRadio:mg.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,i=this.node,n=this.isDisabled,s=this.config,r=s.multiple,a=s.checkStrictly;!a&&n||i.loading||(s.lazy&&!i.loaded?t.lazyLoad(i,(function(){var t=e.isLeaf;if(t||e.handleExpand(),r){var n=!!t&&i.checked;e.handleMultiCheckChange(n)}})):t.handleExpand(i))},handleCheckChange:function(){var e=this.panel,t=this.value,i=this.node;e.handleCheckChange(t),e.handleExpand(i)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,i=e[t.level-1]||{};return i.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,i=this.isChecked,n=this.config,s=n.checkStrictly,r=n.multiple;return r?this.renderCheckbox(e):s?this.renderRadio(e):t&&i?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,i=this.isLeaf;return t.loading?this.renderLoadingIcon(e):i?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,i=this.config,n=this.isDisabled,s={on:{change:this.handleMultiCheckChange},nativeOn:{}};return i.checkStrictly&&(s.nativeOn.click=vg),e("el-checkbox",Qu()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:n}},s]))},renderRadio:function(e){var t=this.checkedValue,i=this.value,n=this.isDisabled;return Object(b["isEqual"])(i,t)&&(i=t),e("el-radio",{attrs:{value:t,label:i,disabled:n},on:{change:this.handleCheckChange},nativeOn:{click:vg}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,i=this.node,n=t.renderLabelFn,s=n?n({node:i,data:i.data}):null;return e("span",{class:"el-cascader-node__label"},[s||i.label])}},render:function(e){var t=this,i=this.inActivePath,n=this.inCheckedPath,s=this.isChecked,r=this.isLeaf,a=this.isDisabled,o=this.config,l=this.nodeId,c=o.expandTrigger,u=o.checkStrictly,h=o.multiple,d=!u&&a,p={on:{}};return"click"===c?p.on.click=this.handleExpand:(p.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},p.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!r||a||u||h||(p.on.click=this.handleCheckChange),e("li",Qu()([{attrs:{role:"menuitem",id:l,"aria-expanded":i,tabindex:d?null:-1},class:{"el-cascader-node":!0,"is-selectable":u,"in-active-path":i,"in-checked-path":n,"is-active":s,"is-disabled":d}},p]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},bg=gg,yg=o(bg,dg,pg,!1,null,null,null);yg.options.__file="packages/cascader-panel/src/cascader-node.vue";var _g,xg,Cg=yg.exports,wg={name:"ElCascaderMenu",mixins:[g.a],inject:["panel"],components:{ElScrollbar:q.a,CascaderNode:Cg},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(b["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,i=this.hoverTimer,n=this.$refs.hoverZone;if(t&&n)if(t.contains(e.target)){clearTimeout(i);var s=this.$el.getBoundingClientRect(),r=s.left,a=e.clientX-r,o=this.$el,l=o.offsetWidth,c=o.offsetHeight,u=t.offsetTop,h=u+t.offsetHeight;n.innerHTML='\n \n \n '}else i||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,i=this.panel.isHoverMenu,n={on:{}};i&&(n.on.expand=this.handleExpand);var s=this.nodes.map((function(i,s){var r=i.hasChildren;return e("cascader-node",Qu()([{key:i.uid,attrs:{node:i,"node-id":t+"-"+s,"aria-haspopup":r,"aria-owns":r?t:null}},n]))}));return[].concat(s,[i?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,i=this.menuId,n={nativeOn:{}};return this.panel.isHoverMenu&&(n.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",Qu()([{attrs:{tag:"ul",role:"menu",id:i,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},n]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},kg=wg,Sg=o(kg,_g,xg,!1,null,null,null);Sg.options.__file="packages/cascader-panel/src/cascader-menu.vue";var Dg=Sg.exports,$g=function(){function e(e,t){for(var i=0;i1?t-1:0),n=1;n1?n-1:0),r=1;r0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),i=this.isSameNode(e,t);this.doCheck(i)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},$g(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,i=this.config,n=i.disabled,s=i.checkStrictly;return e[n]||!s&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,i=this.hasChildren,n=this.children,s=this.config,r=s.lazy,a=s.leaf;if(r){var o=Object(Dt["isDef"])(e[a])?e[a]:!!t&&!n.length;return this.hasChildren=!o,o}return!i}}]),e}(),Pg=Tg;function Mg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Ng=function e(t,i){return t.reduce((function(t,n){return n.isLeaf?t.push(n):(!i&&t.push(n),t=t.concat(e(n.children,i))),t}),[])},Ig=function(){function e(t,i){Mg(this,e),this.config=i,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(b["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new Pg(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var i=new Pg(e,this.config,t),n=t?t.children:this.nodes;n.push(i)},e.prototype.appendNodes=function(e,t){var i=this;e=Object(b["coerceTruthyValueToArray"])(e),e.forEach((function(e){return i.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e?this.leafNodes:this.flattedNodes;return t?i:Ng(this.nodes,e)},e.prototype.getNodeByValue=function(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(b["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null},e}(),jg=Ig,Fg=Object.assign||function(e){for(var t=1;t0){var l=i.store.getNodeByValue(r);l.data[o]||i.lazyLoad(l,(function(){i.handleExpand(l)})),i.loadCount===i.checkedValue.length&&i.$parent.computePresentText()}}t&&t(n)};n.lazyLoad(e,s)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var i=t.querySelector(".el-scrollbar__wrap"),n=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");tn()(i,n)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,i=this.multiple;if(i){var n=this.getFlattedNodes(e);return n.filter((function(e){return e.checked}))}return this.isEmptyValue(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,i=e.multiple,n=e.emitPath;i?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=n?[]:null}}},qg=Wg,Yg=o(qg,ug,hg,!1,null,null,null);Yg.options.__file="packages/cascader-panel/src/cascader-panel.vue";var Kg=Yg.exports;Kg.install=function(e){e.component(Kg.name,Kg)};var Ug,Gg,Xg=Kg,Zg={name:"ElAvatar",props:{size:{type:[Number,String],validator:function(e){return"string"===typeof e?["large","medium","small"].includes(e):"number"===typeof e}},shape:{type:String,default:"circle",validator:function(e){return["circle","square"].includes(e)}},icon:String,src:String,alt:String,srcSet:String,error:Function,fit:{type:String,default:"cover"}},data:function(){return{isImageExist:!0}},computed:{avatarClass:function(){var e=this.size,t=this.icon,i=this.shape,n=["el-avatar"];return e&&"string"===typeof e&&n.push("el-avatar--"+e),t&&n.push("el-avatar--icon"),i&&n.push("el-avatar--"+i),n.join(" ")}},methods:{handleError:function(){var e=this.error,t=e?e():void 0;!1!==t&&(this.isImageExist=!1)},renderAvatar:function(){var e=this.$createElement,t=this.icon,i=this.src,n=this.alt,s=this.isImageExist,r=this.srcSet,a=this.fit;return s&&i?e("img",{attrs:{src:i,alt:n,srcSet:r},on:{error:this.handleError},style:{"object-fit":a}}):t?e("i",{class:t}):this.$slots.default}},render:function(){var e=arguments[0],t=this.avatarClass,i=this.size,n="number"===typeof i?{height:i+"px",width:i+"px",lineHeight:i+"px"}:{};return e("span",{class:t,style:n},[this.renderAvatar()])}},Qg=Zg,Jg=o(Qg,Ug,Gg,!1,null,null,null);Jg.options.__file="packages/avatar/src/main.vue";var eb=Jg.exports;eb.install=function(e){e.component(eb.name,eb)};var tb=eb,ib=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-drawer-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-drawer__wrapper",attrs:{tabindex:"-1"}},[i("div",{staticClass:"el-drawer__container",class:e.visible&&"el-drawer__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[i("div",{ref:"drawer",staticClass:"el-drawer",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.drawerSize:"height: "+e.drawerSize,attrs:{"aria-modal":"true","aria-labelledby":"el-drawer__title","aria-label":e.title,role:"dialog",tabindex:"-1"}},[e.withHeader?i("header",{staticClass:"el-drawer__header",attrs:{id:"el-drawer__title"}},[e._t("title",[i("span",{attrs:{role:"heading",title:e.title}},[e._v(e._s(e.title))])]),e.showClose?i("button",{staticClass:"el-drawer__close-btn",attrs:{"aria-label":"close "+(e.title||"drawer"),type:"button"},on:{click:e.closeDrawer}},[i("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2):e._e(),e.rendered?i("section",{staticClass:"el-drawer__body"},[e._t("default")],2):e._e()])])])])},nb=[];ib._withStripped=!0;var sb={name:"ElDrawer",mixins:[k.a,O.a],props:{appendToBody:{type:Boolean,default:!1},beforeClose:{type:Function},customClass:{type:String,default:""},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},modalAppendToBody:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},size:{type:[Number,String],default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0},withHeader:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction},drawerSize:function(){return"number"===typeof this.size?this.size+"px":this.size}},data:function(){return{closed:!1,prevActiveElement:null}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el),this.prevActiveElement=document.activeElement):(this.closed||(this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1)),this.$nextTick((function(){t.prevActiveElement&&t.prevActiveElement.focus()})))}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeDrawer()},closeDrawer:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},handleClose:function(){this.closeDrawer()}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},rb=sb,ab=o(rb,ib,nb,!1,null,null,null);ab.options.__file="packages/drawer/src/main.vue";var ob=ab.exports;ob.install=function(e){e.component(ob.name,ob)};var lb=ob,cb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-popover",e._b({attrs:{trigger:"click"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},"el-popover",e.$attrs,!1),[i("div",{staticClass:"el-popconfirm"},[i("p",{staticClass:"el-popconfirm__main"},[e.hideIcon?e._e():i("i",{staticClass:"el-popconfirm__icon",class:e.icon,style:{color:e.iconColor}}),e._v("\n "+e._s(e.title)+"\n ")]),i("div",{staticClass:"el-popconfirm__action"},[i("el-button",{attrs:{size:"mini",type:e.cancelButtonType},on:{click:e.cancel}},[e._v("\n "+e._s(e.displayCancelButtonText)+"\n ")]),i("el-button",{attrs:{size:"mini",type:e.confirmButtonType},on:{click:e.confirm}},[e._v("\n "+e._s(e.displayConfirmButtonText)+"\n ")])],1)]),e._t("reference",null,{slot:"reference"})],2)},ub=[];cb._withStripped=!0;var hb=i(44),db=i.n(hb),pb={name:"ElPopconfirm",props:{title:{type:String},confirmButtonText:{type:String},cancelButtonText:{type:String},confirmButtonType:{type:String,default:"primary"},cancelButtonType:{type:String,default:"text"},icon:{type:String,default:"el-icon-question"},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1}},components:{ElPopover:db.a,ElButton:ae.a},data:function(){return{visible:!1}},computed:{displayConfirmButtonText:function(){return this.confirmButtonText||Object(fo["t"])("el.popconfirm.confirmButtonText")},displayCancelButtonText:function(){return this.cancelButtonText||Object(fo["t"])("el.popconfirm.cancelButtonText")}},methods:{confirm:function(){this.visible=!1,this.$emit("confirm")},cancel:function(){this.visible=!1,this.$emit("cancel")}}},fb=pb,mb=o(fb,cb,ub,!1,null,null,null);mb.options.__file="packages/popconfirm/src/main.vue";var vb=mb.exports;vb.install=function(e){e.component(vb.name,vb)};var gb=vb,bb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.uiLoading?[i("div",e._b({class:["el-skeleton",e.animated?"is-animated":""]},"div",e.$attrs,!1),[e._l(e.count,(function(t){return[e.loading?e._t("template",e._l(e.rows,(function(n){return i("el-skeleton-item",{key:t+"-"+n,class:{"el-skeleton__paragraph":1!==n,"is-first":1===n,"is-last":n===e.rows&&e.rows>1},attrs:{variant:"p"}})}))):e._e()]}))],2)]:[e._t("default",null,null,e.$attrs)]],2)},yb=[];bb._withStripped=!0;var _b={name:"ElSkeleton",props:{animated:{type:Boolean,default:!1},count:{type:Number,default:1},rows:{type:Number,default:4},loading:{type:Boolean,default:!0},throttle:{type:Number,default:0}},watch:{loading:{handler:function(e){var t=this;this.throttle<=0?this.uiLoading=e:e?(clearTimeout(this.timeoutHandle),this.timeoutHandle=setTimeout((function(){t.uiLoading=t.loading}),this.throttle)):this.uiLoading=e},immediate:!0}},data:function(){return{uiLoading:this.throttle<=0&&this.loading}}},xb=_b,Cb=o(xb,bb,yb,!1,null,null,null);Cb.options.__file="packages/skeleton/src/index.vue";var wb=Cb.exports;wb.install=function(e){e.component(wb.name,wb)};var kb=wb,Sb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-skeleton__item","el-skeleton__"+e.variant]},["image"===e.variant?i("img-placeholder"):e._e()],1)},Db=[];Sb._withStripped=!0;var $b=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("svg",{attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"}},[i("path",{attrs:{d:"M64 896V128h896v768H64z m64-128l192-192 116.352 116.352L640 448l256 307.2V192H128v576z m224-480a96 96 0 1 1-0.064 192.064A96 96 0 0 1 352 288z"}})])},Ob=[];$b._withStripped=!0;var Eb={name:"ImgPlaceholder"},Tb=Eb,Pb=o(Tb,$b,Ob,!1,null,null,null);Pb.options.__file="packages/skeleton/src/img-placeholder.vue";var Mb,Nb=Pb.exports,Ib={name:"ElSkeletonItem",props:{variant:{type:String,default:"text"}},components:(Mb={},Mb[Nb.name]=Nb,Mb)},jb=Ib,Fb=o(jb,Sb,Db,!1,null,null,null);Fb.options.__file="packages/skeleton/src/item.vue";var Lb=Fb.exports;Lb.install=function(e){e.component(Lb.name,Lb)};var Ab=Lb,Vb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-empty"},[i("div",{staticClass:"el-empty__image",style:e.imageStyle},[e.image?i("img",{attrs:{src:e.image,ondragstart:"return false"}}):e._t("image",[i("img-empty")])],2),i("div",{staticClass:"el-empty__description"},[e.$slots.description?e._t("description"):i("p",[e._v(e._s(e.emptyDescription))])],2),e.$slots.default?i("div",{staticClass:"el-empty__bottom"},[e._t("default")],2):e._e()])},Bb=[];Vb._withStripped=!0;var zb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("svg",{attrs:{viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[i("defs",[i("linearGradient",{attrs:{id:"linearGradient-1-"+e.id,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"}},[i("stop",{attrs:{"stop-color":"#FCFCFD",offset:"0%"}}),i("stop",{attrs:{"stop-color":"#EEEFF3",offset:"100%"}})],1),i("linearGradient",{attrs:{id:"linearGradient-2-"+e.id,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"}},[i("stop",{attrs:{"stop-color":"#FCFCFD",offset:"0%"}}),i("stop",{attrs:{"stop-color":"#E9EBEF",offset:"100%"}})],1),i("rect",{attrs:{id:"path-3-"+e.id,x:"0",y:"0",width:"17",height:"36"}})],1),i("g",{attrs:{id:"Illustrations",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"}},[i("g",{attrs:{id:"B-type",transform:"translate(-1268.000000, -535.000000)"}},[i("g",{attrs:{id:"Group-2",transform:"translate(1268.000000, 535.000000)"}},[i("path",{attrs:{id:"Oval-Copy-2",d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:"#F7F8FC"}}),i("polygon",{attrs:{id:"Rectangle-Copy-14",fill:"#E5E7E9",transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"}}),i("g",{attrs:{id:"Group-Copy",transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"}},[i("polygon",{attrs:{id:"Rectangle-Copy-10",fill:"#E5E7E9",transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"}}),i("polygon",{attrs:{id:"Rectangle-Copy-11",fill:"#EDEEF2",points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"}}),i("rect",{attrs:{id:"Rectangle-Copy-12",fill:"url(#linearGradient-1-"+e.id+")",transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"}}),i("polygon",{attrs:{id:"Rectangle-Copy-13",fill:"#F8F9FB",transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"}})]),i("rect",{attrs:{id:"Rectangle-Copy-15",fill:"url(#linearGradient-2-"+e.id+")",x:"13",y:"45",width:"40",height:"36"}}),i("g",{attrs:{id:"Rectangle-Copy-17",transform:"translate(53.000000, 45.000000)"}},[i("mask",{attrs:{id:"mask-4-"+e.id,fill:"white"}},[i("use",{attrs:{"xlink:href":"#path-3-"+e.id}})]),i("use",{attrs:{id:"Mask",fill:"#E0E3E9",transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":"#path-3-"+e.id}}),i("polygon",{attrs:{id:"Rectangle-Copy",fill:"#D5D7DE",mask:"url(#mask-4-"+e.id+")",transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 -1.70530257e-13 16"}})]),i("polygon",{attrs:{id:"Rectangle-Copy-18",fill:"#F8F9FB",transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"}})])])])])},Rb=[];zb._withStripped=!0;var Hb=0,Wb={name:"ImgEmpty",data:function(){return{id:++Hb}}},qb=Wb,Yb=o(qb,zb,Rb,!1,null,null,null);Yb.options.__file="packages/empty/src/img-empty.vue";var Kb,Ub=Yb.exports,Gb={name:"ElEmpty",components:(Kb={},Kb[Ub.name]=Ub,Kb),props:{image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}},computed:{emptyDescription:function(){return this.description||Object(fo["t"])("el.empty.description")},imageStyle:function(){return{width:this.imageSize?this.imageSize+"px":""}}}},Xb=Gb,Zb=o(Xb,Vb,Bb,!1,null,null,null);Zb.options.__file="packages/empty/src/index.vue";var Qb=Zb.exports;Qb.install=function(e){e.component(Qb.name,Qb)};var Jb,ey=Qb,ty=Object.assign||function(e){for(var t=1;t3&&void 0!==arguments[3]&&arguments[3];return e.props||(e.props={}),t>i&&(e.props.span=i),n&&(e.props.span=i),e},getRows:function(){var e=this,t=(this.$slots.default||[]).filter((function(e){return e.tag&&e.componentOptions&&"ElDescriptionsItem"===e.componentOptions.Ctor.options.name})),i=t.map((function(t){return{props:e.getOptionProps(t),slots:e.getSlots(t),vnode:t}})),n=[],s=[],r=this.column;return i.forEach((function(i,a){var o=i.props.span||1;if(a===t.length-1)return s.push(e.filledNode(i,o,r,!0)),void n.push(s);o1&&void 0!==arguments[1]?arguments[1]:{};mo.a.use(t.locale),mo.a.i18n(t.i18n),zy.forEach((function(t){e.component(t.name,t)})),e.use(ig),e.use(Tu.directive),e.prototype.$ELEMENT={size:t.size||"",zIndex:t.zIndex||2e3},e.prototype.$loading=Tu.service,e.prototype.$msgbox=Fo,e.prototype.$alert=Fo.alert,e.prototype.$confirm=Fo.confirm,e.prototype.$prompt=Fo.prompt,e.prototype.$notify=Xc,e.prototype.$message=Zh};"undefined"!==typeof window&&window.Vue&&Ry(window.Vue);t["default"]={version:"2.15.6",locale:mo.a.use,i18n:mo.a.i18n,install:Ry,CollapseTransition:Ke.a,Loading:Tu,Pagination:_,Dialog:N,Autocomplete:se,Dropdown:pe,DropdownMenu:_e,DropdownItem:$e,Menu:qe,Submenu:et,MenuItem:ct,MenuItemGroup:vt,Input:Pt,InputNumber:Vt,Radio:Yt,RadioGroup:ei,RadioButton:oi,Checkbox:fi,CheckboxButton:xi,CheckboxGroup:Oi,Switch:ji,Select:ln,Option:cn,OptionGroup:vn,Button:wn,ButtonGroup:Tn,Table:Ks,TableColumn:tr,DatePicker:Oa,TimeSelect:Ba,TimePicker:Ja,Popover:lo,Tooltip:uo,MessageBox:Fo,Breadcrumb:Ho,BreadcrumbItem:Xo,Form:nl,FormItem:bl,Tabs:Vl,TabPane:Ul,Tag:Jl,Tree:Oc,Alert:Fc,Notification:Xc,Slider:du,Icon:Lu,Row:Vu,Col:Ru,Upload:xh,Progress:Oh,Spinner:jh,Message:Zh,Badge:sd,Card:hd,Rate:bd,Steps:Sd,Step:Md,Carousel:zd,Scrollbar:Yd,CarouselItem:ep,Collapse:op,CollapseItem:fp,Cascader:Ep,ColorPicker:Tf,Transfer:Hf,Container:Xf,Header:nm,Aside:um,Main:gm,Footer:Dm,Timeline:Pm,TimelineItem:Am,Link:qm,Divider:Qm,Image:gv,Calendar:jv,Backtop:Wv,InfiniteScroll:ig,PageHeader:cg,CascaderPanel:Xg,Avatar:tb,Drawer:lb,Popconfirm:gb,Skeleton:kb,SkeletonItem:Ab,Empty:ey,Descriptions:ry,DescriptionsItem:oy,Result:By}}])["default"]},6167:function(e,t,i){"use strict";var n,s;"function"===typeof Symbol&&Symbol.iterator;(function(r,a){n=a,s="function"===typeof n?n.call(t,i,t,e):n,void 0===s||(e.exports=s)})(0,(function(){var e=window,t={placement:"bottom",gpuAcceleration:!0,offset:0,boundariesElement:"viewport",boundariesPadding:5,preventOverflowOrder:["left","right","top","bottom"],flipBehavior:"flip",arrowElement:"[x-arrow]",arrowOffset:0,modifiers:["shift","offset","preventOverflow","keepTogether","arrow","flip","applyStyle"],modifiersIgnored:[],forceAbsolute:!1};function i(e,i,n){this._reference=e.jquery?e[0]:e,this.state={};var s="undefined"===typeof i||null===i,r=i&&"[object Object]"===Object.prototype.toString.call(i);return this._popper=s||r?this.parse(r?i:{}):i.jquery?i[0]:i,this._options=Object.assign({},t,n),this._options.modifiers=this._options.modifiers.map(function(e){if(-1===this._options.modifiersIgnored.indexOf(e))return"applyStyle"===e&&this._popper.setAttribute("x-placement",this._options.placement),this.modifiers[e]||e}.bind(this)),this.state.position=this._getPosition(this._popper,this._reference),h(this._popper,{position:this.state.position,top:0}),this.update(),this._setupEventListeners(),this}function n(t){var i=t.style.display,n=t.style.visibility;t.style.display="block",t.style.visibility="hidden";t.offsetWidth;var s=e.getComputedStyle(t),r=parseFloat(s.marginTop)+parseFloat(s.marginBottom),a=parseFloat(s.marginLeft)+parseFloat(s.marginRight),o={width:t.offsetWidth+a,height:t.offsetHeight+r};return t.style.display=i,t.style.visibility=n,o}function s(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function r(e){var t=Object.assign({},e);return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function a(e,t){var i,n=0;for(i in e){if(e[i]===t)return n;n++}return null}function o(t,i){var n=e.getComputedStyle(t,null);return n[i]}function l(t){var i=t.offsetParent;return i!==e.document.body&&i?i:e.document.documentElement}function c(t){var i=t.parentNode;return i?i===e.document?e.document.body.scrollTop||e.document.body.scrollLeft?e.document.body:e.document.documentElement:-1!==["scroll","auto"].indexOf(o(i,"overflow"))||-1!==["scroll","auto"].indexOf(o(i,"overflow-x"))||-1!==["scroll","auto"].indexOf(o(i,"overflow-y"))?i:c(t.parentNode):t}function u(t){return t!==e.document.body&&("fixed"===o(t,"position")||(t.parentNode?u(t.parentNode):t))}function h(e,t){function i(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}Object.keys(t).forEach((function(n){var s="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&i(t[n])&&(s="px"),e.style[n]=t[n]+s}))}function d(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function p(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.offsetLeft,top:e.offsetTop};return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function f(e){var t=e.getBoundingClientRect(),i=-1!=navigator.userAgent.indexOf("MSIE"),n=i&&"HTML"===e.tagName?-e.scrollTop:t.top;return{left:t.left,top:n,right:t.right,bottom:t.bottom,width:t.right-t.left,height:t.bottom-n}}function m(e,t,i){var n=f(e),s=f(t);if(i){var r=c(t);s.top+=r.scrollTop,s.bottom+=r.scrollTop,s.left+=r.scrollLeft,s.right+=r.scrollLeft}var a={top:n.top-s.top,left:n.left-s.left,bottom:n.top-s.top+n.height,right:n.left-s.left+n.width,width:n.width,height:n.height};return a}function v(t){for(var i=["","ms","webkit","moz","o"],n=0;n1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(s),s;function o(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},i.prototype._getPosition=function(e,t){var i=l(t);if(this._options.forceAbsolute)return"absolute";var n=u(t,i);return n?"fixed":"absolute"},i.prototype._getOffsets=function(e,t,i){i=i.split("-")[0];var s={};s.position=this.state.position;var r="fixed"===s.position,a=m(t,l(e),r),o=n(e);return-1!==["right","left"].indexOf(i)?(s.top=a.top+a.height/2-o.height/2,s.left="left"===i?a.left-o.width:a.right):(s.left=a.left+a.width/2-o.width/2,s.top="top"===i?a.top-o.height:a.bottom),s.width=o.width,s.height=o.height,{popper:s,reference:a}},i.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=c(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},i.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},i.prototype._getBoundaries=function(t,i,n){var s,r,a={};if("window"===n){var o=e.document.body,u=e.document.documentElement;r=Math.max(o.scrollHeight,o.offsetHeight,u.clientHeight,u.scrollHeight,u.offsetHeight),s=Math.max(o.scrollWidth,o.offsetWidth,u.clientWidth,u.scrollWidth,u.offsetWidth),a={top:0,right:s,bottom:r,left:0}}else if("viewport"===n){var h=l(this._popper),d=c(this._popper),f=p(h),m=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},v=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},g="fixed"===t.offsets.popper.position?0:m(d),b="fixed"===t.offsets.popper.position?0:v(d);a={top:0-(f.top-g),right:e.document.documentElement.clientWidth-(f.left-b),bottom:e.document.documentElement.clientHeight-(f.top-g),left:0-(f.left-b)}}else a=l(this._popper)===n?{top:0,left:0,right:n.clientWidth,bottom:n.clientHeight}:p(n);return a.left+=i,a.right-=i,a.top=a.top+i,a.bottom=a.bottom-i,a},i.prototype.runModifiers=function(e,t,i){var n=t.slice();return void 0!==i&&(n=this._options.modifiers.slice(0,a(this._options.modifiers,i))),n.forEach(function(t){d(t)&&(e=t.call(this,e))}.bind(this)),e},i.prototype.isModifierRequired=function(e,t){var i=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,i).filter((function(e){return e===t})).length},i.prototype.modifiers={},i.prototype.modifiers.applyStyle=function(e){var t,i={position:e.offsets.popper.position},n=Math.round(e.offsets.popper.left),s=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=v("transform"))?(i[t]="translate3d("+n+"px, "+s+"px, 0)",i.top=0,i.left=0):(i.left=n,i.top=s),Object.assign(i,e.styles),h(this._popper,i),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&h(e.arrowElement,e.offsets.arrow),e},i.prototype.modifiers.shift=function(e){var t=e.placement,i=t.split("-")[0],n=t.split("-")[1];if(n){var s=e.offsets.reference,a=r(e.offsets.popper),o={y:{start:{top:s.top},end:{top:s.top+s.height-a.height}},x:{start:{left:s.left},end:{left:s.left+s.width-a.width}}},l=-1!==["bottom","top"].indexOf(i)?"x":"y";e.offsets.popper=Object.assign(a,o[l][n])}return e},i.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,i=r(e.offsets.popper),n={left:function(){var t=i.left;return i.lefte.boundaries.right&&(t=Math.min(i.left,e.boundaries.right-i.width)),{left:t}},top:function(){var t=i.top;return i.tope.boundaries.bottom&&(t=Math.min(i.top,e.boundaries.bottom-i.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(i,n[t]())})),e},i.prototype.modifiers.keepTogether=function(e){var t=r(e.offsets.popper),i=e.offsets.reference,n=Math.floor;return t.rightn(i.right)&&(e.offsets.popper.left=n(i.right)),t.bottomn(i.bottom)&&(e.offsets.popper.top=n(i.bottom)),e},i.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],i=s(t),n=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,i]:this._options.flipBehavior,a.forEach(function(o,l){if(t===o&&a.length!==l+1){t=e.placement.split("-")[0],i=s(t);var c=r(e.offsets.popper),u=-1!==["right","bottom"].indexOf(t);(u&&Math.floor(e.offsets.reference[t])>Math.floor(c[i])||!u&&Math.floor(e.offsets.reference[t])o[p]&&(e.offsets.popper[h]+=l[h]+f-o[p]);var m=l[h]+(i||l[u]/2-f/2),v=m-o[h];return v=Math.max(Math.min(o[u]-f-8,v),8),s[h]=v,s[d]="",e.offsets.arrow=s,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),i=1;i-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(l["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),t&&(Object(o["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),i.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(o["on"])(t,"focusin",(function(){e.handleFocus();var i=t.__vue__;i&&"function"===typeof i.focus&&i.focus()})),Object(o["on"])(i,"focusin",this.handleFocus),Object(o["on"])(t,"focusout",this.handleBlur),Object(o["on"])(i,"focusout",this.handleBlur)),Object(o["on"])(t,"keydown",this.handleKeydown),Object(o["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(o["on"])(t,"click",this.doToggle),Object(o["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(o["on"])(t,"mouseenter",this.handleMouseEnter),Object(o["on"])(i,"mouseenter",this.handleMouseEnter),Object(o["on"])(t,"mouseleave",this.handleMouseLeave),Object(o["on"])(i,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(o["on"])(t,"focusin",this.doShow),Object(o["on"])(t,"focusout",this.doClose)):(Object(o["on"])(t,"mousedown",this.doShow),Object(o["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(o["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(o["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(o["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&i&&!i.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(o["off"])(e,"click",this.doToggle),Object(o["off"])(e,"mouseup",this.doClose),Object(o["off"])(e,"mousedown",this.doShow),Object(o["off"])(e,"focusin",this.doShow),Object(o["off"])(e,"focusout",this.doClose),Object(o["off"])(e,"mousedown",this.doShow),Object(o["off"])(e,"mouseup",this.doClose),Object(o["off"])(e,"mouseleave",this.handleMouseLeave),Object(o["off"])(e,"mouseenter",this.handleMouseEnter),Object(o["off"])(document,"click",this.handleDocumentClick)}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/popover/src/main.vue";var p=d.exports,f=function(e,t,i){var n=t.expression?t.value:t.arg,s=i.context.$refs[n];s&&(Array.isArray(s)?s[0].$refs.reference=e:s.$refs.reference=e)},m={bind:function(e,t,i){f(e,t,i)},inserted:function(e,t,i){f(e,t,i)}},v=i(7),g=i.n(v);g.a.directive("popover",m),p.install=function(e){e.directive("popover",m),e.component(p.name,p)},p.directive=m;t["default"]=p}})},"6b7c":function(e,t,i){"use strict";t.__esModule=!0;var n=i("4897");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),i=0;i0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var f=t.arrayFindIndex=function(e,t){for(var i=0;i!==e.length;++i)if(t(e[i]))return i;return-1},m=(t.arrayFind=function(e,t){var i=f(e,t);return-1!==i?e[i]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!r.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!r.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!r.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":n(e)))return e;var t=["transform","transition","animation"],i=["ms-","webkit-"];return t.forEach((function(t){var n=e[t];t&&n&&i.forEach((function(i){e[i+t]=n}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,a.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var i=(0,a.isObject)(e),n=(0,a.isObject)(t);return i&&n?JSON.stringify(e)===JSON.stringify(t):!i&&!n&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var i=0;i1?t-1:0),a=1;a-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),i=0;ie)return t[i].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,i){return"string"===typeof e?{color:e,percentage:(i+1)*t}:e}))}}},a=r,o=i(0),l=Object(o["a"])(a,n,s,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},c56a:function(e,t,i){"use strict";t.__esModule=!0,t.default=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var s=!1,r=function(){s||(s=!0,t&&t.apply(null,arguments))};n?e.$once("after-leave",r):e.$on("after-leave",r),setTimeout((function(){r()}),i+100)}},d010:function(e,t,i){"use strict";function n(e,t,i){this.$children.forEach((function(s){var r=s.$options.componentName;r===e?s.$emit.apply(s,[t].concat(i)):n.apply(s,[e,t].concat([i]))}))}t.__esModule=!0,t.default={methods:{dispatch:function(e,t,i){var n=this.$parent||this.$root,s=n.$options.componentName;while(n&&(!s||s!==e))n=n.$parent,n&&(s=n.$options.componentName);n&&n.$emit.apply(n,[t].concat(i))},broadcast:function(e,t,i){n.call(this,e,t,i)}}}},d397:function(e,t,i){"use strict";function n(e){return void 0!==e&&null!==e}function s(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=n,t.isKorean=s},d7d1:function(e,t,i){"use strict";var n;(function(s){var r={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,o="\\d\\d?",l="\\d{3}",c="\\d{4}",u="[^\\s]+",h=/\[([^]*?)\]/gm,d=function(){};function p(e){return e.replace(/[|\\{()[^$+*?.-]/g,"\\$&")}function f(e,t){for(var i=[],n=0,s=e.length;n3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return v(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return v(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return v(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return v(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return v(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return v(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return v(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return v(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return v(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return v(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return v(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+v(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},C={d:[o,function(e,t){e.day=t}],Do:[o+u,function(e,t){e.day=parseInt(t,10)}],M:[o,function(e,t){e.month=t-1}],yy:[o,function(e,t){var i=new Date,n=+(""+i.getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:[o,function(e,t){e.hour=t}],m:[o,function(e,t){e.minute=t}],s:[o,function(e,t){e.second=t}],yyyy:[c,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[o,d],ddd:[u,d],MMM:[u,m("monthNamesShort")],MMMM:[u,m("monthNames")],a:[u,function(e,t,i){var n=t.toLowerCase();n===i.amPm[0]?e.isPm=!1:n===i.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var i,n=(t+"").match(/([+-]|\d\d)/gi);n&&(i=60*n[1]+parseInt(n[2],10),e.timezoneOffset="+"===n[0]?i:-i)}]};C.dd=C.d,C.dddd=C.ddd,C.DD=C.D,C.mm=C.m,C.hh=C.H=C.HH=C.h,C.MM=C.M,C.ss=C.s,C.A=C.a,r.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},r.format=function(e,t,i){var n=i||r.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=r.masks[t]||t||r.masks["default"];var s=[];return t=t.replace(h,(function(e,t){return s.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,n):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return s.shift()}))},r.parse=function(e,t,i){var n=i||r.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=r.masks[t]||t,e.length>1e3)return null;var s={},o=[],l=[];t=t.replace(h,(function(e,t){return l.push(t),"@@@"}));var c=p(t).replace(a,(function(e){if(C[e]){var t=C[e];return o.push(t[1]),"("+t[0]+")"}return e}));c=c.replace(/@@@/g,(function(){return l.shift()}));var u=e.match(new RegExp(c,"i"));if(!u)return null;for(var d=1;d1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()-t)});t.nextDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)},t.getStartDateOfMonth=function(e,t){var i=new Date(e,t,1),n=i.getDay();return m(i,0===n?7:n)},t.getWeekNumber=function(e){if(!d(e))return null;var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var i=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-i.getTime())/864e5-3+(i.getDay()+6)%7)/7)},t.getRangeHours=function(e){var t=[],i=[];if((e||[]).forEach((function(e){var t=e.map((function(e){return e.getHours()}));i=i.concat(c(t[0],t[1]))})),i.length)for(var n=0;n<24;n++)t[n]=-1===i.indexOf(n);else for(var s=0;s<24;s++)t[s]=!1;return t},t.getPrevMonthLastDays=function(e,t){if(t<=0)return[];var i=new Date(e.getTime());i.setDate(0);var n=i.getDate();return g(t).map((function(e,i){return n-(t-i-1)}))},t.getMonthDays=function(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),i=t.getDate();return g(i).map((function(e,t){return t+1}))};function v(e,t,i,n){for(var s=t;s0?e.forEach((function(e){var n=e[0],s=e[1],r=n.getHours(),a=n.getMinutes(),o=s.getHours(),l=s.getMinutes();r===t&&o!==t?v(i,a,60,!0):r===t&&o===t?v(i,a,l+1,!0):r!==t&&o===t?v(i,0,l+1,!0):rt&&v(i,0,60,!0)})):v(i,0,60,!0),i};var g=t.range=function(e){return Array.apply(null,{length:e}).map((function(e,t){return t}))},b=t.modifyDate=function(e,t,i,n){return new Date(t,i,n,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())},y=t.modifyTime=function(e,t,i,n){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t,i,n,e.getMilliseconds())},_=(t.modifyWithTimeString=function(e,t){return null!=e&&t?(t=p(t,"HH:mm:ss"),y(e,t.getHours(),t.getMinutes(),t.getSeconds())):e},t.clearTime=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},t.clearMilliseconds=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),0)},t.limitTimeRange=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"HH:mm:ss";if(0===t.length)return e;var n=function(e){return s.default.parse(s.default.format(e,i),i)},r=n(e),a=t.map((function(e){return e.map(n)}));if(a.some((function(e){return r>=e[0]&&r<=e[1]})))return e;var o=a[0][0],l=a[0][0];a.forEach((function(e){o=new Date(Math.min(e[0],o)),l=new Date(Math.max(e[1],o))}));var c=r1&&void 0!==arguments[1]?arguments[1]:1,i=e.getFullYear(),n=e.getMonth();return x(e,i-t,n)},t.nextYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=e.getFullYear(),n=e.getMonth();return x(e,i+t,n)},t.extractDateFormat=function(e){return e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim()},t.extractTimeFormat=function(e){return e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g,"").trim()},t.validateRangeInOneMonth=function(e,t){return e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}},dcdc:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=120)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},120:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[i("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[i("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=o,c=i(0),u=Object(c["a"])(l,n,s,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox.vue";var h=u.exports;h.install=function(e){e.component(h.name,h)};t["default"]=h},4:function(e,t){e.exports=i("d010")}})},e450:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=104)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},10:function(e,t){e.exports=i("f3ad")},104:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?i("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.decrease(t)}}},[i("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?i("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.increase(t)}}},[i("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),i("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.increase(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.decrease(t))}]}})],1)},s=[];n._withStripped=!0;var r=i(10),a=i.n(r),o=i(22),l=i.n(o),c=i(30),u={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:c["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var i=this.getPrecision(this.step),n=Math.pow(10,i);t=Math.round(t/this.step)*n*this.step/n}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,i=this.getPrecision,n=this.precision,s=i(t);return void 0!==n?(s>n&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),n):Math.max(i(e),s)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),i=Math.pow(10,t);e=Math.round(e/this.step)*i*this.step/i}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),i=t.indexOf("."),n=0;return-1!==i&&(n=t.length-i-1),n},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e+i*t)/i)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e-i*t)/i)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},h=u,d=i(0),p=Object(d["a"])(h,n,s,!1,null,null,null);p.options.__file="packages/input-number/src/input-number.vue";var f=p.exports;f.install=function(e){e.component(f.name,f)};t["default"]=f},2:function(e,t){e.exports=i("5924")},22:function(e,t){e.exports=i("12f2")},30:function(e,t,i){"use strict";var n=i(2);t["a"]={bind:function(e,t,i){var s=null,r=void 0,a=function(){return i.context[t.expression].apply()},o=function(){Date.now()-r<100&&a(),clearInterval(s),s=null};Object(n["on"])(e,"mousedown",(function(e){0===e.button&&(r=Date.now(),Object(n["once"])(document,"mouseup",o),clearInterval(s),s=setInterval(a,100))}))}}}})},e452:function(e,t,i){"use strict";t.__esModule=!0;var n=n||{};n.Utils=n.Utils||{},n.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var i=e.childNodes[t];if(n.Utils.attemptFocus(i)||n.Utils.focusLastDescendant(i))return!0}return!1},n.Utils.attemptFocus=function(e){if(!n.Utils.isFocusable(e))return!1;n.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return n.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},n.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},n.Utils.triggerEvent=function(e,t){var i=void 0;i=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var n=document.createEvent(i),s=arguments.length,r=Array(s>2?s-2:0),a=2;a=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(o["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/select/src/option.vue";t["a"]=d.exports},4:function(e,t){e.exports=i("d010")},53:function(e,t,i){"use strict";i.r(t);var n=i(33);n["a"].install=function(e){e.component(n["a"].name,n["a"])},t["default"]=n["a"]}})},e974:function(e,t,i){"use strict";t.__esModule=!0;var n=i("2b0e"),s=a(n),r=i("5128");function a(e){return e&&e.__esModule?e:{default:e}}var o=s.default.prototype.$isServer?function(){}:i("6167"),l=function(e){return e.stopPropagation()};t.default={props:{transformOrigin:{type:[Boolean,String],default:!0},placement:{type:String,default:"bottom"},boundariesPadding:{type:Number,default:5},reference:{},popper:{},offset:{default:0},value:Boolean,visibleArrow:Boolean,arrowOffset:{type:Number,default:35},appendToBody:{type:Boolean,default:!0},popperOptions:{type:Object,default:function(){return{gpuAcceleration:!1}}}},data:function(){return{showPopper:!1,currentPlacement:""}},watch:{value:{immediate:!0,handler:function(e){this.showPopper=e,this.$emit("input",e)}},showPopper:function(e){this.disabled||(e?this.updatePopper():this.destroyPopper(),this.$emit("input",e))}},methods:{createPopper:function(){var e=this;if(!this.$isServer&&(this.currentPlacement=this.currentPlacement||this.placement,/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement))){var t=this.popperOptions,i=this.popperElm=this.popperElm||this.popper||this.$refs.popper,n=this.referenceElm=this.referenceElm||this.reference||this.$refs.reference;!n&&this.$slots.reference&&this.$slots.reference[0]&&(n=this.referenceElm=this.$slots.reference[0].elm),i&&n&&(this.visibleArrow&&this.appendArrow(i),this.appendToBody&&document.body.appendChild(this.popperElm),this.popperJS&&this.popperJS.destroy&&this.popperJS.destroy(),t.placement=this.currentPlacement,t.offset=this.offset,t.arrowOffset=this.arrowOffset,this.popperJS=new o(n,i,t),this.popperJS.onCreate((function(t){e.$emit("created",e),e.resetTransformOrigin(),e.$nextTick(e.updatePopper)})),"function"===typeof t.onUpdate&&this.popperJS.onUpdate(t.onUpdate),this.popperJS._popper.style.zIndex=r.PopupManager.nextZIndex(),this.popperElm.addEventListener("click",l))}},updatePopper:function(){var e=this.popperJS;e?(e.update(),e._popper&&(e._popper.style.zIndex=r.PopupManager.nextZIndex())):this.createPopper()},doDestroy:function(e){!this.popperJS||this.showPopper&&!e||(this.popperJS.destroy(),this.popperJS=null)},destroyPopper:function(){this.popperJS&&this.resetTransformOrigin()},resetTransformOrigin:function(){if(this.transformOrigin){var e={top:"bottom",bottom:"top",left:"right",right:"left"},t=this.popperJS._popper.getAttribute("x-placement").split("-")[0],i=e[t];this.popperJS._popper.style.transformOrigin="string"===typeof this.transformOrigin?this.transformOrigin:["top","bottom"].indexOf(t)>-1?"center "+i:i+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var i in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[i].name)){t=e.attributes[i].name;break}var n=document.createElement("div");t&&n.setAttribute(t,""),n.setAttribute("x-arrow",""),n.className="popper__arrow",e.appendChild(n)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},eedf:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=86)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},86:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?i("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",[e._t("default")],2):e._e()])},s=[];n._withStripped=!0;var r={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=r,o=i(0),l=Object(o["a"])(a,n,s,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},f0d9:function(e,t,i){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},empty:{description:"暂无数据"}}}},f3ad:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=73)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},11:function(e,t){e.exports=i("2bb5")},21:function(e,t){e.exports=i("d397")},4:function(e,t){e.exports=i("d010")},73:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?i("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?i("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?i("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?i("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?i("span",{staticClass:"el-input__suffix"},[i("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?i("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?i("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?i("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?i("span",{staticClass:"el-input__count"},[i("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?i("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?i("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:i("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?i("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(11),l=i.n(o),c=void 0,u="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",h=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function d(e){var t=window.getComputedStyle(e),i=t.getPropertyValue("box-sizing"),n=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),s=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),r=h.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:r,paddingSize:n,borderSize:s,boxSizing:i}}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;c||(c=document.createElement("textarea"),document.body.appendChild(c));var n=d(e),s=n.paddingSize,r=n.borderSize,a=n.boxSizing,o=n.contextStyle;c.setAttribute("style",o+";"+u),c.value=e.value||e.placeholder||"";var l=c.scrollHeight,h={};"border-box"===a?l+=r:"content-box"===a&&(l-=s),c.value="";var p=c.scrollHeight-s;if(null!==t){var f=p*t;"border-box"===a&&(f=f+s+r),l=Math.max(f,l),h.minHeight=f+"px"}if(null!==i){var m=p*i;"border-box"===a&&(m=m+s+r),l=Math.min(m,l)}return h.height=l+"px",c.parentNode&&c.parentNode.removeChild(c),c=null,h}var f=i(9),m=i.n(f),v=i(21),g={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return m()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var i=e.minRows,n=e.maxRows;this.textareaCalcStyle=p(this.$refs.textarea,i,n)}else this.textareaCalcStyle={minHeight:p(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,i=t[t.length-1]||"";this.isComposing=!Object(v["isKorean"])(i)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var i=null,n=0;n>examples/element-ui/CNAME","deploy:extension":"cross-env NODE_ENV=production webpack --config build/webpack.extension.js",dev:"npm run bootstrap && npm run build:file && cross-env NODE_ENV=development webpack-dev-server --config build/webpack.demo.js & node build/bin/template.js","dev:extension":"rimraf examples/extension/dist && cross-env NODE_ENV=development webpack --watch --config build/webpack.extension.js","dev:play":"npm run build:file && cross-env NODE_ENV=development PLAY_ENV=true webpack-dev-server --config build/webpack.demo.js",dist:"npm run clean && npm run build:file && npm run lint && webpack --config build/webpack.conf.js && webpack --config build/webpack.common.js && webpack --config build/webpack.component.js && npm run build:utils && npm run build:umd && npm run build:theme",i18n:"node build/bin/i18n.js",lint:"eslint src/**/* test/**/* packages/**/* build/**/* --quiet",pub:"npm run bootstrap && sh build/git-release.sh && sh build/release.sh && node build/bin/gen-indices.js",test:"npm run lint && npm run build:theme && cross-env CI_ENV=/dev/ BABEL_ENV=test karma start test/unit/karma.conf.js --single-run","test:watch":"npm run build:theme && cross-env BABEL_ENV=test karma start test/unit/karma.conf.js"},style:"lib/theme-chalk/index.css",typings:"types/index.d.ts",unpkg:"lib/index.js",version:"2.15.6"}}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.904c89bd.js b/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.904c89bd.js new file mode 100644 index 00000000..dae8b2f2 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-elementUI.904c89bd.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-elementUI"],{"12f2":function(e,t,i){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},"14e9":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=131)}({131:function(e,t,i){"use strict";i.r(t);var n=i(16),s=i(38),r=i.n(s),a=i(3),o=i(2),l={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function c(e){var t=e.move,i=e.size,n=e.bar,s={},r="translate"+n.axis+"("+t+"%)";return s[n.size]=i,s.transform=r,s.msTransform=r,s.webkitTransform=r,s}var u={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return l[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,i=this.move,n=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+n.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:c({size:t,move:i,bar:n})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]/2,n=100*(t-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=n*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(o["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(o["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var i=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]-t,s=100*(i-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=s*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(o["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(o["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},h={name:"ElScrollbar",components:{Bar:u},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=r()(),i=this.wrapStyle;if(t){var n="-"+t+"px",s="margin-bottom: "+n+"; margin-right: "+n+";";Array.isArray(this.wrapStyle)?(i=Object(a["toObject"])(this.wrapStyle),i.marginRight=i.marginBottom=n):"string"===typeof this.wrapStyle?i+=s:i=s}var o=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),l=e("div",{ref:"wrap",style:i,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[o]]),c=void 0;return c=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:i},[[o]])]:[l,e(u,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(u,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},c)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,i=this.wrap;i&&(e=100*i.clientHeight/i.scrollHeight,t=100*i.clientWidth/i.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(n["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(n["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(h.name,h)}};t["default"]=h},16:function(e,t){e.exports=i("4010")},2:function(e,t){e.exports=i("5924")},3:function(e,t){e.exports=i("8122")},38:function(e,t){e.exports=i("e62d")}})},"299c":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=136)}({136:function(e,t,i){"use strict";i.r(t);var n=i(5),s=i.n(n),r=i(19),a=i.n(r),o=i(2),l=i(3),c=i(7),u=i.n(c),h={name:"ElTooltip",mixins:[s.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new u.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var i=this.getFirstElement();if(!i)return null;var n=i.data=i.data||{};return n.staticClass=this.addTooltipClass(n.staticClass),i},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(o["on"])(this.referenceElm,"mouseenter",this.show),Object(o["on"])(this.referenceElm,"mouseleave",this.hide),Object(o["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(o["on"])(this.referenceElm,"blur",this.handleBlur),Object(o["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(o["addClass"])(this.referenceElm,"focusing"):Object(o["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,i=0;il&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"2bb5":function(e,t,i){"use strict";t.__esModule=!0;i("8122");t.default={mounted:function(){},methods:{getMigratingConfig:function(){return{props:{},events:{}}}}}},4010:function(e,t,i){"use strict";t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var n=i("6dd8"),s=a(n),r=i("9619");function a(e){return e&&e.__esModule?e:{default:e}}var o="undefined"===typeof window,l=function(e){var t=e,i=Array.isArray(t),n=0;for(t=i?t:t[Symbol.iterator]();;){var s;if(i){if(n>=t.length)break;s=t[n++]}else{if(n=t.next(),n.done)break;s=n.value}var r=s,a=r.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){o||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new s.default((0,r.debounce)(16,l)),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"417f":function(e,t,i){"use strict";t.__esModule=!0;var n=i("2b0e"),s=a(n),r=i("5924");function a(e){return e&&e.__esModule?e:{default:e}}var o=[],l="@@clickoutsideContext",c=void 0,u=0;function h(e,t,i){return function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(i&&i.context&&n.target&&s.target)||e.contains(n.target)||e.contains(s.target)||e===n.target||i.context.popperElm&&(i.context.popperElm.contains(n.target)||i.context.popperElm.contains(s.target))||(t.expression&&e[l].methodName&&i.context[e[l].methodName]?i.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!s.default.prototype.$isServer&&(0,r.on)(document,"mousedown",(function(e){return c=e})),!s.default.prototype.$isServer&&(0,r.on)(document,"mouseup",(function(e){o.forEach((function(t){return t[l].documentHandler(e,c)}))})),t.default={bind:function(e,t,i){o.push(e);var n=u++;e[l]={id:n,documentHandler:h(e,t,i),methodName:t.expression,bindingFn:t.value}},update:function(e,t,i){e[l].documentHandler=h(e,t,i),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=o.length,i=0;i\n \n '}else i||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,i=this.panel.isHoverMenu,n={on:{}};i&&(n.on.expand=this.handleExpand);var s=this.nodes.map((function(i,s){var r=i.hasChildren;return e("cascader-node",l()([{key:i.uid,attrs:{node:i,"node-id":t+"-"+s,"aria-haspopup":r,"aria-owns":r?t:null}},n]))}));return[].concat(s,[i?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,i=this.menuId,n={nativeOn:{}};return this.panel.isHoverMenu&&(n.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:i,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},n]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},$=D,O=Object(y["a"])($,x,C,!1,null,null,null);O.options.__file="packages/cascader-panel/src/cascader-menu.vue";var E=O.exports,T=i(21),P=function(){function e(e,t){for(var i=0;i1?t-1:0),n=1;n1?n-1:0),r=1;r0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),i=this.isSameNode(e,t);this.doCheck(i)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},P(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,i=this.config,n=i.disabled,s=i.checkStrictly;return e[n]||!s&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,i=this.hasChildren,n=this.children,s=this.config,r=s.lazy,a=s.leaf;if(r){var o=Object(T["isDef"])(e[a])?e[a]:!!t&&!n.length;return this.hasChildren=!o,o}return!i}}]),e}(),j=I;function F(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var L=function e(t,i){return t.reduce((function(t,n){return n.isLeaf?t.push(n):(!i&&t.push(n),t=t.concat(e(n.children,i))),t}),[])},A=function(){function e(t,i){F(this,e),this.config=i,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(m["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new j(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var i=new j(e,this.config,t),n=t?t.children:this.nodes;n.push(i)},e.prototype.appendNodes=function(e,t){var i=this;e=Object(m["coerceTruthyValueToArray"])(e),e.forEach((function(e){return i.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e?this.leafNodes:this.flattedNodes;return t?i:L(this.nodes,e)},e.prototype.getNodeByValue=function(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(m["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null},e}(),V=A,B=i(9),z=i.n(B),R=i(40),H=i.n(R),W=i(31),q=i.n(W),Y=Object.assign||function(e){for(var t=1;t0){var l=i.store.getNodeByValue(r);l.data[o]||i.lazyLoad(l,(function(){i.handleExpand(l)})),i.loadCount===i.checkedValue.length&&i.$parent.computePresentText()}}t&&t(n)};n.lazyLoad(e,s)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var i=t.querySelector(".el-scrollbar__wrap"),n=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");q()(i,n)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,i=this.multiple;if(i){var n=this.getFlattedNodes(e);return n.filter((function(e){return e.checked}))}return this.isEmptyValue(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,i=e.multiple,n=e.emitPath;i?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=n?[]:null}}},te=ee,ie=Object(y["a"])(te,n,s,!1,null,null,null);ie.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ne=ie.exports;ne.install=function(e){e.component(ne.name,ne)};t["default"]=ne},9:function(e,t){e.exports=i("7f4d")}})},4897:function(e,t,i){"use strict";t.__esModule=!0,t.i18n=t.use=t.t=void 0;var n=i("f0d9"),s=h(n),r=i("2b0e"),a=h(r),o=i("3c4e"),l=h(o),c=i("9d7e"),u=h(c);function h(e){return e&&e.__esModule?e:{default:e}}var d=(0,u.default)(a.default),p=s.default,f=!1,m=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return f||(f=!0,a.default.locale(a.default.config.lang,(0,l.default)(p,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},v=t.t=function(e,t){var i=m.apply(this,arguments);if(null!==i&&void 0!==i)return i;for(var n=e.split("."),s=p,r=0,a=n.length;r0){var n=t[t.length-1];if(n.id===e){if(n.modalClass){var s=n.modalClass.trim().split(/\s+/);s.forEach((function(e){return(0,r.removeClass)(i,e)}))}t.pop(),t.length>0&&(i.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,r.addClass)(i,"v-modal-leave"),setTimeout((function(){0===t.length&&(i.parentNode&&i.parentNode.removeChild(i),i.style.display="none",d.modalDom=void 0),(0,r.removeClass)(i,"v-modal-leave")}),200))}};Object.defineProperty(d,"zIndex",{configurable:!0,get:function(){return l||(c=c||(s.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),c},set:function(e){c=e}});var p=function(){if(!s.default.prototype.$isServer&&d.modalStack.length>0){var e=d.modalStack[d.modalStack.length-1];if(!e)return;var t=d.getInstance(e.id);return t}};s.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=p();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=d},"4e4b":function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=61)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},10:function(e,t){e.exports=i("f3ad")},12:function(e,t){e.exports=i("417f")},15:function(e,t){e.exports=i("14e9")},16:function(e,t){e.exports=i("4010")},19:function(e,t){e.exports=i("0e15")},21:function(e,t){e.exports=i("d397")},22:function(e,t){e.exports=i("12f2")},3:function(e,t){e.exports=i("8122")},31:function(e,t){e.exports=i("2a5e")},33:function(e,t,i){"use strict";var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[i("span",[e._v(e._s(e.currentLabel))])])],2)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(o["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/select/src/option.vue";t["a"]=d.exports},37:function(e,t){e.exports=i("8bbc")},4:function(e,t){e.exports=i("d010")},5:function(e,t){e.exports=i("e974")},6:function(e,t){e.exports=i("6b7c")},61:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?i("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?i("span",[i("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?i("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[i("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():i("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return i("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(i){e.deleteTag(i,t)}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?i("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.handleNavigate("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.handleNavigate("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),i("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.debouncedOnInputChange,compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.handleNavigate("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.handleNavigate("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),i("template",{slot:"suffix"},[i("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?i("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[i("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?i("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):i("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(22),l=i.n(o),c=i(6),u=i.n(c),h=i(10),d=i.n(h),p=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},f=[];p._withStripped=!0;var m=i(5),v=i.n(m),g={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[v.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},b=g,y=i(0),_=Object(y["a"])(b,p,f,!1,null,null,null);_.options.__file="packages/select/src/select-dropdown.vue";var x=_.exports,C=i(33),w=i(37),k=i.n(w),S=i(15),D=i.n(S),$=i(19),O=i.n($),E=i(12),T=i.n(E),P=i(16),M=i(31),N=i.n(M),I=i(3),j={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var i=this.options[this.hoverIndex];!0!==i.disabled&&!0!==i.groupDisabled&&i.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},F=i(21),L={mixins:[a.a,u.a,l()("reference"),j],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(I["isIE"])()&&!Object(I["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"},propPlaceholder:function(){return"undefined"!==typeof this.placeholder?this.placeholder:this.t("el.select.placeholder")}},components:{ElInput:d.a,ElSelectMenu:x,ElOption:C["a"],ElTag:k.a,ElScrollbar:D.a},directives:{Clickoutside:T.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,required:!1},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},propPlaceholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(I["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleNavigate:function(e){this.isOnComposition||this.navigateOptions(e)},handleComposition:function(e){var t=this,i=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(i)}));else{var n=i[i.length-1]||"";this.isOnComposition=!Object(F["isKorean"])(n)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var i=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");N()(i,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(I["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,i="[object object]"===Object.prototype.toString.call(e).toLowerCase(),n="[object null]"===Object.prototype.toString.call(e).toLowerCase(),s="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),r=this.cachedOptions.length-1;r>=0;r--){var a=this.cachedOptions[r],o=i?Object(I["getValueByPath"])(a.value,this.valueKey)===Object(I["getValueByPath"])(e,this.valueKey):a.value===e;if(o){t=a;break}}if(t)return t;var l=i||n||s?"":String(e),c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var i=[];Array.isArray(this.value)&&this.value.forEach((function(t){i.push(e.getOption(t))})),this.selected=i,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.filterable&&!this.visible&&(this.menuVisibleOnFocus=!0),this.visible=!0),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,i=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],n=e.$refs.tags,s=n?Math.round(n.getBoundingClientRect().height):0,r=e.initialInputHeight||40;i.style.height=0===e.selected.length?r+"px":Math.max(n?s+(s>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var i=this;if(this.multiple){var n=(this.value||[]).slice(),s=this.getValueIndex(n,e.value);s>-1?n.splice(s,1):(this.multipleLimit<=0||n.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],i="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(i){var n=this.valueKey,s=-1;return e.some((function(e,i){return Object(I["getValueByPath"])(e,n)===Object(I["getValueByPath"])(t,n)&&(s=i,!0)})),s}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var i=this.selected.indexOf(t);if(i>-1&&!this.selectDisabled){var n=this.value.slice();n.splice(i,1),this.$emit("input",n),this.emitChange(n),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var i=0;i!==this.options.length;++i){var n=this.options[i];if(this.query){if(!n.disabled&&!n.groupDisabled&&n.visible){this.hoverIndex=i;break}}else if(n.itemSelected){this.hoverIndex=i;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(I["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.propPlaceholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=O()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=O()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(P["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var i={medium:36,small:32,mini:28},n=t.$el.querySelector("input");this.initialInputHeight=n.getBoundingClientRect().height||i[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(P["removeResizeListener"])(this.$el,this.handleResize)}},A=L,V=Object(y["a"])(A,n,s,!1,null,null,null);V.options.__file="packages/select/src/select.vue";var B=V.exports;B.install=function(e){e.component(B.name,B)};t["default"]=B}})},5128:function(e,t,i){"use strict";t.__esModule=!0,t.PopupManager=void 0;var n=i("2b0e"),s=d(n),r=i("7f4d"),a=d(r),o=i("4b26"),l=d(o),c=i("e62d"),u=d(c),h=i("5924");function d(e){return e&&e.__esModule?e:{default:e}}var p=1,f=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+p++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,s.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var i=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var n=Number(i.openDelay);n>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(i)}),n):this.doOpen(i)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,i=e.modal,n=e.zIndex;if(n&&(l.default.zIndex=n),i&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,h.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,h.getStyle)(document.body,"paddingRight"),10)),f=(0,u.default)();var s=document.documentElement.clientHeight0&&(s||"scroll"===r)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+f+"px"),(0,h.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,h.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},5488:function(e,t,i){"use strict";t.__esModule=!0;var n=i("5924");function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(){s(this,e)}return e.prototype.beforeEnter=function(e){(0,n.addClass)(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0},e.prototype.enter=function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"},e.prototype.afterEnter=function(e){(0,n.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow},e.prototype.beforeLeave=function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"},e.prototype.leave=function(e){0!==e.scrollHeight&&((0,n.addClass)(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)},e.prototype.afterLeave=function(e){(0,n.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom},e}();t.default={name:"ElCollapseTransition",functional:!0,render:function(e,t){var i=t.children,n={on:new r};return e("transition",n,i)}}},5924:function(e,t,i){"use strict";t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.hasClass=m,t.addClass=v,t.removeClass=g,t.setStyle=y;var s=i("2b0e"),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}var o=r.default.prototype.$isServer,l=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/,u=o?0:Number(document.documentMode),h=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},d=function(e){return e.replace(l,(function(e,t,i,n){return n?i.toUpperCase():i})).replace(c,"Moz$1")},p=t.on=function(){return!o&&document.addEventListener?function(e,t,i){e&&t&&i&&e.addEventListener(t,i,!1)}:function(e,t,i){e&&t&&i&&e.attachEvent("on"+t,i)}}(),f=t.off=function(){return!o&&document.removeEventListener?function(e,t,i){e&&t&&e.removeEventListener(t,i,!1)}:function(e,t,i){e&&t&&e.detachEvent("on"+t,i)}}();t.once=function(e,t,i){var n=function n(){i&&i.apply(this,arguments),f(e,t,n)};p(e,t,n)};function m(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function v(e,t){if(e){for(var i=e.className,n=(t||"").split(" "),s=0,r=n.length;sn.top&&i.right>n.left&&i.left0?i("li",{staticClass:"number",class:{active:1===e.currentPage,disabled:e.disabled}},[e._v("1")]):e._e(),e.showPrevMore?i("li",{staticClass:"el-icon more btn-quickprev",class:[e.quickprevIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("left")},mouseleave:function(t){e.quickprevIconClass="el-icon-more"}}}):e._e(),e._l(e.pagers,(function(t){return i("li",{key:t,staticClass:"number",class:{active:e.currentPage===t,disabled:e.disabled}},[e._v(e._s(t))])})),e.showNextMore?i("li",{staticClass:"el-icon more btn-quicknext",class:[e.quicknextIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("right")},mouseleave:function(t){e.quicknextIconClass="el-icon-more"}}}):e._e(),e.pageCount>1?i("li",{staticClass:"number",class:{active:e.currentPage===e.pageCount,disabled:e.disabled}},[e._v(e._s(e.pageCount))]):e._e()],2)},s=[];n._withStripped=!0;var r={name:"ElPager",props:{currentPage:Number,pageCount:Number,pagerCount:Number,disabled:Boolean},watch:{showPrevMore:function(e){e||(this.quickprevIconClass="el-icon-more")},showNextMore:function(e){e||(this.quicknextIconClass="el-icon-more")}},methods:{onPagerClick:function(e){var t=e.target;if("UL"!==t.tagName&&!this.disabled){var i=Number(e.target.textContent),n=this.pageCount,s=this.currentPage,r=this.pagerCount-2;-1!==t.className.indexOf("more")&&(-1!==t.className.indexOf("quickprev")?i=s-r:-1!==t.className.indexOf("quicknext")&&(i=s+r)),isNaN(i)||(i<1&&(i=1),i>n&&(i=n)),i!==s&&this.$emit("change",i)}},onMouseenter:function(e){this.disabled||("left"===e?this.quickprevIconClass="el-icon-d-arrow-left":this.quicknextIconClass="el-icon-d-arrow-right")}},computed:{pagers:function(){var e=this.pagerCount,t=(e-1)/2,i=Number(this.currentPage),n=Number(this.pageCount),s=!1,r=!1;n>e&&(i>e-t&&(s=!0),i4&&e<22&&e%2===1},default:7},currentPage:{type:Number,default:1},layout:{default:"prev, pager, next, jumper, ->, total"},pageSizes:{type:Array,default:function(){return[10,20,30,40,50,100]}},popperClass:String,prevText:String,nextText:String,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean},data:function(){return{internalCurrentPage:1,internalPageSize:0,lastEmittedPage:-1,userChangePageSize:!1}},render:function(e){var t=this.layout;if(!t)return null;if(this.hideOnSinglePage&&(!this.internalPageCount||1===this.internalPageCount))return null;var i=e("div",{class:["el-pagination",{"is-background":this.background,"el-pagination--small":this.small}]}),n={prev:e("prev"),jumper:e("jumper"),pager:e("pager",{attrs:{currentPage:this.internalCurrentPage,pageCount:this.internalPageCount,pagerCount:this.pagerCount,disabled:this.disabled},on:{change:this.handleCurrentChange}}),next:e("next"),sizes:e("sizes",{attrs:{pageSizes:this.pageSizes}}),slot:e("slot",[this.$slots.default?this.$slots.default:""]),total:e("total")},s=t.split(",").map((function(e){return e.trim()})),r=e("div",{class:"el-pagination__rightwrapper"}),a=!1;return i.children=i.children||[],r.children=r.children||[],s.forEach((function(e){"->"!==e?a?r.children.push(n[e]):i.children.push(n[e]):a=!0})),a&&i.children.unshift(r),i},components:{Prev:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage<=1},class:"btn-prev",on:{click:this.$parent.prev}},[this.$parent.prevText?e("span",[this.$parent.prevText]):e("i",{class:"el-icon el-icon-arrow-left"})])}},Next:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage===this.$parent.internalPageCount||0===this.$parent.internalPageCount},class:"btn-next",on:{click:this.$parent.next}},[this.$parent.nextText?e("span",[this.$parent.nextText]):e("i",{class:"el-icon el-icon-arrow-right"})])}},Sizes:{mixins:[g.a],props:{pageSizes:Array},watch:{pageSizes:{immediate:!0,handler:function(e,t){Object(b["valueEquals"])(e,t)||Array.isArray(e)&&(this.$parent.internalPageSize=e.indexOf(this.$parent.pageSize)>-1?this.$parent.pageSize:this.pageSizes[0])}}},render:function(e){var t=this;return e("span",{class:"el-pagination__sizes"},[e("el-select",{attrs:{value:this.$parent.internalPageSize,popperClass:this.$parent.popperClass||"",size:"mini",disabled:this.$parent.disabled},on:{input:this.handleChange}},[this.pageSizes.map((function(i){return e("el-option",{attrs:{value:i,label:i+t.t("el.pagination.pagesize")}})}))])])},components:{ElSelect:h.a,ElOption:p.a},methods:{handleChange:function(e){e!==this.$parent.internalPageSize&&(this.$parent.internalPageSize=e=parseInt(e,10),this.$parent.userChangePageSize=!0,this.$parent.$emit("update:pageSize",e),this.$parent.$emit("size-change",e))}}},Jumper:{mixins:[g.a],components:{ElInput:m.a},data:function(){return{userInput:null}},watch:{"$parent.internalCurrentPage":function(){this.userInput=null}},methods:{handleKeyup:function(e){var t=e.keyCode,i=e.target;13===t&&this.handleChange(i.value)},handleInput:function(e){this.userInput=e},handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.userInput=null}},render:function(e){return e("span",{class:"el-pagination__jump"},[this.t("el.pagination.goto"),e("el-input",{class:"el-pagination__editor is-in-pagination",attrs:{min:1,max:this.$parent.internalPageCount,value:null!==this.userInput?this.userInput:this.$parent.internalCurrentPage,type:"number",disabled:this.$parent.disabled},nativeOn:{keyup:this.handleKeyup},on:{input:this.handleInput,change:this.handleChange}}),this.t("el.pagination.pageClassifier")])}},Total:{mixins:[g.a],render:function(e){return"number"===typeof this.$parent.total?e("span",{class:"el-pagination__total"},[this.t("el.pagination.total",{total:this.$parent.total})]):""}},Pager:c},methods:{handleCurrentChange:function(e){this.internalCurrentPage=this.getValidCurrentPage(e),this.userChangePageSize=!0,this.emitChange()},prev:function(){if(!this.disabled){var e=this.internalCurrentPage-1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("prev-click",this.internalCurrentPage),this.emitChange()}},next:function(){if(!this.disabled){var e=this.internalCurrentPage+1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("next-click",this.internalCurrentPage),this.emitChange()}},getValidCurrentPage:function(e){e=parseInt(e,10);var t="number"===typeof this.internalPageCount,i=void 0;return t?e<1?i=1:e>this.internalPageCount&&(i=this.internalPageCount):(isNaN(e)||e<1)&&(i=1),(void 0===i&&isNaN(e)||0===i)&&(i=1),void 0===i?e:i},emitChange:function(){var e=this;this.$nextTick((function(){(e.internalCurrentPage!==e.lastEmittedPage||e.userChangePageSize)&&(e.$emit("current-change",e.internalCurrentPage),e.lastEmittedPage=e.internalCurrentPage,e.userChangePageSize=!1)}))}},computed:{internalPageCount:function(){return"number"===typeof this.total?Math.max(1,Math.ceil(this.total/this.internalPageSize)):"number"===typeof this.pageCount?Math.max(1,this.pageCount):null}},watch:{currentPage:{immediate:!0,handler:function(e){this.internalCurrentPage=this.getValidCurrentPage(e)}},pageSize:{immediate:!0,handler:function(e){this.internalPageSize=isNaN(e)?10:e}},internalCurrentPage:{immediate:!0,handler:function(e){this.$emit("update:currentPage",e),this.lastEmittedPage=-1}},internalPageCount:function(e){var t=this.internalCurrentPage;e>0&&0===t?this.internalCurrentPage=1:t>e&&(this.internalCurrentPage=0===e?1:e,this.userChangePageSize&&this.emitChange()),this.userChangePageSize=!1}},install:function(e){e.component(y.name,y)}},_=y,x=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[i("div",{key:e.key,ref:"dialog",class:["el-dialog",{"is-fullscreen":e.fullscreen,"el-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"}},[i("div",{staticClass:"el-dialog__header"},[e._t("title",[i("span",{staticClass:"el-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?i("button",{staticClass:"el-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[i("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?i("div",{staticClass:"el-dialog__body"},[e._t("default")],2):e._e(),e.$slots.footer?i("div",{staticClass:"el-dialog__footer"},[e._t("footer")],2):e._e()])])])},C=[];x._withStripped=!0;var w=i(11),k=i.n(w),S=i(9),D=i.n(S),$=i(3),O=i.n($),E={name:"ElDialog",mixins:[k.a,O.a,D.a],props:{title:{type:String,default:""},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{closed:!1,key:0}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el)):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("ElSelectDropdown","updatePopper"),this.broadcast("ElDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},T=E,P=o(T,x,C,!1,null,null,null);P.options.__file="packages/dialog/src/component.vue";var M=P.exports;M.install=function(e){e.component(M.name,M)};var N=M,I=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.close,expression:"close"}],staticClass:"el-autocomplete",attrs:{"aria-haspopup":"listbox",role:"combobox","aria-expanded":e.suggestionVisible,"aria-owns":e.id}},[i("el-input",e._b({ref:"input",on:{input:e.handleInput,change:e.handleChange,focus:e.handleFocus,blur:e.handleBlur,clear:e.handleClear},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex-1)},function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex+1)},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleKeyEnter(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab")?null:e.close(t)}]}},"el-input",[e.$props,e.$attrs],!1),[e.$slots.prepend?i("template",{slot:"prepend"},[e._t("prepend")],2):e._e(),e.$slots.append?i("template",{slot:"append"},[e._t("append")],2):e._e(),e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),e.$slots.suffix?i("template",{slot:"suffix"},[e._t("suffix")],2):e._e()],2),i("el-autocomplete-suggestions",{ref:"suggestions",class:[e.popperClass?e.popperClass:""],attrs:{"visible-arrow":"","popper-options":e.popperOptions,"append-to-body":e.popperAppendToBody,placement:e.placement,id:e.id}},e._l(e.suggestions,(function(t,n){return i("li",{key:n,class:{highlighted:e.highlightedIndex===n},attrs:{id:e.id+"-item-"+n,role:"option","aria-selected":e.highlightedIndex===n},on:{click:function(i){e.select(t)}}},[e._t("default",[e._v("\n "+e._s(t[e.valueKey])+"\n ")],{item:t})],2)})),0)],1)},j=[];I._withStripped=!0;var F=i(17),L=i.n(F),A=i(10),V=i.n(A),B=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-autocomplete-suggestion el-popper",class:{"is-loading":!e.parent.hideLoading&&e.parent.loading},style:{width:e.dropdownWidth},attrs:{role:"region"}},[i("el-scrollbar",{attrs:{tag:"ul","wrap-class":"el-autocomplete-suggestion__wrap","view-class":"el-autocomplete-suggestion__list"}},[!e.parent.hideLoading&&e.parent.loading?i("li",[i("i",{staticClass:"el-icon-loading"})]):e._t("default")],2)],1)])},z=[];B._withStripped=!0;var R=i(5),H=i.n(R),W=i(18),q=i.n(W),Y={components:{ElScrollbar:q.a},mixins:[H.a,O.a],componentName:"ElAutocompleteSuggestions",data:function(){return{parent:this.$parent,dropdownWidth:""}},props:{options:{default:function(){return{gpuAcceleration:!1}}},id:String},methods:{select:function(e){this.dispatch("ElAutocomplete","item-click",e)}},updated:function(){var e=this;this.$nextTick((function(t){e.popperJS&&e.updatePopper()}))},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$refs.input.$refs.input||this.$parent.$refs.input.$refs.textarea,this.referenceList=this.$el.querySelector(".el-autocomplete-suggestion__list"),this.referenceList.setAttribute("role","listbox"),this.referenceList.setAttribute("id",this.id)},created:function(){var e=this;this.$on("visible",(function(t,i){e.dropdownWidth=i+"px",e.showPopper=t}))}},K=Y,U=o(K,B,z,!1,null,null,null);U.options.__file="packages/autocomplete/src/autocomplete-suggestions.vue";var G=U.exports,X=i(23),Z=i.n(X),Q={name:"ElAutocomplete",mixins:[O.a,Z()("input"),D.a],inheritAttrs:!1,componentName:"ElAutocomplete",components:{ElInput:m.a,ElAutocompleteSuggestions:G},directives:{Clickoutside:V.a},props:{valueKey:{type:String,default:"value"},popperClass:String,popperOptions:Object,placeholder:String,clearable:{type:Boolean,default:!1},disabled:Boolean,name:String,size:String,value:String,maxlength:Number,minlength:Number,autofocus:Boolean,fetchSuggestions:Function,triggerOnFocus:{type:Boolean,default:!0},customItem:String,selectWhenUnmatched:{type:Boolean,default:!1},prefixIcon:String,suffixIcon:String,label:String,debounce:{type:Number,default:300},placement:{type:String,default:"bottom-start"},hideLoading:Boolean,popperAppendToBody:{type:Boolean,default:!0},highlightFirstItem:{type:Boolean,default:!1}},data:function(){return{activated:!1,suggestions:[],loading:!1,highlightedIndex:-1,suggestionDisabled:!1}},computed:{suggestionVisible:function(){var e=this.suggestions,t=Array.isArray(e)&&e.length>0;return(t||this.loading)&&this.activated},id:function(){return"el-autocomplete-"+Object(b["generateId"])()}},watch:{suggestionVisible:function(e){var t=this.getInput();t&&this.broadcast("ElAutocompleteSuggestions","visible",[e,t.offsetWidth])}},methods:{getMigratingConfig:function(){return{props:{"custom-item":"custom-item is removed, use scoped slot instead.",props:"props is removed, use value-key instead."}}},getData:function(e){var t=this;this.suggestionDisabled||(this.loading=!0,this.fetchSuggestions(e,(function(e){t.loading=!1,t.suggestionDisabled||(Array.isArray(e)?(t.suggestions=e,t.highlightedIndex=t.highlightFirstItem?0:-1):console.error("[Element Error][Autocomplete]autocomplete suggestions must be an array"))})))},handleInput:function(e){if(this.$emit("input",e),this.suggestionDisabled=!1,!this.triggerOnFocus&&!e)return this.suggestionDisabled=!0,void(this.suggestions=[]);this.debouncedGetData(e)},handleChange:function(e){this.$emit("change",e)},handleFocus:function(e){this.activated=!0,this.$emit("focus",e),this.triggerOnFocus&&this.debouncedGetData(this.value)},handleBlur:function(e){this.$emit("blur",e)},handleClear:function(){this.activated=!1,this.$emit("clear")},close:function(e){this.activated=!1},handleKeyEnter:function(e){var t=this;this.suggestionVisible&&this.highlightedIndex>=0&&this.highlightedIndex=this.suggestions.length&&(e=this.suggestions.length-1);var t=this.$refs.suggestions.$el.querySelector(".el-autocomplete-suggestion__wrap"),i=t.querySelectorAll(".el-autocomplete-suggestion__list li"),n=i[e],s=t.scrollTop,r=n.offsetTop;r+n.scrollHeight>s+t.clientHeight&&(t.scrollTop+=n.scrollHeight),r=0&&this.resetTabindex(this.triggerElm),clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!1}),"click"===this.trigger?0:this.hideTimeout))},handleClick:function(){this.disabled||(this.visible?this.hide():this.show())},handleTriggerKeyDown:function(e){var t=e.keyCode;[38,40].indexOf(t)>-1?(this.removeTabindex(),this.resetTabindex(this.menuItems[0]),this.menuItems[0].focus(),e.preventDefault(),e.stopPropagation()):13===t?this.handleClick():[9,27].indexOf(t)>-1&&this.hide()},handleItemKeyDown:function(e){var t=e.keyCode,i=e.target,n=this.menuItemsArray.indexOf(i),s=this.menuItemsArray.length-1,r=void 0;[38,40].indexOf(t)>-1?(r=38===t?0!==n?n-1:0:n-1&&(this.hide(),this.triggerElmFocus())},resetTabindex:function(e){this.removeTabindex(),e.setAttribute("tabindex","0")},removeTabindex:function(){this.triggerElm.setAttribute("tabindex","-1"),this.menuItemsArray.forEach((function(e){e.setAttribute("tabindex","-1")}))},initAria:function(){this.dropdownElm.setAttribute("id",this.listId),this.triggerElm.setAttribute("aria-haspopup","list"),this.triggerElm.setAttribute("aria-controls",this.listId),this.splitButton||(this.triggerElm.setAttribute("role","button"),this.triggerElm.setAttribute("tabindex",this.tabindex),this.triggerElm.setAttribute("class",(this.triggerElm.getAttribute("class")||"")+" el-dropdown-selfdefine"))},initEvent:function(){var e=this,t=this.trigger,i=this.show,n=this.hide,s=this.handleClick,r=this.splitButton,a=this.handleTriggerKeyDown,o=this.handleItemKeyDown;this.triggerElm=r?this.$refs.trigger.$el:this.$slots.default[0].elm;var l=this.dropdownElm;this.triggerElm.addEventListener("keydown",a),l.addEventListener("keydown",o,!0),r||(this.triggerElm.addEventListener("focus",(function(){e.focusing=!0})),this.triggerElm.addEventListener("blur",(function(){e.focusing=!1})),this.triggerElm.addEventListener("click",(function(){e.focusing=!1}))),"hover"===t?(this.triggerElm.addEventListener("mouseenter",i),this.triggerElm.addEventListener("mouseleave",n),l.addEventListener("mouseenter",i),l.addEventListener("mouseleave",n)):"click"===t&&this.triggerElm.addEventListener("click",s)},handleMenuItemClick:function(e,t){this.hideOnClick&&(this.visible=!1),this.$emit("command",e,t)},triggerElmFocus:function(){this.triggerElm.focus&&this.triggerElm.focus()},initDomOperation:function(){this.dropdownElm=this.popperElm,this.menuItems=this.dropdownElm.querySelectorAll("[tabindex='-1']"),this.menuItemsArray=[].slice.call(this.menuItems),this.initEvent(),this.initAria()}},render:function(e){var t=this,i=this.hide,n=this.splitButton,s=this.type,r=this.dropdownSize,a=this.disabled,o=function(e){t.$emit("click",e),i()},l=null;if(n)l=e("el-button-group",[e("el-button",{attrs:{type:s,size:r,disabled:a},nativeOn:{click:o}},[this.$slots.default]),e("el-button",{ref:"trigger",attrs:{type:s,size:r,disabled:a},class:"el-dropdown__caret-button"},[e("i",{class:"el-dropdown__icon el-icon-arrow-down"})])]);else{l=this.$slots.default;var c=l[0].data||{},u=c.attrs,h=void 0===u?{}:u;a&&!h.disabled&&(h.disabled=!0,c.attrs=h)}var d=a?null:this.$slots.dropdown;return e("div",{class:"el-dropdown",directives:[{name:"clickoutside",value:i}],attrs:{"aria-disabled":a}},[l,d])}},ue=ce,he=o(ue,ie,ne,!1,null,null,null);he.options.__file="packages/dropdown/src/dropdown.vue";var de=he.exports;de.install=function(e){e.component(de.name,de)};var pe=de,fe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("ul",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-dropdown-menu el-popper",class:[e.size&&"el-dropdown-menu--"+e.size]},[e._t("default")],2)])},me=[];fe._withStripped=!0;var ve={name:"ElDropdownMenu",componentName:"ElDropdownMenu",mixins:[H.a],props:{visibleArrow:{type:Boolean,default:!0},arrowOffset:{type:Number,default:0}},data:function(){return{size:this.dropdown.dropdownSize}},inject:["dropdown"],created:function(){var e=this;this.$on("updatePopper",(function(){e.showPopper&&e.updatePopper()})),this.$on("visible",(function(t){e.showPopper=t}))},mounted:function(){this.dropdown.popperElm=this.popperElm=this.$el,this.referenceElm=this.dropdown.$el,this.dropdown.initDomOperation()},watch:{"dropdown.placement":{immediate:!0,handler:function(e){this.currentPlacement=e}}}},ge=ve,be=o(ge,fe,me,!1,null,null,null);be.options.__file="packages/dropdown/src/dropdown-menu.vue";var ye=be.exports;ye.install=function(e){e.component(ye.name,ye)};var _e=ye,xe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-dropdown-menu__item",class:{"is-disabled":e.disabled,"el-dropdown-menu__item--divided":e.divided},attrs:{"aria-disabled":e.disabled,tabindex:e.disabled?null:-1},on:{click:e.handleClick}},[e.icon?i("i",{class:e.icon}):e._e(),e._t("default")],2)},Ce=[];xe._withStripped=!0;var we={name:"ElDropdownItem",mixins:[O.a],props:{command:{},disabled:Boolean,divided:Boolean,icon:String},methods:{handleClick:function(e){this.dispatch("ElDropdown","menu-item-click",[this.command,this])}}},ke=we,Se=o(ke,xe,Ce,!1,null,null,null);Se.options.__file="packages/dropdown/src/dropdown-item.vue";var De=Se.exports;De.install=function(e){e.component(De.name,De)};var $e=De,Oe=Oe||{};Oe.Utils=Oe.Utils||{},Oe.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var i=e.childNodes[t];if(Oe.Utils.attemptFocus(i)||Oe.Utils.focusLastDescendant(i))return!0}return!1},Oe.Utils.attemptFocus=function(e){if(!Oe.Utils.isFocusable(e))return!1;Oe.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return Oe.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},Oe.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Oe.Utils.triggerEvent=function(e,t){var i=void 0;i=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var n=document.createEvent(i),s=arguments.length,r=Array(s>2?s-2:0),a=2;a=0;t--)e.splice(t,0,e[t]);e=e.join("")}return/^[0-9a-fA-F]{6}$/.test(e)?{red:parseInt(e.slice(0,2),16),green:parseInt(e.slice(2,4),16),blue:parseInt(e.slice(4,6),16)}:{red:255,green:255,blue:255}},mixColor:function(e,t){var i=this.getColorChannels(e),n=i.red,s=i.green,r=i.blue;return t>0?(n*=1-t,s*=1-t,r*=1-t):(n+=(255-n)*t,s+=(255-s)*t,r+=(255-r)*t),"rgb("+Math.round(n)+", "+Math.round(s)+", "+Math.round(r)+")"},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},openMenu:function(e,t){var i=this.openedMenus;-1===i.indexOf(e)&&(this.uniqueOpened&&(this.openedMenus=i.filter((function(e){return-1!==t.indexOf(e)}))),this.openedMenus.push(e))},closeMenu:function(e){var t=this.openedMenus.indexOf(e);-1!==t&&this.openedMenus.splice(t,1)},handleSubmenuClick:function(e){var t=e.index,i=e.indexPath,n=-1!==this.openedMenus.indexOf(t);n?(this.closeMenu(t),this.$emit("close",t,i)):(this.openMenu(t,i),this.$emit("open",t,i))},handleItemClick:function(e){var t=this,i=e.index,n=e.indexPath,s=this.activeIndex,r=null!==e.index;r&&(this.activeIndex=e.index),this.$emit("select",i,n,e),("horizontal"===this.mode||this.collapse)&&(this.openedMenus=[]),this.router&&r&&this.routeToItem(e,(function(e){if(t.activeIndex=s,e){if("NavigationDuplicated"===e.name)return;console.error(e)}}))},initOpenedMenu:function(){var e=this,t=this.activeIndex,i=this.items[t];if(i&&"horizontal"!==this.mode&&!this.collapse){var n=i.indexPath;n.forEach((function(t){var i=e.submenus[t];i&&e.openMenu(t,i.indexPath)}))}},routeToItem:function(e,t){var i=e.route||e.index;try{this.$router.push(i,(function(){}),t)}catch(n){console.error(n)}},open:function(e){var t=this,i=this.submenus[e.toString()].indexPath;i.forEach((function(e){return t.openMenu(e,i)}))},close:function(e){this.closeMenu(e)}},mounted:function(){this.initOpenedMenu(),this.$on("item-click",this.handleItemClick),this.$on("submenu-click",this.handleSubmenuClick),"horizontal"===this.mode&&new Le(this.$el),this.$watch("items",this.updateActiveIndex)}},Be=Ve,ze=o(Be,je,Fe,!1,null,null,null);ze.options.__file="packages/menu/src/menu.vue";var Re=ze.exports;Re.install=function(e){e.component(Re.name,Re)};var He,We,qe=Re,Ye=i(21),Ke=i.n(Ye),Ue={inject:["rootMenu"],computed:{indexPath:function(){var e=[this.index],t=this.$parent;while("ElMenu"!==t.$options.componentName)t.index&&e.unshift(t.index),t=t.$parent;return e},parentMenu:function(){var e=this.$parent;while(e&&-1===["ElMenu","ElSubmenu"].indexOf(e.$options.componentName))e=e.$parent;return e},paddingStyle:function(){if("vertical"!==this.rootMenu.mode)return{};var e=20,t=this.$parent;if(this.rootMenu.collapse)e=20;else while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return{paddingLeft:e+"px"}}}},Ge={props:{transformOrigin:{type:[Boolean,String],default:!1},offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},data:H.a.data,methods:H.a.methods,beforeDestroy:H.a.beforeDestroy,deactivated:H.a.deactivated},Xe={name:"ElSubmenu",componentName:"ElSubmenu",mixins:[Ue,O.a,Ge],components:{ElCollapseTransition:Ke.a},props:{index:{type:String,required:!0},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0}},data:function(){return{popperJS:null,timeout:null,items:{},submenus:{},mouseInChild:!1}},watch:{opened:function(e){var t=this;this.isMenuPopup&&this.$nextTick((function(e){t.updatePopper()}))}},computed:{appendToBody:function(){return void 0===this.popperAppendToBody?this.isFirstLevel:this.popperAppendToBody},menuTransitionName:function(){return this.rootMenu.collapse?"el-zoom-in-left":"el-zoom-in-top"},opened:function(){return this.rootMenu.openedMenus.indexOf(this.index)>-1},active:function(){var e=!1,t=this.submenus,i=this.items;return Object.keys(i).forEach((function(t){i[t].active&&(e=!0)})),Object.keys(t).forEach((function(i){t[i].active&&(e=!0)})),e},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},isMenuPopup:function(){return this.rootMenu.isMenuPopup},titleStyle:function(){return"horizontal"!==this.mode?{color:this.textColor}:{borderBottomColor:this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent",color:this.active?this.activeTextColor:this.textColor}},isFirstLevel:function(){var e=!0,t=this.$parent;while(t&&t!==this.rootMenu){if(["ElSubmenu","ElMenuItemGroup"].indexOf(t.$options.componentName)>-1){e=!1;break}t=t.$parent}return e}},methods:{handleCollapseToggle:function(e){e?this.initPopper():this.doDestroy()},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},handleClick:function(){var e=this.rootMenu,t=this.disabled;"hover"===e.menuTrigger&&"horizontal"===e.mode||e.collapse&&"vertical"===e.mode||t||this.dispatch("ElMenu","submenu-click",this)},handleMouseenter:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.showTimeout;if("ActiveXObject"in window||"focus"!==e.type||e.relatedTarget){var n=this.rootMenu,s=this.disabled;"click"===n.menuTrigger&&"horizontal"===n.mode||!n.collapse&&"vertical"===n.mode||s||(this.dispatch("ElSubmenu","mouse-enter-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){t.rootMenu.openMenu(t.index,t.indexPath)}),i),this.appendToBody&&this.$parent.$el.dispatchEvent(new MouseEvent("mouseenter")))}},handleMouseleave:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.rootMenu;"click"===i.menuTrigger&&"horizontal"===i.mode||!i.collapse&&"vertical"===i.mode||(this.dispatch("ElSubmenu","mouse-leave-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){!e.mouseInChild&&e.rootMenu.closeMenu(e.index)}),this.hideTimeout),this.appendToBody&&t&&"ElSubmenu"===this.$parent.$options.name&&this.$parent.handleMouseleave(!0))},handleTitleMouseenter:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.hoverBackground)}},handleTitleMouseleave:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.backgroundColor||"")}},updatePlacement:function(){this.currentPlacement="horizontal"===this.mode&&this.isFirstLevel?"bottom-start":"right-start"},initPopper:function(){this.referenceElm=this.$el,this.popperElm=this.$refs.menu,this.updatePlacement()}},created:function(){var e=this;this.$on("toggle-collapse",this.handleCollapseToggle),this.$on("mouse-enter-child",(function(){e.mouseInChild=!0,clearTimeout(e.timeout)})),this.$on("mouse-leave-child",(function(){e.mouseInChild=!1,clearTimeout(e.timeout)}))},mounted:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this),this.initPopper()},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)},render:function(e){var t=this,i=this.active,n=this.opened,s=this.paddingStyle,r=this.titleStyle,a=this.backgroundColor,o=this.rootMenu,l=this.currentPlacement,c=this.menuTransitionName,u=this.mode,h=this.disabled,d=this.popperClass,p=this.$slots,f=this.isFirstLevel,m=e("transition",{attrs:{name:c}},[e("div",{ref:"menu",directives:[{name:"show",value:n}],class:["el-menu--"+u,d],on:{mouseenter:function(e){return t.handleMouseenter(e,100)},mouseleave:function(){return t.handleMouseleave(!0)},focus:function(e){return t.handleMouseenter(e,100)}}},[e("ul",{attrs:{role:"menu"},class:["el-menu el-menu--popup","el-menu--popup-"+l],style:{backgroundColor:o.backgroundColor||""}},[p.default])])]),v=e("el-collapse-transition",[e("ul",{attrs:{role:"menu"},class:"el-menu el-menu--inline",directives:[{name:"show",value:n}],style:{backgroundColor:o.backgroundColor||""}},[p.default])]),g="horizontal"===o.mode&&f||"vertical"===o.mode&&!o.collapse?"el-icon-arrow-down":"el-icon-arrow-right";return e("li",{class:{"el-submenu":!0,"is-active":i,"is-opened":n,"is-disabled":h},attrs:{role:"menuitem","aria-haspopup":"true","aria-expanded":n},on:{mouseenter:this.handleMouseenter,mouseleave:function(){return t.handleMouseleave(!1)},focus:this.handleMouseenter}},[e("div",{class:"el-submenu__title",ref:"submenu-title",on:{click:this.handleClick,mouseenter:this.handleTitleMouseenter,mouseleave:this.handleTitleMouseleave},style:[s,r,{backgroundColor:a}]},[p.title,e("i",{class:["el-submenu__icon-arrow",g]})]),this.isMenuPopup?m:v])}},Ze=Xe,Qe=o(Ze,He,We,!1,null,null,null);Qe.options.__file="packages/menu/src/submenu.vue";var Je=Qe.exports;Je.install=function(e){e.component(Je.name,Je)};var et=Je,tt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-menu-item",class:{"is-active":e.active,"is-disabled":e.disabled},style:[e.paddingStyle,e.itemStyle,{backgroundColor:e.backgroundColor}],attrs:{role:"menuitem",tabindex:"-1"},on:{click:e.handleClick,mouseenter:e.onMouseEnter,focus:e.onMouseEnter,blur:e.onMouseLeave,mouseleave:e.onMouseLeave}},["ElMenu"===e.parentMenu.$options.componentName&&e.rootMenu.collapse&&e.$slots.title?i("el-tooltip",{attrs:{effect:"dark",placement:"right"}},[i("div",{attrs:{slot:"content"},slot:"content"},[e._t("title")],2),i("div",{staticStyle:{position:"absolute",left:"0",top:"0",height:"100%",width:"100%",display:"inline-block","box-sizing":"border-box",padding:"0 20px"}},[e._t("default")],2)]):[e._t("default"),e._t("title")]],2)},it=[];tt._withStripped=!0;var nt=i(26),st=i.n(nt),rt={name:"ElMenuItem",componentName:"ElMenuItem",mixins:[Ue,O.a],components:{ElTooltip:st.a},props:{index:{default:null,validator:function(e){return"string"===typeof e||null===e}},route:[String,Object],disabled:Boolean},computed:{active:function(){return this.index===this.rootMenu.activeIndex},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},itemStyle:function(){var e={color:this.active?this.activeTextColor:this.textColor};return"horizontal"!==this.mode||this.isNested||(e.borderBottomColor=this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent"),e},isNested:function(){return this.parentMenu!==this.rootMenu}},methods:{onMouseEnter:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.hoverBackground)},onMouseLeave:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.backgroundColor)},handleClick:function(){this.disabled||(this.dispatch("ElMenu","item-click",this),this.$emit("click",this))}},mounted:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},at=rt,ot=o(at,tt,it,!1,null,null,null);ot.options.__file="packages/menu/src/menu-item.vue";var lt=ot.exports;lt.install=function(e){e.component(lt.name,lt)};var ct=lt,ut=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-menu-item-group"},[i("div",{staticClass:"el-menu-item-group__title",style:{paddingLeft:e.levelPadding+"px"}},[e.$slots.title?e._t("title"):[e._v(e._s(e.title))]],2),i("ul",[e._t("default")],2)])},ht=[];ut._withStripped=!0;var dt={name:"ElMenuItemGroup",componentName:"ElMenuItemGroup",inject:["rootMenu"],props:{title:{type:String}},data:function(){return{paddingLeft:20}},computed:{levelPadding:function(){var e=20,t=this.$parent;if(this.rootMenu.collapse)return 20;while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return e}}},pt=dt,ft=o(pt,ut,ht,!1,null,null,null);ft.options.__file="packages/menu/src/menu-item-group.vue";var mt=ft.exports;mt.install=function(e){e.component(mt.name,mt)};var vt=mt,gt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?i("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?i("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?i("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?i("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?i("span",{staticClass:"el-input__suffix"},[i("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?i("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?i("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?i("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?i("span",{staticClass:"el-input__count"},[i("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?i("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?i("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:i("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?i("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},bt=[];gt._withStripped=!0;var yt=void 0,_t="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",xt=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function Ct(e){var t=window.getComputedStyle(e),i=t.getPropertyValue("box-sizing"),n=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),s=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),r=xt.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:r,paddingSize:n,borderSize:s,boxSizing:i}}function wt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;yt||(yt=document.createElement("textarea"),document.body.appendChild(yt));var n=Ct(e),s=n.paddingSize,r=n.borderSize,a=n.boxSizing,o=n.contextStyle;yt.setAttribute("style",o+";"+_t),yt.value=e.value||e.placeholder||"";var l=yt.scrollHeight,c={};"border-box"===a?l+=r:"content-box"===a&&(l-=s),yt.value="";var u=yt.scrollHeight-s;if(null!==t){var h=u*t;"border-box"===a&&(h=h+s+r),l=Math.max(h,l),c.minHeight=h+"px"}if(null!==i){var d=u*i;"border-box"===a&&(d=d+s+r),l=Math.min(d,l)}return c.height=l+"px",yt.parentNode&&yt.parentNode.removeChild(yt),yt=null,c}var kt=i(7),St=i.n(kt),Dt=i(19),$t={name:"ElInput",componentName:"ElInput",mixins:[O.a,D.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return St()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var i=e.minRows,n=e.maxRows;this.textareaCalcStyle=wt(this.$refs.textarea,i,n)}else this.textareaCalcStyle={minHeight:wt(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(e){this.$emit("compositionstart",e),this.isComposing=!0},handleCompositionUpdate:function(e){this.$emit("compositionupdate",e);var t=e.target.value,i=t[t.length-1]||"";this.isComposing=!Object(Dt["isKorean"])(i)},handleCompositionEnd:function(e){this.$emit("compositionend",e),this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var i=null,n=0;n=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var i=this.getPrecision(this.step),n=Math.pow(10,i);t=Math.round(t/this.step)*n*this.step/n}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,i=this.getPrecision,n=this.precision,s=i(t);return void 0!==n?(s>n&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),n):Math.max(i(e),s)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),i=Math.pow(10,t);e=Math.round(e/this.step)*i*this.step/i}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),i=t.indexOf("."),n=0;return-1!==i&&(n=t.length-i-1),n},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e+i*t)/i)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e-i*t)/i)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},Ft=jt,Lt=o(Ft,Mt,Nt,!1,null,null,null);Lt.options.__file="packages/input-number/src/input-number.vue";var At=Lt.exports;At.install=function(e){e.component(At.name,At)};var Vt=At,Bt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[i("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[i("span",{staticClass:"el-radio__inner"}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1",autocomplete:"off"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),i("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},zt=[];Bt._withStripped=!0;var Rt={name:"ElRadio",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},Ht=Rt,Wt=o(Ht,Bt,zt,!1,null,null,null);Wt.options.__file="packages/radio/src/radio.vue";var qt=Wt.exports;qt.install=function(e){e.component(qt.name,qt)};var Yt=qt,Kt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e._elTag,{tag:"component",staticClass:"el-radio-group",attrs:{role:"radiogroup"},on:{keydown:e.handleKeydown}},[e._t("default")],2)},Ut=[];Kt._withStripped=!0;var Gt=Object.freeze({LEFT:37,UP:38,RIGHT:39,DOWN:40}),Xt={name:"ElRadioGroup",componentName:"ElRadioGroup",inject:{elFormItem:{default:""}},mixins:[O.a],props:{value:{},size:String,fill:String,textColor:String,disabled:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},_elTag:function(){var e=(this.$vnode.data||{}).tag;return e&&"component"!==e||(e="div"),e},radioGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},created:function(){var e=this;this.$on("handleChange",(function(t){e.$emit("change",t)}))},mounted:function(){var e=this.$el.querySelectorAll("[type=radio]"),t=this.$el.querySelectorAll("[role=radio]")[0];![].some.call(e,(function(e){return e.checked}))&&t&&(t.tabIndex=0)},methods:{handleKeydown:function(e){var t=e.target,i="INPUT"===t.nodeName?"[type=radio]":"[role=radio]",n=this.$el.querySelectorAll(i),s=n.length,r=[].indexOf.call(n,t),a=this.$el.querySelectorAll("[role=radio]");switch(e.keyCode){case Gt.LEFT:case Gt.UP:e.stopPropagation(),e.preventDefault(),0===r?(a[s-1].click(),a[s-1].focus()):(a[r-1].click(),a[r-1].focus());break;case Gt.RIGHT:case Gt.DOWN:r===s-1?(e.stopPropagation(),e.preventDefault(),a[0].click(),a[0].focus()):(a[r+1].click(),a[r+1].focus());break;default:break}}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[this.value])}}},Zt=Xt,Qt=o(Zt,Kt,Ut,!1,null,null,null);Qt.options.__file="packages/radio/src/radio-group.vue";var Jt=Qt.exports;Jt.install=function(e){e.component(Jt.name,Jt)};var ei=Jt,ti=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-radio-button",class:[e.size?"el-radio-button--"+e.size:"",{"is-active":e.value===e.label},{"is-disabled":e.isDisabled},{"is-focus":e.focus}],attrs:{role:"radio","aria-checked":e.value===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.value=e.isDisabled?e.value:e.label}}},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"el-radio-button__orig-radio",attrs:{type:"radio",name:e.name,disabled:e.isDisabled,tabindex:"-1",autocomplete:"off"},domProps:{value:e.label,checked:e._q(e.value,e.label)},on:{change:[function(t){e.value=e.label},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),i("span",{staticClass:"el-radio-button__inner",style:e.value===e.label?e.activeStyle:null,on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},ii=[];ti._withStripped=!0;var ni={name:"ElRadioButton",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},props:{label:{},disabled:Boolean,name:String},data:function(){return{focus:!1}},computed:{value:{get:function(){return this._radioGroup.value},set:function(e){this._radioGroup.$emit("input",e)}},_radioGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return e;e=e.$parent}return!1},activeStyle:function(){return{backgroundColor:this._radioGroup.fill||"",borderColor:this._radioGroup.fill||"",boxShadow:this._radioGroup.fill?"-1px 0 0 0 "+this._radioGroup.fill:"",color:this._radioGroup.textColor||""}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._radioGroup.radioGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isDisabled:function(){return this.disabled||this._radioGroup.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this._radioGroup&&this.value!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.dispatch("ElRadioGroup","handleChange",e.value)}))}}},si=ni,ri=o(si,ti,ii,!1,null,null,null);ri.options.__file="packages/radio/src/radio-button.vue";var ai=ri.exports;ai.install=function(e){e.component(ai.name,ai)};var oi=ai,li=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[i("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[i("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},ci=[];li._withStripped=!0;var ui={name:"ElCheckbox",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},hi=ui,di=o(hi,li,ci,!1,null,null,null);di.options.__file="packages/checkbox/src/checkbox.vue";var pi=di.exports;pi.install=function(e){e.component(pi.name,pi)};var fi=pi,mi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox-button",class:[e.size?"el-checkbox-button--"+e.size:"",{"is-disabled":e.isDisabled},{"is-checked":e.isChecked},{"is-focus":e.focus}],attrs:{role:"checkbox","aria-checked":e.isChecked,"aria-disabled":e.isDisabled}},[e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox-button__inner",style:e.isChecked?e.activeStyle:null},[e._t("default",[e._v(e._s(e.label))])],2):e._e()])},vi=[];mi._withStripped=!0;var gi={name:"ElCheckboxButton",mixins:[O.a],inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},props:{value:{},label:{},disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number]},computed:{model:{get:function(){return this._checkboxGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this._checkboxGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):void 0!==this.value?this.$emit("input",e):this.selfModel=e}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},_checkboxGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return e;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},activeStyle:function(){return{backgroundColor:this._checkboxGroup.fill||"",borderColor:this._checkboxGroup.fill||"",color:this._checkboxGroup.textColor||"","box-shadow":"-1px 0 0 0 "+this._checkboxGroup.fill}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._checkboxGroup.checkboxGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this._checkboxGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled}},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t._checkboxGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()}},bi=gi,yi=o(bi,mi,vi,!1,null,null,null);yi.options.__file="packages/checkbox/src/checkbox-button.vue";var _i=yi.exports;_i.install=function(e){e.component(_i.name,_i)};var xi=_i,Ci=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},wi=[];Ci._withStripped=!0;var ki={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[O.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},Si=ki,Di=o(Si,Ci,wi,!1,null,null,null);Di.options.__file="packages/checkbox/src/checkbox-group.vue";var $i=Di.exports;$i.install=function(e){e.component($i.name,$i)};var Oi=$i,Ei=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-switch",class:{"is-disabled":e.switchDisabled,"is-checked":e.checked},attrs:{role:"switch","aria-checked":e.checked,"aria-disabled":e.switchDisabled},on:{click:function(t){return t.preventDefault(),e.switchValue(t)}}},[i("input",{ref:"input",staticClass:"el-switch__input",attrs:{type:"checkbox",id:e.id,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:e.switchDisabled},on:{change:e.handleChange,keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.switchValue(t)}}}),e.inactiveIconClass||e.inactiveText?i("span",{class:["el-switch__label","el-switch__label--left",e.checked?"":"is-active"]},[e.inactiveIconClass?i("i",{class:[e.inactiveIconClass]}):e._e(),!e.inactiveIconClass&&e.inactiveText?i("span",{attrs:{"aria-hidden":e.checked}},[e._v(e._s(e.inactiveText))]):e._e()]):e._e(),i("span",{ref:"core",staticClass:"el-switch__core",style:{width:e.coreWidth+"px"}}),e.activeIconClass||e.activeText?i("span",{class:["el-switch__label","el-switch__label--right",e.checked?"is-active":""]},[e.activeIconClass?i("i",{class:[e.activeIconClass]}):e._e(),!e.activeIconClass&&e.activeText?i("span",{attrs:{"aria-hidden":!e.checked}},[e._v(e._s(e.activeText))]):e._e()]):e._e()])},Ti=[];Ei._withStripped=!0;var Pi={name:"ElSwitch",mixins:[Z()("input"),D.a,O.a],inject:{elForm:{default:""}},props:{value:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},width:{type:Number,default:40},activeIconClass:{type:String,default:""},inactiveIconClass:{type:String,default:""},activeText:String,inactiveText:String,activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},id:String},data:function(){return{coreWidth:this.width}},created:function(){~[this.activeValue,this.inactiveValue].indexOf(this.value)||this.$emit("input",this.inactiveValue)},computed:{checked:function(){return this.value===this.activeValue},switchDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{checked:function(){this.$refs.input.checked=this.checked,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[this.value])}},methods:{handleChange:function(e){var t=this,i=this.checked?this.inactiveValue:this.activeValue;this.$emit("input",i),this.$emit("change",i),this.$nextTick((function(){t.$refs.input&&(t.$refs.input.checked=t.checked)}))},setBackgroundColor:function(){var e=this.checked?this.activeColor:this.inactiveColor;this.$refs.core.style.borderColor=e,this.$refs.core.style.backgroundColor=e},switchValue:function(){!this.switchDisabled&&this.handleChange()},getMigratingConfig:function(){return{props:{"on-color":"on-color is renamed to active-color.","off-color":"off-color is renamed to inactive-color.","on-text":"on-text is renamed to active-text.","off-text":"off-text is renamed to inactive-text.","on-value":"on-value is renamed to active-value.","off-value":"off-value is renamed to inactive-value.","on-icon-class":"on-icon-class is renamed to active-icon-class.","off-icon-class":"off-icon-class is renamed to inactive-icon-class."}}}},mounted:function(){this.coreWidth=this.width||40,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.$refs.input.checked=this.checked}},Mi=Pi,Ni=o(Mi,Ei,Ti,!1,null,null,null);Ni.options.__file="packages/switch/src/component.vue";var Ii=Ni.exports;Ii.install=function(e){e.component(Ii.name,Ii)};var ji=Ii,Fi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?i("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?i("span",[i("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?i("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[i("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():i("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return i("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(i){e.deleteTag(i,t)}}},[i("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?i("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.handleNavigate("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.handleNavigate("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.deletePrevTag(t)},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),i("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.debouncedOnInputChange,compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.handleNavigate("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.handleNavigate("prev")},function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),e.selectOption(t))},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?i("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),i("template",{slot:"suffix"},[i("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?i("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[i("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?i("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):i("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},Li=[];Fi._withStripped=!0;var Ai=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},Vi=[];Ai._withStripped=!0;var Bi={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[H.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},zi=Bi,Ri=o(zi,Ai,Vi,!1,null,null,null);Ri.options.__file="packages/select/src/select-dropdown.vue";var Hi=Ri.exports,Wi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[i("span",[e._v(e._s(e.currentLabel))])])],2)},qi=[];Wi._withStripped=!0;var Yi="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ki={mixins:[O.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":Yi(e))&&"object"===("undefined"===typeof t?"undefined":Yi(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(b["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},Ui=Ki,Gi=o(Ui,Wi,qi,!1,null,null,null);Gi.options.__file="packages/select/src/option.vue";var Xi=Gi.exports,Zi=i(29),Qi=i.n(Zi),Ji=i(15),en=i(27),tn=i.n(en),nn={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var i=this.options[this.hoverIndex];!0!==i.disabled&&!0!==i.groupDisabled&&i.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},sn={mixins:[O.a,g.a,Z()("reference"),nn],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(b["isIE"])()&&!Object(b["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"},propPlaceholder:function(){return"undefined"!==typeof this.placeholder?this.placeholder:this.t("el.select.placeholder")}},components:{ElInput:m.a,ElSelectMenu:Hi,ElOption:Xi,ElTag:Qi.a,ElScrollbar:q.a},directives:{Clickoutside:V.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,required:!1},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},propPlaceholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(b["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleNavigate:function(e){this.isOnComposition||this.navigateOptions(e)},handleComposition:function(e){var t=this,i=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(i)}));else{var n=i[i.length-1]||"";this.isOnComposition=!Object(Dt["isKorean"])(n)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var i=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");tn()(i,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(b["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,i="[object object]"===Object.prototype.toString.call(e).toLowerCase(),n="[object null]"===Object.prototype.toString.call(e).toLowerCase(),s="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),r=this.cachedOptions.length-1;r>=0;r--){var a=this.cachedOptions[r],o=i?Object(b["getValueByPath"])(a.value,this.valueKey)===Object(b["getValueByPath"])(e,this.valueKey):a.value===e;if(o){t=a;break}}if(t)return t;var l=i||n||s?"":String(e),c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var i=[];Array.isArray(this.value)&&this.value.forEach((function(t){i.push(e.getOption(t))})),this.selected=i,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.filterable&&!this.visible&&(this.menuVisibleOnFocus=!0),this.visible=!0),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,i=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],n=e.$refs.tags,s=n?Math.round(n.getBoundingClientRect().height):0,r=e.initialInputHeight||40;i.style.height=0===e.selected.length?r+"px":Math.max(n?s+(s>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var i=this;if(this.multiple){var n=(this.value||[]).slice(),s=this.getValueIndex(n,e.value);s>-1?n.splice(s,1):(this.multipleLimit<=0||n.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],i="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(i){var n=this.valueKey,s=-1;return e.some((function(e,i){return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)&&(s=i,!0)})),s}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var i=this.selected.indexOf(t);if(i>-1&&!this.selectDisabled){var n=this.value.slice();n.splice(i,1),this.$emit("input",n),this.emitChange(n),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var i=0;i!==this.options.length;++i){var n=this.options[i];if(this.query){if(!n.disabled&&!n.groupDisabled&&n.visible){this.hoverIndex=i;break}}else if(n.itemSelected){this.hoverIndex=i;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(b["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.propPlaceholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=L()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=L()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(Ji["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var i={medium:36,small:32,mini:28},n=t.$el.querySelector("input");this.initialInputHeight=n.getBoundingClientRect().height||i[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(Ji["removeResizeListener"])(this.$el,this.handleResize)}},rn=sn,an=o(rn,Fi,Li,!1,null,null,null);an.options.__file="packages/select/src/select.vue";var on=an.exports;on.install=function(e){e.component(on.name,on)};var ln=on;Xi.install=function(e){e.component(Xi.name,Xi)};var cn=Xi,un=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-group__wrap"},[i("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))]),i("li",[i("ul",{staticClass:"el-select-group"},[e._t("default")],2)])])},hn=[];un._withStripped=!0;var dn={mixins:[O.a],name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:{type:Boolean,default:!1}},data:function(){return{visible:!0}},watch:{disabled:function(e){this.broadcast("ElOption","handleGroupDisabled",e)}},methods:{queryChange:function(){this.visible=this.$children&&Array.isArray(this.$children)&&this.$children.some((function(e){return!0===e.visible}))}},created:function(){this.$on("queryChange",this.queryChange)},mounted:function(){this.disabled&&this.broadcast("ElOption","handleGroupDisabled",this.disabled)}},pn=dn,fn=o(pn,un,hn,!1,null,null,null);fn.options.__file="packages/select/src/option-group.vue";var mn=fn.exports;mn.install=function(e){e.component(mn.name,mn)};var vn=mn,gn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?i("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",[e._t("default")],2):e._e()])},bn=[];gn._withStripped=!0;var yn={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.$options.propsData.hasOwnProperty("disabled")?this.disabled:(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},_n=yn,xn=o(_n,gn,bn,!1,null,null,null);xn.options.__file="packages/button/src/button.vue";var Cn=xn.exports;Cn.install=function(e){e.component(Cn.name,Cn)};var wn=Cn,kn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-button-group"},[e._t("default")],2)},Sn=[];kn._withStripped=!0;var Dn={name:"ElButtonGroup"},$n=Dn,On=o($n,kn,Sn,!1,null,null,null);On.options.__file="packages/button/src/button-group.vue";var En=On.exports;En.install=function(e){e.component(En.name,En)};var Tn=En,Pn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[i("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[i("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),i("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():i("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[i("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?i("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[i("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?i("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[i("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),i("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?i("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[i("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?i("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?i("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[i("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),i("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[i("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?i("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?i("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[i("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?i("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},Mn=[];Pn._withStripped=!0;var Nn=i(14),In=i.n(Nn),jn=i(35),Fn=i(38),Ln=i.n(Fn),An="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Vn=function(e,t){e&&e.addEventListener&&e.addEventListener(An?"DOMMouseScroll":"mousewheel",(function(e){var i=Ln()(e);t&&t.apply(this,[e,i])}))},Bn={bind:function(e,t){Vn(e,t.value)}},zn=i(6),Rn=i.n(zn),Hn="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wn=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},qn=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":Hn(e))},Yn=function(e,t,i,n,s){if(!t&&!n&&(!s||Array.isArray(s)&&!s.length))return e;i="string"===typeof i?"descending"===i?-1:1:i&&i<0?-1:1;var r=n?null:function(i,n){return s?(Array.isArray(s)||(s=[s]),s.map((function(t){return"string"===typeof t?Object(b["getValueByPath"])(i,t):t(i,n,e)}))):("$key"!==t&&qn(i)&&"$value"in i&&(i=i.$value),[qn(i)?Object(b["getValueByPath"])(i,t):i])},a=function(e,t){if(n)return n(e.value,t.value);for(var i=0,s=e.key.length;it.key[i])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:r?r(e,t):null}})).sort((function(e,t){var n=a(e,t);return n||(n=e.index-t.index),n*i})).map((function(e){return e.value}))},Kn=function(e,t){var i=null;return e.columns.forEach((function(e){e.id===t&&(i=e)})),i},Un=function(e,t){for(var i=null,n=0;n2&&void 0!==arguments[2]?arguments[2]:"children",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",s=function(e){return!(Array.isArray(e)&&e.length)};function r(e,a,o){t(e,a,o),a.forEach((function(e){if(e[n])t(e,null,o+1);else{var a=e[i];s(a)||r(e,a,o+1)}}))}e.forEach((function(e){if(e[n])t(e,null,0);else{var a=e[i];s(a)||r(e,a,0)}}))}var as={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,i=void 0===t?[]:t,n=e.rowKey,s=e.defaultExpandAll,r=e.expandRows;if(s)this.states.expandRows=i.slice();else if(n){var a=Zn(r,n);this.states.expandRows=i.reduce((function(e,t){var i=Xn(t,n),s=a[i];return s&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var i=ss(this.states.expandRows,e,t);i&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,i=t.data,n=t.rowKey,s=Zn(i,n);this.states.expandRows=e.reduce((function(e,t){var i=s[t];return i&&e.push(i.row),e}),[])},isRowExpanded:function(e){var t=this.states,i=t.expandRows,n=void 0===i?[]:i,s=t.rowKey;if(s){var r=Zn(n,s);return!!r[Xn(e,s)]}return-1!==n.indexOf(e)}}},os={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,i=t.data,n=void 0===i?[]:i,s=t.rowKey,r=null;s&&(r=Object(b["arrayFind"])(n,(function(t){return Xn(t,s)===e}))),t.currentRow=r},updateCurrentRow:function(e){var t=this.states,i=this.table,n=t.currentRow;if(e&&e!==n)return t.currentRow=e,void i.$emit("current-change",e,n);!e&&n&&(t.currentRow=null,i.$emit("current-change",null,n))},updateCurrentRowData:function(){var e=this.states,t=this.table,i=e.rowKey,n=e._currentRowKey,s=e.data||[],r=e.currentRow;if(-1===s.indexOf(r)&&r){if(i){var a=Xn(r,i);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,r)}else n&&(this.setCurrentRowByKey(n),this.restoreCurrentRowKey())}}},ls=Object.assign||function(e){for(var t=1;t0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var i=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(i).concat(e.rightFixedColumns);var n=hs(i),s=hs(e.fixedColumns),r=hs(e.rightFixedColumns);e.leafColumnsLength=n.length,e.fixedLeafColumnsLength=s.length,e.rightFixedLeafColumnsLength=r.length,e.columns=[].concat(s).concat(n).concat(r),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,i=void 0===t?[]:t;return i.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,i=e.rowKey,n=e.selection,s=void 0;if(i){s=[];var r=Zn(n,i),a=Zn(t,i);for(var o in r)r.hasOwnProperty(o)&&!a[o]&&s.push(r[o].row)}else s=n.filter((function(e){return-1===t.indexOf(e)}));if(s.length){var l=n.filter((function(e){return-1===s.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=ss(this.states.selection,e,t);if(n){var s=(this.states.selection||[]).slice();i&&this.table.$emit("select",s,e),this.table.$emit("selection-change",s)}},_toggleAllSelection:function(){var e=this.states,t=e.data,i=void 0===t?[]:t,n=e.selection,s=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||n.length);e.isAllSelected=s;var r=!1;i.forEach((function(t,i){e.selectable?e.selectable.call(null,t,i)&&ss(n,t,s)&&(r=!0):ss(n,t,s)&&(r=!0)})),r&&this.table.$emit("selection-change",n?n.slice():[]),this.table.$emit("select-all",n)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,i=e.rowKey,n=e.data,s=Zn(t,i);n.forEach((function(e){var n=Xn(e,i),r=s[n];r&&(t[r.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,i=e.rowKey,n=e.selectable,s=e.data||[];if(0!==s.length){var r=void 0;i&&(r=Zn(t,i));for(var a=function(e){return r?!!r[Xn(e,i)]:-1!==t.indexOf(e)},o=!0,l=0,c=0,u=s.length;c1?i-1:0),s=1;s1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var i=new ps;return i.table=e,i.toggleAllSelection=L()(10,i._toggleAllSelection),Object.keys(t).forEach((function(e){i.states[e]=t[e]})),i}function ms(e){var t={};return Object.keys(e).forEach((function(i){var n=e[i],s=void 0;"string"===typeof n?s=function(){return this.store.states[n]}:"function"===typeof n?s=function(){return n.call(this,this.store.states)}:console.error("invalid value type"),s&&(t[i]=s)})),t}var vs=i(30),gs=i.n(vs);function bs(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var ys=function(){function e(t){for(var i in bs(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=gs()(),t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var i=t.querySelector(".el-table__body"),n=this.scrollY,s=i.offsetHeight>this.bodyHeight;return this.scrollY=s,n!==s}return!1},e.prototype.setHeight=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!Rn.a.prototype.$isServer){var n=this.table.$el;if(e=is(e),this.height=e,!n&&(e||0===e))return Rn.a.nextTick((function(){return t.setHeight(e,i)}));"number"===typeof e?(n.style[i]=e+"px",this.updateElsHeight()):"string"===typeof e&&(n.style[i]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return Rn.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,i=t.headerWrapper,n=t.appendWrapper,s=t.footerWrapper;if(this.appendHeight=n?n.offsetHeight:0,!this.showHeader||i){var r=i?i.querySelector(".el-table__header tr"):null,a=this.headerDisplayNone(r),o=this.headerHeight=this.showHeader?i.offsetHeight:0;if(this.showHeader&&!a&&i.offsetWidth>0&&(this.table.columns||[]).length>0&&o<2)return Rn.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,c=this.footerHeight=s?s.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-o-c+(s?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var u=!(this.store.states.data&&this.store.states.data.length);this.viewportHeight=this.scrollX?l-(u?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){if(!e)return!0;var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!Rn.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,i=0,n=this.getFlattenColumns(),s=n.filter((function(e){return"number"!==typeof e.width}));if(n.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),s.length>0&&e){n.forEach((function(e){i+=e.width||e.minWidth||80}));var r=this.scrollY?this.gutterWidth:0;if(i<=t-r){this.scrollX=!1;var a=t-r-i;if(1===s.length)s[0].realWidth=(s[0].minWidth||80)+a;else{var o=s.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/o,c=0;s.forEach((function(e,t){if(0!==t){var i=Math.floor((e.minWidth||80)*l);c+=i,e.realWidth=(e.minWidth||80)+i}})),s[0].realWidth=(s[0].minWidth||80)+a-c}}else this.scrollX=!0,s.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(i,t),this.table.resizeState.width=this.bodyWidth}else n.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,i+=e.realWidth})),this.scrollX=i>t,this.bodyWidth=i;var u=this.store.states.fixedColumns;if(u.length>0){var h=0;u.forEach((function(e){h+=e.realWidth||e.width})),this.fixedWidth=h}var d=this.store.states.rightFixedColumns;if(d.length>0){var p=0;d.forEach((function(e){p+=e.realWidth||e.width})),this.rightFixedWidth=p}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,i=this.observers;i.forEach((function(i){switch(e){case"columns":i.onColumnsChange(t);break;case"scrollable":i.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),_s=ys,xs={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(e){var t=this.$el.querySelectorAll("colgroup > col");if(t.length){var i=e.getFlattenColumns(),n={};i.forEach((function(e){n[e.id]=e}));for(var s=0,r=t.length;s col[name=gutter]"),i=0,n=t.length;i=this.leftFixedLeafCount:"right"===this.fixed?e=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,i,n){var s=1,r=1,a=this.table.spanMethod;if("function"===typeof a){var o=a({row:e,column:t,rowIndex:i,columnIndex:n});Array.isArray(o)?(s=o[0],r=o[1]):"object"===("undefined"===typeof o?"undefined":ks(o))&&(s=o.rowspan,r=o.colspan)}return{rowspan:s,colspan:r}},getRowStyle:function(e,t){var i=this.table.rowStyle;return"function"===typeof i?i.call(null,{row:e,rowIndex:t}):i||null},getRowClass:function(e,t){var i=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&i.push("current-row"),this.stripe&&t%2===1&&i.push("el-table__row--striped");var n=this.table.rowClassName;return"string"===typeof n?i.push(n):"function"===typeof n&&i.push(n.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&i.push("expanded"),i},getCellStyle:function(e,t,i,n){var s=this.table.cellStyle;return"function"===typeof s?s.call(null,{rowIndex:e,columnIndex:t,row:i,column:n}):s},getCellClass:function(e,t,i,n){var s=[n.id,n.align,n.className];this.isColumnHidden(t)&&s.push("is-hidden");var r=this.table.cellClassName;return"string"===typeof r?s.push(r):"function"===typeof r&&s.push(r.call(null,{rowIndex:e,columnIndex:t,row:i,column:n})),s.push("el-table__cell"),s.join(" ")},getColspanRealWidth:function(e,t,i){if(t<1)return e[i].realWidth;var n=e.map((function(e){var t=e.realWidth;return t})).slice(i,i+t);return n.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var i=this.table,n=Wn(e);if(n){var s=Gn(i,n),r=i.hoverState={cell:n,column:s,row:t};i.$emit("cell-mouse-enter",r.row,r.column,r.cell,e)}var a=e.target.querySelector(".cell");if(Object(Ae["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var o=document.createRange();o.setStart(a,0),o.setEnd(a,a.childNodes.length);var l=o.getBoundingClientRect().width,c=(parseInt(Object(Ae["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(Ae["getStyle"])(a,"paddingRight"),10)||0);if((l+c>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var u=this.$refs.tooltip;this.tooltipContent=n.innerText||n.textContent,u.referenceElm=n,u.$refs.popper&&(u.$refs.popper.style.display="none"),u.doDestroy(),u.setExpectedState(!0),this.activateTooltip(u)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var i=Wn(e);if(i){var n=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",n.row,n.column,n.cell,e)}},handleMouseEnter:L()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:L()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,i){var n=this.table,s=Wn(e),r=void 0;s&&(r=Gn(n,s),r&&n.$emit("cell-"+i,t,r,s,e)),n.$emit("row-"+i,t,r,e)},rowRender:function(e,t,i){var n=this,s=this.$createElement,r=this.treeIndent,a=this.columns,o=this.firstDefaultColumnIndex,l=this.getRowClass(e,t),c=!0;i&&(l.push("el-table__row--level-"+i.level),c=i.display);var u=c?null:{display:"none"};return s(ws,{style:[u,this.getRowStyle(e,t)],class:l,key:this.getKeyOfRow(e,t),nativeOn:{dblclick:function(t){return n.handleDoubleClick(t,e)},click:function(t){return n.handleClick(t,e)},contextmenu:function(t){return n.handleContextMenu(t,e)},mouseenter:function(e){return n.handleMouseEnter(t)},mouseleave:this.handleMouseLeave},attrs:{columns:a,row:e,index:t,store:this.store,context:this.context||this.table.$vnode.context,firstDefaultColumnIndex:o,treeRowData:i,treeIndent:r,columnsHidden:this.columnsHidden,getSpan:this.getSpan,getColspanRealWidth:this.getColspanRealWidth,getCellStyle:this.getCellStyle,getCellClass:this.getCellClass,handleCellMouseEnter:this.handleCellMouseEnter,handleCellMouseLeave:this.handleCellMouseLeave,isSelected:this.store.isSelected(e),isExpanded:this.store.states.expandRows.indexOf(e)>-1,fixed:this.fixed}})},wrappedRowRender:function(e,t){var i=this,n=this.$createElement,s=this.store,r=s.isRowExpanded,a=s.assertRowKey,o=s.states,l=o.treeData,c=o.lazyTreeNodeMap,u=o.childrenColumnName,h=o.rowKey;if(this.hasExpandColumn&&r(e)){var d=this.table.renderExpanded,p=this.rowRender(e,t);return d?[[p,n("tr",{key:"expanded-row__"+p.key},[n("td",{attrs:{colspan:this.columnsCount},class:"el-table__cell el-table__expanded-cell"},[d(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),p)}if(Object.keys(l).length){a();var f=Xn(e,h),m=l[f],v=null;m&&(v={expanded:m.expanded,level:m.level,display:!0},"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(v.noLazyChildren=!(m.children&&m.children.length)),v.loading=m.loading));var g=[this.rowRender(e,t,v)];if(m){var b=0,y=function e(n,s){n&&n.length&&s&&n.forEach((function(n){var r={display:s.display&&s.expanded,level:s.level+1},a=Xn(n,h);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(m=Ss({},l[a]),m&&(r.expanded=m.expanded,m.level=m.level||r.level,m.display=!(!m.expanded||!r.display),"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(r.noLazyChildren=!(m.children&&m.children.length)),r.loading=m.loading)),b++,g.push(i.rowRender(n,t+b,r)),m){var o=c[a]||n[u];e(o,m)}}))};m.display=!0;var _=c[f]||e[u];y(_,m)}return g}return this.rowRender(e,t)}}},$s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[i("div",{staticClass:"el-table-filter__content"},[i("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[i("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return i("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),i("div",{staticClass:"el-table-filter__bottom"},[i("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),i("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[i("ul",{staticClass:"el-table-filter__list"},[i("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return i("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(i){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},Os=[];$s._withStripped=!0;var Es=[];!Rn.a.prototype.$isServer&&document.addEventListener("click",(function(e){Es.forEach((function(t){var i=e.target;t&&t.$el&&(i===t.$el||t.$el.contains(i)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var Ts={open:function(e){e&&Es.push(e)},close:function(e){var t=Es.indexOf(e);-1!==t&&Es.splice(e,1)}},Ps=i(31),Ms=i.n(Ps),Ns={name:"ElTableFilterPanel",mixins:[H.a,g.a],directives:{Clickoutside:V.a},components:{ElCheckbox:In.a,ElCheckboxGroup:Ms.a,ElScrollbar:q.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?Ts.open(e):Ts.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)1;return s&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":s,"has-gutter":this.hasGutter}]},[this._l(n,(function(i,n){return e("tr",{style:t.getHeaderRowStyle(n),class:t.getHeaderRowClass(n)},[i.map((function(s,r){return e("th",{attrs:{colspan:s.colSpan,rowspan:s.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,s)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,s)},click:function(e){return t.handleHeaderClick(e,s)},contextmenu:function(e){return t.handleHeaderContextMenu(e,s)}},style:t.getHeaderCellStyle(n,r,i,s),class:t.getHeaderCellClass(n,r,i,s),key:s.id},[e("div",{class:["cell",s.filteredValue&&s.filteredValue.length>0?"highlight":"",s.labelClassName]},[s.renderHeader?s.renderHeader.call(t._renderProxy,e,{column:s,$index:r,store:t.store,_self:t.$parent.$vnode.context}):s.label,s.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,s)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,s,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,s,"descending")}}})]):"",s.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,s)}}},[e("i",{class:["el-icon-arrow-down",s.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"el-table__cell gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:In.a},computed:Ls({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},ms({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,i=t.prop,n=t.order,s=!0;e.store.commit("sort",{prop:i,order:n,init:s})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var i=0,n=0;n=this.leftFixedLeafCount:"right"===this.fixed?i=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],i=this.table.headerRowClassName;return"string"===typeof i?t.push(i):"function"===typeof i&&t.push(i.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,i,n){var s=this.table.headerCellStyle;return"function"===typeof s?s.call(null,{rowIndex:e,columnIndex:t,row:i,column:n}):s},getHeaderCellClass:function(e,t,i,n){var s=[n.id,n.order,n.headerAlign,n.className,n.labelClassName];0===e&&this.isCellHidden(t,i)&&s.push("is-hidden"),n.children||s.push("is-leaf"),n.sortable&&s.push("is-sortable");var r=this.table.headerCellClassName;return"string"===typeof r?s.push(r):"function"===typeof r&&s.push(r.call(null,{rowIndex:e,columnIndex:t,row:i,column:n})),s.push("el-table__cell"),s.join(" ")},toggleAllSelection:function(){this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var i=e.target,n="TH"===i.tagName?i:i.parentNode;if(!Object(Ae["hasClass"])(n,"noclick")){n=n.querySelector(".el-table__column-filter-trigger")||n;var s=this.$parent,r=this.filterPanels[t.id];r&&t.filterOpened?r.showPopper=!1:(r||(r=new Rn.a(Fs),this.filterPanels[t.id]=r,t.filterPlacement&&(r.placement=t.filterPlacement),r.table=s,r.cell=n,r.column=t,!this.$isServer&&r.$mount(document.createElement("div"))),setTimeout((function(){r.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var i=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var n=this.$parent,s=n.$el,r=s.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),o=a.getBoundingClientRect(),l=o.left-r+30;Object(Ae["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:o.right-r,startColumnLeft:o.left-r,tableLeft:r};var c=n.$refs.resizeProxy;c.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var u=function(e){var t=e.clientX-i.dragState.startMouseLeft,n=i.dragState.startLeft+t;c.style.left=Math.max(l,n)+"px"},h=function s(){if(i.dragging){var r=i.dragState,o=r.startColumnLeft,l=r.startLeft,h=parseInt(c.style.left,10),d=h-o;t.width=t.realWidth=d,n.$emit("header-dragend",t.width,l-o,t,e),i.store.scheduleLayout(),document.body.style.cursor="",i.dragging=!1,i.draggingColumn=null,i.dragState={},n.resizeProxyVisible=!1}document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",s),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(Ae["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",u),document.addEventListener("mouseup",h)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var i=e.target;while(i&&"TH"!==i.tagName)i=i.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var n=i.getBoundingClientRect(),s=document.body.style;n.width>12&&n.right-e.pageX<8?(s.cursor="col-resize",Object(Ae["hasClass"])(i,"is-sortable")&&(i.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(s.cursor="",Object(Ae["hasClass"])(i,"is-sortable")&&(i.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,i=e.sortOrders;if(""===t)return i[0];var n=i.indexOf(t||null);return i[n>i.length-2?0:n+1]},handleSortClick:function(e,t,i){e.stopPropagation();var n=t.order===i?null:i||this.toggleOrder(t),s=e.target;while(s&&"TH"!==s.tagName)s=s.parentNode;if(s&&"TH"===s.tagName&&Object(Ae["hasClass"])(s,"noclick"))Object(Ae["removeClass"])(s,"noclick");else if(t.sortable){var r=this.store.states,a=r.sortProp,o=void 0,l=r.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),r.sortingColumn=t,a=t.property),o=t.order=n||null,r.sortProp=a,r.sortOrder=o,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},zs=Object.assign||function(e){for(var t=1;t=this.leftFixedLeafCount;if("right"===this.fixed){for(var n=0,s=0;s=this.columnsCount-this.rightFixedCount)},getRowClasses:function(e,t){var i=[e.id,e.align,e.labelClassName];return e.className&&i.push(e.className),this.isCellHidden(t,this.columns,e)&&i.push("is-hidden"),e.children||i.push("is-leaf"),i}}},Hs=Object.assign||function(e){for(var t=1;t0){var n=i.scrollTop;t.pixelY<0&&0!==n&&e.preventDefault(),t.pixelY>0&&i.scrollHeight-i.clientHeight>n&&e.preventDefault(),i.scrollTop+=Math.ceil(t.pixelY/5)}else i.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var i=t.pixelX,n=t.pixelY;Math.abs(i)>=Math.abs(n)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:function(){var e=this.bodyWrapper,t=e.scrollLeft,i=e.scrollTop,n=e.offsetWidth,s=e.scrollWidth,r=this.$refs,a=r.headerWrapper,o=r.footerWrapper,l=r.fixedBodyWrapper,c=r.rightFixedBodyWrapper;a&&(a.scrollLeft=t),o&&(o.scrollLeft=t),l&&(l.scrollTop=i),c&&(c.scrollTop=i);var u=s-n-1;this.scrollPosition=t>=u?"right":0===t?"left":"middle"},throttleSyncPostion:Object(jn["throttle"])(16,(function(){this.syncPostion()})),onScroll:function(e){var t=window.requestAnimationFrame;t?t(this.syncPostion):this.throttleSyncPostion()},bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.onScroll,{passive:!0}),this.fit&&Object(Ji["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.onScroll,{passive:!0}),this.fit&&Object(Ji["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,i=this.resizeState,n=i.width,s=i.height,r=t.offsetWidth;n!==r&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&s!==a&&(e=!0),e&&(this.resizeState.width=r,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:Hs({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,i=e.scrollY,n=e.gutterWidth;return t?t-(i?n:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,i=void 0===t?0:t,n=e.bodyHeight,s=e.footerHeight,r=void 0===s?0:s;if(this.height)return{height:n?n+"px":""};if(this.maxHeight){var a=is(this.maxHeight);if("number"===typeof a)return{"max-height":a-r-(this.showHeader?i:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=is(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},ms({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+Ws++,this.debouncedUpdateLayout=Object(jn["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,i=void 0===t?"hasChildren":t,n=e.children,s=void 0===n?"children":n;this.store=fs(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:i,childrenColumnName:s});var r=new _s({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:r,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},Ys=qs,Ks=o(Ys,Pn,Mn,!1,null,null,null);Ks.options.__file="packages/table/src/table.vue";var Us=Ks.exports;Us.install=function(e){e.component(Us.name,Us)};var Gs=Us,Xs={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:"",className:"el-table-column--selection"},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Zs={selection:{renderHeader:function(e,t){var i=t.store;return e("el-checkbox",{attrs:{disabled:i.states.data&&0===i.states.data.length,indeterminate:i.states.selection.length>0&&!this.isAllSelected,value:this.isAllSelected},on:{input:this.toggleAllSelection}})},renderCell:function(e,t){var i=t.row,n=t.column,s=t.isSelected,r=t.store,a=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:s,disabled:!!n.selectable&&!n.selectable.call(null,i,a)},on:{input:function(){r.commit("rowSelectedChanged",i)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var i=t.column;return i.label||"#"},renderCell:function(e,t){var i=t.$index,n=t.column,s=i+1,r=n.index;return"number"===typeof r?s=i+r:"function"===typeof r&&(s=r(i)),e("div",[s])},sortable:!1},expand:{renderHeader:function(e,t){var i=t.column;return i.label||""},renderCell:function(e,t){var i=t.row,n=t.store,s=t.isExpanded,r=["el-table__expand-icon"];s&&r.push("el-table__expand-icon--expanded");var a=function(e){e.stopPropagation(),n.toggleRowExpansion(i)};return e("div",{class:r,on:{click:a}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function Qs(e,t){var i=t.row,n=t.column,s=t.$index,r=n.property,a=r&&Object(b["getPropByPath"])(i,r).v;return n&&n.formatter?n.formatter(i,n,a,s):a}function Js(e,t){var i=t.row,n=t.treeNode,s=t.store;if(!n)return null;var r=[],a=function(e){e.stopPropagation(),s.loadOrToggle(i)};if(n.indent&&r.push(e("span",{class:"el-table__indent",style:{"padding-left":n.indent+"px"}})),"boolean"!==typeof n.expanded||n.noLazyChildren)r.push(e("span",{class:"el-table__placeholder"}));else{var o=["el-table__expand-icon",n.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];n.loading&&(l=["el-icon-loading"]),r.push(e("div",{class:o,on:{click:a}},[e("i",{class:l})]))}return r}var er=Object.assign||function(e){for(var t=1;t-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return es(this.width)},realMinWidth:function(){return ts(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,i=Array(t),n=0;n3&&void 0!==arguments[3]?arguments[3]:"-";if(!e)return null;var s=(fr[i]||fr["default"]).parser,r=t||lr[i];return s(e,r,n)},gr=function(e,t,i){if(!e)return null;var n=(fr[i]||fr["default"]).formatter,s=t||lr[i];return n(e,s)},br=function(e,t){var i=function(e,t){var i=e instanceof Date,n=t instanceof Date;return i&&n?e.getTime()===t.getTime():!i&&!n&&e===t},n=e instanceof Array,s=t instanceof Array;return n&&s?e.length===t.length&&e.every((function(e,n){return i(e,t[n])})):!n&&!s&&i(e,t)},yr=function(e){return"string"===typeof e||e instanceof String},_r=function(e){return null===e||void 0===e||yr(e)||Array.isArray(e)&&2===e.length&&e.every(yr)},xr={mixins:[O.a,or],inject:{elForm:{default:""},elFormItem:{default:""}},props:{size:String,format:String,valueFormat:String,readonly:Boolean,placeholder:String,startPlaceholder:String,endPlaceholder:String,prefixIcon:String,clearIcon:{type:String,default:"el-icon-circle-close"},name:{default:"",validator:_r},disabled:Boolean,clearable:{type:Boolean,default:!0},id:{default:"",validator:_r},popperClass:String,editable:{type:Boolean,default:!0},align:{type:String,default:"left"},value:{},defaultValue:{},defaultTime:{},rangeSeparator:{default:"-"},pickerOptions:{},unlinkPanels:Boolean,validateEvent:{type:Boolean,default:!0}},components:{ElInput:m.a},directives:{Clickoutside:V.a},data:function(){return{pickerVisible:!1,showClose:!1,userInput:null,valueOnOpen:null,unwatchPickerOptions:null}},watch:{pickerVisible:function(e){this.readonly||this.pickerDisabled||(e?(this.showPicker(),this.valueOnOpen=Array.isArray(this.value)?[].concat(this.value):this.value):(this.hidePicker(),this.emitChange(this.value),this.userInput=null,this.validateEvent&&this.dispatch("ElFormItem","el.form.blur"),this.$emit("blur",this),this.blur()))},parsedValue:{immediate:!0,handler:function(e){this.picker&&(this.picker.value=e)}},defaultValue:function(e){this.picker&&(this.picker.defaultValue=e)},value:function(e,t){br(e,t)||this.pickerVisible||!this.validateEvent||this.dispatch("ElFormItem","el.form.change",e)}},computed:{ranged:function(){return this.type.indexOf("range")>-1},reference:function(){var e=this.$refs.reference;return e.$el||e},refInput:function(){return this.reference?[].slice.call(this.reference.querySelectorAll("input")):[]},valueIsEmpty:function(){var e=this.value;if(Array.isArray(e)){for(var t=0,i=e.length;t0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.userInput=null,e.pickerVisible=e.picker.visible=i,e.emitInput(t),e.picker.resetView&&e.picker.resetView()})),this.picker.$on("select-range",(function(t,i,n){0!==e.refInput.length&&(n&&"min"!==n?"max"===n&&(e.refInput[1].setSelectionRange(t,i),e.refInput[1].focus()):(e.refInput[0].setSelectionRange(t,i),e.refInput[0].focus()))}))},unmountPicker:function(){this.picker&&(this.picker.$destroy(),this.picker.$off(),"function"===typeof this.unwatchPickerOptions&&this.unwatchPickerOptions(),this.picker.$el.parentNode.removeChild(this.picker.$el))},emitChange:function(e){br(e,this.valueOnOpen)||(this.$emit("change",e),this.valueOnOpen=e,this.validateEvent&&this.dispatch("ElFormItem","el.form.change",e))},emitInput:function(e){var t=this.formatToValue(e);br(this.value,t)||this.$emit("input",t)},isValidValue:function(e){return this.picker||this.mountPicker(),!this.picker.isValidValue||e&&this.picker.isValidValue(e)}}},Cr=xr,wr=o(Cr,sr,rr,!1,null,null,null);wr.options.__file="packages/date-picker/src/picker.vue";var kr=wr.exports,Sr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-enter":e.handleEnter,"after-leave":e.handleLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[e.showTime?i("div",{staticClass:"el-date-picker__time-header"},[i("span",{staticClass:"el-date-picker__editor-wrap"},[i("el-input",{attrs:{placeholder:e.t("el.datepicker.selectDate"),value:e.visibleDate,size:"small"},on:{input:function(t){return e.userInputDate=t},change:e.handleVisibleDateChange}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleTimePickClose,expression:"handleTimePickClose"}],staticClass:"el-date-picker__editor-wrap"},[i("el-input",{ref:"input",attrs:{placeholder:e.t("el.datepicker.selectTime"),value:e.visibleTime,size:"small"},on:{focus:function(t){e.timePickerVisible=!0},input:function(t){return e.userInputTime=t},change:e.handleVisibleTimeChange}}),i("time-picker",{ref:"timepicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.timePickerVisible},on:{pick:e.handleTimePick,mounted:e.proxyTimePickerDataProperties}})],1)]):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:"time"!==e.currentView,expression:"currentView !== 'time'"}],staticClass:"el-date-picker__header",class:{"el-date-picker__header--bordered":"year"===e.currentView||"month"===e.currentView}},[i("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevYear")},on:{click:e.prevYear}}),i("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevMonth")},on:{click:e.prevMonth}}),i("span",{staticClass:"el-date-picker__header-label",attrs:{role:"button"},on:{click:e.showYearPicker}},[e._v(e._s(e.yearLabel))]),i("span",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-date-picker__header-label",class:{active:"month"===e.currentView},attrs:{role:"button"},on:{click:e.showMonthPicker}},[e._v(e._s(e.t("el.datepicker.month"+(e.month+1))))]),i("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextYear")},on:{click:e.nextYear}}),i("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextMonth")},on:{click:e.nextMonth}})]),i("div",{staticClass:"el-picker-panel__content"},[i("date-table",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],attrs:{"selection-mode":e.selectionMode,"first-day-of-week":e.firstDayOfWeek,value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"cell-class-name":e.cellClassName,"disabled-date":e.disabledDate},on:{pick:e.handleDatePick}}),i("year-table",{directives:[{name:"show",rawName:"v-show",value:"year"===e.currentView,expression:"currentView === 'year'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleYearPick}}),i("month-table",{directives:[{name:"show",rawName:"v-show",value:"month"===e.currentView,expression:"currentView === 'month'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleMonthPick}})],1)])],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.footerVisible&&"date"===e.currentView,expression:"footerVisible && currentView === 'date'"}],staticClass:"el-picker-panel__footer"},[i("el-button",{directives:[{name:"show",rawName:"v-show",value:"dates"!==e.selectionMode,expression:"selectionMode !== 'dates'"}],staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.changeToNow}},[e._v("\n "+e._s(e.t("el.datepicker.now"))+"\n ")]),i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini"},on:{click:e.confirm}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1)])])},Dr=[];Sr._withStripped=!0;var $r=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-panel el-popper",class:e.popperClass},[i("div",{staticClass:"el-time-panel__content",class:{"has-seconds":e.showSeconds}},[i("time-spinner",{ref:"spinner",attrs:{"arrow-control":e.useArrow,"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,date:e.date},on:{change:e.handleChange,"select-range":e.setSelectionRange}})],1),i("div",{staticClass:"el-time-panel__footer"},[i("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:e.handleCancel}},[e._v(e._s(e.t("el.datepicker.cancel")))]),i("button",{staticClass:"el-time-panel__btn",class:{confirm:!e.disabled},attrs:{type:"button"},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Or=[];$r._withStripped=!0;var Er=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-time-spinner",class:{"has-seconds":e.showSeconds}},[e.arrowControl?e._e():[i("el-scrollbar",{ref:"hours",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("hours")},mousemove:function(t){e.adjustCurrentSpinner("hours")}}},e._l(e.hoursList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.hours,disabled:t},on:{click:function(i){e.handleClick("hours",{value:n,disabled:t})}}},[e._v(e._s(("0"+(e.amPmMode?n%12||12:n)).slice(-2))+e._s(e.amPm(n)))])})),0),i("el-scrollbar",{ref:"minutes",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("minutes")},mousemove:function(t){e.adjustCurrentSpinner("minutes")}}},e._l(e.minutesList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.minutes,disabled:!t},on:{click:function(t){e.handleClick("minutes",{value:n,disabled:!1})}}},[e._v(e._s(("0"+n).slice(-2)))])})),0),i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.showSeconds,expression:"showSeconds"}],ref:"seconds",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("seconds")},mousemove:function(t){e.adjustCurrentSpinner("seconds")}}},e._l(60,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:n===e.seconds},on:{click:function(t){e.handleClick("seconds",{value:n,disabled:!1})}}},[e._v(e._s(("0"+n).slice(-2)))])})),0)],e.arrowControl?[i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("hours")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"hours",staticClass:"el-time-spinner__list"},e._l(e.arrowHourList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.hours,disabled:e.hoursList[t]}},[e._v(e._s(void 0===t?"":("0"+(e.amPmMode?t%12||12:t)).slice(-2)+e.amPm(t)))])})),0)]),i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("minutes")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"minutes",staticClass:"el-time-spinner__list"},e._l(e.arrowMinuteList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.minutes}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]),e.showSeconds?i("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("seconds")}}},[i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),i("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),i("ul",{ref:"seconds",staticClass:"el-time-spinner__list"},e._l(e.arrowSecondList,(function(t,n){return i("li",{key:n,staticClass:"el-time-spinner__item",class:{active:t===e.seconds}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]):e._e()]:e._e()],2)},Tr=[];Er._withStripped=!0;var Pr={components:{ElScrollbar:q.a},directives:{repeatClick:It},props:{date:{},defaultValue:{},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""}},computed:{hours:function(){return this.date.getHours()},minutes:function(){return this.date.getMinutes()},seconds:function(){return this.date.getSeconds()},hoursList:function(){return Object(ar["getRangeHours"])(this.selectableRange)},minutesList:function(){return Object(ar["getRangeMinutes"])(this.selectableRange,this.hours)},arrowHourList:function(){var e=this.hours;return[e>0?e-1:void 0,e,e<23?e+1:void 0]},arrowMinuteList:function(){var e=this.minutes;return[e>0?e-1:void 0,e,e<59?e+1:void 0]},arrowSecondList:function(){var e=this.seconds;return[e>0?e-1:void 0,e,e<59?e+1:void 0]}},data:function(){return{selectableRange:[],currentScrollbar:null}},mounted:function(){var e=this;this.$nextTick((function(){!e.arrowControl&&e.bindScrollEvent()}))},methods:{increase:function(){this.scrollDown(1)},decrease:function(){this.scrollDown(-1)},modifyDateField:function(e,t){switch(e){case"hours":this.$emit("change",Object(ar["modifyTime"])(this.date,t,this.minutes,this.seconds));break;case"minutes":this.$emit("change",Object(ar["modifyTime"])(this.date,this.hours,t,this.seconds));break;case"seconds":this.$emit("change",Object(ar["modifyTime"])(this.date,this.hours,this.minutes,t));break}},handleClick:function(e,t){var i=t.value,n=t.disabled;n||(this.modifyDateField(e,i),this.emitSelectRange(e),this.adjustSpinner(e,i))},emitSelectRange:function(e){"hours"===e?this.$emit("select-range",0,2):"minutes"===e?this.$emit("select-range",3,5):"seconds"===e&&this.$emit("select-range",6,8),this.currentScrollbar=e},bindScrollEvent:function(){var e=this,t=function(t){e.$refs[t].wrap.onscroll=function(i){e.handleScroll(t,i)}};t("hours"),t("minutes"),t("seconds")},handleScroll:function(e){var t=Math.min(Math.round((this.$refs[e].wrap.scrollTop-(.5*this.scrollBarHeight(e)-10)/this.typeItemHeight(e)+3)/this.typeItemHeight(e)),"hours"===e?23:59);this.modifyDateField(e,t)},adjustSpinners:function(){this.adjustSpinner("hours",this.hours),this.adjustSpinner("minutes",this.minutes),this.adjustSpinner("seconds",this.seconds)},adjustCurrentSpinner:function(e){this.adjustSpinner(e,this[e])},adjustSpinner:function(e,t){if(!this.arrowControl){var i=this.$refs[e].wrap;i&&(i.scrollTop=Math.max(0,t*this.typeItemHeight(e)))}},scrollDown:function(e){var t=this;this.currentScrollbar||this.emitSelectRange("hours");var i=this.currentScrollbar,n=this.hoursList,s=this[i];if("hours"===this.currentScrollbar){var r=Math.abs(e);e=e>0?1:-1;var a=n.length;while(a--&&r)s=(s+e+n.length)%n.length,n[s]||r--;if(n[s])return}else s=(s+e+60)%60;this.modifyDateField(i,s),this.adjustSpinner(i,s),this.$nextTick((function(){return t.emitSelectRange(t.currentScrollbar)}))},amPm:function(e){var t="a"===this.amPmMode.toLowerCase();if(!t)return"";var i="A"===this.amPmMode,n=e<12?" am":" pm";return i&&(n=n.toUpperCase()),n},typeItemHeight:function(e){return this.$refs[e].$el.querySelector("li").offsetHeight},scrollBarHeight:function(e){return this.$refs[e].$el.offsetHeight}}},Mr=Pr,Nr=o(Mr,Er,Tr,!1,null,null,null);Nr.options.__file="packages/date-picker/src/basic/time-spinner.vue";var Ir=Nr.exports,jr={mixins:[g.a],components:{TimeSpinner:Ir},props:{visible:Boolean,timeArrowControl:Boolean},watch:{visible:function(e){var t=this;e?(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.spinner.emitSelectRange("hours")}))):this.needInitAdjust=!0},value:function(e){var t=this,i=void 0;e instanceof Date?i=Object(ar["limitTimeRange"])(e,this.selectableRange,this.format):e||(i=this.defaultValue?new Date(this.defaultValue):new Date),this.date=i,this.visible&&this.needInitAdjust&&(this.$nextTick((function(e){return t.adjustSpinners()})),this.needInitAdjust=!1)},selectableRange:function(e){this.$refs.spinner.selectableRange=e},defaultValue:function(e){Object(ar["isDate"])(this.value)||(this.date=e?new Date(e):new Date)}},data:function(){return{popperClass:"",format:"HH:mm:ss",value:"",defaultValue:null,date:new Date,oldValue:new Date,selectableRange:[],selectionRange:[0,2],disabled:!1,arrowControl:!1,needInitAdjust:!0}},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},useArrow:function(){return this.arrowControl||this.timeArrowControl||!1},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},methods:{handleCancel:function(){this.$emit("pick",this.oldValue,!1)},handleChange:function(e){this.visible&&(this.date=Object(ar["clearMilliseconds"])(e),this.isValidValue(this.date)&&this.$emit("pick",this.date,!0))},setSelectionRange:function(e,t){this.$emit("select-range",e,t),this.selectionRange=[e,t]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(!t){var i=Object(ar["clearMilliseconds"])(Object(ar["limitTimeRange"])(this.date,this.selectableRange,this.format));this.$emit("pick",i,e,t)}},handleKeydown:function(e){var t=e.keyCode,i={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var n=i[t];return this.changeSelectionRange(n),void e.preventDefault()}if(38===t||40===t){var s=i[t];return this.$refs.spinner.scrollDown(s),void e.preventDefault()}},isValidValue:function(e){return Object(ar["timeWithinRange"])(e,this.selectableRange,this.format)},adjustSpinners:function(){return this.$refs.spinner.adjustSpinners()},changeSelectionRange:function(e){var t=[0,3].concat(this.showSeconds?[6]:[]),i=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),n=t.indexOf(this.selectionRange[0]),s=(n+e+t.length)%t.length;this.$refs.spinner.emitSelectRange(i[s])}},mounted:function(){var e=this;this.$nextTick((function(){return e.handleConfirm(!0,!0)})),this.$emit("mounted")}},Fr=jr,Lr=o(Fr,$r,Or,!1,null,null,null);Lr.options.__file="packages/date-picker/src/panel/time.vue";var Ar=Lr.exports,Vr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-year-table",on:{click:e.handleYearTableClick}},[i("tbody",[i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+0)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+1)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+1))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+2)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+2))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+3)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+3))])])]),i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+4)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+4))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+5)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+5))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+6)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+6))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+7)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+7))])])]),i("tr",[i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+8)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+8))])]),i("td",{staticClass:"available",class:e.getCellStyle(e.startYear+9)},[i("a",{staticClass:"cell"},[e._v(e._s(e.startYear+9))])]),i("td"),i("td")])])])},Br=[];Vr._withStripped=!0;var zr=function(e){var t=Object(ar["getDayCountOfYear"])(e),i=new Date(e,0,1);return Object(ar["range"])(t).map((function(e){return Object(ar["nextDate"])(i,e)}))},Rr={props:{disabledDate:{},value:{},defaultValue:{validator:function(e){return null===e||e instanceof Date&&Object(ar["isDate"])(e)}},date:{}},computed:{startYear:function(){return 10*Math.floor(this.date.getFullYear()/10)}},methods:{getCellStyle:function(e){var t={},i=new Date;return t.disabled="function"===typeof this.disabledDate&&zr(e).every(this.disabledDate),t.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(t){return t.getFullYear()===e}))>=0,t.today=i.getFullYear()===e,t.default=this.defaultValue&&this.defaultValue.getFullYear()===e,t},handleYearTableClick:function(e){var t=e.target;if("A"===t.tagName){if(Object(Ae["hasClass"])(t.parentNode,"disabled"))return;var i=t.textContent||t.innerText;this.$emit("pick",Number(i))}}}},Hr=Rr,Wr=o(Hr,Vr,Br,!1,null,null,null);Wr.options.__file="packages/date-picker/src/basic/year-table.vue";var qr=Wr.exports,Yr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-month-table",on:{click:e.handleMonthTableClick,mousemove:e.handleMouseMove}},[i("tbody",e._l(e.rows,(function(t,n){return i("tr",{key:n},e._l(t,(function(t,n){return i("td",{key:n,class:e.getCellStyle(t)},[i("div",[i("a",{staticClass:"cell"},[e._v(e._s(e.t("el.datepicker.months."+e.months[t.text])))])])])})),0)})),0)])},Kr=[];Yr._withStripped=!0;var Ur=function(e,t){var i=Object(ar["getDayCountOfMonth"])(e,t),n=new Date(e,t,1);return Object(ar["range"])(i).map((function(e){return Object(ar["nextDate"])(n,e)}))},Gr=function(e){return new Date(e.getFullYear(),e.getMonth())},Xr=function(e){return"number"===typeof e||"string"===typeof e?Gr(new Date(e)).getTime():e instanceof Date?Gr(e).getTime():NaN},Zr={props:{disabledDate:{},value:{},selectionMode:{default:"month"},minDate:{},maxDate:{},defaultValue:{validator:function(e){return null===e||Object(ar["isDate"])(e)||Array.isArray(e)&&e.every(ar["isDate"])}},date:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},mixins:[g.a],watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){Xr(e)!==Xr(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){Xr(e)!==Xr(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{months:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tableRows:[[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var i=new Date(t);return this.date.getFullYear()===i.getFullYear()&&Number(e.text)===i.getMonth()},getCellStyle:function(e){var t=this,i={},n=this.date.getFullYear(),s=new Date,r=e.text,a=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[];return i.disabled="function"===typeof this.disabledDate&&Ur(n,r).every(this.disabledDate),i.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(e){return e.getFullYear()===n&&e.getMonth()===r}))>=0,i.today=s.getFullYear()===n&&s.getMonth()===r,i.default=a.some((function(i){return t.cellMatchesDate(e,i)})),e.inRange&&(i["in-range"]=!0,e.start&&(i["start-date"]=!0),e.end&&(i["end-date"]=!0)),i},getMonthOfCell:function(e){var t=this.date.getFullYear();return new Date(t,e,1)},markRange:function(e,t){e=Xr(e),t=Xr(t)||e;var i=[Math.min(e,t),Math.max(e,t)];e=i[0],t=i[1];for(var n=this.rows,s=0,r=n.length;s=e&&h<=t,c.start=e&&h===e,c.end=t&&h===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex,n=t.cellIndex;this.rows[i][n].disabled||i===this.lastRow&&n===this.lastColumn||(this.lastRow=i,this.lastColumn=n,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getMonthOfCell(4*i+n)}}))}}},handleMonthTableClick:function(e){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName&&!Object(Ae["hasClass"])(t,"disabled")){var i=t.cellIndex,n=t.parentNode.rowIndex,s=4*n+i,r=this.getMonthOfCell(s);"range"===this.selectionMode?this.rangeState.selecting?(r>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:r}):this.$emit("pick",{minDate:r,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:r,maxDate:null}),this.rangeState.selecting=!0):this.$emit("pick",s)}}},computed:{rows:function(){for(var e=this,t=this.tableRows,i=this.disabledDate,n=[],s=Xr(new Date),r=0;r<3;r++)for(var a=t[r],o=function(t){var o=a[t];o||(o={row:r,column:t,type:"normal",inRange:!1,start:!1,end:!1}),o.type="normal";var l=4*r+t,c=new Date(e.date.getFullYear(),l).getTime();o.inRange=c>=Xr(e.minDate)&&c<=Xr(e.maxDate),o.start=e.minDate&&c===Xr(e.minDate),o.end=e.maxDate&&c===Xr(e.maxDate);var u=c===s;u&&(o.type="today"),o.text=l;var h=new Date(c);o.disabled="function"===typeof i&&i(h),o.selected=Object(b["arrayFind"])(n,(function(e){return e.getTime()===h.getTime()})),e.$set(a,t,o)},l=0;l<4;l++)o(l);return t}}},Qr=Zr,Jr=o(Qr,Yr,Kr,!1,null,null,null);Jr.options.__file="packages/date-picker/src/basic/month-table.vue";var ea=Jr.exports,ta=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("table",{staticClass:"el-date-table",class:{"is-week-mode":"week"===e.selectionMode},attrs:{cellspacing:"0",cellpadding:"0"},on:{click:e.handleClick,mousemove:e.handleMouseMove}},[i("tbody",[i("tr",[e.showWeekNumber?i("th",[e._v(e._s(e.t("el.datepicker.week")))]):e._e(),e._l(e.WEEKS,(function(t,n){return i("th",{key:n},[e._v(e._s(e.t("el.datepicker.weeks."+t)))])}))],2),e._l(e.rows,(function(t,n){return i("tr",{key:n,staticClass:"el-date-table__row",class:{current:e.isWeekActive(t[1])}},e._l(t,(function(t,n){return i("td",{key:n,class:e.getCellClasses(t)},[i("div",[i("span",[e._v("\n "+e._s(t.text)+"\n ")])])])})),0)}))],2)])},ia=[];ta._withStripped=!0;var na=["sun","mon","tue","wed","thu","fri","sat"],sa=function(e){return"number"===typeof e||"string"===typeof e?Object(ar["clearTime"])(new Date(e)).getTime():e instanceof Date?Object(ar["clearTime"])(e).getTime():NaN},ra=function(e,t){var i="function"===typeof t?Object(b["arrayFindIndex"])(e,t):e.indexOf(t);return i>=0?[].concat(e.slice(0,i),e.slice(i+1)):e},aa={mixins:[g.a],props:{firstDayOfWeek:{default:7,type:Number,validator:function(e){return e>=1&&e<=7}},value:{},defaultValue:{validator:function(e){return null===e||Object(ar["isDate"])(e)||Array.isArray(e)&&e.every(ar["isDate"])}},date:{},selectionMode:{default:"day"},showWeekNumber:{type:Boolean,default:!1},disabledDate:{},cellClassName:{},minDate:{},maxDate:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},computed:{offsetDay:function(){var e=this.firstDayOfWeek;return e>3?7-e:-e},WEEKS:function(){var e=this.firstDayOfWeek;return na.concat(na).slice(e,e+7)},year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},startDate:function(){return Object(ar["getStartDateOfMonth"])(this.year,this.month)},rows:function(){var e=this,t=new Date(this.year,this.month,1),i=Object(ar["getFirstDayOfMonth"])(t),n=Object(ar["getDayCountOfMonth"])(t.getFullYear(),t.getMonth()),s=Object(ar["getDayCountOfMonth"])(t.getFullYear(),0===t.getMonth()?11:t.getMonth()-1);i=0===i?7:i;for(var r=this.offsetDay,a=this.tableRows,o=1,l=this.startDate,c=this.disabledDate,u=this.cellClassName,h="dates"===this.selectionMode?Object(b["coerceTruthyValueToArray"])(this.value):[],d=sa(new Date),p=0;p<6;p++){var f=a[p];this.showWeekNumber&&(f[0]||(f[0]={type:"week",text:Object(ar["getWeekNumber"])(Object(ar["nextDate"])(l,7*p+1))}));for(var m=function(t){var a=f[e.showWeekNumber?t+1:t];a||(a={row:p,column:t,type:"normal",inRange:!1,start:!1,end:!1}),a.type="normal";var m=7*p+t,v=Object(ar["nextDate"])(l,m-r).getTime();a.inRange=v>=sa(e.minDate)&&v<=sa(e.maxDate),a.start=e.minDate&&v===sa(e.minDate),a.end=e.maxDate&&v===sa(e.maxDate);var g=v===d;if(g&&(a.type="today"),p>=0&&p<=1){var y=i+r<0?7+i+r:i+r;t+7*p>=y?a.text=o++:(a.text=s-(y-t%7)+1+7*p,a.type="prev-month")}else o<=n?a.text=o++:(a.text=o++-n,a.type="next-month");var _=new Date(v);a.disabled="function"===typeof c&&c(_),a.selected=Object(b["arrayFind"])(h,(function(e){return e.getTime()===_.getTime()})),a.customClass="function"===typeof u&&u(_),e.$set(f,e.showWeekNumber?t+1:t,a)},v=0;v<7;v++)m(v);if("week"===this.selectionMode){var g=this.showWeekNumber?1:0,y=this.showWeekNumber?7:6,_=this.isWeekActive(f[g+1]);f[g].inRange=_,f[g].start=_,f[y].inRange=_,f[y].end=_}}return a}},watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){sa(e)!==sa(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){sa(e)!==sa(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{tableRows:[[],[],[],[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var i=new Date(t);return this.year===i.getFullYear()&&this.month===i.getMonth()&&Number(e.text)===i.getDate()},getCellClasses:function(e){var t=this,i=this.selectionMode,n=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[],s=[];return"normal"!==e.type&&"today"!==e.type||e.disabled?s.push(e.type):(s.push("available"),"today"===e.type&&s.push("today")),"normal"===e.type&&n.some((function(i){return t.cellMatchesDate(e,i)}))&&s.push("default"),"day"!==i||"normal"!==e.type&&"today"!==e.type||!this.cellMatchesDate(e,this.value)||s.push("current"),!e.inRange||"normal"!==e.type&&"today"!==e.type&&"week"!==this.selectionMode||(s.push("in-range"),e.start&&s.push("start-date"),e.end&&s.push("end-date")),e.disabled&&s.push("disabled"),e.selected&&s.push("selected"),e.customClass&&s.push(e.customClass),s.join(" ")},getDateOfCell:function(e,t){var i=7*e+(t-(this.showWeekNumber?1:0))-this.offsetDay;return Object(ar["nextDate"])(this.startDate,i)},isWeekActive:function(e){if("week"!==this.selectionMode)return!1;var t=new Date(this.year,this.month,1),i=t.getFullYear(),n=t.getMonth();if("prev-month"===e.type&&(t.setMonth(0===n?11:n-1),t.setFullYear(0===n?i-1:i)),"next-month"===e.type&&(t.setMonth(11===n?0:n+1),t.setFullYear(11===n?i+1:i)),t.setDate(parseInt(e.text,10)),Object(ar["isDate"])(this.value)){var s=(this.value.getDay()-this.firstDayOfWeek+7)%7-1,r=Object(ar["prevDate"])(this.value,s);return r.getTime()===t.getTime()}return!1},markRange:function(e,t){e=sa(e),t=sa(t)||e;var i=[Math.min(e,t),Math.max(e,t)];e=i[0],t=i[1];for(var n=this.startDate,s=this.rows,r=0,a=s.length;r=e&&d<=t,u.start=e&&d===e,u.end=t&&d===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex-1,n=t.cellIndex;this.rows[i][n].disabled||i===this.lastRow&&n===this.lastColumn||(this.lastRow=i,this.lastColumn=n,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getDateOfCell(i,n)}}))}}},handleClick:function(e){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var i=t.parentNode.rowIndex-1,n="week"===this.selectionMode?1:t.cellIndex,s=this.rows[i][n];if(!s.disabled&&"week"!==s.type){var r=this.getDateOfCell(i,n);if("range"===this.selectionMode)this.rangeState.selecting?(r>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:r}):this.$emit("pick",{minDate:r,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:r,maxDate:null}),this.rangeState.selecting=!0);else if("day"===this.selectionMode)this.$emit("pick",r);else if("week"===this.selectionMode){var a=Object(ar["getWeekNumber"])(r),o=r.getFullYear()+"w"+a;this.$emit("pick",{year:r.getFullYear(),week:a,value:o,date:r})}else if("dates"===this.selectionMode){var l=this.value||[],c=s.selected?ra(l,(function(e){return e.getTime()===r.getTime()})):[].concat(l,[r]);this.$emit("pick",c)}}}}}},oa=aa,la=o(oa,ta,ia,!1,null,null,null);la.options.__file="packages/date-picker/src/basic/date-table.vue";var ca=la.exports,ua={mixins:[g.a],directives:{Clickoutside:V.a},watch:{showTime:function(e){var t=this;e&&this.$nextTick((function(e){var i=t.$refs.input.$el;i&&(t.pickerWidth=i.getBoundingClientRect().width+10)}))},value:function(e){"dates"===this.selectionMode&&this.value||(Object(ar["isDate"])(e)?this.date=new Date(e):this.date=this.getDefaultValue())},defaultValue:function(e){Object(ar["isDate"])(this.value)||(this.date=e?new Date(e):new Date)},timePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$refs.timepicker.adjustSpinners()}))},selectionMode:function(e){"month"===e?"year"===this.currentView&&"month"===this.currentView||(this.currentView="month"):"dates"===e&&(this.currentView="date")}},methods:{proxyTimePickerDataProperties:function(){var e=this,t=function(t){e.$refs.timepicker.format=t},i=function(t){e.$refs.timepicker.value=t},n=function(t){e.$refs.timepicker.date=t},s=function(t){e.$refs.timepicker.selectableRange=t};this.$watch("value",i),this.$watch("date",n),this.$watch("selectableRange",s),t(this.timeFormat),i(this.value),n(this.date),s(this.selectableRange)},handleClear:function(){this.date=this.getDefaultValue(),this.$emit("pick",null)},emit:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s0)||Object(ar["timeWithinRange"])(e,this.selectableRange,this.format||"HH:mm:ss")}},components:{TimePicker:Ar,YearTable:qr,MonthTable:ea,DateTable:ca,ElInput:m.a,ElButton:ae.a},data:function(){return{popperClass:"",date:new Date,value:"",defaultValue:null,defaultTime:null,showTime:!1,selectionMode:"day",shortcuts:"",visible:!1,currentView:"date",disabledDate:"",cellClassName:"",selectableRange:[],firstDayOfWeek:7,showWeekNumber:!1,timePickerVisible:!1,format:"",arrowControl:!1,userInputDate:null,userInputTime:null}},computed:{year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},week:function(){return Object(ar["getWeekNumber"])(this.date)},monthDate:function(){return this.date.getDate()},footerVisible:function(){return this.showTime||"dates"===this.selectionMode},visibleTime:function(){return null!==this.userInputTime?this.userInputTime:Object(ar["formatDate"])(this.value||this.defaultValue,this.timeFormat)},visibleDate:function(){return null!==this.userInputDate?this.userInputDate:Object(ar["formatDate"])(this.value||this.defaultValue,this.dateFormat)},yearLabel:function(){var e=this.t("el.datepicker.year");if("year"===this.currentView){var t=10*Math.floor(this.year/10);return e?t+" "+e+" - "+(t+9)+" "+e:t+" - "+(t+9)}return this.year+" "+e},timeFormat:function(){return this.format?Object(ar["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ar["extractDateFormat"])(this.format):"yyyy-MM-dd"}}},ha=ua,da=o(ha,Sr,Dr,!1,null,null,null);da.options.__file="packages/date-picker/src/panel/date.vue";var pa=da.exports,fa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[e.showTime?i("div",{staticClass:"el-date-range-picker__time-header"},[i("span",{staticClass:"el-date-range-picker__editors-wrap"},[i("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{ref:"minInput",staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startDate"),value:e.minVisibleDate},on:{input:function(t){return e.handleDateInput(t,"min")},change:function(t){return e.handleDateChange(t,"min")}}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMinTimeClose,expression:"handleMinTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startTime"),value:e.minVisibleTime},on:{focus:function(t){e.minTimePickerVisible=!0},input:function(t){return e.handleTimeInput(t,"min")},change:function(t){return e.handleTimeChange(t,"min")}}}),i("time-picker",{ref:"minTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.minTimePickerVisible},on:{pick:e.handleMinTimePick,mounted:function(t){e.$refs.minTimePicker.format=e.timeFormat}}})],1)]),i("span",{staticClass:"el-icon-arrow-right"}),i("span",{staticClass:"el-date-range-picker__editors-wrap is-right"},[i("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endDate"),value:e.maxVisibleDate,readonly:!e.minDate},on:{input:function(t){return e.handleDateInput(t,"max")},change:function(t){return e.handleDateChange(t,"max")}}})],1),i("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMaxTimeClose,expression:"handleMaxTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[i("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endTime"),value:e.maxVisibleTime,readonly:!e.minDate},on:{focus:function(t){e.minDate&&(e.maxTimePickerVisible=!0)},input:function(t){return e.handleTimeInput(t,"max")},change:function(t){return e.handleTimeChange(t,"max")}}}),i("time-picker",{ref:"maxTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.maxTimePickerVisible},on:{pick:e.handleMaxTimePick,mounted:function(t){e.$refs.maxTimePicker.format=e.timeFormat}}})],1)])]):e._e(),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[i("div",{staticClass:"el-date-range-picker__header"},[i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevMonth}}),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.leftNextMonth}}):e._e(),i("div",[e._v(e._s(e.leftLabel))])]),i("date-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[i("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.rightPrevMonth}}):e._e(),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",attrs:{type:"button"},on:{click:e.rightNextMonth}}),i("div",[e._v(e._s(e.rightLabel))])]),i("date-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2),e.showTime?i("div",{staticClass:"el-picker-panel__footer"},[i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.handleClear}},[e._v("\n "+e._s(e.t("el.datepicker.clear"))+"\n ")]),i("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm(!1)}}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1):e._e()])])},ma=[];fa._withStripped=!0;var va=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ar["nextDate"])(new Date(e),1)]:[new Date,Object(ar["nextDate"])(new Date,1)]},ga={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.leftDate.getMonth()+1))},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.rightDate.getMonth()+1))},leftYear:function(){return this.leftDate.getFullYear()},leftMonth:function(){return this.leftDate.getMonth()},leftMonthDate:function(){return this.leftDate.getDate()},rightYear:function(){return this.rightDate.getFullYear()},rightMonth:function(){return this.rightDate.getMonth()},rightMonthDate:function(){return this.rightDate.getDate()},minVisibleDate:function(){return null!==this.dateUserInput.min?this.dateUserInput.min:this.minDate?Object(ar["formatDate"])(this.minDate,this.dateFormat):""},maxVisibleDate:function(){return null!==this.dateUserInput.max?this.dateUserInput.max:this.maxDate||this.minDate?Object(ar["formatDate"])(this.maxDate||this.minDate,this.dateFormat):""},minVisibleTime:function(){return null!==this.timeUserInput.min?this.timeUserInput.min:this.minDate?Object(ar["formatDate"])(this.minDate,this.timeFormat):""},maxVisibleTime:function(){return null!==this.timeUserInput.max?this.timeUserInput.max:this.maxDate||this.minDate?Object(ar["formatDate"])(this.maxDate||this.minDate,this.timeFormat):""},timeFormat:function(){return this.format?Object(ar["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ar["extractDateFormat"])(this.format):"yyyy-MM-dd"},enableMonthArrow:function(){var e=(this.leftMonth+1)%12,t=this.leftMonth+1>=12?1:0;return this.unlinkPanels&&new Date(this.leftYear+t,e)=12}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ar["nextMonth"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},showTime:!1,shortcuts:"",visible:"",disabledDate:"",cellClassName:"",firstDayOfWeek:7,minTimePickerVisible:!1,maxTimePickerVisible:!1,format:"",arrowControl:!1,unlinkPanels:!1,dateUserInput:{min:null,max:null},timeUserInput:{min:null,max:null}}},watch:{minDate:function(e){var t=this;this.dateUserInput.min=null,this.timeUserInput.min=null,this.$nextTick((function(){if(t.$refs.maxTimePicker&&t.maxDate&&t.maxDatethis.maxDate&&(this.maxDate=this.minDate)):(this.maxDate=Object(ar["modifyDate"])(this.maxDate,i.getFullYear(),i.getMonth(),i.getDate()),this.maxDatethis.maxDate&&(this.maxDate=this.minDate),this.$refs.minTimePicker.value=this.minDate,this.minTimePickerVisible=!1):(this.maxDate=Object(ar["modifyTime"])(this.maxDate,i.getHours(),i.getMinutes(),i.getSeconds()),this.maxDate1&&void 0!==arguments[1])||arguments[1],n=this.defaultTime||[],s=Object(ar["modifyWithTimeString"])(e.minDate,n[0]),r=Object(ar["modifyWithTimeString"])(e.maxDate,n[1]);this.maxDate===r&&this.minDate===s||(this.onPick&&this.onPick(e),this.maxDate=r,this.minDate=s,setTimeout((function(){t.maxDate=r,t.minDate=s}),10),i&&!this.showTime&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleMinTimePick:function(e,t,i){this.minDate=this.minDate||new Date,e&&(this.minDate=Object(ar["modifyTime"])(this.minDate,e.getHours(),e.getMinutes(),e.getSeconds())),i||(this.minTimePickerVisible=t),(!this.maxDate||this.maxDate&&this.maxDate.getTime()this.maxDate.getTime()&&(this.minDate=new Date(this.maxDate))},handleMaxTimeClose:function(){this.maxTimePickerVisible=!1},leftPrevYear:function(){this.leftDate=Object(ar["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ar["nextMonth"])(this.leftDate))},leftPrevMonth:function(){this.leftDate=Object(ar["prevMonth"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ar["nextMonth"])(this.leftDate))},rightNextYear:function(){this.unlinkPanels?this.rightDate=Object(ar["nextYear"])(this.rightDate):(this.leftDate=Object(ar["nextYear"])(this.leftDate),this.rightDate=Object(ar["nextMonth"])(this.leftDate))},rightNextMonth:function(){this.unlinkPanels?this.rightDate=Object(ar["nextMonth"])(this.rightDate):(this.leftDate=Object(ar["nextMonth"])(this.leftDate),this.rightDate=Object(ar["nextMonth"])(this.leftDate))},leftNextYear:function(){this.leftDate=Object(ar["nextYear"])(this.leftDate)},leftNextMonth:function(){this.leftDate=Object(ar["nextMonth"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ar["prevYear"])(this.rightDate)},rightPrevMonth:function(){this.rightDate=Object(ar["prevMonth"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ar["isDate"])(e[0])&&Object(ar["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate&&null==this.maxDate&&(this.rangeState.selecting=!1),this.minDate=this.value&&Object(ar["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ar["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{TimePicker:Ar,DateTable:ca,ElInput:m.a,ElButton:ae.a}},ba=ga,ya=o(ba,fa,ma,!1,null,null,null);ya.options.__file="packages/date-picker/src/panel/date-range.vue";var _a=ya.exports,xa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts},e.popperClass]},[i("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?i("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,n){return i("button",{key:n,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(i){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),i("div",{staticClass:"el-picker-panel__body"},[i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[i("div",{staticClass:"el-date-range-picker__header"},[i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),i("div",[e._v(e._s(e.leftLabel))])]),i("month-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),i("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[i("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),i("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),i("div",[e._v(e._s(e.rightLabel))])]),i("month-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2)])])},Ca=[];xa._withStripped=!0;var wa=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ar["nextMonth"])(new Date(e))]:[new Date,Object(ar["nextMonth"])(new Date)]},ka={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")},leftYear:function(){return this.leftDate.getFullYear()},rightYear:function(){return this.rightDate.getFullYear()===this.leftDate.getFullYear()?this.leftDate.getFullYear()+1:this.rightDate.getFullYear()},enableYearArrow:function(){return this.unlinkPanels&&this.rightYear>this.leftYear+1}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ar["nextYear"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},shortcuts:"",visible:"",disabledDate:"",format:"",arrowControl:!1,unlinkPanels:!1}},watch:{value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(ar["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(ar["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),i=this.maxDate.getFullYear();this.rightDate=t===i?Object(ar["nextYear"])(this.maxDate):this.maxDate}else this.rightDate=Object(ar["nextYear"])(this.leftDate);else this.leftDate=wa(this.defaultValue)[0],this.rightDate=Object(ar["nextYear"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=wa(e),i=t[0],n=t[1];this.leftDate=i,this.rightDate=e&&e[1]&&i.getFullYear()!==n.getFullYear()&&this.unlinkPanels?n:Object(ar["nextYear"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=wa(this.defaultValue)[0],this.rightDate=Object(ar["nextYear"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleRangePick:function(e){var t=this,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.defaultTime||[],s=Object(ar["modifyWithTimeString"])(e.minDate,n[0]),r=Object(ar["modifyWithTimeString"])(e.maxDate,n[1]);this.maxDate===r&&this.minDate===s||(this.onPick&&this.onPick(e),this.maxDate=r,this.minDate=s,setTimeout((function(){t.maxDate=r,t.minDate=s}),10),i&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},leftPrevYear:function(){this.leftDate=Object(ar["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ar["prevYear"])(this.rightDate))},rightNextYear:function(){this.unlinkPanels||(this.leftDate=Object(ar["nextYear"])(this.leftDate)),this.rightDate=Object(ar["nextYear"])(this.rightDate)},leftNextYear:function(){this.leftDate=Object(ar["nextYear"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ar["prevYear"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ar["isDate"])(e[0])&&Object(ar["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(ar["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ar["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{MonthTable:ea,ElInput:m.a,ElButton:ae.a}},Sa=ka,Da=o(Sa,xa,Ca,!1,null,null,null);Da.options.__file="packages/date-picker/src/panel/month-range.vue";var $a=Da.exports,Oa=function(e){return"daterange"===e||"datetimerange"===e?_a:"monthrange"===e?$a:pa},Ea={mixins:[kr],name:"ElDatePicker",props:{type:{type:String,default:"date"},timeArrowControl:Boolean},watch:{type:function(e){this.picker?(this.unmountPicker(),this.panel=Oa(e),this.mountPicker()):this.panel=Oa(e)}},created:function(){this.panel=Oa(this.type)},install:function(e){e.component(Ea.name,Ea)}},Ta=Ea,Pa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],ref:"popper",staticClass:"el-picker-panel time-select el-popper",class:e.popperClass,style:{width:e.width+"px"}},[i("el-scrollbar",{attrs:{noresize:"","wrap-class":"el-picker-panel__content"}},e._l(e.items,(function(t){return i("div",{key:t.value,staticClass:"time-select-item",class:{selected:e.value===t.value,disabled:t.disabled,default:t.value===e.defaultValue},attrs:{disabled:t.disabled},on:{click:function(i){e.handleClick(t)}}},[e._v(e._s(t.value))])})),0)],1)])},Ma=[];Pa._withStripped=!0;var Na=function(e){var t=(e||"").split(":");if(t.length>=2){var i=parseInt(t[0],10),n=parseInt(t[1],10);return{hours:i,minutes:n}}return null},Ia=function(e,t){var i=Na(e),n=Na(t),s=i.minutes+60*i.hours,r=n.minutes+60*n.hours;return s===r?0:s>r?1:-1},ja=function(e){return(e.hours<10?"0"+e.hours:e.hours)+":"+(e.minutes<10?"0"+e.minutes:e.minutes)},Fa=function(e,t){var i=Na(e),n=Na(t),s={hours:i.hours,minutes:i.minutes};return s.minutes+=n.minutes,s.hours+=n.hours,s.hours+=Math.floor(s.minutes/60),s.minutes=s.minutes%60,ja(s)},La={components:{ElScrollbar:q.a},watch:{value:function(e){var t=this;e&&this.$nextTick((function(){return t.scrollToOption()}))}},methods:{handleClick:function(e){e.disabled||this.$emit("pick",e.value)},handleClear:function(){this.$emit("pick",null)},scrollToOption:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".selected",t=this.$refs.popper.querySelector(".el-picker-panel__content");tn()(t,t.querySelector(e))},handleMenuEnter:function(){var e=this,t=-1!==this.items.map((function(e){return e.value})).indexOf(this.value),i=-1!==this.items.map((function(e){return e.value})).indexOf(this.defaultValue),n=(t?".selected":i&&".default")||".time-select-item:not(.disabled)";this.$nextTick((function(){return e.scrollToOption(n)}))},scrollDown:function(e){var t=this.items,i=t.length,n=t.length,s=t.map((function(e){return e.value})).indexOf(this.value);while(n--)if(s=(s+e+i)%i,!t[s].disabled)return void this.$emit("pick",t[s].value,!0)},isValidValue:function(e){return-1!==this.items.filter((function(e){return!e.disabled})).map((function(e){return e.value})).indexOf(e)},handleKeydown:function(e){var t=e.keyCode;if(38===t||40===t){var i={40:1,38:-1},n=i[t.toString()];return this.scrollDown(n),void e.stopPropagation()}}},data:function(){return{popperClass:"",start:"09:00",end:"18:00",step:"00:30",value:"",defaultValue:"",visible:!1,minTime:"",maxTime:"",width:0}},computed:{items:function(){var e=this.start,t=this.end,i=this.step,n=[];if(e&&t&&i){var s=e;while(Ia(s,t)<=0)n.push({value:s,disabled:Ia(s,this.minTime||"-1:-1")<=0||Ia(s,this.maxTime||"100:100")>=0}),s=Fa(s,i)}return n}}},Aa=La,Va=o(Aa,Pa,Ma,!1,null,null,null);Va.options.__file="packages/date-picker/src/panel/time-select.vue";var Ba=Va.exports,za={mixins:[kr],name:"ElTimeSelect",componentName:"ElTimeSelect",props:{type:{type:String,default:"time-select"}},beforeCreate:function(){this.panel=Ba},install:function(e){e.component(za.name,za)}},Ra=za,Ha=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-range-picker el-picker-panel el-popper",class:e.popperClass},[i("div",{staticClass:"el-time-range-picker__content"},[i("div",{staticClass:"el-time-range-picker__cell"},[i("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.startTime")))]),i("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[i("time-spinner",{ref:"minSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.minDate},on:{change:e.handleMinChange,"select-range":e.setMinSelectionRange}})],1)]),i("div",{staticClass:"el-time-range-picker__cell"},[i("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.endTime")))]),i("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[i("time-spinner",{ref:"maxSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.maxDate},on:{change:e.handleMaxChange,"select-range":e.setMaxSelectionRange}})],1)])]),i("div",{staticClass:"el-time-panel__footer"},[i("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:function(t){e.handleCancel()}}},[e._v(e._s(e.t("el.datepicker.cancel")))]),i("button",{staticClass:"el-time-panel__btn confirm",attrs:{type:"button",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Wa=[];Ha._withStripped=!0;var qa=Object(ar["parseDate"])("00:00:00","HH:mm:ss"),Ya=Object(ar["parseDate"])("23:59:59","HH:mm:ss"),Ka=function(e){return Object(ar["modifyDate"])(qa,e.getFullYear(),e.getMonth(),e.getDate())},Ua=function(e){return Object(ar["modifyDate"])(Ya,e.getFullYear(),e.getMonth(),e.getDate())},Ga=function(e,t){return new Date(Math.min(e.getTime()+t,Ua(e).getTime()))},Xa={mixins:[g.a],components:{TimeSpinner:Ir},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},offset:function(){return this.showSeconds?11:8},spinner:function(){return this.selectionRange[0]this.maxDate.getTime()},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},data:function(){return{popperClass:"",minDate:new Date,maxDate:new Date,value:[],oldValue:[new Date,new Date],defaultValue:null,format:"HH:mm:ss",visible:!1,selectionRange:[0,2],arrowControl:!1}},watch:{value:function(e){Array.isArray(e)?(this.minDate=new Date(e[0]),this.maxDate=new Date(e[1])):Array.isArray(this.defaultValue)?(this.minDate=new Date(this.defaultValue[0]),this.maxDate=new Date(this.defaultValue[1])):this.defaultValue?(this.minDate=new Date(this.defaultValue),this.maxDate=Ga(new Date(this.defaultValue),36e5)):(this.minDate=new Date,this.maxDate=Ga(new Date,36e5))},visible:function(e){var t=this;e&&(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.minSpinner.emitSelectRange("hours")})))}},methods:{handleClear:function(){this.$emit("pick",null)},handleCancel:function(){this.$emit("pick",this.oldValue)},handleMinChange:function(e){this.minDate=Object(ar["clearMilliseconds"])(e),this.handleChange()},handleMaxChange:function(e){this.maxDate=Object(ar["clearMilliseconds"])(e),this.handleChange()},handleChange:function(){this.isValidValue([this.minDate,this.maxDate])&&(this.$refs.minSpinner.selectableRange=[[Ka(this.minDate),this.maxDate]],this.$refs.maxSpinner.selectableRange=[[this.minDate,Ua(this.maxDate)]],this.$emit("pick",[this.minDate,this.maxDate],!0))},setMinSelectionRange:function(e,t){this.$emit("select-range",e,t,"min"),this.selectionRange=[e,t]},setMaxSelectionRange:function(e,t){this.$emit("select-range",e,t,"max"),this.selectionRange=[e+this.offset,t+this.offset]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.$refs.minSpinner.selectableRange,i=this.$refs.maxSpinner.selectableRange;this.minDate=Object(ar["limitTimeRange"])(this.minDate,t,this.format),this.maxDate=Object(ar["limitTimeRange"])(this.maxDate,i,this.format),this.$emit("pick",[this.minDate,this.maxDate],e)},adjustSpinners:function(){this.$refs.minSpinner.adjustSpinners(),this.$refs.maxSpinner.adjustSpinners()},changeSelectionRange:function(e){var t=this.showSeconds?[0,3,6,11,14,17]:[0,3,8,11],i=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),n=t.indexOf(this.selectionRange[0]),s=(n+e+t.length)%t.length,r=t.length/2;s-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(b["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),t&&(Object(Ae["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),i.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(Ae["on"])(t,"focusin",(function(){e.handleFocus();var i=t.__vue__;i&&"function"===typeof i.focus&&i.focus()})),Object(Ae["on"])(i,"focusin",this.handleFocus),Object(Ae["on"])(t,"focusout",this.handleBlur),Object(Ae["on"])(i,"focusout",this.handleBlur)),Object(Ae["on"])(t,"keydown",this.handleKeydown),Object(Ae["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(Ae["on"])(t,"click",this.doToggle),Object(Ae["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(Ae["on"])(t,"mouseenter",this.handleMouseEnter),Object(Ae["on"])(i,"mouseenter",this.handleMouseEnter),Object(Ae["on"])(t,"mouseleave",this.handleMouseLeave),Object(Ae["on"])(i,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(Ae["on"])(t,"focusin",this.doShow),Object(Ae["on"])(t,"focusout",this.doClose)):(Object(Ae["on"])(t,"mousedown",this.doShow),Object(Ae["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(Ae["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(Ae["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(Ae["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&i&&!i.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(Ae["off"])(e,"click",this.doToggle),Object(Ae["off"])(e,"mouseup",this.doClose),Object(Ae["off"])(e,"mousedown",this.doShow),Object(Ae["off"])(e,"focusin",this.doShow),Object(Ae["off"])(e,"focusout",this.doClose),Object(Ae["off"])(e,"mousedown",this.doShow),Object(Ae["off"])(e,"mouseup",this.doClose),Object(Ae["off"])(e,"mouseleave",this.handleMouseLeave),Object(Ae["off"])(e,"mouseenter",this.handleMouseEnter),Object(Ae["off"])(document,"click",this.handleDocumentClick)}},ro=so,ao=o(ro,io,no,!1,null,null,null);ao.options.__file="packages/popover/src/main.vue";var oo=ao.exports,lo=function(e,t,i){var n=t.expression?t.value:t.arg,s=i.context.$refs[n];s&&(Array.isArray(s)?s[0].$refs.reference=e:s.$refs.reference=e)},co={bind:function(e,t,i){lo(e,t,i)},inserted:function(e,t,i){lo(e,t,i)}};Rn.a.directive("popover",co),oo.install=function(e){e.directive("popover",co),e.component(oo.name,oo)},oo.directive=co;var uo=oo,ho={name:"ElTooltip",mixins:[H.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(b["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new Rn.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=L()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var i=this.getFirstElement();if(!i)return null;var n=i.data=i.data||{};return n.staticClass=this.addTooltipClass(n.staticClass),i},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(Ae["on"])(this.referenceElm,"mouseenter",this.show),Object(Ae["on"])(this.referenceElm,"mouseleave",this.hide),Object(Ae["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(Ae["on"])(this.referenceElm,"blur",this.handleBlur),Object(Ae["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(Ae["addClass"])(this.referenceElm,"focusing"):Object(Ae["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,i=0;i0){To=Mo.shift();var t=To.options;for(var i in t)t.hasOwnProperty(i)&&(Po[i]=t[i]);void 0===t.callback&&(Po.callback=No);var n=Po.callback;Po.callback=function(t,i){n(t,i),e()},Object(Do["isVNode"])(Po.message)?(Po.$slots.default=[Po.message],Po.message=null):delete Po.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Po[e]&&(Po[e]=!0)})),document.body.appendChild(Po.$el),Rn.a.nextTick((function(){Po.visible=!0}))}},Fo=function e(t,i){if(!Rn.a.prototype.$isServer){if("string"===typeof t||Object(Do["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!i&&(i=t.callback),"undefined"!==typeof Promise)return new Promise((function(n,s){Mo.push({options:St()({},Oo,e.defaults,t),callback:i,resolve:n,reject:s}),jo()}));Mo.push({options:St()({},Oo,e.defaults,t),callback:i}),jo()}};Fo.setDefaults=function(e){Fo.defaults=e},Fo.alert=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":$o(t))?(i=t,t=""):void 0===t&&(t=""),Fo(St()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},i))},Fo.confirm=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":$o(t))?(i=t,t=""):void 0===t&&(t=""),Fo(St()({title:t,message:e,$type:"confirm",showCancelButton:!0},i))},Fo.prompt=function(e,t,i){return"object"===("undefined"===typeof t?"undefined":$o(t))?(i=t,t=""):void 0===t&&(t=""),Fo(St()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},i))},Fo.close=function(){Po.doClose(),Po.visible=!1,Mo=[],To=null};var Lo=Fo,Ao=Lo,Vo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},Bo=[];Vo._withStripped=!0;var zo={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},Ro=zo,Ho=o(Ro,Vo,Bo,!1,null,null,null);Ho.options.__file="packages/breadcrumb/src/breadcrumb.vue";var Wo=Ho.exports;Wo.install=function(e){e.component(Wo.name,Wo)};var qo=Wo,Yo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"el-breadcrumb__item"},[i("span",{ref:"link",class:["el-breadcrumb__inner",e.to?"is-link":""],attrs:{role:"link"}},[e._t("default")],2),e.separatorClass?i("i",{staticClass:"el-breadcrumb__separator",class:e.separatorClass}):i("span",{staticClass:"el-breadcrumb__separator",attrs:{role:"presentation"}},[e._v(e._s(e.separator))])])},Ko=[];Yo._withStripped=!0;var Uo={name:"ElBreadcrumbItem",props:{to:{},replace:Boolean},data:function(){return{separator:"",separatorClass:""}},inject:["elBreadcrumb"],mounted:function(){var e=this;this.separator=this.elBreadcrumb.separator,this.separatorClass=this.elBreadcrumb.separatorClass;var t=this.$refs.link;t.setAttribute("role","link"),t.addEventListener("click",(function(t){var i=e.to,n=e.$router;i&&n&&(e.replace?n.replace(i):n.push(i))}))}},Go=Uo,Xo=o(Go,Yo,Ko,!1,null,null,null);Xo.options.__file="packages/breadcrumb/src/breadcrumb-item.vue";var Zo=Xo.exports;Zo.install=function(e){e.component(Zo.name,Zo)};var Qo=Zo,Jo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{staticClass:"el-form",class:[e.labelPosition?"el-form--label-"+e.labelPosition:"",{"el-form--inline":e.inline}]},[e._t("default")],2)},el=[];Jo._withStripped=!0;var tl={name:"ElForm",componentName:"ElForm",provide:function(){return{elForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:Boolean,validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,this.potentialLabelWidthArr);return e?e+"px":""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("el.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("el.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Element Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var i=void 0;"function"!==typeof e&&window.Promise&&(i=new window.Promise((function(t,i){e=function(e,n){e?t(e):i(n)}})));var n=!0,s=0;0===this.fields.length&&e&&e(!0);var r={};return this.fields.forEach((function(i){i.validate("",(function(i,a){i&&(n=!1),r=St()({},r,a),"function"===typeof e&&++s===t.fields.length&&e(n,r)}))})),i||void 0}console.warn("[Element Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var i=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));i.length?i.forEach((function(e){e.validate("",t)})):console.warn("[Element Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[ElementForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var i=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(i,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},il=tl,nl=o(il,Jo,el,!1,null,null,null);nl.options.__file="packages/form/src/form.vue";var sl=nl.exports;sl.install=function(e){e.component(sl.name,sl)};var rl=sl,al=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-form-item",class:[{"el-form-item--feedback":e.elForm&&e.elForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.elForm&&e.elForm.hideRequiredAsterisk},e.sizeClass?"el-form-item--"+e.sizeClass:""]},[i("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?i("label",{staticClass:"el-form-item__label",style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),i("div",{staticClass:"el-form-item__content",style:e.contentStyle},[e._t("default"),i("transition",{attrs:{name:"el-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[i("div",{staticClass:"el-form-item__error",class:{"el-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.elForm&&e.elForm.inlineMessage||!1}},[e._v("\n "+e._s(e.validateMessage)+"\n ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},ol=[];al._withStripped=!0;var ll,cl,ul=i(40),hl=i.n(ul),dl={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["elForm","elFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var i=this.elForm.autoLabelWidth,n={};if(i&&"auto"!==i){var s=parseInt(i,10)-this.computedWidth;s&&(n.marginLeft=s+"px")}return e("div",{class:"el-form-item__label-wrap",style:n},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},pl=dl,fl=o(pl,ll,cl,!1,null,null,null);fl.options.__file="packages/form/src/label-wrap.vue";var ml=fl.exports,vl={name:"ElFormItem",componentName:"ElFormItem",mixins:[O.a],provide:function(){return{elFormItem:this}},inject:["elForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:ml},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e},rules:function(e){e&&0!==e.length||void 0!==this.required||this.clearValidate()}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var i=this.labelWidth||this.form.labelWidth;return"auto"===i?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.elForm.autoLabelWidth):e.marginLeft=i,e},form:function(){var e=this.$parent,t=e.$options.componentName;while("ElForm"!==t)"ElFormItem"===t&&(this.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),Object(b["getPropByPath"])(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.elForm.size},elFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.elFormItemSize||(this.$ELEMENT||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b["noop"];this.validateDisabled=!1;var n=this.getFilteredRule(e);if((!n||0===n.length)&&void 0===this.required)return i(),!0;this.validateState="validating";var s={};n&&n.length>0&&n.forEach((function(e){delete e.trigger})),s[this.prop]=n;var r=new hl.a(s),a={};a[this.prop]=this.fieldValue,r.validate(a,{firstFields:!0},(function(e,n){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",i(t.validateMessage,n),t.elForm&&t.elForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,i=this.fieldValue,n=this.prop;-1!==n.indexOf(":")&&(n=n.replace(/:/,"."));var s=Object(b["getPropByPath"])(t,n,!0);this.validateDisabled=!0,Array.isArray(i)?s.o[s.k]=[].concat(this.initialValue):s.o[s.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("ElTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,i=void 0!==this.required?{required:!!this.required}:[],n=Object(b["getPropByPath"])(e,this.prop||"");return e=e?n.o[this.prop||""]||n.v:[],[].concat(t||e||[]).concat(i)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return St()({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?e+"px":""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("el.form.blur",this.onFieldBlur),this.$on("el.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("ElForm","el.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("ElForm","el.form.removeField",[this])}},gl=vl,bl=o(gl,al,ol,!1,null,null,null);bl.options.__file="packages/form/src/form-item.vue";var yl=bl.exports;yl.install=function(e){e.component(yl.name,yl)};var _l=yl,xl=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},Cl=[];xl._withStripped=!0;var wl={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},i=0,n=0,s=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",r="width"===s?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,r){var o=Object(b["arrayFind"])(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!o)return!1;if(t.active){n=o["client"+a(s)];var l=window.getComputedStyle(o);return"width"===s&&e.tabs.length>1&&(n-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===s&&(i+=parseFloat(l.paddingLeft)),!1}return i+=o["client"+a(s)],!0}));var o="translate"+a(r)+"("+i+"px)";return t[s]=n+"px",t.transform=o,t.msTransform=o,t.webkitTransform=o,t}}}},kl=wl,Sl=o(kl,xl,Cl,!1,null,null,null);Sl.options.__file="packages/tabs/src/tab-bar.vue";var Dl=Sl.exports;function $l(){}var Ol,El,Tl=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},Pl={name:"TabNav",components:{TabBar:Dl},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:$l},onTabRemove:{type:Function,default:$l},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate"+e+"(-"+this.navOffset+"px)"}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset"+Tl(this.sizeName)],t=this.navOffset;if(t){var i=t>e?t-e:0;this.navOffset=i}},scrollNext:function(){var e=this.$refs.nav["offset"+Tl(this.sizeName)],t=this.$refs.navScroll["offset"+Tl(this.sizeName)],i=this.navOffset;if(!(e-i<=t)){var n=e-i>2*t?i+t:e-t;this.navOffset=n}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var i=this.$refs.navScroll,n=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),s=t.getBoundingClientRect(),r=i.getBoundingClientRect(),a=n?e.offsetWidth-r.width:e.offsetHeight-r.height,o=this.navOffset,l=o;n?(s.leftr.right&&(l=o+s.right-r.right)):(s.topr.bottom&&(l=o+(s.bottom-r.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset"+Tl(e)],i=this.$refs.navScroll["offset"+Tl(e)],n=this.navOffset;if(i0&&(this.navOffset=0)}},changeTab:function(e){var t=e.keyCode,i=void 0,n=void 0,s=void 0;-1!==[37,38,39,40].indexOf(t)&&(s=e.currentTarget.querySelectorAll("[role=tab]"),n=Array.prototype.indexOf.call(s,e.target),i=37===t||38===t?0===n?s.length-1:n-1:n0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var i=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"ElTabPane"===e.componentOptions.Ctor.options.name})),n=i.map((function(e){var t=e.componentInstance;return t})),s=!(n.length===this.panes.length&&n.every((function(t,i){return t===e.panes[i]})));(t||s)&&(this.panes=n)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,i){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,i))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,i=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var n=this.beforeLeave(e,this.currentName);n&&n.then?n.then((function(){i(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==n&&i()}else i()}},render:function(e){var t,i=this.type,n=this.handleTabClick,s=this.handleTabRemove,r=this.handleTabAdd,a=this.currentName,o=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,h=this.stretch,d=l||c?e("span",{class:"el-tabs__new-tab",on:{click:r,keydown:function(e){13===e.keyCode&&r()}},attrs:{tabindex:"0"}},[e("i",{class:"el-icon-plus"})]):null,p={props:{currentName:a,onTabClick:n,onTabRemove:s,editable:l,type:i,panes:o,stretch:h},ref:"nav"},f=e("div",{class:["el-tabs__header","is-"+u]},[d,e("tab-nav",p)]),m=e("div",{class:"el-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"el-tabs":!0,"el-tabs--card":"card"===i},t["el-tabs--"+u]=!0,t["el-tabs--border-card"]="border-card"===i,t)},["bottom"!==u?[f,m]:[m,f]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Al=Ll,Vl=o(Al,Il,jl,!1,null,null,null);Vl.options.__file="packages/tabs/src/tabs.vue";var Bl=Vl.exports;Bl.install=function(e){e.component(Bl.name,Bl)};var zl=Bl,Rl=function(){var e=this,t=e.$createElement,i=e._self._c||t;return!e.lazy||e.loaded||e.active?i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},Hl=[];Rl._withStripped=!0;var Wl={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this.$parent.currentName===(this.name||this.index);return e&&(this.loaded=!0),e},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},ql=Wl,Yl=o(ql,Rl,Hl,!1,null,null,null);Yl.options.__file="packages/tabs/src/tab-pane.vue";var Kl=Yl.exports;Kl.install=function(e){e.component(Kl.name,Kl)};var Ul,Gl,Xl=Kl,Zl={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,i=this.tagSize,n=this.hit,s=this.effect,r=["el-tag",t?"el-tag--"+t:"",i?"el-tag--"+i:"",s?"el-tag--"+s:"",n&&"is-hit"],a=e("span",{class:r,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},Ql=Zl,Jl=o(Ql,Ul,Gl,!1,null,null,null);Jl.options.__file="packages/tag/src/tag.vue";var ec=Jl.exports;ec.install=function(e){e.component(ec.name,ec)};var tc=ec,ic=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-tree",class:{"el-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e._l(e.root.childNodes,(function(t){return i("el-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?i("div",{staticClass:"el-tree__empty-block"},[i("span",{staticClass:"el-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"el-tree__drop-indicator"})],2)},nc=[];ic._withStripped=!0;var sc="$treeNodeId",rc=function(e,t){t&&!t[sc]&&Object.defineProperty(t,sc,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},ac=function(e,t){return e?t[e]:t[sc]},oc=function(e,t){var i=e;while(i&&"BODY"!==i.tagName){if(i.__vue__&&i.__vue__.$options.name===t)return i.__vue__;i=i.parentNode}return null},lc=function(){function e(e,t){for(var i=0;i0&&n.lazy&&n.defaultExpandAll&&this.expand(),Array.isArray(this.data)||rc(this,this.data),this.data){var a=n.defaultExpandedKeys,o=n.key;o&&a&&-1!==a.indexOf(this.key)&&this.expand(null,n.autoExpandParent),o&&void 0!==n.currentNodeKey&&this.key===n.currentNodeKey&&(n.currentNode=this,n.currentNode.isCurrent=!0),n.lazy&&n._initDefaultCheckedNode(this),this.updateLeafState()}}return e.prototype.setData=function(e){Array.isArray(e)||rc(this,e),this.data=e,this.childNodes=[];var t=void 0;t=0===this.level&&this.data instanceof Array?this.data:dc(this,"children")||[];for(var i=0,n=t.length;i1&&void 0!==arguments[1])||arguments[1],i=function i(n){for(var s=n.childNodes||[],r=!1,a=0,o=s.length;a-1&&t.splice(i,1);var n=this.childNodes.indexOf(e);n>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(n,1)),this.updateLeafState()},e.prototype.removeChildByData=function(e){for(var t=null,i=0;i0)n.expanded=!0,n=n.parent}i.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(i.checked?i.setChecked(!0,!0):i.store.checkStrictly||hc(i),n())})):n()},e.prototype.doCreateChildren=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(St()({data:e},i),void 0,!0)}))},e.prototype.collapse=function(){this.expanded=!1},e.prototype.shouldLoadData=function(){return!0===this.store.lazy&&this.store.load&&!this.loaded},e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser},e.prototype.setChecked=function(e,t,i,n){var s=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var r=uc(this.childNodes),a=r.all,o=r.allWithoutDisable;this.isLeaf||a||!o||(this.checked=!1,e=!1);var l=function(){if(t){for(var i=s.childNodes,r=0,a=i.length;r0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var i=this.store.props,n="children";return i&&(n=i.children||"children"),void 0===t[n]&&(t[n]=null),e&&!t[n]&&(t[n]=[]),t[n]},e.prototype.updateChildren=function(){var e=this,t=this.getChildren()||[],i=this.childNodes.map((function(e){return e.data})),n={},s=[];t.forEach((function(e,t){var r=e[sc],a=!!r&&Object(b["arrayFindIndex"])(i,(function(e){return e[sc]===r}))>=0;a?n[r]={index:t,data:e}:s.push({index:t,data:e})})),this.store.lazy||i.forEach((function(t){n[t[sc]]||e.removeChildByData(t)})),s.forEach((function(t){var i=t.index,n=t.data;e.insertChild({data:n},i)})),this.updateLeafState()},e.prototype.loadData=function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(i).length)e&&e.call(this);else{this.loading=!0;var n=function(n){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(n,i),t.updateLeafState(),e&&e.call(t,n)};this.store.load(this,n)}},lc(e,[{key:"label",get:function(){return dc(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return dc(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),mc=fc,vc="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function gc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var bc=function(){function e(t){var i=this;for(var n in gc(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(this.nodesMap={},this.root=new mc({data:this.data,store:this}),this.lazy&&this.load){var s=this.load;s(this.root,(function(e){i.root.doCreateChildren(e),i._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return e.prototype.filter=function(e){var t=this.filterNodeMethod,i=this.lazy,n=function n(s){var r=s.root?s.root.childNodes:s.childNodes;if(r.forEach((function(i){i.visible=t.call(i,e,i.data,i),n(i)})),!s.visible&&r.length){var a=!0;a=!r.some((function(e){return e.visible})),s.root?s.root.visible=!1===a:s.visible=!1===a}e&&(!s.visible||s.isLeaf||i||s.expand())};n(this)},e.prototype.setData=function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()},e.prototype.getNode=function(e){if(e instanceof mc)return e;var t="object"!==("undefined"===typeof e?"undefined":vc(e))?e:ac(this.key,e);return this.nodesMap[t]||null},e.prototype.insertBefore=function(e,t){var i=this.getNode(t);i.parent.insertBefore({data:e},i)},e.prototype.insertAfter=function(e,t){var i=this.getNode(t);i.parent.insertAfter({data:e},i)},e.prototype.remove=function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))},e.prototype.append=function(e,t){var i=t?this.getNode(t):this.root;i&&i.insertChild({data:e})},e.prototype._initDefaultCheckedNodes=function(){var e=this,t=this.defaultCheckedKeys||[],i=this.nodesMap;t.forEach((function(t){var n=i[t];n&&n.setChecked(!0,!e.checkStrictly)}))},e.prototype._initDefaultCheckedNode=function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)},e.prototype.setDefaultCheckedKey=function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())},e.prototype.registerNode=function(e){var t=this.key;if(t&&e&&e.data){var i=e.key;void 0!==i&&(this.nodesMap[e.key]=e)}},e.prototype.deregisterNode=function(e){var t=this,i=this.key;i&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])},e.prototype.getCheckedNodes=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=[],n=function n(s){var r=s.root?s.root.childNodes:s.childNodes;r.forEach((function(s){(s.checked||t&&s.indeterminate)&&(!e||e&&s.isLeaf)&&i.push(s.data),n(s)}))};return n(this),i},e.prototype.getCheckedKeys=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))},e.prototype.getHalfCheckedNodes=function(){var e=[],t=function t(i){var n=i.root?i.root.childNodes:i.childNodes;n.forEach((function(i){i.indeterminate&&e.push(i.data),t(i)}))};return t(this),e},e.prototype.getHalfCheckedKeys=function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))},e.prototype._getAllNodes=function(){var e=[],t=this.nodesMap;for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.prototype.updateChildren=function(e,t){var i=this.nodesMap[e];if(i){for(var n=i.childNodes,s=n.length-1;s>=0;s--){var r=n[s];this.remove(r.data)}for(var a=0,o=t.length;a1&&void 0!==arguments[1]&&arguments[1],i=arguments[2],n=this._getAllNodes().sort((function(e,t){return t.level-e.level})),s=Object.create(null),r=Object.keys(i);n.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,o=n.length;a-1;if(u){var h=l.parent;while(h&&h.level>0)s[h.data[e]]=!0,h=h.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var i=t.childNodes;i.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!s[c]&&l.setChecked(!1,!1)}},e.prototype.setCheckedNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.key,n={};e.forEach((function(e){n[(e||{})[i]]=!0})),this._setCheckedKeys(i,t,n)},e.prototype.setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var i=this.key,n={};e.forEach((function(e){n[e]=!0})),this._setCheckedKeys(i,t,n)},e.prototype.setDefaultExpandedKeys=function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var i=t.getNode(e);i&&i.expand(null,t.autoExpandParent)}))},e.prototype.setChecked=function(e,t,i){var n=this.getNode(e);n&&n.setChecked(!!t,i)},e.prototype.getCurrentNode=function(){return this.currentNode},e.prototype.setCurrentNode=function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0},e.prototype.setUserCurrentNode=function(e){var t=e[this.key],i=this.nodesMap[t];this.setCurrentNode(i)},e.prototype.setCurrentNodeKey=function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)},e}(),yc=bc,_c=function(){var e=this,t=this,i=t.$createElement,n=t._self._c||i;return n("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"el-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[n("div",{staticClass:"el-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[n("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"el-tree-node__expand-icon",t.tree.iconClass?t.tree.iconClass:"el-icon-caret-right"],on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?n("el-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?n("span",{staticClass:"el-tree-node__loading-icon el-icon-loading"}):t._e(),n("node-content",{attrs:{node:t.node}})],1),n("el-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?n("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"el-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return n("el-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},xc=[];_c._withStripped=!0;var Cc={name:"ElTreeNode",componentName:"ElTreeNode",mixins:[O.a],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{ElCollapseTransition:Ke.a,ElCheckbox:In.a,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,i=t.tree,n=this.node,s=n.data,r=n.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:i.$vnode.context,node:n,data:s,store:r}):i.$scopedSlots.default?i.$scopedSlots.default({node:n,data:s}):e("span",{class:"el-tree-node__label"},[n.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){return ac(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",this.node.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node),this.tree.$emit("current-change",e.currentNode?e.currentNode.data:null,e.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&this.handleCheckChange(null,{target:{checked:!this.node.checked}}),this.tree.$emit("node-click",this.node.data,this.node,this)},handleContextMenu:function(e){this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,this.node.data,this.node,this)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node.data,this.node,this),this.node.collapse()):(this.node.expand(),this.$emit("node-expand",this.node.data,this.node,this)))},handleCheckChange:function(e,t){var i=this;this.node.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=i.tree.store;i.tree.$emit("check",i.node.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,i){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,i)},handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this,t=this.$parent;t.isTree?this.tree=t:this.tree=t.tree;var i=this.tree;i||console.warn("Can not find node's tree.");var n=i.props||{},s=n["children"]||"children";this.$watch("node.data."+s,(function(){e.node.updateChildren()})),this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(t){e.node!==t&&e.node.collapse()}))}},wc=Cc,kc=o(wc,_c,xc,!1,null,null,null);kc.options.__file="packages/tree/src/tree-node.vue";var Sc=kc.exports,Dc={name:"ElTree",mixins:[O.a],components:{ElTreeNode:Sc},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0}}},props:{data:{type:Array},emptyText:{type:String,default:function(){return Object(vo["t"])("el.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},iconClass:String},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return ac(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var i=[t.data],n=t.parent;while(n&&n!==this.root)i.push(n.data),n=n.parent;return i.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,i){this.store.setChecked(e,t,i)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,i){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,i)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("el-tree-node")){var i=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var n=this.treeItemArray.indexOf(t),s=void 0;[38,40].indexOf(i)>-1&&(e.preventDefault(),s=38===i?0!==n?n-1:0:n-1&&(e.preventDefault(),t.click());var r=t.querySelector('[type="checkbox"]');[13,32].indexOf(i)>-1&&r&&(e.preventDefault(),r.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new yc({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(i,n){if("function"===typeof e.allowDrag&&!e.allowDrag(n.node))return i.preventDefault(),!1;i.dataTransfer.effectAllowed="move";try{i.dataTransfer.setData("text/plain","")}catch(s){}t.draggingNode=n,e.$emit("node-drag-start",n.node,i)})),this.$on("tree-node-drag-over",(function(i,n){var s=oc(i.target,"ElTreeNode"),r=t.dropNode;r&&r!==s&&Object(Ae["removeClass"])(r.$el,"is-drop-inner");var a=t.draggingNode;if(a&&s){var o=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(o=e.allowDrop(a.node,s.node,"prev"),u=l=e.allowDrop(a.node,s.node,"inner"),c=e.allowDrop(a.node,s.node,"next")),i.dataTransfer.dropEffect=l?"move":"none",(o||l||c)&&r!==s&&(r&&e.$emit("node-drag-leave",a.node,r.node,i),e.$emit("node-drag-enter",a.node,s.node,i)),(o||l||c)&&(t.dropNode=s),s.node.nextSibling===a.node&&(c=!1),s.node.previousSibling===a.node&&(o=!1),s.node.contains(a.node,!1)&&(l=!1),(a.node===s.node||a.node.contains(s.node))&&(o=!1,l=!1,c=!1);var h=s.$el.getBoundingClientRect(),d=e.$el.getBoundingClientRect(),p=void 0,f=o?l?.25:c?.45:1:-1,m=c?l?.75:o?.55:0:1,v=-9999,g=i.clientY-h.top;p=gh.height*m?"after":l?"inner":"none";var b=s.$el.querySelector(".el-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===p?v=b.top-d.top:"after"===p&&(v=b.bottom-d.top),y.style.top=v+"px",y.style.left=b.right-d.left+"px","inner"===p?Object(Ae["addClass"])(s.$el,"is-drop-inner"):Object(Ae["removeClass"])(s.$el,"is-drop-inner"),t.showDropIndicator="before"===p||"after"===p,t.allowDrop=t.showDropIndicator||u,t.dropType=p,e.$emit("node-drag-over",a.node,s.node,i)}})),this.$on("tree-node-drag-end",(function(i){var n=t.draggingNode,s=t.dropType,r=t.dropNode;if(i.preventDefault(),i.dataTransfer.dropEffect="move",n&&r){var a={data:n.node.data};"none"!==s&&n.node.remove(),"before"===s?r.node.parent.insertBefore(a,r.node):"after"===s?r.node.parent.insertAfter(a,r.node):"inner"===s&&r.node.insertChild(a),"none"!==s&&e.store.registerNode(a),Object(Ae["removeClass"])(r.$el,"is-drop-inner"),e.$emit("node-drag-end",n.node,r.node,s,i),"none"!==s&&e.$emit("node-drop",n.node,r.node,s,i)}n&&!r&&e.$emit("node-drag-end",n.node,null,s,i),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},$c=Dc,Oc=o($c,ic,nc,!1,null,null,null);Oc.options.__file="packages/tree/src/tree.vue";var Ec=Oc.exports;Ec.install=function(e){e.component(Ec.name,Ec)};var Tc=Ec,Pc=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-alert-fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-alert",class:[e.typeClass,e.center?"is-center":"","is-"+e.effect],attrs:{role:"alert"}},[e.showIcon?i("i",{staticClass:"el-alert__icon",class:[e.iconClass,e.isBigIcon]}):e._e(),i("div",{staticClass:"el-alert__content"},[e.title||e.$slots.title?i("span",{staticClass:"el-alert__title",class:[e.isBoldTitle]},[e._t("title",[e._v(e._s(e.title))])],2):e._e(),e.$slots.default&&!e.description?i("p",{staticClass:"el-alert__description"},[e._t("default")],2):e._e(),e.description&&!e.$slots.default?i("p",{staticClass:"el-alert__description"},[e._v(e._s(e.description))]):e._e(),i("i",{directives:[{name:"show",rawName:"v-show",value:e.closable,expression:"closable"}],staticClass:"el-alert__closebtn",class:{"is-customed":""!==e.closeText,"el-icon-close":""===e.closeText},on:{click:function(t){e.close()}}},[e._v(e._s(e.closeText))])])])])},Mc=[];Pc._withStripped=!0;var Nc={success:"el-icon-success",warning:"el-icon-warning",error:"el-icon-error"},Ic={name:"ElAlert",props:{title:{type:String,default:""},description:{type:String,default:""},type:{type:String,default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,default:"light",validator:function(e){return-1!==["light","dark"].indexOf(e)}}},data:function(){return{visible:!0}},methods:{close:function(){this.visible=!1,this.$emit("close")}},computed:{typeClass:function(){return"el-alert--"+this.type},iconClass:function(){return Nc[this.type]||"el-icon-info"},isBigIcon:function(){return this.description||this.$slots.default?"is-big":""},isBoldTitle:function(){return this.description||this.$slots.default?"is-bold":""}}},jc=Ic,Fc=o(jc,Pc,Mc,!1,null,null,null);Fc.options.__file="packages/alert/src/main.vue";var Lc=Fc.exports;Lc.install=function(e){e.component(Lc.name,Lc)};var Ac=Lc,Vc=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-notification-fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-notification",e.customClass,e.horizontalClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:function(t){e.clearTimer()},mouseleave:function(t){e.startTimer()},click:e.click}},[e.type||e.iconClass?i("i",{staticClass:"el-notification__icon",class:[e.typeClass,e.iconClass]}):e._e(),i("div",{staticClass:"el-notification__group",class:{"is-with-icon":e.typeClass||e.iconClass}},[i("h2",{staticClass:"el-notification__title",domProps:{textContent:e._s(e.title)}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.message,expression:"message"}],staticClass:"el-notification__content"},[e._t("default",[e.dangerouslyUseHTMLString?i("p",{domProps:{innerHTML:e._s(e.message)}}):i("p",[e._v(e._s(e.message))])])],2),e.showClose?i("div",{staticClass:"el-notification__closeBtn el-icon-close",on:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()])])])},Bc=[];Vc._withStripped=!0;var zc={success:"success",info:"info",warning:"warning",error:"error"},Rc={data:function(){return{visible:!1,title:"",message:"",duration:4500,type:"",showClose:!0,customClass:"",iconClass:"",onClose:null,onClick:null,closed:!1,verticalOffset:0,timer:null,dangerouslyUseHTMLString:!1,position:"top-right"}},computed:{typeClass:function(){return this.type&&zc[this.type]?"el-icon-"+zc[this.type]:""},horizontalClass:function(){return this.position.indexOf("right")>-1?"right":"left"},verticalProperty:function(){return/^top-/.test(this.position)?"top":"bottom"},positionStyle:function(){var e;return e={},e[this.verticalProperty]=this.verticalOffset+"px",e}},watch:{closed:function(e){e&&(this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},click:function(){"function"===typeof this.onClick&&this.onClick()},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose()},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){46===e.keyCode||8===e.keyCode?this.clearTimer():27===e.keyCode?this.closed||this.close():this.startTimer()}},mounted:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration)),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Hc=Rc,Wc=o(Hc,Vc,Bc,!1,null,null,null);Wc.options.__file="packages/notification/src/main.vue";var qc=Wc.exports,Yc=Rn.a.extend(qc),Kc=void 0,Uc=[],Gc=1,Xc=function e(t){if(!Rn.a.prototype.$isServer){t=St()({},t);var i=t.onClose,n="notification_"+Gc++,s=t.position||"top-right";t.onClose=function(){e.close(n,i)},Kc=new Yc({data:t}),Object(Do["isVNode"])(t.message)&&(Kc.$slots.default=[t.message],t.message="REPLACED_BY_VNODE"),Kc.id=n,Kc.$mount(),document.body.appendChild(Kc.$el),Kc.visible=!0,Kc.dom=Kc.$el,Kc.dom.style.zIndex=w["PopupManager"].nextZIndex();var r=t.offset||0;return Uc.filter((function(e){return e.position===s})).forEach((function(e){r+=e.$el.offsetHeight+16})),r+=16,Kc.verticalOffset=r,Uc.push(Kc),Kc}};["success","warning","info","error"].forEach((function(e){Xc[e]=function(t){return("string"===typeof t||Object(Do["isVNode"])(t))&&(t={message:t}),t.type=e,Xc(t)}})),Xc.close=function(e,t){var i=-1,n=Uc.length,s=Uc.filter((function(t,n){return t.id===e&&(i=n,!0)}))[0];if(s&&("function"===typeof t&&t(s),Uc.splice(i,1),!(n<=1)))for(var r=s.position,a=s.dom.offsetHeight,o=i;o=0;e--)Uc[e].close()};var Zc=Xc,Qc=Zc,Jc=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-slider",class:{"is-vertical":e.vertical,"el-slider--with-input":e.showInput},attrs:{role:"slider","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-orientation":e.vertical?"vertical":"horizontal","aria-disabled":e.sliderDisabled}},[e.showInput&&!e.range?i("el-input-number",{ref:"input",staticClass:"el-slider__input",attrs:{step:e.step,disabled:e.sliderDisabled,controls:e.showInputControls,min:e.min,max:e.max,debounce:e.debounce,size:e.inputSize},on:{change:e.emitChange},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}):e._e(),i("div",{ref:"slider",staticClass:"el-slider__runway",class:{"show-input":e.showInput,disabled:e.sliderDisabled},style:e.runwayStyle,on:{click:e.onSliderClick}},[i("div",{staticClass:"el-slider__bar",style:e.barStyle}),i("slider-button",{ref:"button1",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}),e.range?i("slider-button",{ref:"button2",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.secondValue,callback:function(t){e.secondValue=t},expression:"secondValue"}}):e._e(),e._l(e.stops,(function(t,n){return e.showStops?i("div",{key:n,staticClass:"el-slider__stop",style:e.getStopStyle(t)}):e._e()})),e.markList.length>0?[i("div",e._l(e.markList,(function(t,n){return i("div",{key:n,staticClass:"el-slider__stop el-slider__marks-stop",style:e.getStopStyle(t.position)})})),0),i("div",{staticClass:"el-slider__marks"},e._l(e.markList,(function(t,n){return i("slider-marker",{key:n,style:e.getStopStyle(t.position),attrs:{mark:t.mark}})})),1)]:e._e()],2)],1)},eu=[];Jc._withStripped=!0;var tu=i(41),iu=i.n(tu),nu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"button",staticClass:"el-slider__button-wrapper",class:{hover:e.hovering,dragging:e.dragging},style:e.wrapperStyle,attrs:{tabindex:"0"},on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave,mousedown:e.onButtonDown,touchstart:e.onButtonDown,focus:e.handleMouseEnter,blur:e.handleMouseLeave,keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.onLeftKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])||"button"in t&&2!==t.button?null:e.onRightKeyDown(t)},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.onLeftKeyDown(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.onRightKeyDown(t))}]}},[i("el-tooltip",{ref:"tooltip",attrs:{placement:"top","popper-class":e.tooltipClass,disabled:!e.showTooltip}},[i("span",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(e.formatValue))]),i("div",{staticClass:"el-slider__button",class:{hover:e.hovering,dragging:e.dragging}})])],1)},su=[];nu._withStripped=!0;var ru={name:"ElSliderButton",components:{ElTooltip:st.a},props:{value:{type:Number,default:0},vertical:{type:Boolean,default:!1},tooltipClass:String},data:function(){return{hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:null,oldValue:this.value}},computed:{disabled:function(){return this.$parent.sliderDisabled},max:function(){return this.$parent.max},min:function(){return this.$parent.min},step:function(){return this.$parent.step},showTooltip:function(){return this.$parent.showTooltip},precision:function(){return this.$parent.precision},currentPosition:function(){return(this.value-this.min)/(this.max-this.min)*100+"%"},enableFormat:function(){return this.$parent.formatTooltip instanceof Function},formatValue:function(){return this.enableFormat&&this.$parent.formatTooltip(this.value)||this.value},wrapperStyle:function(){return this.vertical?{bottom:this.currentPosition}:{left:this.currentPosition}}},watch:{dragging:function(e){this.$parent.dragging=e}},methods:{displayTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!0)},hideTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!1)},handleMouseEnter:function(){this.hovering=!0,this.displayTooltip()},handleMouseLeave:function(){this.hovering=!1,this.hideTooltip()},onButtonDown:function(e){this.disabled||(e.preventDefault(),this.onDragStart(e),window.addEventListener("mousemove",this.onDragging),window.addEventListener("touchmove",this.onDragging),window.addEventListener("mouseup",this.onDragEnd),window.addEventListener("touchend",this.onDragEnd),window.addEventListener("contextmenu",this.onDragEnd))},onLeftKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)-this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onRightKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)+this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onDragStart:function(e){this.dragging=!0,this.isClick=!0,"touchstart"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?this.startY=e.clientY:this.startX=e.clientX,this.startPosition=parseFloat(this.currentPosition),this.newPosition=this.startPosition},onDragging:function(e){if(this.dragging){this.isClick=!1,this.displayTooltip(),this.$parent.resetSize();var t=0;"touchmove"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?(this.currentY=e.clientY,t=(this.startY-this.currentY)/this.$parent.sliderSize*100):(this.currentX=e.clientX,t=(this.currentX-this.startX)/this.$parent.sliderSize*100),this.newPosition=this.startPosition+t,this.setPosition(this.newPosition)}},onDragEnd:function(){var e=this;this.dragging&&(setTimeout((function(){e.dragging=!1,e.hideTooltip(),e.isClick||(e.setPosition(e.newPosition),e.$parent.emitChange())}),0),window.removeEventListener("mousemove",this.onDragging),window.removeEventListener("touchmove",this.onDragging),window.removeEventListener("mouseup",this.onDragEnd),window.removeEventListener("touchend",this.onDragEnd),window.removeEventListener("contextmenu",this.onDragEnd))},setPosition:function(e){var t=this;if(null!==e&&!isNaN(e)){e<0?e=0:e>100&&(e=100);var i=100/((this.max-this.min)/this.step),n=Math.round(e/i),s=n*i*(this.max-this.min)*.01+this.min;s=parseFloat(s.toFixed(this.precision)),this.$emit("input",s),this.$nextTick((function(){t.displayTooltip(),t.$refs.tooltip&&t.$refs.tooltip.updatePopper()})),this.dragging||this.value===this.oldValue||(this.oldValue=this.value)}}}},au=ru,ou=o(au,nu,su,!1,null,null,null);ou.options.__file="packages/slider/src/button.vue";var lu=ou.exports,cu={name:"ElMarker",props:{mark:{type:[String,Object]}},render:function(){var e=arguments[0],t="string"===typeof this.mark?this.mark:this.mark.label;return e("div",{class:"el-slider__marks-text",style:this.mark.style||{}},[t])}},uu={name:"ElSlider",mixins:[O.a],inject:{elForm:{default:""}},props:{min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:{type:[Number,Array],default:0},showInput:{type:Boolean,default:!1},showInputControls:{type:Boolean,default:!0},inputSize:{type:String,default:"small"},showStops:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},formatTooltip:Function,disabled:{type:Boolean,default:!1},range:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},height:{type:String},debounce:{type:Number,default:300},label:{type:String},tooltipClass:String,marks:Object},components:{ElInputNumber:iu.a,SliderButton:lu,SliderMarker:cu},data:function(){return{firstValue:null,secondValue:null,oldValue:null,dragging:!1,sliderSize:1}},watch:{value:function(e,t){this.dragging||Array.isArray(e)&&Array.isArray(t)&&e.every((function(e,i){return e===t[i]}))||this.setValues()},dragging:function(e){e||this.setValues()},firstValue:function(e){this.range?this.$emit("input",[this.minValue,this.maxValue]):this.$emit("input",e)},secondValue:function(){this.range&&this.$emit("input",[this.minValue,this.maxValue])},min:function(){this.setValues()},max:function(){this.setValues()}},methods:{valueChanged:function(){var e=this;return this.range?![this.minValue,this.maxValue].every((function(t,i){return t===e.oldValue[i]})):this.value!==this.oldValue},setValues:function(){if(this.min>this.max)console.error("[Element Error][Slider]min should not be greater than max.");else{var e=this.value;this.range&&Array.isArray(e)?e[1]this.max?this.$emit("input",[this.max,this.max]):e[0]this.max?this.$emit("input",[e[0],this.max]):(this.firstValue=e[0],this.secondValue=e[1],this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",[this.minValue,this.maxValue]),this.oldValue=e.slice())):this.range||"number"!==typeof e||isNaN(e)||(ethis.max?this.$emit("input",this.max):(this.firstValue=e,this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",e),this.oldValue=e)))}},setPosition:function(e){var t=this.min+e*(this.max-this.min)/100;if(this.range){var i=void 0;i=Math.abs(this.minValue-t)this.secondValue?"button1":"button2",this.$refs[i].setPosition(e)}else this.$refs.button1.setPosition(e)},onSliderClick:function(e){if(!this.sliderDisabled&&!this.dragging){if(this.resetSize(),this.vertical){var t=this.$refs.slider.getBoundingClientRect().bottom;this.setPosition((t-e.clientY)/this.sliderSize*100)}else{var i=this.$refs.slider.getBoundingClientRect().left;this.setPosition((e.clientX-i)/this.sliderSize*100)}this.emitChange()}},resetSize:function(){this.$refs.slider&&(this.sliderSize=this.$refs.slider["client"+(this.vertical?"Height":"Width")])},emitChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.range?[e.minValue,e.maxValue]:e.value)}))},getStopStyle:function(e){return this.vertical?{bottom:e+"%"}:{left:e+"%"}}},computed:{stops:function(){var e=this;if(!this.showStops||this.min>this.max)return[];if(0===this.step)return[];for(var t=(this.max-this.min)/this.step,i=100*this.step/(this.max-this.min),n=[],s=1;s100*(e.maxValue-e.min)/(e.max-e.min)})):n.filter((function(t){return t>100*(e.firstValue-e.min)/(e.max-e.min)}))},markList:function(){var e=this;if(!this.marks)return[];var t=Object.keys(this.marks);return t.map(parseFloat).sort((function(e,t){return e-t})).filter((function(t){return t<=e.max&&t>=e.min})).map((function(t){return{point:t,position:100*(t-e.min)/(e.max-e.min),mark:e.marks[t]}}))},minValue:function(){return Math.min(this.firstValue,this.secondValue)},maxValue:function(){return Math.max(this.firstValue,this.secondValue)},barSize:function(){return this.range?100*(this.maxValue-this.minValue)/(this.max-this.min)+"%":100*(this.firstValue-this.min)/(this.max-this.min)+"%"},barStart:function(){return this.range?100*(this.minValue-this.min)/(this.max-this.min)+"%":"0%"},precision:function(){var e=[this.min,this.max,this.step].map((function(e){var t=(""+e).split(".")[1];return t?t.length:0}));return Math.max.apply(null,e)},runwayStyle:function(){return this.vertical?{height:this.height}:{}},barStyle:function(){return this.vertical?{height:this.barSize,bottom:this.barStart}:{width:this.barSize,left:this.barStart}},sliderDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},mounted:function(){var e=void 0;this.range?(Array.isArray(this.value)?(this.firstValue=Math.max(this.min,this.value[0]),this.secondValue=Math.min(this.max,this.value[1])):(this.firstValue=this.min,this.secondValue=this.max),this.oldValue=[this.firstValue,this.secondValue],e=this.firstValue+"-"+this.secondValue):("number"!==typeof this.value||isNaN(this.value)?this.firstValue=this.min:this.firstValue=Math.min(this.max,Math.max(this.min,this.value)),this.oldValue=this.firstValue,e=this.firstValue),this.$el.setAttribute("aria-valuetext",e),this.$el.setAttribute("aria-label",this.label?this.label:"slider between "+this.min+" and "+this.max),this.resetSize(),window.addEventListener("resize",this.resetSize)},beforeDestroy:function(){window.removeEventListener("resize",this.resetSize)}},hu=uu,du=o(hu,Jc,eu,!1,null,null,null);du.options.__file="packages/slider/src/main.vue";var pu=du.exports;pu.install=function(e){e.component(pu.name,pu)};var fu=pu,mu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[i("div",{staticClass:"el-loading-spinner"},[e.spinner?i("i",{class:e.spinner}):i("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[i("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?i("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},vu=[];mu._withStripped=!0;var gu={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},bu=gu,yu=o(bu,mu,vu,!1,null,null,null);yu.options.__file="packages/loading/src/loading.vue";var _u=yu.exports,xu=i(32),Cu=i.n(xu),wu=Rn.a.extend(_u),ku={install:function(e){if(!e.prototype.$isServer){var t=function(t,n){n.value?e.nextTick((function(){n.modifiers.fullscreen?(t.originalPosition=Object(Ae["getStyle"])(document.body,"position"),t.originalOverflow=Object(Ae["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=w["PopupManager"].nextZIndex(),Object(Ae["addClass"])(t.mask,"is-fullscreen"),i(document.body,t,n)):(Object(Ae["removeClass"])(t.mask,"is-fullscreen"),n.modifiers.body?(t.originalPosition=Object(Ae["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var i="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[i]+document.documentElement[i]-parseInt(Object(Ae["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),i(document.body,t,n)):(t.originalPosition=Object(Ae["getStyle"])(t,"position"),i(t,t,n)))})):(Cu()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var i=n.modifiers.fullscreen||n.modifiers.body?document.body:t;Object(Ae["removeClass"])(i,"el-loading-parent--relative"),Object(Ae["removeClass"])(i,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},i=function(t,i,n){i.domVisible||"none"===Object(Ae["getStyle"])(i,"display")||"hidden"===Object(Ae["getStyle"])(i,"visibility")?i.domVisible&&!0===i.instance.hiding&&(i.instance.visible=!0,i.instance.hiding=!1):(Object.keys(i.maskStyle).forEach((function(e){i.mask.style[e]=i.maskStyle[e]})),"absolute"!==i.originalPosition&&"fixed"!==i.originalPosition&&Object(Ae["addClass"])(t,"el-loading-parent--relative"),n.modifiers.fullscreen&&n.modifiers.lock&&Object(Ae["addClass"])(t,"el-loading-parent--hidden"),i.domVisible=!0,t.appendChild(i.mask),e.nextTick((function(){i.instance.hiding?i.instance.$emit("after-leave"):i.instance.visible=!0})),i.domInserted=!0)};e.directive("loading",{bind:function(e,i,n){var s=e.getAttribute("element-loading-text"),r=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),o=e.getAttribute("element-loading-custom-class"),l=n.context,c=new wu({el:document.createElement("div"),data:{text:l&&l[s]||s,spinner:l&&l[r]||r,background:l&&l[a]||a,customClass:l&&l[o]||o,fullscreen:!!i.modifiers.fullscreen}});e.instance=c,e.mask=c.$el,e.maskStyle={},i.value&&t(e,i)},update:function(e,i){e.instance.setText(e.getAttribute("element-loading-text")),i.oldValue!==i.value&&t(e,i)},unbind:function(e,i){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:i.modifiers})),e.instance&&e.instance.$destroy()}})}}},Su=ku,Du=Rn.a.extend(_u),$u={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},Ou=void 0;Du.prototype.originalPosition="",Du.prototype.originalOverflow="",Du.prototype.close=function(){var e=this;this.fullscreen&&(Ou=void 0),Cu()(this,(function(t){var i=e.fullscreen||e.body?document.body:e.target;Object(Ae["removeClass"])(i,"el-loading-parent--relative"),Object(Ae["removeClass"])(i,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var Eu=function(e,t,i){var n={};e.fullscreen?(i.originalPosition=Object(Ae["getStyle"])(document.body,"position"),i.originalOverflow=Object(Ae["getStyle"])(document.body,"overflow"),n.zIndex=w["PopupManager"].nextZIndex()):e.body?(i.originalPosition=Object(Ae["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var i="top"===t?"scrollTop":"scrollLeft";n[t]=e.target.getBoundingClientRect()[t]+document.body[i]+document.documentElement[i]+"px"})),["height","width"].forEach((function(t){n[t]=e.target.getBoundingClientRect()[t]+"px"}))):i.originalPosition=Object(Ae["getStyle"])(t,"position"),Object.keys(n).forEach((function(e){i.$el.style[e]=n[e]}))},Tu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Rn.a.prototype.$isServer){if(e=St()({},$u,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&Ou)return Ou;var t=e.body?document.body:e.target,i=new Du({el:document.createElement("div"),data:e});return Eu(e,t,i),"absolute"!==i.originalPosition&&"fixed"!==i.originalPosition&&Object(Ae["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(Ae["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(i.$el),Rn.a.nextTick((function(){i.visible=!0})),e.fullscreen&&(Ou=i),i}},Pu=Tu,Mu={install:function(e){e.use(Su),e.prototype.$loading=Pu},directive:Su,service:Pu},Nu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("i",{class:"el-icon-"+e.name})},Iu=[];Nu._withStripped=!0;var ju={name:"ElIcon",props:{name:String}},Fu=ju,Lu=o(Fu,Nu,Iu,!1,null,null,null);Lu.options.__file="packages/icon/src/icon.vue";var Au=Lu.exports;Au.install=function(e){e.component(Au.name,Au)};var Vu=Au,Bu={name:"ElRow",componentName:"ElRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:String},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-"+this.gutter/2+"px",e.marginRight=e.marginLeft),e}},render:function(e){return e(this.tag,{class:["el-row","start"!==this.justify?"is-justify-"+this.justify:"",this.align?"is-align-"+this.align:"",{"el-row--flex":"flex"===this.type}],style:this.style},this.$slots.default)},install:function(e){e.component(Bu.name,Bu)}},zu=Bu,Ru="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hu={name:"ElCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"ElRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,i=[],n={};return this.gutter&&(n.paddingLeft=this.gutter/2+"px",n.paddingRight=n.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&i.push("span"!==e?"el-col-"+e+"-"+t[e]:"el-col-"+t[e])})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])i.push("el-col-"+e+"-"+t[e]);else if("object"===Ru(t[e])){var n=t[e];Object.keys(n).forEach((function(t){i.push("span"!==t?"el-col-"+e+"-"+t+"-"+n[t]:"el-col-"+e+"-"+n[t])}))}})),e(this.tag,{class:["el-col",i],style:n},this.$slots.default)},install:function(e){e.component(Hu.name,Hu)}},Wu=Hu,qu=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return i("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(i){if(!("button"in i)&&e._k(i.keyCode,"delete",[8,46],i.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?i("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),i("a",{staticClass:"el-upload-list__item-name",on:{click:function(i){e.handleClick(t)}}},[i("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+"\n ")]),i("label",{staticClass:"el-upload-list__item-status-label"},[i("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():i("i",{staticClass:"el-icon-close",on:{click:function(i){e.$emit("remove",t)}}}),e.disabled?e._e():i("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),"uploading"===t.status?i("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?i("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?i("span",{staticClass:"el-upload-list__item-preview",on:{click:function(i){e.handlePreview(t)}}},[i("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():i("span",{staticClass:"el-upload-list__item-delete",on:{click:function(i){e.$emit("remove",t)}}},[i("i",{staticClass:"el-icon-delete"})])]):e._e()],{file:t})],2)})),0)},Yu=[];qu._withStripped=!0;var Ku=i(33),Uu=i.n(Ku),Gu={name:"ElUploadList",mixins:[g.a],data:function(){return{focusing:!1}},components:{ElProgress:Uu.a},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},Xu=Gu,Zu=o(Xu,qu,Yu,!1,null,null,null);Zu.options.__file="packages/upload/src/upload-list.vue";var Qu=Zu.exports,Ju=i(24),eh=i.n(Ju);function th(e,t,i){var n=void 0;n=i.response?""+(i.response.error||i.response):i.responseText?""+i.responseText:"fail to post "+e+" "+i.status;var s=new Error(n);return s.status=i.status,s.method="post",s.url=e,s}function ih(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(i){return t}}function nh(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,i=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new FormData;e.data&&Object.keys(e.data).forEach((function(t){n.append(t,e.data[t])})),n.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(th(i,e,t));e.onSuccess(ih(t))},t.open("post",i,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var s=e.headers||{};for(var r in s)s.hasOwnProperty(r)&&null!==s[r]&&t.setRequestHeader(r,s[r]);return t.send(n),t}}var sh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop(t)},dragover:function(t){return t.preventDefault(),e.onDragover(t)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},rh=[];sh._withStripped=!0;var ah={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var i=e.type,n=e.name,s=n.indexOf(".")>-1?"."+n.split(".").pop():"",r=i.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?s===e:/\/\*$/.test(e)?r===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&i===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},oh=ah,lh=o(oh,sh,rh,!1,null,null,null);lh.options.__file="packages/upload/src/upload-dragger.vue";var ch,uh,hh=lh.exports,dh={inject:["uploader"],components:{UploadDragger:hh},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:nh},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var i=Array.prototype.slice.call(e);this.multiple||(i=i.slice(0,1)),0!==i.length&&i.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var i=this.beforeUpload(e);i&&i.then?i.then((function(i){var n=Object.prototype.toString.call(i);if("[object File]"===n||"[object Blob]"===n){for(var s in"[object Blob]"===n&&(i=new File([i],e.name,{type:e.type})),e)e.hasOwnProperty(s)&&(i[s]=e[s]);t.post(i)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==i?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var i=e;e.uid&&(i=e.uid),t[i]&&t[i].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,i=e.uid,n={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(i){t.onProgress(i,e)},onSuccess:function(n){t.onSuccess(n,e),delete t.reqs[i]},onError:function(n){t.onError(n,e),delete t.reqs[i]}},s=this.httpRequest(n);this.reqs[i]=s,s&&s.then&&s.then(n.onSuccess,n.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,i=this.drag,n=this.name,s=this.handleChange,r=this.multiple,a=this.accept,o=this.listType,l=this.uploadFiles,c=this.disabled,u=this.handleKeydown,h={class:{"el-upload":!0},on:{click:t,keydown:u}};return h.class["el-upload--"+o]=!0,e("div",eh()([h,{attrs:{tabindex:"0"}}]),[i?e("upload-dragger",{attrs:{disabled:c},on:{file:l}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:n,multiple:r,accept:a},ref:"input",on:{change:s}})])}},ph=dh,fh=o(ph,ch,uh,!1,null,null,null);fh.options.__file="packages/upload/src/upload.vue";var mh=fh.exports;function vh(){}var gh,bh,yh={name:"ElUpload",mixins:[D.a],components:{ElProgress:Uu.a,UploadList:Qu,Upload:mh},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,required:!0},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:vh},onChange:{type:Function,default:vh},onPreview:{type:Function},onSuccess:{type:Function,default:vh},onProgress:{type:Function,default:vh},onError:{type:Function,default:vh},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:vh}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(i){return void console.error("[Element Error][Upload]",i)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var i=this.getFile(t);this.onProgress(e,i,this.uploadFiles),i.status="uploading",i.percentage=e.percent||0},handleSuccess:function(e,t){var i=this.getFile(t);i&&(i.status="success",i.response=e,this.onSuccess(e,i,this.uploadFiles),this.onChange(i,this.uploadFiles))},handleError:function(e,t){var i=this.getFile(t),n=this.uploadFiles;i.status="fail",n.splice(n.indexOf(i),1),this.onError(e,i,this.uploadFiles),this.onChange(i,this.uploadFiles)},handleRemove:function(e,t){var i=this;t&&(e=this.getFile(t));var n=function(){i.abort(e);var t=i.uploadFiles;t.splice(t.indexOf(e),1),i.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var s=this.beforeRemove(e,this.uploadFiles);s&&s.then?s.then((function(){n()}),vh):!1!==s&&n()}}else n()},getFile:function(e){var t=this.uploadFiles,i=void 0;return t.every((function(t){return i=e.uid===t.uid?t:null,!i})),i},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t=this,i=void 0;this.showFileList&&(i=e(Qu,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(t.$scopedSlots.file)return t.$scopedSlots.file({file:e.file})}]));var n={props:{type:this.type,drag:this.drag,action:this.action,multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest},ref:"upload-inner"},s=this.$slots.trigger||this.$slots.default,r=e("upload",n,[s]);return e("div",["picture-card"===this.listType?i:"",this.$slots.trigger?[r,this.$slots.default]:r,this.$slots.tip,"picture-card"!==this.listType?i:""])}},_h=yh,xh=o(_h,gh,bh,!1,null,null,null);xh.options.__file="packages/upload/src/index.vue";var Ch=xh.exports;Ch.install=function(e){e.component(Ch.name,Ch)};var wh=Ch,kh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?i("div",{staticClass:"el-progress-bar"},[i("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[i("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?i("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):i("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[i("svg",{attrs:{viewBox:"0 0 100 100"}},[i("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),i("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":e.strokeLinecap,"stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?i("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?i("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},Sh=[];kh._withStripped=!0;var Dh={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),i=0;ie)return t[i].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,i){return"string"===typeof e?{color:e,percentage:(i+1)*t}:e}))}}},$h=Dh,Oh=o($h,kh,Sh,!1,null,null,null);Oh.options.__file="packages/progress/src/progress.vue";var Eh=Oh.exports;Eh.install=function(e){e.component(Eh.name,Eh)};var Th=Eh,Ph=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"el-spinner"},[i("svg",{staticClass:"el-spinner-inner",style:{width:e.radius/2+"px",height:e.radius/2+"px"},attrs:{viewBox:"0 0 50 50"}},[i("circle",{staticClass:"path",attrs:{cx:"25",cy:"25",r:"20",fill:"none",stroke:e.strokeColor,"stroke-width":e.strokeWidth}})])])},Mh=[];Ph._withStripped=!0;var Nh={name:"ElSpinner",props:{type:String,radius:{type:Number,default:100},strokeWidth:{type:Number,default:5},strokeColor:{type:String,default:"#efefef"}}},Ih=Nh,jh=o(Ih,Ph,Mh,!1,null,null,null);jh.options.__file="packages/spinner/src/spinner.vue";var Fh=jh.exports;Fh.install=function(e){e.component(Fh.name,Fh)};var Lh=Fh,Ah=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?i("i",{class:e.iconClass}):i("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?i("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):i("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?i("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},Vh=[];Ah._withStripped=!0;var Bh={success:"success",info:"info",warning:"warning",error:"error"},zh={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+Bh[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Rh=zh,Hh=o(Rh,Ah,Vh,!1,null,null,null);Hh.options.__file="packages/message/src/main.vue";var Wh=Hh.exports,qh=i(16),Yh=Object.assign||function(e){for(var t=1;tGh.length-1))for(var a=n;a=0;e--)Gh[e].close()};var Qh=Zh,Jh=Qh,ed=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-badge"},[e._t("default"),i("transition",{attrs:{name:"el-zoom-in-center"}},[i("sup",{directives:[{name:"show",rawName:"v-show",value:!e.hidden&&(e.content||0===e.content||e.isDot),expression:"!hidden && (content || content === 0 || isDot)"}],staticClass:"el-badge__content",class:[e.type?"el-badge__content--"+e.type:null,{"is-fixed":e.$slots.default,"is-dot":e.isDot}],domProps:{textContent:e._s(e.content)}})])],2)},td=[];ed._withStripped=!0;var id={name:"ElBadge",props:{value:[String,Number],max:Number,isDot:Boolean,hidden:Boolean,type:{type:String,validator:function(e){return["primary","success","warning","info","danger"].indexOf(e)>-1}}},computed:{content:function(){if(!this.isDot){var e=this.value,t=this.max;return"number"===typeof e&&"number"===typeof t&&t0&&e-1this.value,i=this.allowHalf&&this.pointerAtLeftHalf&&e-.5<=this.currentValue&&e>this.currentValue;return t||i},getIconStyle:function(e){var t=this.rateDisabled?this.disabledVoidColor:this.voidColor;return{color:e<=this.currentValue?this.activeColor:t}},selectValue:function(e){this.rateDisabled||(this.allowHalf&&this.pointerAtLeftHalf?(this.$emit("input",this.currentValue),this.$emit("change",this.currentValue)):(this.$emit("input",e),this.$emit("change",e)))},handleKey:function(e){if(!this.rateDisabled){var t=this.currentValue,i=e.keyCode;38===i||39===i?(this.allowHalf?t+=.5:t+=1,e.stopPropagation(),e.preventDefault()):37!==i&&40!==i||(this.allowHalf?t-=.5:t-=1,e.stopPropagation(),e.preventDefault()),t=t<0?0:t,t=t>this.max?this.max:t,this.$emit("input",t),this.$emit("change",t)}},setCurrentValue:function(e,t){if(!this.rateDisabled){if(this.allowHalf){var i=t.target;Object(Ae["hasClass"])(i,"el-rate__item")&&(i=i.querySelector(".el-rate__icon")),Object(Ae["hasClass"])(i,"el-rate__decimal")&&(i=i.parentNode),this.pointerAtLeftHalf=2*t.offsetX<=i.clientWidth,this.currentValue=this.pointerAtLeftHalf?e-.5:e}else this.currentValue=e;this.hoverIndex=e}},resetCurrentValue:function(){this.rateDisabled||(this.allowHalf&&(this.pointerAtLeftHalf=this.value!==Math.floor(this.value)),this.currentValue=this.value,this.hoverIndex=-1)}},created:function(){this.value||this.$emit("input",0)}},gd=vd,bd=o(gd,fd,md,!1,null,null,null);bd.options.__file="packages/rate/src/main.vue";var yd=bd.exports;yd.install=function(e){e.component(yd.name,yd)};var _d=yd,xd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-steps",class:[!e.simple&&"el-steps--"+e.direction,e.simple&&"el-steps--simple"]},[e._t("default")],2)},Cd=[];xd._withStripped=!0;var wd={name:"ElSteps",mixins:[D.a],props:{space:[Number,String],active:Number,direction:{type:String,default:"horizontal"},alignCenter:Boolean,simple:Boolean,finishStatus:{type:String,default:"finish"},processStatus:{type:String,default:"process"}},data:function(){return{steps:[],stepOffset:0}},methods:{getMigratingConfig:function(){return{props:{center:"center is removed."}}}},watch:{active:function(e,t){this.$emit("change",e,t)},steps:function(e){e.forEach((function(e,t){e.index=t}))}}},kd=wd,Sd=o(kd,xd,Cd,!1,null,null,null);Sd.options.__file="packages/steps/src/steps.vue";var Dd=Sd.exports;Dd.install=function(e){e.component(Dd.name,Dd)};var $d=Dd,Od=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-step",class:[!e.isSimple&&"is-"+e.$parent.direction,e.isSimple&&"is-simple",e.isLast&&!e.space&&!e.isCenter&&"is-flex",e.isCenter&&!e.isVertical&&!e.isSimple&&"is-center"],style:e.style},[i("div",{staticClass:"el-step__head",class:"is-"+e.currentStatus},[i("div",{staticClass:"el-step__line",style:e.isLast?"":{marginRight:e.$parent.stepOffset+"px"}},[i("i",{staticClass:"el-step__line-inner",style:e.lineStyle})]),i("div",{staticClass:"el-step__icon",class:"is-"+(e.icon?"icon":"text")},["success"!==e.currentStatus&&"error"!==e.currentStatus?e._t("icon",[e.icon?i("i",{staticClass:"el-step__icon-inner",class:[e.icon]}):e._e(),e.icon||e.isSimple?e._e():i("div",{staticClass:"el-step__icon-inner"},[e._v(e._s(e.index+1))])]):i("i",{staticClass:"el-step__icon-inner is-status",class:["el-icon-"+("success"===e.currentStatus?"check":"close")]})],2)]),i("div",{staticClass:"el-step__main"},[i("div",{ref:"title",staticClass:"el-step__title",class:["is-"+e.currentStatus]},[e._t("title",[e._v(e._s(e.title))])],2),e.isSimple?i("div",{staticClass:"el-step__arrow"}):i("div",{staticClass:"el-step__description",class:["is-"+e.currentStatus]},[e._t("description",[e._v(e._s(e.description))])],2)])])},Ed=[];Od._withStripped=!0;var Td={name:"ElStep",props:{title:String,icon:String,description:String,status:String},data:function(){return{index:-1,lineStyle:{},internalStatus:""}},beforeCreate:function(){this.$parent.steps.push(this)},beforeDestroy:function(){var e=this.$parent.steps,t=e.indexOf(this);t>=0&&e.splice(t,1)},computed:{currentStatus:function(){return this.status||this.internalStatus},prevStatus:function(){var e=this.$parent.steps[this.index-1];return e?e.currentStatus:"wait"},isCenter:function(){return this.$parent.alignCenter},isVertical:function(){return"vertical"===this.$parent.direction},isSimple:function(){return this.$parent.simple},isLast:function(){var e=this.$parent;return e.steps[e.steps.length-1]===this},stepsCount:function(){return this.$parent.steps.length},space:function(){var e=this.isSimple,t=this.$parent.space;return e?"":t},style:function(){var e={},t=this.$parent,i=t.steps.length,n="number"===typeof this.space?this.space+"px":this.space?this.space:100/(i-(this.isCenter?0:1))+"%";return e.flexBasis=n,this.isVertical||(this.isLast?e.maxWidth=100/this.stepsCount+"%":e.marginRight=-this.$parent.stepOffset+"px"),e}},methods:{updateStatus:function(e){var t=this.$parent.$children[this.index-1];e>this.index?this.internalStatus=this.$parent.finishStatus:e===this.index&&"error"!==this.prevStatus?this.internalStatus=this.$parent.processStatus:this.internalStatus="wait",t&&t.calcProgress(this.internalStatus)},calcProgress:function(e){var t=100,i={};i.transitionDelay=150*this.index+"ms",e===this.$parent.processStatus?(this.currentStatus,t=0):"wait"===e&&(t=0,i.transitionDelay=-150*this.index+"ms"),i.borderWidth=t&&!this.isSimple?"1px":0,"vertical"===this.$parent.direction?i.height=t+"%":i.width=t+"%",this.lineStyle=i}},mounted:function(){var e=this,t=this.$watch("index",(function(i){e.$watch("$parent.active",e.updateStatus,{immediate:!0}),e.$watch("$parent.processStatus",(function(){var t=e.$parent.active;e.updateStatus(t)}),{immediate:!0}),t()}))}},Pd=Td,Md=o(Pd,Od,Ed,!1,null,null,null);Md.options.__file="packages/steps/src/step.vue";var Nd=Md.exports;Nd.install=function(e){e.component(Nd.name,Nd)};var Id=Nd,jd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.carouselClasses,on:{mouseenter:function(t){return t.stopPropagation(),e.handleMouseEnter(t)},mouseleave:function(t){return t.stopPropagation(),e.handleMouseLeave(t)}}},[i("div",{staticClass:"el-carousel__container",style:{height:e.height}},[e.arrowDisplay?i("transition",{attrs:{name:"carousel-arrow-left"}},[i("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex>0),expression:"(arrow === 'always' || hover) && (loop || activeIndex > 0)"}],staticClass:"el-carousel__arrow el-carousel__arrow--left",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("left")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex-1)}}},[i("i",{staticClass:"el-icon-arrow-left"})])]):e._e(),e.arrowDisplay?i("transition",{attrs:{name:"carousel-arrow-right"}},[i("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex0}))},carouselClasses:function(){var e=["el-carousel","el-carousel--"+this.direction];return"card"===this.type&&e.push("el-carousel--card"),e},indicatorsClasses:function(){var e=["el-carousel__indicators","el-carousel__indicators--"+this.direction];return this.hasLabel&&e.push("el-carousel__indicators--labels"),"outside"!==this.indicatorPosition&&"card"!==this.type||e.push("el-carousel__indicators--outside"),e}},watch:{items:function(e){e.length>0&&this.setActiveItem(this.initialIndex)},activeIndex:function(e,t){this.resetItemPosition(t),t>-1&&this.$emit("change",e,t)},autoplay:function(e){e?this.startTimer():this.pauseTimer()},loop:function(){this.setActiveItem(this.activeIndex)},interval:function(){this.pauseTimer(),this.startTimer()}},methods:{handleMouseEnter:function(){this.hover=!0,this.pauseTimer()},handleMouseLeave:function(){this.hover=!1,this.startTimer()},itemInStage:function(e,t){var i=this.items.length;return t===i-1&&e.inStage&&this.items[0].active||e.inStage&&this.items[t+1]&&this.items[t+1].active?"left":!!(0===t&&e.inStage&&this.items[i-1].active||e.inStage&&this.items[t-1]&&this.items[t-1].active)&&"right"},handleButtonEnter:function(e){var t=this;"vertical"!==this.direction&&this.items.forEach((function(i,n){e===t.itemInStage(i,n)&&(i.hover=!0)}))},handleButtonLeave:function(){"vertical"!==this.direction&&this.items.forEach((function(e){e.hover=!1}))},updateItems:function(){this.items=this.$children.filter((function(e){return"ElCarouselItem"===e.$options.name}))},resetItemPosition:function(e){var t=this;this.items.forEach((function(i,n){i.translateItem(n,t.activeIndex,e)}))},playSlides:function(){this.activeIndex0&&(e=this.items.indexOf(t[0]))}if(e=Number(e),isNaN(e)||e!==Math.floor(e))console.warn("[Element Warn][Carousel]index must be an integer.");else{var i=this.items.length,n=this.activeIndex;this.activeIndex=e<0?this.loop?i-1:0:e>=i?this.loop?0:i-1:e,n===this.activeIndex&&this.resetItemPosition(n),this.resetTimer()}},prev:function(){this.setActiveItem(this.activeIndex-1)},next:function(){this.setActiveItem(this.activeIndex+1)},handleIndicatorClick:function(e){this.activeIndex=e},handleIndicatorHover:function(e){"hover"===this.trigger&&e!==this.activeIndex&&(this.activeIndex=e)}},created:function(){var e=this;this.throttledArrowClick=Ad()(300,!0,(function(t){e.setActiveItem(t)})),this.throttledIndicatorHover=Ad()(300,(function(t){e.handleIndicatorHover(t)}))},mounted:function(){var e=this;this.updateItems(),this.$nextTick((function(){Object(Ji["addResizeListener"])(e.$el,e.resetItemPosition),e.initialIndex=0&&(e.activeIndex=e.initialIndex),e.startTimer()}))},beforeDestroy:function(){this.$el&&Object(Ji["removeResizeListener"])(this.$el,this.resetItemPosition),this.pauseTimer()}},Bd=Vd,zd=o(Bd,jd,Fd,!1,null,null,null);zd.options.__file="packages/carousel/src/main.vue";var Rd=zd.exports;Rd.install=function(e){e.component(Rd.name,Rd)};var Hd=Rd,Wd={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function qd(e){var t=e.move,i=e.size,n=e.bar,s={},r="translate"+n.axis+"("+t+"%)";return s[n.size]=i,s.transform=r,s.msTransform=r,s.webkitTransform=r,s}var Yd={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return Wd[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,i=this.move,n=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+n.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:qd({size:t,move:i,bar:n})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]/2,n=100*(t-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=n*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(Ae["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(Ae["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var i=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]-t,s=100*(i-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=s*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(Ae["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(Ae["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},Kd={name:"ElScrollbar",components:{Bar:Yd},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=gs()(),i=this.wrapStyle;if(t){var n="-"+t+"px",s="margin-bottom: "+n+"; margin-right: "+n+";";Array.isArray(this.wrapStyle)?(i=Object(b["toObject"])(this.wrapStyle),i.marginRight=i.marginBottom=n):"string"===typeof this.wrapStyle?i+=s:i=s}var r=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),a=e("div",{ref:"wrap",style:i,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[r]]),o=void 0;return o=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:i},[[r]])]:[a,e(Yd,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(Yd,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},o)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,i=this.wrap;i&&(e=100*i.clientHeight/i.scrollHeight,t=100*i.clientWidth/i.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(Ji["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(Ji["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(Kd.name,Kd)}},Ud=Kd,Gd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.ready,expression:"ready"}],staticClass:"el-carousel__item",class:{"is-active":e.active,"el-carousel__item--card":"card"===e.$parent.type,"is-in-stage":e.inStage,"is-hover":e.hover,"is-animating":e.animating},style:e.itemStyle,on:{click:e.handleItemClick}},["card"===e.$parent.type?i("div",{directives:[{name:"show",rawName:"v-show",value:!e.active,expression:"!active"}],staticClass:"el-carousel__mask"}):e._e(),e._t("default")],2)},Xd=[];Gd._withStripped=!0;var Zd=.83,Qd={name:"ElCarouselItem",props:{name:String,label:{type:[String,Number],default:""}},data:function(){return{hover:!1,translate:0,scale:1,active:!1,ready:!1,inStage:!1,animating:!1}},methods:{processIndex:function(e,t,i){return 0===t&&e===i-1?-1:t===i-1&&0===e?i:e=i/2?i+1:e>t+1&&e-t>=i/2?-2:e},calcCardTranslate:function(e,t){var i=this.$parent.$el.offsetWidth;return this.inStage?i*((2-Zd)*(e-t)+1)/4:e2&&this.$parent.loop&&(e=this.processIndex(e,t,r)),"card"===n)"vertical"===s&&console.warn("[Element Warn][Carousel]vertical direction is not supported in card mode"),this.inStage=Math.round(Math.abs(e-t))<=1,this.active=e===t,this.translate=this.calcCardTranslate(e,t),this.scale=this.active?1:Zd;else{this.active=e===t;var a="vertical"===s;this.translate=this.calcTranslate(e,t,a),this.scale=1}this.ready=!0},handleItemClick:function(){var e=this.$parent;if(e&&"card"===e.type){var t=e.items.indexOf(this);e.setActiveItem(t)}}},computed:{parentDirection:function(){return this.$parent.direction},itemStyle:function(){var e="vertical"===this.parentDirection?"translateY":"translateX",t=e+"("+this.translate+"px) scale("+this.scale+")",i={transform:t};return Object(b["autoprefixer"])(i)}},created:function(){this.$parent&&this.$parent.updateItems()},destroyed:function(){this.$parent&&this.$parent.updateItems()}},Jd=Qd,ep=o(Jd,Gd,Xd,!1,null,null,null);ep.options.__file="packages/carousel/src/item.vue";var tp=ep.exports;tp.install=function(e){e.component(tp.name,tp)};var ip=tp,np=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-collapse",attrs:{role:"tablist","aria-multiselectable":"true"}},[e._t("default")],2)},sp=[];np._withStripped=!0;var rp={name:"ElCollapse",componentName:"ElCollapse",props:{accordion:Boolean,value:{type:[Array,String,Number],default:function(){return[]}}},data:function(){return{activeNames:[].concat(this.value)}},provide:function(){return{collapse:this}},watch:{value:function(e){this.activeNames=[].concat(e)}},methods:{setActiveNames:function(e){e=[].concat(e);var t=this.accordion?e[0]:e;this.activeNames=e,this.$emit("input",t),this.$emit("change",t)},handleItemClick:function(e){if(this.accordion)this.setActiveNames(!this.activeNames[0]&&0!==this.activeNames[0]||this.activeNames[0]!==e.name?e.name:"");else{var t=this.activeNames.slice(0),i=t.indexOf(e.name);i>-1?t.splice(i,1):t.push(e.name),this.setActiveNames(t)}}},created:function(){this.$on("item-click",this.handleItemClick)}},ap=rp,op=o(ap,np,sp,!1,null,null,null);op.options.__file="packages/collapse/src/collapse.vue";var lp=op.exports;lp.install=function(e){e.component(lp.name,lp)};var cp=lp,up=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-collapse-item",class:{"is-active":e.isActive,"is-disabled":e.disabled}},[i("div",{attrs:{role:"tab","aria-expanded":e.isActive,"aria-controls":"el-collapse-content-"+e.id,"aria-describedby":"el-collapse-content-"+e.id}},[i("div",{staticClass:"el-collapse-item__header",class:{focusing:e.focusing,"is-active":e.isActive},attrs:{role:"button",id:"el-collapse-head-"+e.id,tabindex:e.disabled?void 0:0},on:{click:e.handleHeaderClick,keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.stopPropagation(),e.handleEnterClick(t))},focus:e.handleFocus,blur:function(t){e.focusing=!1}}},[e._t("title",[e._v(e._s(e.title))]),i("i",{staticClass:"el-collapse-item__arrow el-icon-arrow-right",class:{"is-active":e.isActive}})],2)]),i("el-collapse-transition",[i("div",{directives:[{name:"show",rawName:"v-show",value:e.isActive,expression:"isActive"}],staticClass:"el-collapse-item__wrap",attrs:{role:"tabpanel","aria-hidden":!e.isActive,"aria-labelledby":"el-collapse-head-"+e.id,id:"el-collapse-content-"+e.id}},[i("div",{staticClass:"el-collapse-item__content"},[e._t("default")],2)])])],1)},hp=[];up._withStripped=!0;var dp={name:"ElCollapseItem",componentName:"ElCollapseItem",mixins:[O.a],components:{ElCollapseTransition:Ke.a},data:function(){return{contentWrapStyle:{height:"auto",display:"block"},contentHeight:0,focusing:!1,isClick:!1,id:Object(b["generateId"])()}},inject:["collapse"],props:{title:String,name:{type:[String,Number],default:function(){return this._uid}},disabled:Boolean},computed:{isActive:function(){return this.collapse.activeNames.indexOf(this.name)>-1}},methods:{handleFocus:function(){var e=this;setTimeout((function(){e.isClick?e.isClick=!1:e.focusing=!0}),50)},handleHeaderClick:function(){this.disabled||(this.dispatch("ElCollapse","item-click",this),this.focusing=!1,this.isClick=!0)},handleEnterClick:function(){this.dispatch("ElCollapse","item-click",this)}}},pp=dp,fp=o(pp,up,hp,!1,null,null,null);fp.options.__file="packages/collapse/src/collapse-item.vue";var mp=fp.exports;mp.install=function(e){e.component(mp.name,mp)};var vp=mp,gp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:function(){return e.toggleDropDownVisible(!1)},expression:"() => toggleDropDownVisible(false)"}],ref:"reference",class:["el-cascader",e.realSize&&"el-cascader--"+e.realSize,{"is-disabled":e.isDisabled}],on:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1},click:function(){return e.toggleDropDownVisible(!e.readonly||void 0)},keydown:e.handleKeyDown}},[i("el-input",{ref:"input",class:{"is-focus":e.dropDownVisible},attrs:{size:e.realSize,placeholder:e.placeholder,readonly:e.readonly,disabled:e.isDisabled,"validate-event":!1},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput},model:{value:e.multiple?e.presentText:e.inputValue,callback:function(t){e.multiple?e.presentText:e.inputValue=t},expression:"multiple ? presentText : inputValue"}},[i("template",{slot:"suffix"},[e.clearBtnVisible?i("i",{key:"clear",staticClass:"el-input__icon el-icon-circle-close",on:{click:function(t){return t.stopPropagation(),e.handleClear(t)}}}):i("i",{key:"arrow-down",class:["el-input__icon","el-icon-arrow-down",e.dropDownVisible&&"is-reverse"],on:{click:function(t){t.stopPropagation(),e.toggleDropDownVisible()}}})])],2),e.multiple?i("div",{staticClass:"el-cascader__tags"},[e._l(e.presentTags,(function(t){return i("el-tag",{key:t.key,attrs:{type:"info",size:e.tagSize,hit:t.hitState,closable:t.closable,"disable-transitions":""},on:{close:function(i){e.deleteTag(t)}}},[i("span",[e._v(e._s(t.text))])])})),e.filterable&&!e.isDisabled?i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.inputValue,expression:"inputValue",modifiers:{trim:!0}}],staticClass:"el-cascader__search-input",attrs:{type:"text",placeholder:e.presentTags.length?"":e.placeholder},domProps:{value:e.inputValue},on:{input:[function(t){t.target.composing||(e.inputValue=t.target.value.trim())},function(t){return e.handleInput(e.inputValue,t)}],click:function(t){t.stopPropagation(),e.toggleDropDownVisible(!0)},keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?null:e.handleDelete(t)},blur:function(t){e.$forceUpdate()}}}):e._e()],2):e._e(),i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.handleDropdownLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.dropDownVisible,expression:"dropDownVisible"}],ref:"popper",class:["el-popper","el-cascader__dropdown",e.popperClass]},[i("el-cascader-panel",{directives:[{name:"show",rawName:"v-show",value:!e.filtering,expression:"!filtering"}],ref:"panel",attrs:{options:e.options,props:e.config,border:!1,"render-label":e.$scopedSlots.default},on:{"expand-change":e.handleExpandChange,close:function(t){e.toggleDropDownVisible(!1)}},model:{value:e.checkedValue,callback:function(t){e.checkedValue=t},expression:"checkedValue"}}),e.filterable?i("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.filtering,expression:"filtering"}],ref:"suggestionPanel",staticClass:"el-cascader__suggestion-panel",attrs:{tag:"ul","view-class":"el-cascader__suggestion-list"},nativeOn:{keydown:function(t){return e.handleSuggestionKeyDown(t)}}},[e.suggestions.length?e._l(e.suggestions,(function(t,n){return i("li",{key:t.uid,class:["el-cascader__suggestion-item",t.checked&&"is-checked"],attrs:{tabindex:-1},on:{click:function(t){e.handleSuggestionClick(n)}}},[i("span",[e._v(e._s(t.text))]),t.checked?i("i",{staticClass:"el-icon-check"}):e._e()])})):e._t("empty",[i("li",{staticClass:"el-cascader__empty-text"},[e._v(e._s(e.t("el.cascader.noMatch")))])])],2):e._e()],1)])],1)},bp=[];gp._withStripped=!0;var yp=i(42),_p=i.n(yp),xp=i(34),Cp=i.n(xp),wp=Cp.a.keys,kp={expandTrigger:{newProp:"expandTrigger",type:String},changeOnSelect:{newProp:"checkStrictly",type:Boolean},hoverThreshold:{newProp:"hoverThreshold",type:Number}},Sp={props:{placement:{type:String,default:"bottom-start"},appendToBody:H.a.props.appendToBody,visibleArrow:{type:Boolean,default:!0},arrowOffset:H.a.props.arrowOffset,offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions,transformOrigin:H.a.props.transformOrigin},methods:H.a.methods,data:H.a.data,beforeDestroy:H.a.beforeDestroy},Dp={medium:36,small:32,mini:28},$p={name:"ElCascader",directives:{Clickoutside:V.a},mixins:[Sp,O.a,g.a,D.a],inject:{elForm:{default:""},elFormItem:{default:""}},components:{ElInput:m.a,ElTag:Qi.a,ElScrollbar:q.a,ElCascaderPanel:_p.a},props:{value:{},options:Array,props:Object,size:String,placeholder:{type:String,default:function(){return Object(vo["t"])("el.cascader.placeholder")}},disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:Function,separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,debounce:{type:Number,default:300},beforeFilter:{type:Function,default:function(){return function(){}}},popperClass:String},data:function(){return{dropDownVisible:!1,checkedValue:this.value,inputHover:!1,inputValue:null,presentText:null,presentTags:[],checkedNodes:[],filtering:!1,suggestions:[],inputInitialHeight:0,pressDeleteCount:0}},computed:{realSize:function(){var e=(this.elFormItem||{}).elFormItemSize;return this.size||e||(this.$ELEMENT||{}).size},tagSize:function(){return["small","mini"].indexOf(this.realSize)>-1?"mini":"small"},isDisabled:function(){return this.disabled||(this.elForm||{}).disabled},config:function(){var e=this.props||{},t=this.$attrs;return Object.keys(kp).forEach((function(i){var n=kp[i],s=n.newProp,r=n.type,a=t[i]||t[Object(b["kebabCase"])(i)];Object(Dt["isDef"])(i)&&!Object(Dt["isDef"])(e[s])&&(r===Boolean&&""===a&&(a=!0),e[s]=a)})),e},multiple:function(){return this.config.multiple},leafOnly:function(){return!this.config.checkStrictly},readonly:function(){return!this.filterable||this.multiple},clearBtnVisible:function(){return!(!this.clearable||this.isDisabled||this.filtering||!this.inputHover)&&(this.multiple?!!this.checkedNodes.filter((function(e){return!e.isDisabled})).length:!!this.presentText)},panel:function(){return this.$refs.panel}},watch:{disabled:function(){this.computePresentContent()},value:function(e){Object(b["isEqual"])(e,this.checkedValue)||(this.checkedValue=e,this.computePresentContent())},checkedValue:function(e){var t=this.value,i=this.dropDownVisible,n=this.config,s=n.checkStrictly,r=n.multiple;Object(b["isEqual"])(e,t)&&!Object(qh["isUndefined"])(t)||(this.computePresentContent(),r||s||!i||this.toggleDropDownVisible(!1),this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",[e]))},options:{handler:function(){this.$nextTick(this.computePresentContent)},deep:!0},presentText:function(e){this.inputValue=e},presentTags:function(e,t){this.multiple&&(e.length||t.length)&&this.$nextTick(this.updateStyle)},filtering:function(e){this.$nextTick(this.updatePopper)}},mounted:function(){var e=this,t=this.$refs.input;t&&t.$el&&(this.inputInitialHeight=t.$el.offsetHeight||Dp[this.realSize]||40),this.isEmptyValue(this.value)||this.computePresentContent(),this.filterHandler=L()(this.debounce,(function(){var t=e.inputValue;if(t){var i=e.beforeFilter(t);i&&i.then?i.then(e.getSuggestions):!1!==i?e.getSuggestions():e.filtering=!1}else e.filtering=!1})),Object(Ji["addResizeListener"])(this.$el,this.updateStyle)},beforeDestroy:function(){Object(Ji["removeResizeListener"])(this.$el,this.updateStyle)},methods:{getMigratingConfig:function(){return{props:{"expand-trigger":"expand-trigger is removed, use `props.expandTrigger` instead.","change-on-select":"change-on-select is removed, use `props.checkStrictly` instead.","hover-threshold":"hover-threshold is removed, use `props.hoverThreshold` instead"},events:{"active-item-change":"active-item-change is renamed to expand-change"}}},toggleDropDownVisible:function(e){var t=this;if(!this.isDisabled){var i=this.dropDownVisible,n=this.$refs.input;e=Object(Dt["isDef"])(e)?e:!i,e!==i&&(this.dropDownVisible=e,e&&this.$nextTick((function(){t.updatePopper(),t.panel.scrollIntoView()})),n.$refs.input.setAttribute("aria-expanded",e),this.$emit("visible-change",e))}},handleDropdownLeave:function(){this.filtering=!1,this.inputValue=this.presentText,this.doDestroy()},handleKeyDown:function(e){switch(e.keyCode){case wp.enter:this.toggleDropDownVisible();break;case wp.down:this.toggleDropDownVisible(!0),this.focusFirstNode(),e.preventDefault();break;case wp.esc:case wp.tab:this.toggleDropDownVisible(!1);break}},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleInput:function(e,t){!this.dropDownVisible&&this.toggleDropDownVisible(!0),t&&t.isComposing||(e?this.filterHandler():this.filtering=!1)},handleClear:function(){this.presentText="",this.panel.clearCheckedNodes()},handleExpandChange:function(e){this.$nextTick(this.updatePopper.bind(this)),this.$emit("expand-change",e),this.$emit("active-item-change",e)},focusFirstNode:function(){var e=this;this.$nextTick((function(){var t=e.filtering,i=e.$refs,n=i.popper,s=i.suggestionPanel,r=null;if(t&&s)r=s.$el.querySelector(".el-cascader__suggestion-item");else{var a=n.querySelector(".el-cascader-menu");r=a.querySelector('.el-cascader-node[tabindex="-1"]')}r&&(r.focus(),!t&&r.click())}))},computePresentContent:function(){var e=this;this.$nextTick((function(){e.config.multiple?(e.computePresentTags(),e.presentText=e.presentTags.length?" ":null):e.computePresentText()}))},isEmptyValue:function(e){var t=this.multiple,i=this.panel.config.emitPath;return!(!t&&!i)&&Object(b["isEmpty"])(e)},computePresentText:function(){var e=this.checkedValue,t=this.config;if(!this.isEmptyValue(e)){var i=this.panel.getNodeByValue(e);if(i&&(t.checkStrictly||i.isLeaf))return void(this.presentText=i.getText(this.showAllLevels,this.separator))}this.presentText=null},computePresentTags:function(){var e=this.isDisabled,t=this.leafOnly,i=this.showAllLevels,n=this.separator,s=this.collapseTags,r=this.getCheckedNodes(t),a=[],o=function(t){return{node:t,key:t.uid,text:t.getText(i,n),hitState:!1,closable:!e&&!t.isDisabled}};if(r.length){var l=r[0],c=r.slice(1),u=c.length;a.push(o(l)),u&&(s?a.push({key:-1,text:"+ "+u,closable:!1}):c.forEach((function(e){return a.push(o(e))})))}this.checkedNodes=r,this.presentTags=a},getSuggestions:function(){var e=this,t=this.filterMethod;Object(qh["isFunction"])(t)||(t=function(e,t){return e.text.includes(t)});var i=this.panel.getFlattedNodes(this.leafOnly).filter((function(i){return!i.isDisabled&&(i.text=i.getText(e.showAllLevels,e.separator)||"",t(i,e.inputValue))}));this.multiple?this.presentTags.forEach((function(e){e.hitState=!1})):i.forEach((function(t){t.checked=Object(b["isEqual"])(e.checkedValue,t.getValueByOption())})),this.filtering=!0,this.suggestions=i,this.$nextTick(this.updatePopper)},handleSuggestionKeyDown:function(e){var t=e.keyCode,i=e.target;switch(t){case wp.enter:i.click();break;case wp.up:var n=i.previousElementSibling;n&&n.focus();break;case wp.down:var s=i.nextElementSibling;s&&s.focus();break;case wp.esc:case wp.tab:this.toggleDropDownVisible(!1);break}},handleDelete:function(){var e=this.inputValue,t=this.pressDeleteCount,i=this.presentTags,n=i.length-1,s=i[n];this.pressDeleteCount=e?0:t+1,s&&this.pressDeleteCount&&(s.hitState?this.deleteTag(s):s.hitState=!0)},handleSuggestionClick:function(e){var t=this.multiple,i=this.suggestions[e];if(t){var n=i.checked;i.doCheck(!n),this.panel.calculateMultiCheckedValue()}else this.checkedValue=i.getValueByOption(),this.toggleDropDownVisible(!1)},deleteTag:function(e){var t=this.checkedValue,i=e.node.getValueByOption(),n=t.find((function(e){return Object(b["isEqual"])(e,i)}));this.checkedValue=t.filter((function(e){return!Object(b["isEqual"])(e,i)})),this.$emit("remove-tag",n)},updateStyle:function(){var e=this.$el,t=this.inputInitialHeight;if(!this.$isServer&&e){var i=this.$refs.suggestionPanel,n=e.querySelector(".el-input__inner");if(n){var s=e.querySelector(".el-cascader__tags"),r=null;if(i&&(r=i.$el)){var a=r.querySelector(".el-cascader__suggestion-list");a.style.minWidth=n.offsetWidth+"px"}if(s){var o=Math.round(s.getBoundingClientRect().height),l=Math.max(o+6,t)+"px";n.style.height=l,this.dropDownVisible&&this.updatePopper()}}}},getCheckedNodes:function(e){return this.panel.getCheckedNodes(e)}}},Op=$p,Ep=o(Op,gp,bp,!1,null,null,null);Ep.options.__file="packages/cascader/src/cascader.vue";var Tp=Ep.exports;Tp.install=function(e){e.component(Tp.name,Tp)};var Pp=Tp,Mp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.hide,expression:"hide"}],class:["el-color-picker",e.colorDisabled?"is-disabled":"",e.colorSize?"el-color-picker--"+e.colorSize:""]},[e.colorDisabled?i("div",{staticClass:"el-color-picker__mask"}):e._e(),i("div",{staticClass:"el-color-picker__trigger",on:{click:e.handleTrigger}},[i("span",{staticClass:"el-color-picker__color",class:{"is-alpha":e.showAlpha}},[i("span",{staticClass:"el-color-picker__color-inner",style:{backgroundColor:e.displayedColor}}),e.value||e.showPanelColor?e._e():i("span",{staticClass:"el-color-picker__empty el-icon-close"})]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.value||e.showPanelColor,expression:"value || showPanelColor"}],staticClass:"el-color-picker__icon el-icon-arrow-down"})]),i("picker-dropdown",{ref:"dropdown",class:["el-color-picker__panel",e.popperClass||""],attrs:{color:e.color,"show-alpha":e.showAlpha,predefine:e.predefine},on:{pick:e.confirmValue,clear:e.clearValue},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},Np=[];Mp._withStripped=!0;var Ip="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function jp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Fp=function(e,t,i){return[e,t*i/((e=(2-t)*i)<1?e:2-e)||0,e/2]},Lp=function(e){return"string"===typeof e&&-1!==e.indexOf(".")&&1===parseFloat(e)},Ap=function(e){return"string"===typeof e&&-1!==e.indexOf("%")},Vp=function(e,t){Lp(e)&&(e="100%");var i=Ap(e);return e=Math.min(t,Math.max(0,parseFloat(e))),i&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},Bp={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},zp=function(e){var t=e.r,i=e.g,n=e.b,s=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),i=e%16;return""+(Bp[t]||t)+(Bp[i]||i)};return isNaN(t)||isNaN(i)||isNaN(n)?"":"#"+s(t)+s(i)+s(n)},Rp={A:10,B:11,C:12,D:13,E:14,F:15},Hp=function(e){return 2===e.length?16*(Rp[e[0].toUpperCase()]||+e[0])+(Rp[e[1].toUpperCase()]||+e[1]):Rp[e[1].toUpperCase()]||+e[1]},Wp=function(e,t,i){t/=100,i/=100;var n=t,s=Math.max(i,.01),r=void 0,a=void 0;return i*=2,t*=i<=1?i:2-i,n*=s<=1?s:2-s,a=(i+t)/2,r=0===i?2*n/(s+n):2*t/(i+t),{h:e,s:100*r,v:100*a}},qp=function(e,t,i){e=Vp(e,255),t=Vp(t,255),i=Vp(i,255);var n=Math.max(e,t,i),s=Math.min(e,t,i),r=void 0,a=void 0,o=n,l=n-s;if(a=0===n?0:l/n,n===s)r=0;else{switch(n){case e:r=(t-i)/l+(t2?parseFloat(e):parseInt(e,10)}));if(4===n.length?this._alpha=Math.floor(100*parseFloat(n[3])):3===n.length&&(this._alpha=100),n.length>=3){var s=Wp(n[0],n[1],n[2]),r=s.h,a=s.s,o=s.v;i(r,a,o)}}else if(-1!==e.indexOf("hsv")){var l=e.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));4===l.length?this._alpha=Math.floor(100*parseFloat(l[3])):3===l.length&&(this._alpha=100),l.length>=3&&i(l[0],l[1],l[2])}else if(-1!==e.indexOf("rgb")){var c=e.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===c.length?this._alpha=Math.floor(100*parseFloat(c[3])):3===c.length&&(this._alpha=100),c.length>=3){var u=qp(c[0],c[1],c[2]),h=u.h,d=u.s,p=u.v;i(h,d,p)}}else if(-1!==e.indexOf("#")){var f=e.replace("#","").trim();if(!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(f))return;var m=void 0,v=void 0,g=void 0;3===f.length?(m=Hp(f[0]+f[0]),v=Hp(f[1]+f[1]),g=Hp(f[2]+f[2])):6!==f.length&&8!==f.length||(m=Hp(f.substring(0,2)),v=Hp(f.substring(2,4)),g=Hp(f.substring(4,6))),8===f.length?this._alpha=Math.floor(Hp(f.substring(6))/255*100):3!==f.length&&6!==f.length||(this._alpha=100);var b=qp(m,v,g),y=b.h,_=b.s,x=b.v;i(y,_,x)}},e.prototype.compare=function(e){return Math.abs(e._hue-this._hue)<2&&Math.abs(e._saturation-this._saturation)<1&&Math.abs(e._value-this._value)<1&&Math.abs(e._alpha-this._alpha)<1},e.prototype.doOnChange=function(){var e=this._hue,t=this._saturation,i=this._value,n=this._alpha,s=this.format;if(this.enableAlpha)switch(s){case"hsl":var r=Fp(e,t/100,i/100);this.value="hsla("+e+", "+Math.round(100*r[1])+"%, "+Math.round(100*r[2])+"%, "+n/100+")";break;case"hsv":this.value="hsva("+e+", "+Math.round(t)+"%, "+Math.round(i)+"%, "+n/100+")";break;default:var a=Yp(e,t,i),o=a.r,l=a.g,c=a.b;this.value="rgba("+o+", "+l+", "+c+", "+n/100+")"}else switch(s){case"hsl":var u=Fp(e,t/100,i/100);this.value="hsl("+e+", "+Math.round(100*u[1])+"%, "+Math.round(100*u[2])+"%)";break;case"hsv":this.value="hsv("+e+", "+Math.round(t)+"%, "+Math.round(i)+"%)";break;case"rgb":var h=Yp(e,t,i),d=h.r,p=h.g,f=h.b;this.value="rgb("+d+", "+p+", "+f+")";break;default:this.value=zp(Yp(e,t,i))}},e}(),Up=Kp,Gp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-color-dropdown"},[i("div",{staticClass:"el-color-dropdown__main-wrapper"},[i("hue-slider",{ref:"hue",staticStyle:{float:"right"},attrs:{color:e.color,vertical:""}}),i("sv-panel",{ref:"sl",attrs:{color:e.color}})],1),e.showAlpha?i("alpha-slider",{ref:"alpha",attrs:{color:e.color}}):e._e(),e.predefine?i("predefine",{attrs:{color:e.color,colors:e.predefine}}):e._e(),i("div",{staticClass:"el-color-dropdown__btns"},[i("span",{staticClass:"el-color-dropdown__value"},[i("el-input",{attrs:{"validate-event":!1,size:"mini"},on:{blur:e.handleConfirm},nativeOn:{keyup:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleConfirm(t)}},model:{value:e.customInput,callback:function(t){e.customInput=t},expression:"customInput"}})],1),i("el-button",{staticClass:"el-color-dropdown__link-btn",attrs:{size:"mini",type:"text"},on:{click:function(t){e.$emit("clear")}}},[e._v("\n "+e._s(e.t("el.colorpicker.clear"))+"\n ")]),i("el-button",{staticClass:"el-color-dropdown__btn",attrs:{plain:"",size:"mini"},on:{click:e.confirmValue}},[e._v("\n "+e._s(e.t("el.colorpicker.confirm"))+"\n ")])],1)],1)])},Xp=[];Gp._withStripped=!0;var Zp=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-svpanel",style:{backgroundColor:e.background}},[i("div",{staticClass:"el-color-svpanel__white"}),i("div",{staticClass:"el-color-svpanel__black"}),i("div",{staticClass:"el-color-svpanel__cursor",style:{top:e.cursorTop+"px",left:e.cursorLeft+"px"}},[i("div")])])},Qp=[];Zp._withStripped=!0;var Jp=!1,ef=function(e,t){if(!Rn.a.prototype.$isServer){var i=function(e){t.drag&&t.drag(e)},n=function e(n){document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",e),document.onselectstart=null,document.ondragstart=null,Jp=!1,t.end&&t.end(n)};e.addEventListener("mousedown",(function(e){Jp||(document.onselectstart=function(){return!1},document.ondragstart=function(){return!1},document.addEventListener("mousemove",i),document.addEventListener("mouseup",n),Jp=!0,t.start&&t.start(e))}))}},tf={name:"el-sl-panel",props:{color:{required:!0}},computed:{colorValue:function(){var e=this.color.get("hue"),t=this.color.get("value");return{hue:e,value:t}}},watch:{colorValue:function(){this.update()}},methods:{update:function(){var e=this.color.get("saturation"),t=this.color.get("value"),i=this.$el,n=i.clientWidth,s=i.clientHeight;this.cursorLeft=e*n/100,this.cursorTop=(100-t)*s/100,this.background="hsl("+this.color.get("hue")+", 100%, 50%)"},handleDrag:function(e){var t=this.$el,i=t.getBoundingClientRect(),n=e.clientX-i.left,s=e.clientY-i.top;n=Math.max(0,n),n=Math.min(n,i.width),s=Math.max(0,s),s=Math.min(s,i.height),this.cursorLeft=n,this.cursorTop=s,this.color.set({saturation:n/i.width*100,value:100-s/i.height*100})}},mounted:function(){var e=this;ef(this.$el,{drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}}),this.update()},data:function(){return{cursorTop:0,cursorLeft:0,background:"hsl(0, 100%, 50%)"}}},nf=tf,sf=o(nf,Zp,Qp,!1,null,null,null);sf.options.__file="packages/color-picker/src/components/sv-panel.vue";var rf=sf.exports,af=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-hue-slider",class:{"is-vertical":e.vertical}},[i("div",{ref:"bar",staticClass:"el-color-hue-slider__bar",on:{click:e.handleClick}}),i("div",{ref:"thumb",staticClass:"el-color-hue-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},of=[];af._withStripped=!0;var lf={name:"el-color-hue-slider",props:{color:{required:!0},vertical:Boolean},data:function(){return{thumbLeft:0,thumbTop:0}},computed:{hueValue:function(){var e=this.color.get("hue");return e}},watch:{hueValue:function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,i=e.target;i!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),i=this.$refs.thumb,n=void 0;if(this.vertical){var s=e.clientY-t.top;s=Math.min(s,t.height-i.offsetHeight/2),s=Math.max(i.offsetHeight/2,s),n=Math.round((s-i.offsetHeight/2)/(t.height-i.offsetHeight)*360)}else{var r=e.clientX-t.left;r=Math.min(r,t.width-i.offsetWidth/2),r=Math.max(i.offsetWidth/2,r),n=Math.round((r-i.offsetWidth/2)/(t.width-i.offsetWidth)*360)}this.color.set("hue",n)},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetWidth-i.offsetWidth/2)/360)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetHeight-i.offsetHeight/2)/360)},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop()}},mounted:function(){var e=this,t=this.$refs,i=t.bar,n=t.thumb,s={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};ef(i,s),ef(n,s),this.update()}},cf=lf,uf=o(cf,af,of,!1,null,null,null);uf.options.__file="packages/color-picker/src/components/hue-slider.vue";var hf=uf.exports,df=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-alpha-slider",class:{"is-vertical":e.vertical}},[i("div",{ref:"bar",staticClass:"el-color-alpha-slider__bar",style:{background:e.background},on:{click:e.handleClick}}),i("div",{ref:"thumb",staticClass:"el-color-alpha-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},pf=[];df._withStripped=!0;var ff={name:"el-color-alpha-slider",props:{color:{required:!0},vertical:Boolean},watch:{"color._alpha":function(){this.update()},"color.value":function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,i=e.target;i!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),i=this.$refs.thumb;if(this.vertical){var n=e.clientY-t.top;n=Math.max(i.offsetHeight/2,n),n=Math.min(n,t.height-i.offsetHeight/2),this.color.set("alpha",Math.round((n-i.offsetHeight/2)/(t.height-i.offsetHeight)*100))}else{var s=e.clientX-t.left;s=Math.max(i.offsetWidth/2,s),s=Math.min(s,t.width-i.offsetWidth/2),this.color.set("alpha",Math.round((s-i.offsetWidth/2)/(t.width-i.offsetWidth)*100))}},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetWidth-i.offsetWidth/2)/100)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var i=this.$refs.thumb;return Math.round(t*(e.offsetHeight-i.offsetHeight/2)/100)},getBackground:function(){if(this.color&&this.color.value){var e=this.color.toRgb(),t=e.r,i=e.g,n=e.b;return"linear-gradient(to right, rgba("+t+", "+i+", "+n+", 0) 0%, rgba("+t+", "+i+", "+n+", 1) 100%)"}return null},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop(),this.background=this.getBackground()}},data:function(){return{thumbLeft:0,thumbTop:0,background:null}},mounted:function(){var e=this,t=this.$refs,i=t.bar,n=t.thumb,s={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};ef(i,s),ef(n,s),this.update()}},mf=ff,vf=o(mf,df,pf,!1,null,null,null);vf.options.__file="packages/color-picker/src/components/alpha-slider.vue";var gf=vf.exports,bf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-color-predefine"},[i("div",{staticClass:"el-color-predefine__colors"},e._l(e.rgbaColors,(function(t,n){return i("div",{key:e.colors[n],staticClass:"el-color-predefine__color-selector",class:{selected:t.selected,"is-alpha":t._alpha<100},on:{click:function(t){e.handleSelect(n)}}},[i("div",{style:{"background-color":t.value}})])})),0)])},yf=[];bf._withStripped=!0;var _f={props:{colors:{type:Array,required:!0},color:{required:!0}},data:function(){return{rgbaColors:this.parseColors(this.colors,this.color)}},methods:{handleSelect:function(e){this.color.fromString(this.colors[e])},parseColors:function(e,t){return e.map((function(e){var i=new Up;return i.enableAlpha=!0,i.format="rgba",i.fromString(e),i.selected=i.value===t.value,i}))}},watch:{"$parent.currentColor":function(e){var t=new Up;t.fromString(e),this.rgbaColors.forEach((function(e){e.selected=t.compare(e)}))},colors:function(e){this.rgbaColors=this.parseColors(e,this.color)},color:function(e){this.rgbaColors=this.parseColors(this.colors,e)}}},xf=_f,Cf=o(xf,bf,yf,!1,null,null,null);Cf.options.__file="packages/color-picker/src/components/predefine.vue";var wf=Cf.exports,kf={name:"el-color-picker-dropdown",mixins:[H.a,g.a],components:{SvPanel:rf,HueSlider:hf,AlphaSlider:gf,ElInput:m.a,ElButton:ae.a,Predefine:wf},props:{color:{required:!0},showAlpha:Boolean,predefine:Array},data:function(){return{customInput:""}},computed:{currentColor:function(){var e=this.$parent;return e.value||e.showPanelColor?e.color.value:""}},methods:{confirmValue:function(){this.$emit("pick")},handleConfirm:function(){this.color.fromString(this.customInput)}},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$el},watch:{showPopper:function(e){var t=this;!0===e&&this.$nextTick((function(){var e=t.$refs,i=e.sl,n=e.hue,s=e.alpha;i&&i.update(),n&&n.update(),s&&s.update()}))},currentColor:{immediate:!0,handler:function(e){this.customInput=e}}}},Sf=kf,Df=o(Sf,Gp,Xp,!1,null,null,null);Df.options.__file="packages/color-picker/src/components/picker-dropdown.vue";var $f=Df.exports,Of={name:"ElColorPicker",mixins:[O.a],props:{value:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:String,popperClass:String,predefine:Array},inject:{elForm:{default:""},elFormItem:{default:""}},directives:{Clickoutside:V.a},computed:{displayedColor:function(){return this.value||this.showPanelColor?this.displayedRgb(this.color,this.showAlpha):"transparent"},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},colorSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},colorDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){e?e&&e!==this.color.value&&this.color.fromString(e):this.showPanelColor=!1},color:{deep:!0,handler:function(){this.showPanelColor=!0}},displayedColor:function(e){if(this.showPicker){var t=new Up({enableAlpha:this.showAlpha,format:this.colorFormat});t.fromString(this.value);var i=this.displayedRgb(t,this.showAlpha);e!==i&&this.$emit("active-change",e)}}},methods:{handleTrigger:function(){this.colorDisabled||(this.showPicker=!this.showPicker)},confirmValue:function(){var e=this.color.value;this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",e),this.showPicker=!1},clearValue:function(){this.$emit("input",null),this.$emit("change",null),null!==this.value&&this.dispatch("ElFormItem","el.form.change",null),this.showPanelColor=!1,this.showPicker=!1,this.resetColor()},hide:function(){this.showPicker=!1,this.resetColor()},resetColor:function(){var e=this;this.$nextTick((function(t){e.value?e.color.fromString(e.value):e.showPanelColor=!1}))},displayedRgb:function(e,t){if(!(e instanceof Up))throw Error("color should be instance of Color Class");var i=e.toRgb(),n=i.r,s=i.g,r=i.b;return t?"rgba("+n+", "+s+", "+r+", "+e.get("alpha")/100+")":"rgb("+n+", "+s+", "+r+")"}},mounted:function(){var e=this.value;e&&this.color.fromString(e),this.popperElm=this.$refs.dropdown.$el},data:function(){var e=new Up({enableAlpha:this.showAlpha,format:this.colorFormat});return{color:e,showPicker:!1,showPanelColor:!1}},components:{PickerDropdown:$f}},Ef=Of,Tf=o(Ef,Mp,Np,!1,null,null,null);Tf.options.__file="packages/color-picker/src/main.vue";var Pf=Tf.exports;Pf.install=function(e){e.component(Pf.name,Pf)};var Mf=Pf,Nf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-transfer"},[i("transfer-panel",e._b({ref:"leftPanel",attrs:{data:e.sourceData,title:e.titles[0]||e.t("el.transfer.titles.0"),"default-checked":e.leftDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onSourceCheckedChange}},"transfer-panel",e.$props,!1),[e._t("left-footer")],2),i("div",{staticClass:"el-transfer__buttons"},[i("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.rightChecked.length},nativeOn:{click:function(t){return e.addToLeft(t)}}},[i("i",{staticClass:"el-icon-arrow-left"}),void 0!==e.buttonTexts[0]?i("span",[e._v(e._s(e.buttonTexts[0]))]):e._e()]),i("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.leftChecked.length},nativeOn:{click:function(t){return e.addToRight(t)}}},[void 0!==e.buttonTexts[1]?i("span",[e._v(e._s(e.buttonTexts[1]))]):e._e(),i("i",{staticClass:"el-icon-arrow-right"})])],1),i("transfer-panel",e._b({ref:"rightPanel",attrs:{data:e.targetData,title:e.titles[1]||e.t("el.transfer.titles.1"),"default-checked":e.rightDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onTargetCheckedChange}},"transfer-panel",e.$props,!1),[e._t("right-footer")],2)],1)},If=[];Nf._withStripped=!0;var jf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-transfer-panel"},[i("p",{staticClass:"el-transfer-panel__header"},[i("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleAllCheckedChange},model:{value:e.allChecked,callback:function(t){e.allChecked=t},expression:"allChecked"}},[e._v("\n "+e._s(e.title)+"\n "),i("span",[e._v(e._s(e.checkedSummary))])])],1),i("div",{class:["el-transfer-panel__body",e.hasFooter?"is-with-footer":""]},[e.filterable?i("el-input",{staticClass:"el-transfer-panel__filter",attrs:{size:"small",placeholder:e.placeholder},nativeOn:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1}},model:{value:e.query,callback:function(t){e.query=t},expression:"query"}},[i("i",{class:["el-input__icon","el-icon-"+e.inputIcon],attrs:{slot:"prefix"},on:{click:e.clearQuery},slot:"prefix"})]):e._e(),i("el-checkbox-group",{directives:[{name:"show",rawName:"v-show",value:!e.hasNoMatch&&e.data.length>0,expression:"!hasNoMatch && data.length > 0"}],staticClass:"el-transfer-panel__list",class:{"is-filterable":e.filterable},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},e._l(e.filteredData,(function(t){return i("el-checkbox",{key:t[e.keyProp],staticClass:"el-transfer-panel__item",attrs:{label:t[e.keyProp],disabled:t[e.disabledProp]}},[i("option-content",{attrs:{option:t}})],1)})),1),i("p",{directives:[{name:"show",rawName:"v-show",value:e.hasNoMatch,expression:"hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noMatch")))]),i("p",{directives:[{name:"show",rawName:"v-show",value:0===e.data.length&&!e.hasNoMatch,expression:"data.length === 0 && !hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noData")))])],1),e.hasFooter?i("p",{staticClass:"el-transfer-panel__footer"},[e._t("default")],2):e._e()])},Ff=[];jf._withStripped=!0;var Lf={mixins:[g.a],name:"ElTransferPanel",componentName:"ElTransferPanel",components:{ElCheckboxGroup:Ms.a,ElCheckbox:In.a,ElInput:m.a,OptionContent:{props:{option:Object},render:function(e){var t=function e(t){return"ElTransferPanel"===t.$options.componentName?t:t.$parent?e(t.$parent):t},i=t(this),n=i.$parent||i;return i.renderContent?i.renderContent(e,this.option):n.$scopedSlots.default?n.$scopedSlots.default({option:this.option}):e("span",[this.option[i.labelProp]||this.option[i.keyProp]])}}},props:{data:{type:Array,default:function(){return[]}},renderContent:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},data:function(){return{checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}},watch:{checked:function(e,t){if(this.updateAllChecked(),this.checkChangeByUser){var i=e.concat(t).filter((function(i){return-1===e.indexOf(i)||-1===t.indexOf(i)}));this.$emit("checked-change",e,i)}else this.$emit("checked-change",e),this.checkChangeByUser=!0},data:function(){var e=this,t=[],i=this.filteredData.map((function(t){return t[e.keyProp]}));this.checked.forEach((function(e){i.indexOf(e)>-1&&t.push(e)})),this.checkChangeByUser=!1,this.checked=t},checkableData:function(){this.updateAllChecked()},defaultChecked:{immediate:!0,handler:function(e,t){var i=this;if(!t||e.length!==t.length||!e.every((function(e){return t.indexOf(e)>-1}))){var n=[],s=this.checkableData.map((function(e){return e[i.keyProp]}));e.forEach((function(e){s.indexOf(e)>-1&&n.push(e)})),this.checkChangeByUser=!1,this.checked=n}}}},computed:{filteredData:function(){var e=this;return this.data.filter((function(t){if("function"===typeof e.filterMethod)return e.filterMethod(e.query,t);var i=t[e.labelProp]||t[e.keyProp].toString();return i.toLowerCase().indexOf(e.query.toLowerCase())>-1}))},checkableData:function(){var e=this;return this.filteredData.filter((function(t){return!t[e.disabledProp]}))},checkedSummary:function(){var e=this.checked.length,t=this.data.length,i=this.format,n=i.noChecked,s=i.hasChecked;return n&&s?e>0?s.replace(/\${checked}/g,e).replace(/\${total}/g,t):n.replace(/\${total}/g,t):e+"/"+t},isIndeterminate:function(){var e=this.checked.length;return e>0&&e0&&0===this.filteredData.length},inputIcon:function(){return this.query.length>0&&this.inputHover?"circle-close":"search"},labelProp:function(){return this.props.label||"label"},keyProp:function(){return this.props.key||"key"},disabledProp:function(){return this.props.disabled||"disabled"},hasFooter:function(){return!!this.$slots.default}},methods:{updateAllChecked:function(){var e=this,t=this.checkableData.map((function(t){return t[e.keyProp]}));this.allChecked=t.length>0&&t.every((function(t){return e.checked.indexOf(t)>-1}))},handleAllCheckedChange:function(e){var t=this;this.checked=e?this.checkableData.map((function(e){return e[t.keyProp]})):[]},clearQuery:function(){"circle-close"===this.inputIcon&&(this.query="")}}},Af=Lf,Vf=o(Af,jf,Ff,!1,null,null,null);Vf.options.__file="packages/transfer/src/transfer-panel.vue";var Bf=Vf.exports,zf={name:"ElTransfer",mixins:[O.a,g.a,D.a],components:{TransferPanel:Bf,ElButton:ae.a},props:{data:{type:Array,default:function(){return[]}},titles:{type:Array,default:function(){return[]}},buttonTexts:{type:Array,default:function(){return[]}},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:function(){return[]}},rightDefaultChecked:{type:Array,default:function(){return[]}},renderContent:Function,value:{type:Array,default:function(){return[]}},format:{type:Object,default:function(){return{}}},filterable:Boolean,props:{type:Object,default:function(){return{label:"label",key:"key",disabled:"disabled"}}},targetOrder:{type:String,default:"original"}},data:function(){return{leftChecked:[],rightChecked:[]}},computed:{dataObj:function(){var e=this.props.key;return this.data.reduce((function(t,i){return(t[i[e]]=i)&&t}),{})},sourceData:function(){var e=this;return this.data.filter((function(t){return-1===e.value.indexOf(t[e.props.key])}))},targetData:function(){var e=this;return"original"===this.targetOrder?this.data.filter((function(t){return e.value.indexOf(t[e.props.key])>-1})):this.value.reduce((function(t,i){var n=e.dataObj[i];return n&&t.push(n),t}),[])},hasButtonTexts:function(){return 2===this.buttonTexts.length}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}},methods:{getMigratingConfig:function(){return{props:{"footer-format":"footer-format is renamed to format."}}},onSourceCheckedChange:function(e,t){this.leftChecked=e,void 0!==t&&this.$emit("left-check-change",e,t)},onTargetCheckedChange:function(e,t){this.rightChecked=e,void 0!==t&&this.$emit("right-check-change",e,t)},addToLeft:function(){var e=this.value.slice();this.rightChecked.forEach((function(t){var i=e.indexOf(t);i>-1&&e.splice(i,1)})),this.$emit("input",e),this.$emit("change",e,"left",this.rightChecked)},addToRight:function(){var e=this,t=this.value.slice(),i=[],n=this.props.key;this.data.forEach((function(t){var s=t[n];e.leftChecked.indexOf(s)>-1&&-1===e.value.indexOf(s)&&i.push(s)})),t="unshift"===this.targetOrder?i.concat(t):t.concat(i),this.$emit("input",t),this.$emit("change",t,"right",this.leftChecked)},clearQuery:function(e){"left"===e?this.$refs.leftPanel.query="":"right"===e&&(this.$refs.rightPanel.query="")}}},Rf=zf,Hf=o(Rf,Nf,If,!1,null,null,null);Hf.options.__file="packages/transfer/src/main.vue";var Wf=Hf.exports;Wf.install=function(e){e.component(Wf.name,Wf)};var qf=Wf,Yf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("section",{staticClass:"el-container",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},Kf=[];Yf._withStripped=!0;var Uf={name:"ElContainer",componentName:"ElContainer",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&(!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"el-header"===t||"el-footer"===t})))}}},Gf=Uf,Xf=o(Gf,Yf,Kf,!1,null,null,null);Xf.options.__file="packages/container/src/main.vue";var Zf=Xf.exports;Zf.install=function(e){e.component(Zf.name,Zf)};var Qf=Zf,Jf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("header",{staticClass:"el-header",style:{height:e.height}},[e._t("default")],2)},em=[];Jf._withStripped=!0;var tm={name:"ElHeader",componentName:"ElHeader",props:{height:{type:String,default:"60px"}}},im=tm,nm=o(im,Jf,em,!1,null,null,null);nm.options.__file="packages/header/src/main.vue";var sm=nm.exports;sm.install=function(e){e.component(sm.name,sm)};var rm=sm,am=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("aside",{staticClass:"el-aside",style:{width:e.width}},[e._t("default")],2)},om=[];am._withStripped=!0;var lm={name:"ElAside",componentName:"ElAside",props:{width:{type:String,default:"300px"}}},cm=lm,um=o(cm,am,om,!1,null,null,null);um.options.__file="packages/aside/src/main.vue";var hm=um.exports;hm.install=function(e){e.component(hm.name,hm)};var dm=hm,pm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("main",{staticClass:"el-main"},[e._t("default")],2)},fm=[];pm._withStripped=!0;var mm={name:"ElMain",componentName:"ElMain"},vm=mm,gm=o(vm,pm,fm,!1,null,null,null);gm.options.__file="packages/main/src/main.vue";var bm=gm.exports;bm.install=function(e){e.component(bm.name,bm)};var ym=bm,_m=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("footer",{staticClass:"el-footer",style:{height:e.height}},[e._t("default")],2)},xm=[];_m._withStripped=!0;var Cm={name:"ElFooter",componentName:"ElFooter",props:{height:{type:String,default:"60px"}}},wm=Cm,km=o(wm,_m,xm,!1,null,null,null);km.options.__file="packages/footer/src/main.vue";var Sm=km.exports;Sm.install=function(e){e.component(Sm.name,Sm)};var Dm,$m,Om=Sm,Em={name:"ElTimeline",props:{reverse:{type:Boolean,default:!1}},provide:function(){return{timeline:this}},render:function(){var e=arguments[0],t=this.reverse,i={"el-timeline":!0,"is-reverse":t},n=this.$slots.default||[];return t&&(n=n.reverse()),e("ul",{class:i},[n])}},Tm=Em,Pm=o(Tm,Dm,$m,!1,null,null,null);Pm.options.__file="packages/timeline/src/main.vue";var Mm=Pm.exports;Mm.install=function(e){e.component(Mm.name,Mm)};var Nm=Mm,Im=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{staticClass:"el-timeline-item"},[i("div",{staticClass:"el-timeline-item__tail"}),e.$slots.dot?e._e():i("div",{staticClass:"el-timeline-item__node",class:["el-timeline-item__node--"+(e.size||""),"el-timeline-item__node--"+(e.type||"")],style:{backgroundColor:e.color}},[e.icon?i("i",{staticClass:"el-timeline-item__icon",class:e.icon}):e._e()]),e.$slots.dot?i("div",{staticClass:"el-timeline-item__dot"},[e._t("dot")],2):e._e(),i("div",{staticClass:"el-timeline-item__wrapper"},[e.hideTimestamp||"top"!==e.placement?e._e():i("div",{staticClass:"el-timeline-item__timestamp is-top"},[e._v("\n "+e._s(e.timestamp)+"\n ")]),i("div",{staticClass:"el-timeline-item__content"},[e._t("default")],2),e.hideTimestamp||"bottom"!==e.placement?e._e():i("div",{staticClass:"el-timeline-item__timestamp is-bottom"},[e._v("\n "+e._s(e.timestamp)+"\n ")])])])},jm=[];Im._withStripped=!0;var Fm={name:"ElTimelineItem",inject:["timeline"],props:{timestamp:String,hideTimestamp:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:String,color:String,size:{type:String,default:"normal"},icon:String}},Lm=Fm,Am=o(Lm,Im,jm,!1,null,null,null);Am.options.__file="packages/timeline/src/item.vue";var Vm=Am.exports;Vm.install=function(e){e.component(Vm.name,Vm)};var Bm=Vm,zm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",e._b({class:["el-link",e.type?"el-link--"+e.type:"",e.disabled&&"is-disabled",e.underline&&!e.disabled&&"is-underline"],attrs:{href:e.disabled?null:e.href},on:{click:e.handleClick}},"a",e.$attrs,!1),[e.icon?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",{staticClass:"el-link--inner"},[e._t("default")],2):e._e(),e.$slots.icon?[e.$slots.icon?e._t("icon"):e._e()]:e._e()],2)},Rm=[];zm._withStripped=!0;var Hm={name:"ElLink",props:{type:{type:String,default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:String,icon:String},methods:{handleClick:function(e){this.disabled||this.href||this.$emit("click",e)}}},Wm=Hm,qm=o(Wm,zm,Rm,!1,null,null,null);qm.options.__file="packages/link/src/main.vue";var Ym=qm.exports;Ym.install=function(e){e.component(Ym.name,Ym)};var Km=Ym,Um=function(e,t){var i=t._c;return i("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?i("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},Gm=[];Um._withStripped=!0;var Xm={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},Zm=Xm,Qm=o(Zm,Um,Gm,!0,null,null,null);Qm.options.__file="packages/divider/src/main.vue";var Jm=Qm.exports;Jm.install=function(e){e.component(Jm.name,Jm)};var ev=Jm,tv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-image"},[e.loading?e._t("placeholder",[i("div",{staticClass:"el-image__placeholder"})]):e.error?e._t("error",[i("div",{staticClass:"el-image__error"},[e._v(e._s(e.t("el.image.error")))])]):i("img",e._g(e._b({staticClass:"el-image__inner",class:{"el-image__inner--center":e.alignCenter,"el-image__preview":e.preview},style:e.imageStyle,attrs:{src:e.src},on:{click:e.clickHandler}},"img",e.$attrs,!1),e.$listeners)),e.preview?[e.showViewer?i("image-viewer",{attrs:{"z-index":e.zIndex,"initial-index":e.imageIndex,"on-close":e.closeViewer,"url-list":e.previewSrcList}}):e._e()]:e._e()],2)},iv=[];tv._withStripped=!0;var nv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"viewer-fade"}},[i("div",{ref:"el-image-viewer__wrapper",staticClass:"el-image-viewer__wrapper",style:{"z-index":e.viewerZIndex},attrs:{tabindex:"-1"}},[i("div",{staticClass:"el-image-viewer__mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleMaskClick(t)}}}),i("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:e.hide}},[i("i",{staticClass:"el-icon-close"})]),e.isSingle?e._e():[i("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{"is-disabled":!e.infinite&&e.isFirst},on:{click:e.prev}},[i("i",{staticClass:"el-icon-arrow-left"})]),i("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{"is-disabled":!e.infinite&&e.isLast},on:{click:e.next}},[i("i",{staticClass:"el-icon-arrow-right"})])],i("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[i("div",{staticClass:"el-image-viewer__actions__inner"},[i("i",{staticClass:"el-icon-zoom-out",on:{click:function(t){e.handleActions("zoomOut")}}}),i("i",{staticClass:"el-icon-zoom-in",on:{click:function(t){e.handleActions("zoomIn")}}}),i("i",{staticClass:"el-image-viewer__actions__divider"}),i("i",{class:e.mode.icon,on:{click:e.toggleMode}}),i("i",{staticClass:"el-image-viewer__actions__divider"}),i("i",{staticClass:"el-icon-refresh-left",on:{click:function(t){e.handleActions("anticlocelise")}}}),i("i",{staticClass:"el-icon-refresh-right",on:{click:function(t){e.handleActions("clocelise")}}})])]),i("div",{staticClass:"el-image-viewer__canvas"},e._l(e.urlList,(function(t,n){return n===e.index?i("img",{key:t,ref:"img",refInFor:!0,staticClass:"el-image-viewer__img",style:e.imgStyle,attrs:{src:e.currentImg},on:{load:e.handleImgLoad,error:e.handleImgError,mousedown:e.handleMouseDown}}):e._e()})),0)],2)])},sv=[];nv._withStripped=!0;var rv=Object.assign||function(e){for(var t=1;te?this.zIndex:e}},watch:{index:{handler:function(e){this.reset(),this.onSwitch(e)}},currentImg:function(e){var t=this;this.$nextTick((function(e){var i=t.$refs.img[0];i.complete||(t.loading=!0)}))}},methods:{hide:function(){this.deviceSupportUninstall(),this.onClose()},deviceSupportInstall:function(){var e=this;this._keyDownHandler=function(t){t.stopPropagation();var i=t.keyCode;switch(i){case 27:e.hide();break;case 32:e.toggleMode();break;case 37:e.prev();break;case 38:e.handleActions("zoomIn");break;case 39:e.next();break;case 40:e.handleActions("zoomOut");break}},this._mouseWheelHandler=Object(b["rafThrottle"])((function(t){var i=t.wheelDelta?t.wheelDelta:-t.detail;i>0?e.handleActions("zoomIn",{zoomRate:.015,enableTransition:!1}):e.handleActions("zoomOut",{zoomRate:.015,enableTransition:!1})})),Object(Ae["on"])(document,"keydown",this._keyDownHandler),Object(Ae["on"])(document,ov,this._mouseWheelHandler)},deviceSupportUninstall:function(){Object(Ae["off"])(document,"keydown",this._keyDownHandler),Object(Ae["off"])(document,ov,this._mouseWheelHandler),this._keyDownHandler=null,this._mouseWheelHandler=null},handleImgLoad:function(e){this.loading=!1},handleImgError:function(e){this.loading=!1,e.target.alt="加载失败"},handleMouseDown:function(e){var t=this;if(!this.loading&&0===e.button){var i=this.transform,n=i.offsetX,s=i.offsetY,r=e.pageX,a=e.pageY;this._dragHandler=Object(b["rafThrottle"])((function(e){t.transform.offsetX=n+e.pageX-r,t.transform.offsetY=s+e.pageY-a})),Object(Ae["on"])(document,"mousemove",this._dragHandler),Object(Ae["on"])(document,"mouseup",(function(e){Object(Ae["off"])(document,"mousemove",t._dragHandler)})),e.preventDefault()}},handleMaskClick:function(){this.maskClosable&&this.hide()},reset:function(){this.transform={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}},toggleMode:function(){if(!this.loading){var e=Object.keys(av),t=Object.values(av),i=t.indexOf(this.mode),n=(i+1)%e.length;this.mode=av[e[n]],this.reset()}},prev:function(){if(!this.isFirst||this.infinite){var e=this.urlList.length;this.index=(this.index-1+e)%e}},next:function(){if(!this.isLast||this.infinite){var e=this.urlList.length;this.index=(this.index+1)%e}},handleActions:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.loading){var i=rv({zoomRate:.2,rotateDeg:90,enableTransition:!0},t),n=i.zoomRate,s=i.rotateDeg,r=i.enableTransition,a=this.transform;switch(e){case"zoomOut":a.scale>.2&&(a.scale=parseFloat((a.scale-n).toFixed(3)));break;case"zoomIn":a.scale=parseFloat((a.scale+n).toFixed(3));break;case"clocelise":a.deg+=s;break;case"anticlocelise":a.deg-=s;break}a.enableTransition=r}}},mounted:function(){this.deviceSupportInstall(),this.appendToBody&&document.body.appendChild(this.$el),this.$refs["el-image-viewer__wrapper"].focus()},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},cv=lv,uv=o(cv,nv,sv,!1,null,null,null);uv.options.__file="packages/image/src/image-viewer.vue";var hv=uv.exports,dv=function(){return void 0!==document.documentElement.style.objectFit},pv={NONE:"none",CONTAIN:"contain",COVER:"cover",FILL:"fill",SCALE_DOWN:"scale-down"},fv="",mv={name:"ElImage",mixins:[g.a],inheritAttrs:!1,components:{ImageViewer:hv},props:{src:String,fit:String,lazy:Boolean,scrollContainer:{},previewSrcList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3}},data:function(){return{loading:!0,error:!1,show:!this.lazy,imageWidth:0,imageHeight:0,showViewer:!1}},computed:{imageStyle:function(){var e=this.fit;return!this.$isServer&&e?dv()?{"object-fit":e}:this.getImageStyle(e):{}},alignCenter:function(){return!this.$isServer&&!dv()&&this.fit!==pv.FILL},preview:function(){var e=this.previewSrcList;return Array.isArray(e)&&e.length>0},imageIndex:function(){var e=0,t=this.previewSrcList.indexOf(this.src);return t>=0&&(e=t),e}},watch:{src:function(e){this.show&&this.loadImage()},show:function(e){e&&this.loadImage()}},mounted:function(){this.lazy?this.addLazyLoadListener():this.loadImage()},beforeDestroy:function(){this.lazy&&this.removeLazyLoadListener()},methods:{loadImage:function(){var e=this;if(!this.$isServer){this.loading=!0,this.error=!1;var t=new Image;t.onload=function(i){return e.handleLoad(i,t)},t.onerror=this.handleError.bind(this),Object.keys(this.$attrs).forEach((function(i){var n=e.$attrs[i];t.setAttribute(i,n)})),t.src=this.src}},handleLoad:function(e,t){this.imageWidth=t.width,this.imageHeight=t.height,this.loading=!1,this.error=!1},handleError:function(e){this.loading=!1,this.error=!0,this.$emit("error",e)},handleLazyLoad:function(){Object(Ae["isInContainer"])(this.$el,this._scrollContainer)&&(this.show=!0,this.removeLazyLoadListener())},addLazyLoadListener:function(){if(!this.$isServer){var e=this.scrollContainer,t=null;t=Object(qh["isHtmlElement"])(e)?e:Object(qh["isString"])(e)?document.querySelector(e):Object(Ae["getScrollContainer"])(this.$el),t&&(this._scrollContainer=t,this._lazyLoadHandler=Ad()(200,this.handleLazyLoad),Object(Ae["on"])(t,"scroll",this._lazyLoadHandler),this.handleLazyLoad())}},removeLazyLoadListener:function(){var e=this._scrollContainer,t=this._lazyLoadHandler;!this.$isServer&&e&&t&&(Object(Ae["off"])(e,"scroll",t),this._scrollContainer=null,this._lazyLoadHandler=null)},getImageStyle:function(e){var t=this.imageWidth,i=this.imageHeight,n=this.$el,s=n.clientWidth,r=n.clientHeight;if(!t||!i||!s||!r)return{};var a=t/i,o=s/r;if(e===pv.SCALE_DOWN){var l=ts)return console.warn("[ElementCalendar]end time should be greater than start time"),[];if(Object(ar["validateRangeInOneMonth"])(n,s))return[[n,s]];var r=[],a=new Date(n.getFullYear(),n.getMonth()+1,1),o=this.toDate(a.getTime()-Mv);if(!Object(ar["validateRangeInOneMonth"])(a,s))return console.warn("[ElementCalendar]start time and end time interval must not exceed two months"),[];r.push([n,o]);var l=this.realFirstDayOfWeek,c=a.getDay(),u=0;return c!==l&&(0===l?u=7-c:(u=l-c,u=u>0?u:7+u)),a=this.toDate(a.getTime()+u*Mv),a.getDate()6?0:Math.floor(this.firstDayOfWeek)}},data:function(){return{selectedDay:"",now:new Date}}},Iv=Nv,jv=o(Iv,_v,xv,!1,null,null,null);jv.options.__file="packages/calendar/src/main.vue";var Fv=jv.exports;Fv.install=function(e){e.component(Fv.name,Fv)};var Lv=Fv,Av=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-fade-in"}},[e.visible?i("div",{staticClass:"el-backtop",style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[i("el-icon",{attrs:{name:"caret-top"}})])],2):e._e()])},Vv=[];Av._withStripped=!0;var Bv=function(e){return Math.pow(e,3)},zv=function(e){return e<.5?Bv(2*e)/2:1-Bv(2*(1-e))/2},Rv={name:"ElBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40}},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return this.bottom+"px"},styleRight:function(){return this.right+"px"}},mounted:function(){this.init(),this.throttledScrollHandler=Ad()(300,this.onScroll),this.container.addEventListener("scroll",this.throttledScrollHandler)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: "+this.target);this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=Date.now(),i=e.scrollTop,n=window.requestAnimationFrame||function(e){return setTimeout(e,16)},s=function s(){var r=(Date.now()-t)/500;r<1?(e.scrollTop=i*(1-zv(r)),n(s)):e.scrollTop=0};n(s)}},beforeDestroy:function(){this.container.removeEventListener("scroll",this.throttledScrollHandler)}},Hv=Rv,Wv=o(Hv,Av,Vv,!1,null,null,null);Wv.options.__file="packages/backtop/src/main.vue";var qv=Wv.exports;qv.install=function(e){e.component(qv.name,qv)};var Yv=qv,Kv=function(e,t){if(e===window&&(e=document.documentElement),1!==e.nodeType)return[];var i=window.getComputedStyle(e,null);return t?i[t]:i},Uv=function(e){return Object.keys(e||{}).map((function(t){return[t,e[t]]}))},Gv=function(e,t){return e===window||e===document?document.documentElement[t]:e[t]},Xv=function(e){return Gv(e,"offsetHeight")},Zv=function(e){return Gv(e,"clientHeight")},Qv="ElInfiniteScroll",Jv={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},eg=function(e,t){return Object(qh["isHtmlElement"])(e)?Uv(Jv).reduce((function(i,n){var s=n[0],r=n[1],a=r.type,o=r.default,l=e.getAttribute("infinite-scroll-"+s);switch(l=Object(qh["isUndefined"])(t[l])?l:t[l],a){case Number:l=Number(l),l=Number.isNaN(l)?o:l;break;case Boolean:l=Object(qh["isDefined"])(l)?"false"!==l&&Boolean(l):o;break;default:l=a(l)}return i[s]=l,i}),{}):{}},tg=function(e){return e.getBoundingClientRect().top},ig=function(e){var t=this[Qv],i=t.el,n=t.vm,s=t.container,r=t.observer,a=eg(i,n),o=a.distance,l=a.disabled;if(!l){var c=s.getBoundingClientRect();if(c.width||c.height){var u=!1;if(s===i){var h=s.scrollTop+Zv(s);u=s.scrollHeight-h<=o}else{var d=Xv(i)+tg(i)-tg(s),p=Xv(s),f=Number.parseFloat(Kv(s,"borderBottomWidth"));u=d-p+f<=o}u&&Object(qh["isFunction"])(e)?e.call(n):r&&(r.disconnect(),this[Qv].observer=null)}}},ng={name:"InfiniteScroll",inserted:function(e,t,i){var n=t.value,s=i.context,r=Object(Ae["getScrollContainer"])(e,!0),a=eg(e,s),o=a.delay,l=a.immediate,c=L()(o,ig.bind(e,n));if(e[Qv]={el:e,vm:s,container:r,onScroll:c},r&&(r.addEventListener("scroll",c),l)){var u=e[Qv].observer=new MutationObserver(c);u.observe(r,{childList:!0,subtree:!0}),c()}},unbind:function(e){var t=e[Qv],i=t.container,n=t.onScroll;i&&i.removeEventListener("scroll",n)},install:function(e){e.directive(ng.name,ng)}},sg=ng,rg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-page-header"},[i("div",{staticClass:"el-page-header__left",on:{click:function(t){e.$emit("back")}}},[i("i",{staticClass:"el-icon-back"}),i("div",{staticClass:"el-page-header__title"},[e._t("title",[e._v(e._s(e.title))])],2)]),i("div",{staticClass:"el-page-header__content"},[e._t("content",[e._v(e._s(e.content))])],2)])},ag=[];rg._withStripped=!0;var og={name:"ElPageHeader",props:{title:{type:String,default:function(){return Object(vo["t"])("el.pageHeader.title")}},content:String}},lg=og,cg=o(lg,rg,ag,!1,null,null,null);cg.options.__file="packages/page-header/src/main.vue";var ug=cg.exports;ug.install=function(e){e.component(ug.name,ug)};var hg=ug,dg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return i("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},pg=[];dg._withStripped=!0;var fg,mg,vg=i(43),gg=i.n(vg),bg=function(e){return e.stopPropagation()},yg={inject:["panel"],components:{ElCheckbox:In.a,ElRadio:gg.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,i=this.node,n=this.isDisabled,s=this.config,r=s.multiple,a=s.checkStrictly;!a&&n||i.loading||(s.lazy&&!i.loaded?t.lazyLoad(i,(function(){var t=e.isLeaf;if(t||e.handleExpand(),r){var n=!!t&&i.checked;e.handleMultiCheckChange(n)}})):t.handleExpand(i))},handleCheckChange:function(){var e=this.panel,t=this.value,i=this.node;e.handleCheckChange(t),e.handleExpand(i)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,i=e[t.level-1]||{};return i.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,i=this.isChecked,n=this.config,s=n.checkStrictly,r=n.multiple;return r?this.renderCheckbox(e):s?this.renderRadio(e):t&&i?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,i=this.isLeaf;return t.loading?this.renderLoadingIcon(e):i?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,i=this.config,n=this.isDisabled,s={on:{change:this.handleMultiCheckChange},nativeOn:{}};return i.checkStrictly&&(s.nativeOn.click=bg),e("el-checkbox",eh()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:n}},s]))},renderRadio:function(e){var t=this.checkedValue,i=this.value,n=this.isDisabled;return Object(b["isEqual"])(i,t)&&(i=t),e("el-radio",{attrs:{value:t,label:i,disabled:n},on:{change:this.handleCheckChange},nativeOn:{click:bg}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,i=this.node,n=t.renderLabelFn,s=n?n({node:i,data:i.data}):null;return e("span",{class:"el-cascader-node__label"},[s||i.label])}},render:function(e){var t=this,i=this.inActivePath,n=this.inCheckedPath,s=this.isChecked,r=this.isLeaf,a=this.isDisabled,o=this.config,l=this.nodeId,c=o.expandTrigger,u=o.checkStrictly,h=o.multiple,d=!u&&a,p={on:{}};return"click"===c?p.on.click=this.handleExpand:(p.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},p.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!r||a||u||h||(p.on.click=this.handleCheckChange),e("li",eh()([{attrs:{role:"menuitem",id:l,"aria-expanded":i,tabindex:d?null:-1},class:{"el-cascader-node":!0,"is-selectable":u,"in-active-path":i,"in-checked-path":n,"is-active":s,"is-disabled":d}},p]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},_g=yg,xg=o(_g,fg,mg,!1,null,null,null);xg.options.__file="packages/cascader-panel/src/cascader-node.vue";var Cg,wg,kg=xg.exports,Sg={name:"ElCascaderMenu",mixins:[g.a],inject:["panel"],components:{ElScrollbar:q.a,CascaderNode:kg},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(b["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,i=this.hoverTimer,n=this.$refs.hoverZone;if(t&&n)if(t.contains(e.target)){clearTimeout(i);var s=this.$el.getBoundingClientRect(),r=s.left,a=e.clientX-r,o=this.$el,l=o.offsetWidth,c=o.offsetHeight,u=t.offsetTop,h=u+t.offsetHeight;n.innerHTML='\n \n \n '}else i||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,i=this.panel.isHoverMenu,n={on:{}};i&&(n.on.expand=this.handleExpand);var s=this.nodes.map((function(i,s){var r=i.hasChildren;return e("cascader-node",eh()([{key:i.uid,attrs:{node:i,"node-id":t+"-"+s,"aria-haspopup":r,"aria-owns":r?t:null}},n]))}));return[].concat(s,[i?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,i=this.menuId,n={nativeOn:{}};return this.panel.isHoverMenu&&(n.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",eh()([{attrs:{tag:"ul",role:"menu",id:i,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},n]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},Dg=Sg,$g=o(Dg,Cg,wg,!1,null,null,null);$g.options.__file="packages/cascader-panel/src/cascader-menu.vue";var Og=$g.exports,Eg=function(){function e(e,t){for(var i=0;i1?t-1:0),n=1;n1?n-1:0),r=1;r0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),i=this.isSameNode(e,t);this.doCheck(i)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},Eg(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,i=this.config,n=i.disabled,s=i.checkStrictly;return e[n]||!s&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,i=this.hasChildren,n=this.children,s=this.config,r=s.lazy,a=s.leaf;if(r){var o=Object(Dt["isDef"])(e[a])?e[a]:!!t&&!n.length;return this.hasChildren=!o,o}return!i}}]),e}(),Ng=Mg;function Ig(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var jg=function e(t,i){return t.reduce((function(t,n){return n.isLeaf?t.push(n):(!i&&t.push(n),t=t.concat(e(n.children,i))),t}),[])},Fg=function(){function e(t,i){Ig(this,e),this.config=i,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(b["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new Ng(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var i=new Ng(e,this.config,t),n=t?t.children:this.nodes;n.push(i)},e.prototype.appendNodes=function(e,t){var i=this;e=Object(b["coerceTruthyValueToArray"])(e),e.forEach((function(e){return i.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=e?this.leafNodes:this.flattedNodes;return t?i:jg(this.nodes,e)},e.prototype.getNodeByValue=function(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(b["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null},e}(),Lg=Fg,Ag=Object.assign||function(e){for(var t=1;t0){var l=i.store.getNodeByValue(r);l.data[o]||i.lazyLoad(l,(function(){i.handleExpand(l)})),i.loadCount===i.checkedValue.length&&i.$parent.computePresentText()}}t&&t(n)};n.lazyLoad(e,s)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var i=t.querySelector(".el-scrollbar__wrap"),n=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");tn()(i,n)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,i=this.multiple;if(i){var n=this.getFlattedNodes(e);return n.filter((function(e){return e.checked}))}return this.isEmptyValue(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,i=e.multiple,n=e.emitPath;i?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=n?[]:null}}},Kg=Yg,Ug=o(Kg,dg,pg,!1,null,null,null);Ug.options.__file="packages/cascader-panel/src/cascader-panel.vue";var Gg=Ug.exports;Gg.install=function(e){e.component(Gg.name,Gg)};var Xg,Zg,Qg=Gg,Jg={name:"ElAvatar",props:{size:{type:[Number,String],validator:function(e){return"string"===typeof e?["large","medium","small"].includes(e):"number"===typeof e}},shape:{type:String,default:"circle",validator:function(e){return["circle","square"].includes(e)}},icon:String,src:String,alt:String,srcSet:String,error:Function,fit:{type:String,default:"cover"}},data:function(){return{isImageExist:!0}},computed:{avatarClass:function(){var e=this.size,t=this.icon,i=this.shape,n=["el-avatar"];return e&&"string"===typeof e&&n.push("el-avatar--"+e),t&&n.push("el-avatar--icon"),i&&n.push("el-avatar--"+i),n.join(" ")}},methods:{handleError:function(){var e=this.error,t=e?e():void 0;!1!==t&&(this.isImageExist=!1)},renderAvatar:function(){var e=this.$createElement,t=this.icon,i=this.src,n=this.alt,s=this.isImageExist,r=this.srcSet,a=this.fit;return s&&i?e("img",{attrs:{src:i,alt:n,srcSet:r},on:{error:this.handleError},style:{"object-fit":a}}):t?e("i",{class:t}):this.$slots.default}},render:function(){var e=arguments[0],t=this.avatarClass,i=this.size,n="number"===typeof i?{height:i+"px",width:i+"px",lineHeight:i+"px"}:{};return e("span",{class:t,style:n},[this.renderAvatar()])}},eb=Jg,tb=o(eb,Xg,Zg,!1,null,null,null);tb.options.__file="packages/avatar/src/main.vue";var ib=tb.exports;ib.install=function(e){e.component(ib.name,ib)};var nb=ib,sb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"el-drawer-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-drawer__wrapper",attrs:{tabindex:"-1"}},[i("div",{staticClass:"el-drawer__container",class:e.visible&&"el-drawer__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[i("div",{ref:"drawer",staticClass:"el-drawer",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.drawerSize:"height: "+e.drawerSize,attrs:{"aria-modal":"true","aria-labelledby":"el-drawer__title","aria-label":e.title,role:"dialog",tabindex:"-1"}},[e.withHeader?i("header",{staticClass:"el-drawer__header",attrs:{id:"el-drawer__title"}},[e._t("title",[i("span",{attrs:{role:"heading",title:e.title}},[e._v(e._s(e.title))])]),e.showClose?i("button",{staticClass:"el-drawer__close-btn",attrs:{"aria-label":"close "+(e.title||"drawer"),type:"button"},on:{click:e.closeDrawer}},[i("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2):e._e(),e.rendered?i("section",{staticClass:"el-drawer__body"},[e._t("default")],2):e._e()])])])])},rb=[];sb._withStripped=!0;var ab={name:"ElDrawer",mixins:[k.a,O.a],props:{appendToBody:{type:Boolean,default:!1},beforeClose:{type:Function},customClass:{type:String,default:""},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},modalAppendToBody:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},size:{type:[Number,String],default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0},withHeader:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction},drawerSize:function(){return"number"===typeof this.size?this.size+"px":this.size}},data:function(){return{closed:!1,prevActiveElement:null}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el),this.prevActiveElement=document.activeElement):(this.closed||(this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1)),this.$nextTick((function(){t.prevActiveElement&&t.prevActiveElement.focus()})))}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeDrawer()},closeDrawer:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},handleClose:function(){this.closeDrawer()}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},ob=ab,lb=o(ob,sb,rb,!1,null,null,null);lb.options.__file="packages/drawer/src/main.vue";var cb=lb.exports;cb.install=function(e){e.component(cb.name,cb)};var ub=cb,hb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("el-popover",e._b({attrs:{trigger:"click"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},"el-popover",e.$attrs,!1),[i("div",{staticClass:"el-popconfirm"},[i("p",{staticClass:"el-popconfirm__main"},[e.hideIcon?e._e():i("i",{staticClass:"el-popconfirm__icon",class:e.icon,style:{color:e.iconColor}}),e._v("\n "+e._s(e.title)+"\n ")]),i("div",{staticClass:"el-popconfirm__action"},[i("el-button",{attrs:{size:"mini",type:e.cancelButtonType},on:{click:e.cancel}},[e._v("\n "+e._s(e.displayCancelButtonText)+"\n ")]),i("el-button",{attrs:{size:"mini",type:e.confirmButtonType},on:{click:e.confirm}},[e._v("\n "+e._s(e.displayConfirmButtonText)+"\n ")])],1)]),e._t("reference",null,{slot:"reference"})],2)},db=[];hb._withStripped=!0;var pb=i(44),fb=i.n(pb),mb={name:"ElPopconfirm",props:{title:{type:String},confirmButtonText:{type:String},cancelButtonText:{type:String},confirmButtonType:{type:String,default:"primary"},cancelButtonType:{type:String,default:"text"},icon:{type:String,default:"el-icon-question"},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1}},components:{ElPopover:fb.a,ElButton:ae.a},data:function(){return{visible:!1}},computed:{displayConfirmButtonText:function(){return this.confirmButtonText||Object(vo["t"])("el.popconfirm.confirmButtonText")},displayCancelButtonText:function(){return this.cancelButtonText||Object(vo["t"])("el.popconfirm.cancelButtonText")}},methods:{confirm:function(){this.visible=!1,this.$emit("confirm")},cancel:function(){this.visible=!1,this.$emit("cancel")}}},vb=mb,gb=o(vb,hb,db,!1,null,null,null);gb.options.__file="packages/popconfirm/src/main.vue";var bb=gb.exports;bb.install=function(e){e.component(bb.name,bb)};var yb=bb,_b=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.uiLoading?[i("div",e._b({class:["el-skeleton",e.animated?"is-animated":""]},"div",e.$attrs,!1),[e._l(e.count,(function(t){return[e.loading?e._t("template",e._l(e.rows,(function(n){return i("el-skeleton-item",{key:t+"-"+n,class:{"el-skeleton__paragraph":1!==n,"is-first":1===n,"is-last":n===e.rows&&e.rows>1},attrs:{variant:"p"}})}))):e._e()]}))],2)]:[e._t("default",null,null,e.$attrs)]],2)},xb=[];_b._withStripped=!0;var Cb={name:"ElSkeleton",props:{animated:{type:Boolean,default:!1},count:{type:Number,default:1},rows:{type:Number,default:4},loading:{type:Boolean,default:!0},throttle:{type:Number,default:0}},watch:{loading:{handler:function(e){var t=this;this.throttle<=0?this.uiLoading=e:e?(clearTimeout(this.timeoutHandle),this.timeoutHandle=setTimeout((function(){t.uiLoading=t.loading}),this.throttle)):this.uiLoading=e},immediate:!0}},data:function(){return{uiLoading:this.throttle<=0&&this.loading}}},wb=Cb,kb=o(wb,_b,xb,!1,null,null,null);kb.options.__file="packages/skeleton/src/index.vue";var Sb=kb.exports;Sb.install=function(e){e.component(Sb.name,Sb)};var Db=Sb,$b=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-skeleton__item","el-skeleton__"+e.variant]},["image"===e.variant?i("img-placeholder"):e._e()],1)},Ob=[];$b._withStripped=!0;var Eb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("svg",{attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"}},[i("path",{attrs:{d:"M64 896V128h896v768H64z m64-128l192-192 116.352 116.352L640 448l256 307.2V192H128v576z m224-480a96 96 0 1 1-0.064 192.064A96 96 0 0 1 352 288z"}})])},Tb=[];Eb._withStripped=!0;var Pb={name:"ImgPlaceholder"},Mb=Pb,Nb=o(Mb,Eb,Tb,!1,null,null,null);Nb.options.__file="packages/skeleton/src/img-placeholder.vue";var Ib,jb=Nb.exports,Fb={name:"ElSkeletonItem",props:{variant:{type:String,default:"text"}},components:(Ib={},Ib[jb.name]=jb,Ib)},Lb=Fb,Ab=o(Lb,$b,Ob,!1,null,null,null);Ab.options.__file="packages/skeleton/src/item.vue";var Vb=Ab.exports;Vb.install=function(e){e.component(Vb.name,Vb)};var Bb=Vb,zb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"el-empty"},[i("div",{staticClass:"el-empty__image",style:e.imageStyle},[e.image?i("img",{attrs:{src:e.image,ondragstart:"return false"}}):e._t("image",[i("img-empty")])],2),i("div",{staticClass:"el-empty__description"},[e.$slots.description?e._t("description"):i("p",[e._v(e._s(e.emptyDescription))])],2),e.$slots.default?i("div",{staticClass:"el-empty__bottom"},[e._t("default")],2):e._e()])},Rb=[];zb._withStripped=!0;var Hb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("svg",{attrs:{viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}},[i("defs",[i("linearGradient",{attrs:{id:"linearGradient-1-"+e.id,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"}},[i("stop",{attrs:{"stop-color":"#FCFCFD",offset:"0%"}}),i("stop",{attrs:{"stop-color":"#EEEFF3",offset:"100%"}})],1),i("linearGradient",{attrs:{id:"linearGradient-2-"+e.id,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"}},[i("stop",{attrs:{"stop-color":"#FCFCFD",offset:"0%"}}),i("stop",{attrs:{"stop-color":"#E9EBEF",offset:"100%"}})],1),i("rect",{attrs:{id:"path-3-"+e.id,x:"0",y:"0",width:"17",height:"36"}})],1),i("g",{attrs:{id:"Illustrations",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"}},[i("g",{attrs:{id:"B-type",transform:"translate(-1268.000000, -535.000000)"}},[i("g",{attrs:{id:"Group-2",transform:"translate(1268.000000, 535.000000)"}},[i("path",{attrs:{id:"Oval-Copy-2",d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:"#F7F8FC"}}),i("polygon",{attrs:{id:"Rectangle-Copy-14",fill:"#E5E7E9",transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"}}),i("g",{attrs:{id:"Group-Copy",transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"}},[i("polygon",{attrs:{id:"Rectangle-Copy-10",fill:"#E5E7E9",transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"}}),i("polygon",{attrs:{id:"Rectangle-Copy-11",fill:"#EDEEF2",points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"}}),i("rect",{attrs:{id:"Rectangle-Copy-12",fill:"url(#linearGradient-1-"+e.id+")",transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"}}),i("polygon",{attrs:{id:"Rectangle-Copy-13",fill:"#F8F9FB",transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"}})]),i("rect",{attrs:{id:"Rectangle-Copy-15",fill:"url(#linearGradient-2-"+e.id+")",x:"13",y:"45",width:"40",height:"36"}}),i("g",{attrs:{id:"Rectangle-Copy-17",transform:"translate(53.000000, 45.000000)"}},[i("mask",{attrs:{id:"mask-4-"+e.id,fill:"white"}},[i("use",{attrs:{"xlink:href":"#path-3-"+e.id}})]),i("use",{attrs:{id:"Mask",fill:"#E0E3E9",transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":"#path-3-"+e.id}}),i("polygon",{attrs:{id:"Rectangle-Copy",fill:"#D5D7DE",mask:"url(#mask-4-"+e.id+")",transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 -1.70530257e-13 16"}})]),i("polygon",{attrs:{id:"Rectangle-Copy-18",fill:"#F8F9FB",transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"}})])])])])},Wb=[];Hb._withStripped=!0;var qb=0,Yb={name:"ImgEmpty",data:function(){return{id:++qb}}},Kb=Yb,Ub=o(Kb,Hb,Wb,!1,null,null,null);Ub.options.__file="packages/empty/src/img-empty.vue";var Gb,Xb=Ub.exports,Zb={name:"ElEmpty",components:(Gb={},Gb[Xb.name]=Xb,Gb),props:{image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}},computed:{emptyDescription:function(){return this.description||Object(vo["t"])("el.empty.description")},imageStyle:function(){return{width:this.imageSize?this.imageSize+"px":""}}}},Qb=Zb,Jb=o(Qb,zb,Rb,!1,null,null,null);Jb.options.__file="packages/empty/src/index.vue";var ey=Jb.exports;ey.install=function(e){e.component(ey.name,ey)};var ty,iy=ey,ny=Object.assign||function(e){for(var t=1;t3&&void 0!==arguments[3]&&arguments[3];return e.props||(e.props={}),t>i&&(e.props.span=i),n&&(e.props.span=i),e},getRows:function(){var e=this,t=(this.$slots.default||[]).filter((function(e){return e.tag&&e.componentOptions&&"ElDescriptionsItem"===e.componentOptions.Ctor.options.name})),i=t.map((function(t){return{props:e.getOptionProps(t),slots:e.getSlots(t),vnode:t}})),n=[],s=[],r=this.column;return i.forEach((function(i,a){var o=i.props.span||1;if(a===t.length-1)return s.push(e.filledNode(i,o,r,!0)),void n.push(s);o1&&void 0!==arguments[1]?arguments[1]:{};go.a.use(t.locale),go.a.i18n(t.i18n),Hy.forEach((function(t){e.component(t.name,t)})),e.use(sg),e.use(Mu.directive),e.prototype.$ELEMENT={size:t.size||"",zIndex:t.zIndex||2e3},e.prototype.$loading=Mu.service,e.prototype.$msgbox=Ao,e.prototype.$alert=Ao.alert,e.prototype.$confirm=Ao.confirm,e.prototype.$prompt=Ao.prompt,e.prototype.$notify=Qc,e.prototype.$message=Jh};"undefined"!==typeof window&&window.Vue&&Wy(window.Vue);t["default"]={version:"2.15.9",locale:go.a.use,i18n:go.a.i18n,install:Wy,CollapseTransition:Ke.a,Loading:Mu,Pagination:_,Dialog:N,Autocomplete:se,Dropdown:pe,DropdownMenu:_e,DropdownItem:$e,Menu:qe,Submenu:et,MenuItem:ct,MenuItemGroup:vt,Input:Pt,InputNumber:Vt,Radio:Yt,RadioGroup:ei,RadioButton:oi,Checkbox:fi,CheckboxButton:xi,CheckboxGroup:Oi,Switch:ji,Select:ln,Option:cn,OptionGroup:vn,Button:wn,ButtonGroup:Tn,Table:Gs,TableColumn:nr,DatePicker:Ta,TimeSelect:Ra,TimePicker:to,Popover:uo,Tooltip:po,MessageBox:Ao,Breadcrumb:qo,BreadcrumbItem:Qo,Form:rl,FormItem:_l,Tabs:zl,TabPane:Xl,Tag:tc,Tree:Tc,Alert:Ac,Notification:Qc,Slider:fu,Icon:Vu,Row:zu,Col:Wu,Upload:wh,Progress:Th,Spinner:Lh,Message:Jh,Badge:ad,Card:pd,Rate:_d,Steps:$d,Step:Id,Carousel:Hd,Scrollbar:Ud,CarouselItem:ip,Collapse:cp,CollapseItem:vp,Cascader:Pp,ColorPicker:Mf,Transfer:qf,Container:Qf,Header:rm,Aside:dm,Main:ym,Footer:Om,Timeline:Nm,TimelineItem:Bm,Link:Km,Divider:ev,Image:yv,Calendar:Lv,Backtop:Yv,InfiniteScroll:sg,PageHeader:hg,CascaderPanel:Qg,Avatar:nb,Drawer:ub,Popconfirm:yb,Skeleton:Db,SkeletonItem:Bb,Empty:iy,Descriptions:oy,DescriptionsItem:cy,Result:Ry}}])["default"]},6167:function(e,t,i){"use strict";var n,s;"function"===typeof Symbol&&Symbol.iterator;(function(r,a){n=a,s="function"===typeof n?n.call(t,i,t,e):n,void 0===s||(e.exports=s)})(0,(function(){var e=window,t={placement:"bottom",gpuAcceleration:!0,offset:0,boundariesElement:"viewport",boundariesPadding:5,preventOverflowOrder:["left","right","top","bottom"],flipBehavior:"flip",arrowElement:"[x-arrow]",arrowOffset:0,modifiers:["shift","offset","preventOverflow","keepTogether","arrow","flip","applyStyle"],modifiersIgnored:[],forceAbsolute:!1};function i(e,i,n){this._reference=e.jquery?e[0]:e,this.state={};var s="undefined"===typeof i||null===i,r=i&&"[object Object]"===Object.prototype.toString.call(i);return this._popper=s||r?this.parse(r?i:{}):i.jquery?i[0]:i,this._options=Object.assign({},t,n),this._options.modifiers=this._options.modifiers.map(function(e){if(-1===this._options.modifiersIgnored.indexOf(e))return"applyStyle"===e&&this._popper.setAttribute("x-placement",this._options.placement),this.modifiers[e]||e}.bind(this)),this.state.position=this._getPosition(this._popper,this._reference),h(this._popper,{position:this.state.position,top:0}),this.update(),this._setupEventListeners(),this}function n(t){var i=t.style.display,n=t.style.visibility;t.style.display="block",t.style.visibility="hidden";t.offsetWidth;var s=e.getComputedStyle(t),r=parseFloat(s.marginTop)+parseFloat(s.marginBottom),a=parseFloat(s.marginLeft)+parseFloat(s.marginRight),o={width:t.offsetWidth+a,height:t.offsetHeight+r};return t.style.display=i,t.style.visibility=n,o}function s(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function r(e){var t=Object.assign({},e);return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function a(e,t){var i,n=0;for(i in e){if(e[i]===t)return n;n++}return null}function o(t,i){var n=e.getComputedStyle(t,null);return n[i]}function l(t){var i=t.offsetParent;return i!==e.document.body&&i?i:e.document.documentElement}function c(t){var i=t.parentNode;return i?i===e.document?e.document.body.scrollTop||e.document.body.scrollLeft?e.document.body:e.document.documentElement:-1!==["scroll","auto"].indexOf(o(i,"overflow"))||-1!==["scroll","auto"].indexOf(o(i,"overflow-x"))||-1!==["scroll","auto"].indexOf(o(i,"overflow-y"))?i:c(t.parentNode):t}function u(t){return t!==e.document.body&&("fixed"===o(t,"position")||(t.parentNode?u(t.parentNode):t))}function h(e,t){function i(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}Object.keys(t).forEach((function(n){var s="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&i(t[n])&&(s="px"),e.style[n]=t[n]+s}))}function d(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function p(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.offsetLeft,top:e.offsetTop};return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function f(e){var t=e.getBoundingClientRect(),i=-1!=navigator.userAgent.indexOf("MSIE"),n=i&&"HTML"===e.tagName?-e.scrollTop:t.top;return{left:t.left,top:n,right:t.right,bottom:t.bottom,width:t.right-t.left,height:t.bottom-n}}function m(e,t,i){var n=f(e),s=f(t);if(i){var r=c(t);s.top+=r.scrollTop,s.bottom+=r.scrollTop,s.left+=r.scrollLeft,s.right+=r.scrollLeft}var a={top:n.top-s.top,left:n.left-s.left,bottom:n.top-s.top+n.height,right:n.left-s.left+n.width,width:n.width,height:n.height};return a}function v(t){for(var i=["","ms","webkit","moz","o"],n=0;n1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(s),s;function o(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},i.prototype._getPosition=function(e,t){var i=l(t);if(this._options.forceAbsolute)return"absolute";var n=u(t,i);return n?"fixed":"absolute"},i.prototype._getOffsets=function(e,t,i){i=i.split("-")[0];var s={};s.position=this.state.position;var r="fixed"===s.position,a=m(t,l(e),r),o=n(e);return-1!==["right","left"].indexOf(i)?(s.top=a.top+a.height/2-o.height/2,s.left="left"===i?a.left-o.width:a.right):(s.left=a.left+a.width/2-o.width/2,s.top="top"===i?a.top-o.height:a.bottom),s.width=o.width,s.height=o.height,{popper:s,reference:a}},i.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=c(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},i.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},i.prototype._getBoundaries=function(t,i,n){var s,r,a={};if("window"===n){var o=e.document.body,u=e.document.documentElement;r=Math.max(o.scrollHeight,o.offsetHeight,u.clientHeight,u.scrollHeight,u.offsetHeight),s=Math.max(o.scrollWidth,o.offsetWidth,u.clientWidth,u.scrollWidth,u.offsetWidth),a={top:0,right:s,bottom:r,left:0}}else if("viewport"===n){var h=l(this._popper),d=c(this._popper),f=p(h),m=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},v=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},g="fixed"===t.offsets.popper.position?0:m(d),b="fixed"===t.offsets.popper.position?0:v(d);a={top:0-(f.top-g),right:e.document.documentElement.clientWidth-(f.left-b),bottom:e.document.documentElement.clientHeight-(f.top-g),left:0-(f.left-b)}}else a=l(this._popper)===n?{top:0,left:0,right:n.clientWidth,bottom:n.clientHeight}:p(n);return a.left+=i,a.right-=i,a.top=a.top+i,a.bottom=a.bottom-i,a},i.prototype.runModifiers=function(e,t,i){var n=t.slice();return void 0!==i&&(n=this._options.modifiers.slice(0,a(this._options.modifiers,i))),n.forEach(function(t){d(t)&&(e=t.call(this,e))}.bind(this)),e},i.prototype.isModifierRequired=function(e,t){var i=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,i).filter((function(e){return e===t})).length},i.prototype.modifiers={},i.prototype.modifiers.applyStyle=function(e){var t,i={position:e.offsets.popper.position},n=Math.round(e.offsets.popper.left),s=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=v("transform"))?(i[t]="translate3d("+n+"px, "+s+"px, 0)",i.top=0,i.left=0):(i.left=n,i.top=s),Object.assign(i,e.styles),h(this._popper,i),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&h(e.arrowElement,e.offsets.arrow),e},i.prototype.modifiers.shift=function(e){var t=e.placement,i=t.split("-")[0],n=t.split("-")[1];if(n){var s=e.offsets.reference,a=r(e.offsets.popper),o={y:{start:{top:s.top},end:{top:s.top+s.height-a.height}},x:{start:{left:s.left},end:{left:s.left+s.width-a.width}}},l=-1!==["bottom","top"].indexOf(i)?"x":"y";e.offsets.popper=Object.assign(a,o[l][n])}return e},i.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,i=r(e.offsets.popper),n={left:function(){var t=i.left;return i.lefte.boundaries.right&&(t=Math.min(i.left,e.boundaries.right-i.width)),{left:t}},top:function(){var t=i.top;return i.tope.boundaries.bottom&&(t=Math.min(i.top,e.boundaries.bottom-i.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(i,n[t]())})),e},i.prototype.modifiers.keepTogether=function(e){var t=r(e.offsets.popper),i=e.offsets.reference,n=Math.floor;return t.rightn(i.right)&&(e.offsets.popper.left=n(i.right)),t.bottomn(i.bottom)&&(e.offsets.popper.top=n(i.bottom)),e},i.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],i=s(t),n=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,i]:this._options.flipBehavior,a.forEach(function(o,l){if(t===o&&a.length!==l+1){t=e.placement.split("-")[0],i=s(t);var c=r(e.offsets.popper),u=-1!==["right","bottom"].indexOf(t);(u&&Math.floor(e.offsets.reference[t])>Math.floor(c[i])||!u&&Math.floor(e.offsets.reference[t])o[p]&&(e.offsets.popper[h]+=l[h]+f-o[p]);var m=l[h]+(i||l[u]/2-f/2),v=m-o[h];return v=Math.max(Math.min(o[u]-f-8,v),8),s[h]=v,s[d]="",e.offsets.arrow=s,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),i=1;i-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(l["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),t&&(Object(o["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),i.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(o["on"])(t,"focusin",(function(){e.handleFocus();var i=t.__vue__;i&&"function"===typeof i.focus&&i.focus()})),Object(o["on"])(i,"focusin",this.handleFocus),Object(o["on"])(t,"focusout",this.handleBlur),Object(o["on"])(i,"focusout",this.handleBlur)),Object(o["on"])(t,"keydown",this.handleKeydown),Object(o["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(o["on"])(t,"click",this.doToggle),Object(o["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(o["on"])(t,"mouseenter",this.handleMouseEnter),Object(o["on"])(i,"mouseenter",this.handleMouseEnter),Object(o["on"])(t,"mouseleave",this.handleMouseLeave),Object(o["on"])(i,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(o["on"])(t,"focusin",this.doShow),Object(o["on"])(t,"focusout",this.doClose)):(Object(o["on"])(t,"mousedown",this.doShow),Object(o["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(o["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(o["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(o["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,i=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&i&&!i.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(o["off"])(e,"click",this.doToggle),Object(o["off"])(e,"mouseup",this.doClose),Object(o["off"])(e,"mousedown",this.doShow),Object(o["off"])(e,"focusin",this.doShow),Object(o["off"])(e,"focusout",this.doClose),Object(o["off"])(e,"mousedown",this.doShow),Object(o["off"])(e,"mouseup",this.doClose),Object(o["off"])(e,"mouseleave",this.handleMouseLeave),Object(o["off"])(e,"mouseenter",this.handleMouseEnter),Object(o["off"])(document,"click",this.handleDocumentClick)}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/popover/src/main.vue";var p=d.exports,f=function(e,t,i){var n=t.expression?t.value:t.arg,s=i.context.$refs[n];s&&(Array.isArray(s)?s[0].$refs.reference=e:s.$refs.reference=e)},m={bind:function(e,t,i){f(e,t,i)},inserted:function(e,t,i){f(e,t,i)}},v=i(7),g=i.n(v);g.a.directive("popover",m),p.install=function(e){e.directive("popover",m),e.component(p.name,p)},p.directive=m;t["default"]=p}})},"6b7c":function(e,t,i){"use strict";t.__esModule=!0;var n=i("4897");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),i=0;i0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var f=t.arrayFindIndex=function(e,t){for(var i=0;i!==e.length;++i)if(t(e[i]))return i;return-1},m=(t.arrayFind=function(e,t){var i=f(e,t);return-1!==i?e[i]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!r.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!r.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!r.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":n(e)))return e;var t=["transform","transition","animation"],i=["ms-","webkit-"];return t.forEach((function(t){var n=e[t];t&&n&&i.forEach((function(i){e[i+t]=n}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,a.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var i=(0,a.isObject)(e),n=(0,a.isObject)(t);return i&&n?JSON.stringify(e)===JSON.stringify(t):!i&&!n&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var i=0;i1?t-1:0),a=1;a-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),i=0;ie)return t[i].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,i){return"string"===typeof e?{color:e,percentage:(i+1)*t}:e}))}}},a=r,o=i(0),l=Object(o["a"])(a,n,s,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},c56a:function(e,t,i){"use strict";t.__esModule=!0,t.default=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var s=!1,r=function(){s||(s=!0,t&&t.apply(null,arguments))};n?e.$once("after-leave",r):e.$on("after-leave",r),setTimeout((function(){r()}),i+100)}},d010:function(e,t,i){"use strict";function n(e,t,i){this.$children.forEach((function(s){var r=s.$options.componentName;r===e?s.$emit.apply(s,[t].concat(i)):n.apply(s,[e,t].concat([i]))}))}t.__esModule=!0,t.default={methods:{dispatch:function(e,t,i){var n=this.$parent||this.$root,s=n.$options.componentName;while(n&&(!s||s!==e))n=n.$parent,n&&(s=n.$options.componentName);n&&n.$emit.apply(n,[t].concat(i))},broadcast:function(e,t,i){n.call(this,e,t,i)}}}},d397:function(e,t,i){"use strict";function n(e){return void 0!==e&&null!==e}function s(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=n,t.isKorean=s},d7d1:function(e,t,i){"use strict";var n;(function(s){var r={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,o="\\d\\d?",l="\\d{3}",c="\\d{4}",u="[^\\s]+",h=/\[([^]*?)\]/gm,d=function(){};function p(e){return e.replace(/[|\\{()[^$+*?.-]/g,"\\$&")}function f(e,t){for(var i=[],n=0,s=e.length;n3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return v(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return v(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return v(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return v(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return v(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return v(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return v(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return v(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return v(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return v(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return v(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+v(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},C={d:[o,function(e,t){e.day=t}],Do:[o+u,function(e,t){e.day=parseInt(t,10)}],M:[o,function(e,t){e.month=t-1}],yy:[o,function(e,t){var i=new Date,n=+(""+i.getFullYear()).substr(0,2);e.year=""+(t>68?n-1:n)+t}],h:[o,function(e,t){e.hour=t}],m:[o,function(e,t){e.minute=t}],s:[o,function(e,t){e.second=t}],yyyy:[c,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[o,d],ddd:[u,d],MMM:[u,m("monthNamesShort")],MMMM:[u,m("monthNames")],a:[u,function(e,t,i){var n=t.toLowerCase();n===i.amPm[0]?e.isPm=!1:n===i.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var i,n=(t+"").match(/([+-]|\d\d)/gi);n&&(i=60*n[1]+parseInt(n[2],10),e.timezoneOffset="+"===n[0]?i:-i)}]};C.dd=C.d,C.dddd=C.ddd,C.DD=C.D,C.mm=C.m,C.hh=C.H=C.HH=C.h,C.MM=C.M,C.ss=C.s,C.A=C.a,r.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},r.format=function(e,t,i){var n=i||r.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=r.masks[t]||t||r.masks["default"];var s=[];return t=t.replace(h,(function(e,t){return s.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,n):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return s.shift()}))},r.parse=function(e,t,i){var n=i||r.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=r.masks[t]||t,e.length>1e3)return null;var s={},o=[],l=[];t=t.replace(h,(function(e,t){return l.push(t),"@@@"}));var c=p(t).replace(a,(function(e){if(C[e]){var t=C[e];return o.push(t[1]),"("+t[0]+")"}return e}));c=c.replace(/@@@/g,(function(){return l.shift()}));var u=e.match(new RegExp(c,"i"));if(!u)return null;for(var d=1;d1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()-t)});t.nextDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)},t.getStartDateOfMonth=function(e,t){var i=new Date(e,t,1),n=i.getDay();return m(i,0===n?7:n)},t.getWeekNumber=function(e){if(!d(e))return null;var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var i=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-i.getTime())/864e5-3+(i.getDay()+6)%7)/7)},t.getRangeHours=function(e){var t=[],i=[];if((e||[]).forEach((function(e){var t=e.map((function(e){return e.getHours()}));i=i.concat(c(t[0],t[1]))})),i.length)for(var n=0;n<24;n++)t[n]=-1===i.indexOf(n);else for(var s=0;s<24;s++)t[s]=!1;return t},t.getPrevMonthLastDays=function(e,t){if(t<=0)return[];var i=new Date(e.getTime());i.setDate(0);var n=i.getDate();return g(t).map((function(e,i){return n-(t-i-1)}))},t.getMonthDays=function(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),i=t.getDate();return g(i).map((function(e,t){return t+1}))};function v(e,t,i,n){for(var s=t;s0?e.forEach((function(e){var n=e[0],s=e[1],r=n.getHours(),a=n.getMinutes(),o=s.getHours(),l=s.getMinutes();r===t&&o!==t?v(i,a,60,!0):r===t&&o===t?v(i,a,l+1,!0):r!==t&&o===t?v(i,0,l+1,!0):rt&&v(i,0,60,!0)})):v(i,0,60,!0),i};var g=t.range=function(e){return Array.apply(null,{length:e}).map((function(e,t){return t}))},b=t.modifyDate=function(e,t,i,n){return new Date(t,i,n,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())},y=t.modifyTime=function(e,t,i,n){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t,i,n,e.getMilliseconds())},_=(t.modifyWithTimeString=function(e,t){return null!=e&&t?(t=p(t,"HH:mm:ss"),y(e,t.getHours(),t.getMinutes(),t.getSeconds())):e},t.clearTime=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},t.clearMilliseconds=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),0)},t.limitTimeRange=function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"HH:mm:ss";if(0===t.length)return e;var n=function(e){return s.default.parse(s.default.format(e,i),i)},r=n(e),a=t.map((function(e){return e.map(n)}));if(a.some((function(e){return r>=e[0]&&r<=e[1]})))return e;var o=a[0][0],l=a[0][0];a.forEach((function(e){o=new Date(Math.min(e[0],o)),l=new Date(Math.max(e[1],o))}));var c=r1&&void 0!==arguments[1]?arguments[1]:1,i=e.getFullYear(),n=e.getMonth();return x(e,i-t,n)},t.nextYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=e.getFullYear(),n=e.getMonth();return x(e,i+t,n)},t.extractDateFormat=function(e){return e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim()},t.extractTimeFormat=function(e){return e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g,"").trim()},t.validateRangeInOneMonth=function(e,t){return e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}},dcdc:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=90)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},4:function(e,t){e.exports=i("d010")},90:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[i("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[i("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var i=e.model,n=t.target,s=n.checked?e.trueLabel:e.falseLabel;if(Array.isArray(i)){var r=null,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,n=t.target,s=!!n.checked;if(Array.isArray(i)){var r=e.label,a=e._i(i,r);n.checked?a<0&&(e.model=i.concat([r])):a>-1&&(e.model=i.slice(0,a).concat(i.slice(a+1)))}else e.model=s},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?i("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,i=e.min;return!(!t&&!i)&&this.model.length>=t&&!this.isChecked||this.model.length<=i&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var i=void 0;i=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",i,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=o,c=i(0),u=Object(c["a"])(l,n,s,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox.vue";var h=u.exports;h.install=function(e){e.component(h.name,h)};t["default"]=h}})},e450:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=86)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},10:function(e,t){e.exports=i("f3ad")},2:function(e,t){e.exports=i("5924")},22:function(e,t){e.exports=i("12f2")},30:function(e,t,i){"use strict";var n=i(2);t["a"]={bind:function(e,t,i){var s=null,r=void 0,a=function(){return i.context[t.expression].apply()},o=function(){Date.now()-r<100&&a(),clearInterval(s),s=null};Object(n["on"])(e,"mousedown",(function(e){0===e.button&&(r=Date.now(),Object(n["once"])(document,"mouseup",o),clearInterval(s),s=setInterval(a,100))}))}}},86:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?i("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.decrease(t)}}},[i("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?i("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.increase(t)}}},[i("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),i("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.increase(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.decrease(t))}]}})],1)},s=[];n._withStripped=!0;var r=i(10),a=i.n(r),o=i(22),l=i.n(o),c=i(30),u={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:c["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var i=this.getPrecision(this.step),n=Math.pow(10,i);t=Math.round(t/this.step)*n*this.step/n}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,i=this.getPrecision,n=this.precision,s=i(t);return void 0!==n?(s>n&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),n):Math.max(i(e),s)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),i=Math.pow(10,t);e=Math.round(e/this.step)*i*this.step/i}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),i=t.indexOf("."),n=0;return-1!==i&&(n=t.length-i-1),n},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e+i*t)/i)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var i=Math.pow(10,this.numPrecision);return this.toPrecision((i*e-i*t)/i)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},h=u,d=i(0),p=Object(d["a"])(h,n,s,!1,null,null,null);p.options.__file="packages/input-number/src/input-number.vue";var f=p.exports;f.install=function(e){e.component(f.name,f)};t["default"]=f}})},e452:function(e,t,i){"use strict";t.__esModule=!0;var n=n||{};n.Utils=n.Utils||{},n.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var i=e.childNodes[t];if(n.Utils.attemptFocus(i)||n.Utils.focusLastDescendant(i))return!0}return!1},n.Utils.attemptFocus=function(e){if(!n.Utils.isFocusable(e))return!1;n.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return n.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},n.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},n.Utils.triggerEvent=function(e,t){var i=void 0;i=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var n=document.createEvent(i),s=arguments.length,r=Array(s>2?s-2:0),a=2;a=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var i=this.select,n=i.remote,s=i.valueKey;if(!this.created&&!n){if(s&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[s]===t[s])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var i=this.select.valueKey;return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var i=this.select.valueKey;return e&&e.some((function(e){return Object(o["getValueByPath"])(e,i)===Object(o["getValueByPath"])(t,i)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(o["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select,t=e.selected,i=e.multiple,n=i?t:[t],s=this.select.cachedOptions.indexOf(this),r=n.indexOf(this);s>-1&&r<0&&this.select.cachedOptions.splice(s,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,h=i(0),d=Object(h["a"])(u,n,s,!1,null,null,null);d.options.__file="packages/select/src/option.vue";t["a"]=d.exports},4:function(e,t){e.exports=i("d010")},53:function(e,t,i){"use strict";i.r(t);var n=i(33);n["a"].install=function(e){e.component(n["a"].name,n["a"])},t["default"]=n["a"]}})},e974:function(e,t,i){"use strict";t.__esModule=!0;var n=i("2b0e"),s=a(n),r=i("5128");function a(e){return e&&e.__esModule?e:{default:e}}var o=s.default.prototype.$isServer?function(){}:i("6167"),l=function(e){return e.stopPropagation()};t.default={props:{transformOrigin:{type:[Boolean,String],default:!0},placement:{type:String,default:"bottom"},boundariesPadding:{type:Number,default:5},reference:{},popper:{},offset:{default:0},value:Boolean,visibleArrow:Boolean,arrowOffset:{type:Number,default:35},appendToBody:{type:Boolean,default:!0},popperOptions:{type:Object,default:function(){return{gpuAcceleration:!1}}}},data:function(){return{showPopper:!1,currentPlacement:""}},watch:{value:{immediate:!0,handler:function(e){this.showPopper=e,this.$emit("input",e)}},showPopper:function(e){this.disabled||(e?this.updatePopper():this.destroyPopper(),this.$emit("input",e))}},methods:{createPopper:function(){var e=this;if(!this.$isServer&&(this.currentPlacement=this.currentPlacement||this.placement,/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement))){var t=this.popperOptions,i=this.popperElm=this.popperElm||this.popper||this.$refs.popper,n=this.referenceElm=this.referenceElm||this.reference||this.$refs.reference;!n&&this.$slots.reference&&this.$slots.reference[0]&&(n=this.referenceElm=this.$slots.reference[0].elm),i&&n&&(this.visibleArrow&&this.appendArrow(i),this.appendToBody&&document.body.appendChild(this.popperElm),this.popperJS&&this.popperJS.destroy&&this.popperJS.destroy(),t.placement=this.currentPlacement,t.offset=this.offset,t.arrowOffset=this.arrowOffset,this.popperJS=new o(n,i,t),this.popperJS.onCreate((function(t){e.$emit("created",e),e.resetTransformOrigin(),e.$nextTick(e.updatePopper)})),"function"===typeof t.onUpdate&&this.popperJS.onUpdate(t.onUpdate),this.popperJS._popper.style.zIndex=r.PopupManager.nextZIndex(),this.popperElm.addEventListener("click",l))}},updatePopper:function(){var e=this.popperJS;e?(e.update(),e._popper&&(e._popper.style.zIndex=r.PopupManager.nextZIndex())):this.createPopper()},doDestroy:function(e){!this.popperJS||this.showPopper&&!e||(this.popperJS.destroy(),this.popperJS=null)},destroyPopper:function(){this.popperJS&&this.resetTransformOrigin()},resetTransformOrigin:function(){if(this.transformOrigin){var e={top:"bottom",bottom:"top",left:"right",right:"left"},t=this.popperJS._popper.getAttribute("x-placement").split("-")[0],i=e[t];this.popperJS._popper.style.transformOrigin="string"===typeof this.transformOrigin?this.transformOrigin:["top","bottom"].indexOf(t)>-1?"center "+i:i+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var i in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[i].name)){t=e.attributes[i].name;break}var n=document.createElement("div");t&&n.setAttribute(t,""),n.setAttribute("x-arrow",""),n.className="popper__arrow",e.appendChild(n)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},eedf:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=95)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},95:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?i("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?i("i",{class:e.icon}):e._e(),e.$slots.default?i("span",[e._t("default")],2):e._e()])},s=[];n._withStripped=!0;var r={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.$options.propsData.hasOwnProperty("disabled")?this.disabled:(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=r,o=i(0),l=Object(o["a"])(a,n,s,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},f0d9:function(e,t,i){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},empty:{description:"暂无数据"}}}},f3ad:function(e,t,i){e.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=74)}({0:function(e,t,i){"use strict";function n(e,t,i,n,s,r,a,o){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),r&&(c._scopeId="data-v-"+r),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):s&&(l=o?function(){s.call(this,this.$root.$options.shadowRoot)}:s),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,"a",(function(){return n}))},11:function(e,t){e.exports=i("2bb5")},21:function(e,t){e.exports=i("d397")},4:function(e,t){e.exports=i("d010")},74:function(e,t,i){"use strict";i.r(t);var n=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?i("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?i("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?i("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?i("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?i("span",{staticClass:"el-input__suffix"},[i("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?i("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?i("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?i("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?i("span",{staticClass:"el-input__count"},[i("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?i("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?i("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:i("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?i("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},s=[];n._withStripped=!0;var r=i(4),a=i.n(r),o=i(11),l=i.n(o),c=void 0,u="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",h=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function d(e){var t=window.getComputedStyle(e),i=t.getPropertyValue("box-sizing"),n=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),s=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),r=h.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:r,paddingSize:n,borderSize:s,boxSizing:i}}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;c||(c=document.createElement("textarea"),document.body.appendChild(c));var n=d(e),s=n.paddingSize,r=n.borderSize,a=n.boxSizing,o=n.contextStyle;c.setAttribute("style",o+";"+u),c.value=e.value||e.placeholder||"";var l=c.scrollHeight,h={};"border-box"===a?l+=r:"content-box"===a&&(l-=s),c.value="";var p=c.scrollHeight-s;if(null!==t){var f=p*t;"border-box"===a&&(f=f+s+r),l=Math.max(f,l),h.minHeight=f+"px"}if(null!==i){var m=p*i;"border-box"===a&&(m=m+s+r),l=Math.min(m,l)}return h.height=l+"px",c.parentNode&&c.parentNode.removeChild(c),c=null,h}var f=i(9),m=i.n(f),v=i(21),g={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return m()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var i=e.minRows,n=e.maxRows;this.textareaCalcStyle=p(this.$refs.textarea,i,n)}else this.textareaCalcStyle={minHeight:p(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(e){this.$emit("compositionstart",e),this.isComposing=!0},handleCompositionUpdate:function(e){this.$emit("compositionupdate",e);var t=e.target.value,i=t[t.length-1]||"";this.isComposing=!Object(v["isKorean"])(i)},handleCompositionEnd:function(e){this.$emit("compositionend",e),this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var i=null,n=0;nr)X(t,n=i[r++],e[n]);return t},J=function(t,e){return void 0===e?M(t):K(M(t),e)},Q=function(t){var e=V.call(this,t=w(t,!0));return!(this===j&&r(H,t)&&!r(G,t))&&(!(e||!r(this,t)||!r(H,t)||r(this,z)&&this[z][t])||e)},tt=function(t,e){if(t=b(t),e=w(e,!0),t!==j||!r(H,e)||r(G,e)){var n=k(t,e);return!n||!r(H,e)||r(t,z)&&t[z][e]||(n.enumerable=!0),n}},et=function(t){var e,n=P(b(t)),i=[],o=0;while(n.length>o)r(H,e=n[o++])||e==z||e==l||i.push(e);return i},nt=function(t){var e,n=t===j,i=P(n?G:b(t)),o=[],a=0;while(i.length>a)!r(H,e=i[a++])||n&&!r(j,e)||o.push(H[e]);return o};W||(O=function(){if(this instanceof O)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===j&&e.call(G,n),r(this,z)&&r(this[z],t)&&(this[z][t]=!1),$(this,t,S(1,n))};return o&&q&&$(j,t,{configurable:!0,set:e}),Z(t)},s(O[N],"toString",(function(){return this._k})),T.f=tt,C.f=X,n("6abf").f=A.f=et,n("355d").f=Q,I.f=nt,o&&!n("b8e3")&&s(j,"propertyIsEnumerable",Q,!0),p.f=function(t){return Z(f(t))}),a(a.G+a.W+a.F*!W,{Symbol:O});for(var it="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;it.length>rt;)f(it[rt++]);for(var ot=D(f.store),at=0;ot.length>at;)g(ot[at++]);a(a.S+a.F*!W,"Symbol",{for:function(t){return r(F,t+="")?F[t]:F[t]=O(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+" is not a symbol!");for(var e in F)if(F[e]===t)return e},useSetter:function(){q=!0},useSimple:function(){q=!1}}),a(a.S+a.F*!W,"Object",{create:J,defineProperty:X,defineProperties:K,getOwnPropertyDescriptor:tt,getOwnPropertyNames:et,getOwnPropertySymbols:nt});var st=u((function(){I.f(1)}));a(a.S+a.F*st,"Object",{getOwnPropertySymbols:function(t){return I.f(_(t))}}),E&&a(a.S+a.F*(!W||u((function(){var t=O();return"[null]"!=R([t])||"{}"!=R({a:t})||"{}"!=R(Object(t))}))),"JSON",{stringify:function(t){var e,n,i=[t],r=1;while(arguments.length>r)i.push(arguments[r++]);if(n=e=i[1],(x(e)||void 0!==t)&&!Y(t))return m(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!Y(e))return e}),i[1]=e,R.apply(E,i)}}),O[N][B]||n("35e8")(O[N],B,O[N].valueOf),h(O,"Symbol"),h(Math,"Math",!0),h(i.JSON,"JSON",!0)},"0156":function(t,e,n){var i=n("6d8b");function r(t,e,n){n=n||{};var r=t.coordinateSystem,o=e.axis,a={},s=o.getAxesOnZeroOf()[0],l=o.position,u=s?"onZero":l,c=o.dim,h=r.getRect(),d=[h.x,h.x+h.width,h.y,h.y+h.height],f={left:0,right:1,top:0,bottom:1,onZero:2},p=e.get("offset")||0,g="x"===c?[d[2]-p,d[3]+p]:[d[0]-p,d[1]+p];if(s){var v=s.toGlobalCoord(s.dataToCoord(0));g[f.onZero]=Math.max(Math.min(v,g[1]),g[0])}a.position=["y"===c?g[f[u]]:d[0],"x"===c?g[f[u]]:d[3]],a.rotation=Math.PI/2*("x"===c?0:1);var m={top:-1,bottom:1,left:-1,right:1};a.labelDirection=a.tickDirection=a.nameDirection=m[l],a.labelOffset=s?g[f[l]]-g[f.onZero]:0,e.get("axisTick.inside")&&(a.tickDirection=-a.tickDirection),i.retrieve(n.labelInside,e.get("axisLabel.inside"))&&(a.labelDirection=-a.labelDirection);var y=e.get("axisLabel.rotate");return a.labelRotate="top"===u?-y:y,a.z2=1,a}e.layout=r},"01ed":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2306");n("5aa9"),n("af24"),i.extendComponentView({type:"grid",render:function(t,e){this.group.removeAll(),t.get("show")&&this.group.add(new o.Rect({shape:t.coordinateSystem.getRect(),style:r.defaults({fill:t.get("backgroundColor")},t.getItemStyle()),silent:!0,z2:-1}))}}),i.registerPreprocessor((function(t){t.xAxis&&t.yAxis&&!t.grid&&(t.grid={})}))},"01ef":function(t,e){function n(t,e,n){var i=t.target,r=i.position;r[0]+=e,r[1]+=n,i.dirty()}function i(t,e,n,i){var r=t.target,o=t.zoomLimit,a=r.position,s=r.scale,l=t.zoom=t.zoom||1;if(l*=e,o){var u=o.min||0,c=o.max||1/0;l=Math.max(Math.min(c,l),u)}var h=l/t.zoom;t.zoom=l,a[0]-=(n-a[0])*(h-1),a[1]-=(i-a[1])*(h-1),s[0]*=h,s[1]*=h,r.dirty()}e.updateViewOnPan=n,e.updateViewOnZoom=i},"01f9":function(t,e,n){"use strict";var i=n("2d00"),r=n("5ca1"),o=n("2aba"),a=n("32e9"),s=n("84f2"),l=n("41a0"),u=n("7f20"),c=n("38fd"),h=n("2b4c")("iterator"),d=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",g="values",v=function(){return this};t.exports=function(t,e,n,m,y,x,_){l(n,e,m);var b,w,S,M=function(t){if(!d&&t in C)return C[t];switch(t){case p:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this,t)}},A=e+" Iterator",T=y==g,I=!1,C=t.prototype,D=C[h]||C[f]||y&&C[y],k=D||M(y),L=y?T?M("entries"):k:void 0,P="Array"==e&&C.entries||D;if(P&&(S=c(P.call(new t)),S!==Object.prototype&&S.next&&(u(S,A,!0),i||"function"==typeof S[h]||a(S,h,v))),T&&D&&D.name!==g&&(I=!0,k=function(){return D.call(this)}),i&&!_||!d&&!I&&C[h]||a(C,h,k),s[e]=k,s[A]=v,y)if(b={values:T?k:M(g),keys:x?k:M(p),entries:L},_)for(w in b)w in C||o(C,w,b[w]);else r(r.P+r.F*(d||I),e,b);return b}},"02f4":function(t,e,n){var i=n("4588"),r=n("be13");t.exports=function(t){return function(e,n){var o,a,s=String(r(e)),l=i(n),u=s.length;return l<0||l>=u?t?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?t?s.charAt(l):o:t?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"0352":function(t,e,n){var i=n("6cb7"),r=n("b12f"),o=n("0f99"),a=o.detectSourceFormat,s=n("93d0"),l=s.SERIES_LAYOUT_BY_COLUMN;i.extend({type:"dataset",defaultOption:{seriesLayoutBy:l,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){a(this)}}),r.extend({type:"dataset"})},"0390":function(t,e,n){"use strict";var i=n("02f4")(!0);t.exports=function(t,e,n){return e+(n?i(t,e).length:1)}},"0395":function(t,e,n){var i=n("36c3"),r=n("6abf").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?s(t):r(i(t))}},"04f6":function(t,e){var n=32,i=7;function r(t){var e=0;while(t>=n)e|=1&t,t>>=1;return t+e}function o(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){while(r=0)r++;return r-e}function a(t,e,n){n--;while(e>>1,r(a,t[o])<0?l=o:s=o+1;var u=i-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:while(u>0)t[s+u]=t[s+u-1],u--}t[s]=a}}function l(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){s=i-r;while(l0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{s=r+1;while(ls&&(l=s);var u=a;a=r-l,l=r-u}a++;while(a>>1);o(t,e[n+c])>0?a=c+1:l=c}return l}function u(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){s=r+1;while(ls&&(l=s);var u=a;a=r-l,l=r-u}else{s=i-r;while(l=0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}a++;while(a>>1);o(t,e[n+c])<0?l=c:a=c+1}return l}function c(t,e){var n,r,o=i,a=0,s=0;a=t.length;var c=[];function h(t,e){n[s]=t,r[s]=e,s+=1}function d(){while(s>1){var t=s-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;p(t)}}function f(){while(s>1){var t=s-2;t>0&&r[t-1]=i||v>=i);if(m)break;y<0&&(y=0),y+=2}if(o=y,o<1&&(o=1),1===r){for(h=0;h=0;h--)t[v+h]=t[g+h];if(0===r){_=!0;break}}if(t[p--]=c[f--],1===--s){_=!0;break}if(x=s-l(t[d],c,0,s,s-1,e),0!==x){for(p-=x,f-=x,s-=x,v=p+1,g=f+1,h=0;h=i||x>=i);if(_)break;m<0&&(m=0),m+=2}if(o=m,o<1&&(o=1),1===s){for(p-=r,d-=r,v=p+1,g=d+1,h=r-1;h>=0;h--)t[v+h]=t[g+h];t[p]=c[f]}else{if(0===s)throw new Error;for(g=p-(s-1),h=0;h=0;h--)t[v+h]=t[g+h];t[p]=c[f]}else for(g=p-(s-1),h=0;hd&&(f=d),s(t,i,i+f,i+u,e),u=f}h.pushRun(i,u),h.mergeRuns(),l-=u,i+=u}while(0!==l);h.forceMergeRuns()}}t.exports=h},"0655":function(t,e,n){var i=n("8728"),r=1e-8;function o(t,e){return Math.abs(t-e).5?e:t}function d(t,e,n,i,r){var o=t.length;if(1===r)for(var a=0;ar;if(o)t.length=r;else for(var a=i;a=0;n--)if(C[n]<=e)break;n=Math.min(n,b-2)}else{for(n=G;ne)break;n=Math.min(n-1,b-2)}G=n,j=e;var i=C[n+1]-C[n];if(0!==i)if(z=(e-C[n])/i,_)if(V=D[n],B=D[0===n?n:n-1],F=D[n>b-2?b-1:n+1],H=D[n>b-3?b-1:n+2],M)g(B,V,F,H,z,z*z,z*z*z,u(t,s),I);else{if(A)r=g(B,V,F,H,z,z*z,z*z*z,W,1),r=y(W);else{if(T)return h(V,F,z);r=v(B,V,F,H,z,z*z,z*z*z)}m(t,s,r)}else if(M)d(D[n],D[n+1],z,u(t,s),I);else{var r;if(A)d(D[n],D[n+1],z,W,1),r=y(W);else{if(T)return h(D[n],D[n+1],z);r=c(D[n],D[n+1],z)}m(t,s,r)}},q=new i({target:t._target,life:w,loop:t._loop,delay:t._delay,onframe:U,ondestroy:n});return e&&"spline"!==e&&(q.easing=e),q}}}var b=function(t,e,n,i){this._tracks={},this._target=t,this._loop=e||!1,this._getter=n||l,this._setter=i||u,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};b.prototype={when:function(t,e){var n=this._tracks;for(var i in e)if(e.hasOwnProperty(i)){if(!n[i]){n[i]=[];var r=this._getter(this._target,i);if(null==r)continue;0!==t&&n[i].push({time:0,value:m(r)})}n[i].push({time:t,value:e[i]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;te&&(e=i.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,n=this.children,i=n.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e=this.hostTree,n=e.data.getItemModel(this.dataIndex);return n.getModel(t)}},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)},isAncestorOf:function(t){var e=t.parentNode;while(e){if(e===this)return!0;e=e.parentNode}return!1},isDescendantOf:function(t){return t!==this&&t.isAncestorOf(this)}},l.prototype={constructor:l,type:"tree",eachNode:function(t,e,n){this.root.eachNode(t,e,n)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,n=0,i=e.length;n0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=r.clone(t)},getValueState:function(t){var e=a.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries((function(n){var i=[],r=n.getData();r.each(this.getDataDimension(r),(function(e,n){var r=a.findPieceIndex(e,this._pieceList);r===t&&i.push(n)}),this),e.push({seriesId:n.id,dataIndex:i})}),this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var n=t.interval||[];e=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return e},getVisualMeta:function(t){if(!this.isCategory()){var e=[],n=[],i=this,o=this._pieceList.slice();if(o.length){var a=o[0].interval[0];a!==-1/0&&o.unshift({interval:[-1/0,a]}),a=o[o.length-1].interval[1],a!==1/0&&o.push({interval:[a,1/0]})}else o.push({interval:[-1/0,1/0]});var s=-1/0;return r.each(o,(function(t){var e=t.interval;e&&(e[0]>s&&l([s,e[0]],"outOfRange"),l(e.slice()),s=e[1])}),this),{stops:e,outerColors:n}}function l(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValueState(a));var s=t(a,o);r[0]===-1/0?n[0]=s:r[1]===1/0?n[1]=s:e.push({value:r[0],color:s},{value:r[1],color:s})}}}),h={splitNumber:function(){var t=this.option,e=this._pieceList,n=Math.min(t.precision,20),i=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;var a=(i[1]-i[0])/o;while(+a.toFixed(n)!==a&&n<5)n++;t.precision=n,a=+a.toFixed(n),t.minOpen&&e.push({interval:[-1/0,i[0]],close:[0,0]});for(var s=0,l=i[0];s","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,n)}),this)}};function d(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}var f=c;t.exports=f},"07d7":function(t,e,n){var i=n("6d8b"),r=n("41ef"),o=n("607d"),a=n("65ed"),s=n("22d1"),l=n("eda2"),u=i.each,c=l.toCamelCase,h=["","-webkit-","-moz-","-o-"],d="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";function f(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",n="left "+t+"s "+e+",top "+t+"s "+e;return i.map(h,(function(t){return t+"transition:"+n})).join(";")}function p(t){var e=[],n=t.get("fontSize"),i=t.getTextColor();i&&e.push("color:"+i),e.push("font:"+t.getFont());var r=t.get("lineHeight");null==r&&(r=Math.round(3*n/2)),n&&e.push("line-height:"+r+"px");var o=t.get("textShadowColor"),a=t.get("textShadowBlur")||0,s=t.get("textShadowOffsetX")||0,l=t.get("textShadowOffsetY")||0;return a&&e.push("text-shadow:"+s+"px "+l+"px "+a+"px "+o),u(["decoration","align"],(function(n){var i=t.get(n);i&&e.push("text-"+n+":"+i)})),e.join(";")}function g(t){var e=[],n=t.get("transitionDuration"),i=t.get("backgroundColor"),o=t.getModel("textStyle"),a=t.get("padding");return n&&e.push(f(n)),i&&(s.canvasSupported?e.push("background-Color:"+i):(e.push("background-Color:#"+r.toHex(i)),e.push("filter:alpha(opacity=70)"))),u(["width","color","radius"],(function(n){var i="border-"+n,r=c(i),o=t.get(r);null!=o&&e.push(i+":"+o+("color"===n?"":"px"))})),e.push(p(o)),null!=a&&e.push("padding:"+l.normalizeCssArray(a).join("px ")+"px"),e.join(";")+";"}function v(t,e,n,i,r){var o=e&&e.painter;if(n){var s=o&&o.getViewportRoot();s&&a.transformLocalCoord(t,s,document.body,i,r)}else{t[0]=i,t[1]=r;var l=o&&o.getViewportRootOffset();l&&(t[0]+=l.offsetLeft,t[1]+=l.offsetTop)}t[2]=t[0]/e.getWidth(),t[3]=t[1]/e.getHeight()}function m(t,e,n){if(s.wxa)return null;var i=document.createElement("div");i.domBelongToZr=!0,this.el=i;var r=this._zr=e.getZr(),a=this._appendToBody=n&&n.appendToBody;this._styleCoord=[0,0,0,0],v(this._styleCoord,r,a,e.getWidth()/2,e.getHeight()/2),a?document.body.appendChild(i):t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var l=this;i.onmouseenter=function(){l._enterable&&(clearTimeout(l._hideTimeout),l._show=!0),l._inContent=!0},i.onmousemove=function(t){if(t=t||window.event,!l._enterable){var e=r.handler,n=r.painter.getViewportRoot();o.normalizeEvent(n,t,!0),e.dispatch("mousemove",t)}},i.onmouseleave=function(){l._enterable&&l._show&&l.hideLater(l._hideDelay),l._inContent=!1}}m.prototype={constructor:m,_enterable:!0,update:function(t){var e=this._container,n=e.currentStyle||document.defaultView.getComputedStyle(e),i=e.style;"absolute"!==i.position&&"absolute"!==n.position&&(i.position="relative");var r=t.get("alwaysShowContent");r&&this._moveTooltipIfResized()},_moveTooltipIfResized:function(){var t=this._styleCoord[2],e=this._styleCoord[3],n=t*this._zr.getWidth(),i=e*this._zr.getHeight();this.moveTo(n,i)},show:function(t){clearTimeout(this._hideTimeout);var e=this.el,n=this._styleCoord;e.style.cssText=d+g(t)+";left:"+n[0]+"px;top:"+n[1]+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",e.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var n=this._styleCoord;v(n,this._zr,this._appendToBody,t,e);var i=this.el.style;i.left=n[0]+"px",i.top=n[1]+"px"},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(i.bind(this.hide,this),t)):this.hide())},isShow:function(){return this._show},dispose:function(){this.el.parentNode.removeChild(this.el)},getOuterSize:function(){var t=this.el.clientWidth,e=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(this.el);n&&(t+=parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),e+=parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:t,height:e}}};var y=m;t.exports=y},"07e3":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},"07e6":function(t,e,n){n("4d85"),n("a753")},"0817":function(t,e,n){var i=n("3eba");n("f306"),n("0046"),n("60d7");var r=n("ab71");i.registerVisual(r)},"085d":function(t,e,n){var i=n("3eba");n("bd92"),n("19e2");var r=n("eabf"),o=n("4c99"),a=n("09b1");i.registerPreprocessor(r),i.registerVisual(o),i.registerLayout(a)},"08c3":function(t,e,n){var i=n("6d8b"),r=n("84ce"),o=function(t,e,n,i){r.call(this,t,e,n),this.type=i||"value",this.model=null};o.prototype={constructor:o,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},i.inherits(o,r);var a=o;t.exports=a},"097d":function(t,e,n){"use strict";var i=n("5ca1"),r=n("8378"),o=n("7726"),a=n("ebd6"),s=n("bcaa");i(i.P+i.R,"Promise",{finally:function(t){var e=a(this,r.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}})},"09b1":function(t,e,n){var i=n("2306"),r=i.subPixelOptimize,o=n("cccd"),a=n("3842"),s=a.parsePercent,l=n("6d8b"),u=l.retrieve2,c="undefined"!==typeof Float32Array?Float32Array:Array,h={seriesType:"candlestick",plan:o(),reset:function(t){var e=t.coordinateSystem,n=t.getData(),i=f(t,n),o=0,a=1,s=["x","y"],l=n.mapDimension(s[o]),u=n.mapDimension(s[a],!0),h=u[0],p=u[1],g=u[2],v=u[3];if(n.setLayout({candleWidth:i,isSimpleBox:i<=1.3}),!(null==l||u.length<4))return{progress:t.pipelineContext.large?y:m};function m(t,n){var s;while(null!=(s=t.next())){var u=n.get(l,s),c=n.get(h,s),f=n.get(p,s),m=n.get(g,s),y=n.get(v,s),x=Math.min(c,f),_=Math.max(c,f),b=T(x,u),w=T(_,u),S=T(m,u),M=T(y,u),A=[];I(A,w,0),I(A,b,1),A.push(D(M),D(w),D(S),D(b)),n.setItemLayout(s,{sign:d(n,s,c,f,p),initBaseline:c>f?w[a]:b[a],ends:A,brushRect:C(m,y,u)})}function T(t,n){var i=[];return i[o]=n,i[a]=t,isNaN(n)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function I(t,e,n){var a=e.slice(),s=e.slice();a[o]=r(a[o]+i/2,1,!1),s[o]=r(s[o]-i/2,1,!0),n?t.push(a,s):t.push(s,a)}function C(t,e,n){var r=T(t,n),s=T(e,n);return r[o]-=i/2,s[o]-=i/2,{x:r[0],y:r[1],width:a?i:s[0]-r[0],height:a?s[1]-r[1]:i}}function D(t){return t[o]=r(t[o],1),t}}function y(t,n){var i,r,s=new c(4*t.count),u=0,f=[],m=[];while(null!=(r=t.next())){var y=n.get(l,r),x=n.get(h,r),_=n.get(p,r),b=n.get(g,r),w=n.get(v,r);isNaN(y)||isNaN(b)||isNaN(w)?(s[u++]=NaN,u+=3):(s[u++]=d(n,r,x,_,p),f[o]=y,f[a]=b,i=e.dataToPoint(f,null,m),s[u++]=i?i[0]:NaN,s[u++]=i?i[1]:NaN,f[a]=w,i=e.dataToPoint(f,null,m),s[u++]=i?i[1]:NaN)}n.setLayout("largePoints",s)}}};function d(t,e,n,i,r){var o;return o=n>i?-1:n0?t.get(r,e-1)<=i?1:-1:1,o}function f(t,e){var n,i=t.getBaseAxis(),r="category"===i.type?i.getBandWidth():(n=i.getExtent(),Math.abs(n[1]-n[0])/e.count()),o=s(u(t.get("barMaxWidth"),r),r),a=s(u(t.get("barMinWidth"),1),r),l=t.get("barWidth");return null!=l?s(l,r):Math.max(Math.min(r/2,o),a)}t.exports=h},"0a06":function(t,e,n){"use strict";var i=n("c532"),r=n("30b5"),o=n("f6b4"),a=n("5270"),s=n("4a7b"),l=n("848b"),u=l.validators;function c(t){this.defaults=t,this.interceptors={request:new o,response:new o}}c.prototype.request=function(t){"string"===typeof t?(t=arguments[1]||{},t.url=arguments[0]):t=t||{},t=s(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=t.transitional;void 0!==e&&l.assertOptions(e,{silentJSONParsing:u.transitional(u.boolean),forcedJSONParsing:u.transitional(u.boolean),clarifyTimeoutError:u.transitional(u.boolean)},!1);var n=[],i=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var r,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var c=[a,void 0];Array.prototype.unshift.apply(c,n),c=c.concat(o),r=Promise.resolve(t);while(c.length)r=r.then(c.shift(),c.shift());return r}var h=t;while(n.length){var d=n.shift(),f=n.shift();try{h=d(h)}catch(p){f(p);break}}try{r=a(h)}catch(p){return Promise.reject(p)}while(o.length)r=r.then(o.shift(),o.shift());return r},c.prototype.getUri=function(t){return t=s(this.defaults,t),r(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},i.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),i.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,i){return this.request(s(i||{},{method:t,url:e,data:n}))}})),t.exports=c},"0a49":function(t,e,n){var i=n("9b43"),r=n("626a"),o=n("4bf8"),a=n("9def"),s=n("cd1c");t.exports=function(t,e){var n=1==t,l=2==t,u=3==t,c=4==t,h=6==t,d=5==t||h,f=e||s;return function(e,s,p){for(var g,v,m=o(e),y=r(m),x=i(s,p,3),_=a(y.length),b=0,w=n?f(e,_):l?f(e,0):void 0;_>b;b++)if((d||b in y)&&(g=y[b],v=x(g,b,m),t))if(n)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return b;case 2:w.push(g)}else if(c)return!1;return h?-1:u||c?c:w}}},"0a6d":function(t,e,n){n("e4d1"),n("7f72")},"0b44":function(t,e,n){var i=n("607d"),r=function(){this._track=[]};function o(t){var e=t[1][0]-t[0][0],n=t[1][1]-t[0][1];return Math.sqrt(e*e+n*n)}function a(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}r.prototype={constructor:r,recognize:function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,n){var r=t.touches;if(r){for(var o={points:[],touches:[],target:e,event:t},a=0,s=r.length;a1&&i&&i.length>1){var s=o(i)/o(r);!isFinite(s)&&(s=1),e.pinchScale=s;var l=a(i);return e.pinchX=l[0],e.pinchY=l[1],{type:"pinch",target:t[0].target,event:e}}}}},l=r;t.exports=l},"0b4b":function(t,e,n){n("d28f"),n("f14c"),n("0ee7"),n("ebf9")},"0bfb":function(t,e,n){"use strict";var i=n("cb7c");t.exports=function(){var t=i(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"0c12":function(t,e){function n(){}function i(t,e,n,i){for(var r=0,o=e.length,a=0,s=0;r=a&&h+1>=s){for(var d=[],f=0;f=a&&f+1>=s)return i(o,u.components,e,t);c[n]=u}else c[n]=void 0}l++}while(l<=u){var g=p();if(g)return g}},pushComponent:function(t,e,n){var i=t[t.length-1];i&&i.added===e&&i.removed===n?t[t.length-1]={count:i.count+1,added:e,removed:n}:t.push({count:1,added:e,removed:n})},extractCommon:function(t,e,n,i){var r=e.length,o=n.length,a=t.newPos,s=a-i,l=0;while(a+1r&&(r=e);var s=r%2?r+2:r+3;a=[];for(var l=0;l=0)&&(E=t);var N=new l.Text({position:D(e.center.slice()),scale:[1/v.scale[0],1/v.scale[1]],z2:10,silent:!0});if(l.setLabelStyle(N.style,N.hoverStyle={},x,_,{labelFetcher:E,labelDataIndex:R,defaultText:e.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),!y){var z=[1/c[0],1/c[1]];l.updateProps(N,{scale:z},t)}n.add(N)}if(s)s.setItemGraphicEl(o,n);else{u=t.getRegionModel(e.name);r.eventData={componentType:"geo",componentIndex:t.componentIndex,geoIndex:t.componentIndex,name:e.name,region:u&&u.option||{}}}var B=n.__regions||(n.__regions=[]);B.push(e),n.highDownSilentOnTouch=!!t.get("selectedMode"),l.setHoverStyle(n,m),h.add(n)})),this._updateController(t,e,n),p(this,t,h,n,r),g(t,h)},remove:function(){this._regionsGroup.removeAll(),this._backgroundGroup.removeAll(),this._controller.dispose(),this._mapName&&u.removeGraphic(this._mapName,this.uid),this._mapName=null,this._controllerHost={}},_updateBackground:function(t){var e=t.map;this._mapName!==e&&i.each(u.makeGraphic(e,this.uid),(function(t){this._backgroundGroup.add(t)}),this),this._mapName=e},_updateController:function(t,e,n){var r=t.coordinateSystem,a=this._controller,l=this._controllerHost;l.zoomLimit=t.get("scaleLimit"),l.zoom=r.getZoom(),a.enable(t.get("roam")||!1);var u=t.mainType;function c(){var e={type:"geoRoam",componentType:u};return e[u+"Id"]=t.id,e}a.off("pan").on("pan",(function(t){this._mouseDownFlag=!1,o.updateViewOnPan(l,t.dx,t.dy),n.dispatchAction(i.extend(c(),{dx:t.dx,dy:t.dy}))}),this),a.off("zoom").on("zoom",(function(t){if(this._mouseDownFlag=!1,o.updateViewOnZoom(l,t.scale,t.originX,t.originY),n.dispatchAction(i.extend(c(),{zoom:t.scale,originX:t.originX,originY:t.originY})),this._updateGroup){var e=this.group.scale;this._regionsGroup.traverse((function(t){"text"===t.type&&t.attr("scale",[1/e[0],1/e[1]])}))}}),this),a.setPointerChecker((function(e,i,o){return r.getViewRectAfterRoam().contain(i,o)&&!s(e,n,t)}))}};var m=v;t.exports=m},"0cde":function(t,e,n){var i=n("1687"),r=n("401b"),o=i.identity,a=5e-5;function s(t){return t>a||t<-a}var l=function(t){t=t||{},t.position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},u=l.prototype;u.transform=null,u.needLocalTransform=function(){return s(this.rotation)||s(this.position[0])||s(this.position[1])||s(this.scale[0]-1)||s(this.scale[1]-1)};var c=[];u.updateTransform=function(){var t=this.parent,e=t&&t.transform,n=this.needLocalTransform(),r=this.transform;if(n||e){r=r||i.create(),n?this.getLocalTransform(r):o(r),e&&(n?i.mul(r,t.transform,r):i.copy(r,t.transform)),this.transform=r;var a=this.globalScaleRatio;if(null!=a&&1!==a){this.getGlobalScale(c);var s=c[0]<0?-1:1,l=c[1]<0?-1:1,u=((c[0]-s)*a+s)/c[0]||0,h=((c[1]-l)*a+l)/c[1]||0;r[0]*=u,r[1]*=u,r[2]*=h,r[3]*=h}this.invTransform=this.invTransform||i.create(),i.invert(this.invTransform,r)}else r&&o(r)},u.getLocalTransform=function(t){return l.getLocalTransform(this,t)},u.setTransform=function(t){var e=this.transform,n=t.dpr||1;e?t.setTransform(n*e[0],n*e[1],n*e[2],n*e[3],n*e[4],n*e[5]):t.setTransform(n,0,0,n,0,0)},u.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var h=[],d=i.create();u.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=this.position,r=this.scale;s(e-1)&&(e=Math.sqrt(e)),s(n-1)&&(n=Math.sqrt(n)),t[0]<0&&(e=-e),t[3]<0&&(n=-n),i[0]=t[4],i[1]=t[5],r[0]=e,r[1]=n,this.rotation=Math.atan2(-t[1]/n,t[0]/e)}},u.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(i.mul(h,t.invTransform,e),e=h);var n=this.origin;n&&(n[0]||n[1])&&(d[4]=n[0],d[5]=n[1],i.mul(h,e,d),h[4]-=n[0],h[5]-=n[1],e=h),this.setLocalTransform(e)}},u.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},u.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&r.applyTransform(n,n,i),n},u.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&r.applyTransform(n,n,i),n},l.getLocalTransform=function(t,e){e=e||[],o(e);var n=t.origin,r=t.scale||[1,1],a=t.rotation||0,s=t.position||[0,0];return n&&(e[4]-=n[0],e[5]-=n[1]),i.scale(e,e,r),a&&i.rotate(e,e,a),n&&(e[4]+=n[0],e[5]+=n[1]),e[4]+=s[0],e[5]+=s[1],e};var f=l;t.exports=f},"0d58":function(t,e,n){var i=n("ce10"),r=n("e11e");t.exports=Object.keys||function(t){return i(t,r)}},"0da8":function(t,e,n){var i=n("19eb"),r=n("9850"),o=n("6d8b"),a=n("5e76");function s(t){i.call(this,t)}s.prototype={constructor:s,type:"image",brush:function(t,e){var n=this.style,i=n.image;n.bind(t,this,e);var r=this._image=a.createOrUpdateImage(i,this._image,this,this.onload);if(r&&a.isImageReady(r)){var o=n.x||0,s=n.y||0,l=n.width,u=n.height,c=r.width/r.height;if(null==l&&null!=u?l=u*c:null==u&&null!=l?u=l/c:null==l&&null==u&&(l=r.width,u=r.height),this.setTransform(t),n.sWidth&&n.sHeight){var h=n.sx||0,d=n.sy||0;t.drawImage(r,h,d,n.sWidth,n.sHeight,o,s,l,u)}else if(n.sx&&n.sy){h=n.sx,d=n.sy;var f=l-h,p=u-d;t.drawImage(r,h,d,f,p,o,s,l,u)}else t.drawImage(r,o,s,l,u);null!=n.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))}},getBoundingRect:function(){var t=this.style;return this._rect||(this._rect=new r(t.x||0,t.y||0,t.width||0,t.height||0)),this._rect}},o.inherits(s,i);var l=s;t.exports=l},"0df6":function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},"0e0f":function(t,e,n){var i=n("5f14"),r=n("6d8b");function o(t,e){t.eachSeriesByType("sankey",(function(t){var e=t.getGraph(),n=e.nodes;if(n.length){var o=1/0,a=-1/0;r.each(n,(function(t){var e=t.getLayout().value;ea&&(a=e)})),r.each(n,(function(e){var n=new i({type:"color",mappingMethod:"linear",dataExtent:[o,a],visual:t.get("color")}),r=n.mapValueToVisual(e.getLayout().value),s=e.getModel().get("itemStyle.color");null!=s?e.setVisual("color",s):e.setVisual("color",r)}))}}))}t.exports=o},"0e15":function(t,e,n){var i=n("597f");t.exports=function(t,e,n){return void 0===n?i(t,e,!1):i(t,n,!1!==e)}},"0ee7":function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("f934"),a=n("5e97"),s=r.Group,l=["width","height"],u=["x","y"],c=a.extend({type:"legend.scroll",newlineDisabled:!0,init:function(){c.superCall(this,"init"),this._currentIndex=0,this.group.add(this._containerGroup=new s),this._containerGroup.add(this.getContentGroup()),this.group.add(this._controllerGroup=new s),this._showController},resetInner:function(){c.superCall(this,"resetInner"),this._controllerGroup.removeAll(),this._containerGroup.removeClipPath(),this._containerGroup.__rectSize=null},renderInner:function(t,e,n,o,a,s,l){var u=this;c.superCall(this,"renderInner",t,e,n,o,a,s,l);var h=this._controllerGroup,d=e.get("pageIconSize",!0);i.isArray(d)||(d=[d,d]),p("pagePrev",0);var f=e.getModel("pageTextStyle");function p(t,n){var a=t+"DataIndex",s=r.createIcon(e.get("pageIcons",!0)[e.getOrient().name][n],{onclick:i.bind(u._pageGo,u,a,e,o)},{x:-d[0]/2,y:-d[1]/2,width:d[0],height:d[1]});s.name=t,h.add(s)}h.add(new r.Text({name:"pageText",style:{textFill:f.getTextColor(),font:f.getFont(),textVerticalAlign:"middle",textAlign:"center"},silent:!0})),p("pageNext",1)},layoutInner:function(t,e,n,r,a,s){var c=this.getSelectorGroup(),h=t.getOrient().index,d=l[h],f=u[h],p=l[1-h],g=u[1-h];a&&o.box("horizontal",c,t.get("selectorItemGap",!0));var v=t.get("selectorButtonGap",!0),m=c.getBoundingRect(),y=[-m.x,-m.y],x=i.clone(n);a&&(x[d]=n[d]-m[d]-v);var _=this._layoutContentAndController(t,r,x,h,d,p,g);if(a){if("end"===s)y[h]+=_[d]+v;else{var b=m[d]+v;y[h]-=b,_[f]-=b}_[d]+=m[d]+v,y[1-h]+=_[g]+_[p]/2-m[p]/2,_[p]=Math.max(_[p],m[p]),_[g]=Math.min(_[g],m[g]+y[1-h]),c.attr("position",y)}return _},_layoutContentAndController:function(t,e,n,a,s,l,u){var c=this.getContentGroup(),h=this._containerGroup,d=this._controllerGroup;o.box(t.get("orient"),c,t.get("itemGap"),a?n.width:null,a?null:n.height),o.box("horizontal",d,t.get("pageButtonItemGap",!0));var f=c.getBoundingRect(),p=d.getBoundingRect(),g=this._showController=f[s]>n[s],v=[-f.x,-f.y];e||(v[a]=c.position[a]);var m=[0,0],y=[-p.x,-p.y],x=i.retrieve2(t.get("pageButtonGap",!0),t.get("itemGap",!0));if(g){var _=t.get("pageButtonPosition",!0);"end"===_?y[a]+=n[s]-p[s]:m[a]+=p[s]+x}y[1-a]+=f[l]/2-p[l]/2,c.attr("position",v),h.attr("position",m),d.attr("position",y);var b={x:0,y:0};if(b[s]=g?n[s]:f[s],b[l]=Math.max(f[l],p[l]),b[u]=Math.min(0,p[u]+y[1-a]),h.__rectSize=n[s],g){var w={x:0,y:0};w[s]=Math.max(n[s]-p[s]-x,0),w[l]=b[l],h.setClipPath(new r.Rect({shape:w})),h.__rectSize=w[s]}else d.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var S=this._getPageInfo(t);return null!=S.pageIndex&&r.updateProps(c,{position:S.contentPosition},!!g&&t),this._updatePageInfoView(t,S),b},_pageGo:function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},_updatePageInfoView:function(t,e){var n=this._controllerGroup;i.each(["pagePrev","pageNext"],(function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var r=n.childOfName("pageText"),o=t.get("pageFormatter"),a=e.pageIndex,s=null!=a?a+1:0,l=e.pageCount;r&&o&&r.setStyle("text",i.isString(o)?o.replace("{current}",s).replace("{total}",l):o({current:s,total:l}))},_getPageInfo:function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=l[r],a=u[r],s=this._findTargetItemIndex(e),c=n.children(),h=c[s],d=c.length,f=d?1:0,p={contentPosition:n.position.slice(),pageCount:f,pageIndex:f-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!h)return p;var g=_(h);p.contentPosition[r]=-g.s;for(var v=s+1,m=g,y=g,x=null;v<=d;++v)x=_(c[v]),(!x&&y.e>m.s+i||x&&!b(x,m.s))&&(m=y.i>m.i?y:x,m&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=m.i),++p.pageCount)),y=x;for(v=s-1,m=g,y=g,x=null;v>=-1;--v)x=_(c[v]),x&&b(y,x.s)||!(m.i=e&&t.s<=e+i}},_findTargetItemIndex:function(t){if(!this._showController)return 0;var e,n,i=this.getContentGroup();return i.eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)})),null!=e?e:n}}),h=c;t.exports=h},"0f55":function(t,e,n){var i=n("6d8b"),r=n("84ce"),o=function(t,e,n,i,o){r.call(this,t,e,n),this.type=i||"value",this.axisIndex=o};o.prototype={constructor:o,model:null,isHorizontal:function(){return"horizontal"!==this.coordinateSystem.getModel().get("layout")}},i.inherits(o,r);var a=o;t.exports=a},"0f99":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("e0d3")),o=r.makeInner,a=r.getDataItemValue,s=n("6d8b"),l=s.createHashMap,u=s.each,c=s.map,h=s.isArray,d=s.isString,f=s.isObject,p=s.isTypedArray,g=s.isArrayLike,v=s.extend,m=(s.assert,n("ec6f")),y=n("93d0"),x=y.SOURCE_FORMAT_ORIGINAL,_=y.SOURCE_FORMAT_ARRAY_ROWS,b=y.SOURCE_FORMAT_OBJECT_ROWS,w=y.SOURCE_FORMAT_KEYED_COLUMNS,S=y.SOURCE_FORMAT_UNKNOWN,M=y.SOURCE_FORMAT_TYPED_ARRAY,A=y.SERIES_LAYOUT_BY_ROW,T={Must:1,Might:2,Not:3},I=o();function C(t){var e=t.option.source,n=S;if(p(e))n=M;else if(h(e)){0===e.length&&(n=_);for(var i=0,r=e.length;i0&&(s=this.getLineLength(i)/u*1e3),s!==this._period||l!==this._loop){i.stopAnimation();var d=c;h&&(d=c(n)),i.__t>0&&(d=-s*i.__t),i.__t=0;var f=i.animate("",l).when(s,{__t:1}).delay(d).during((function(){r.updateSymbolPosition(i)}));l||f.done((function(){r.remove(i)})),f.start()}this._period=s,this._loop=l}},h.getLineLength=function(t){return l.dist(t.__p1,t.__cp1)+l.dist(t.__cp1,t.__p2)},h.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},h.updateData=function(t,e,n){this.childAt(0).updateData(t,e,n),this._updateEffectSymbol(t,e)},h.updateSymbolPosition=function(t){var e=t.__p1,n=t.__p2,i=t.__cp1,r=t.__t,o=t.position,a=[o[0],o[1]],s=u.quadraticAt,c=u.quadraticDerivativeAt;o[0]=s(e[0],i[0],n[0],r),o[1]=s(e[1],i[1],n[1],r);var h=c(e[0],i[0],n[0],r),d=c(e[1],i[1],n[1],r);if(t.rotation=-Math.atan2(d,h)-Math.PI/2,"line"===this._symbolType||"rect"===this._symbolType||"roundRect"===this._symbolType)if(void 0!==t.__lastT&&t.__lastTe[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&w(e)}};function w(t){return new o(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}e.layoutCovers=p},1111:function(t,e,n){var i=n("3eba");n("67a8"),n("4784");var r=n("7f96"),o=n("87c3");i.registerVisual(r("effectScatter","circle")),i.registerLayout(o("effectScatter"))},1169:function(t,e,n){var i=n("2d95");t.exports=Array.isArray||function(t){return"Array"==i(t)}},1173:function(t,e){t.exports=function(t,e,n,i){if(!(t instanceof e)||void 0!==i&&i in t)throw TypeError(n+": incorrect invocation!");return t}},"11e9":function(t,e,n){var i=n("52a7"),r=n("4630"),o=n("6821"),a=n("6a99"),s=n("69a8"),l=n("c69a"),u=Object.getOwnPropertyDescriptor;e.f=n("9e1e")?u:function(t,e){if(t=o(t),e=a(e,!0),l)try{return u(t,e)}catch(n){}if(s(t,e))return r(!i.f.call(t,e),t[e])}},"133d":function(t,e,n){var i=n("6d8b"),r=n("e0d3");function o(t,e){var n,o=[],a=t.seriesIndex;if(null==a||!(n=e.getSeriesByIndex(a)))return{point:[]};var s=n.getData(),l=r.queryDataIndex(s,t);if(null==l||l<0||i.isArray(l))return{point:[]};var u=s.getItemGraphicEl(l),c=n.coordinateSystem;if(n.getTooltipPosition)o=n.getTooltipPosition(l)||[];else if(c&&c.dataToPoint)o=c.dataToPoint(s.getValues(i.map(c.dimensions,(function(t){return s.mapDimension(t)})),l,!0))||[];else if(u){var h=u.getBoundingRect().clone();h.applyTransform(u.transform),o=[h.x+h.width/2,h.y+h.height/2]}return{point:o,el:u}}t.exports=o},1418:function(t,e,n){var i=n("6d8b"),r=n("a15a"),o=r.createSymbol,a=n("2306"),s=n("3842"),l=s.parsePercent,u=n("c775"),c=u.getDefaultLabel;function h(t,e,n){a.Group.call(this),this.updateData(t,e,n)}var d=h.prototype,f=h.getSymbolSize=function(t,e){var n=t.getItemVisual(e,"symbolSize");return n instanceof Array?n.slice():[+n,+n]};function p(t){return[t[0]/2,t[1]/2]}function g(t,e){this.parent.drift(t,e)}d._createSymbol=function(t,e,n,i,r){this.removeAll();var a=e.getItemVisual(n,"color"),s=o(t,-1,-1,2,2,a,r);s.attr({z2:100,culling:!0,scale:p(i)}),s.drift=g,this._symbolType=t,this.add(s)},d.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},d.getSymbolPath=function(){return this.childAt(0)},d.getScale=function(){return this.childAt(0).scale},d.highlight=function(){this.childAt(0).trigger("emphasis")},d.downplay=function(){this.childAt(0).trigger("normal")},d.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},d.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":e.cursor},d.updateData=function(t,e,n){this.silent=!1;var i=t.getItemVisual(e,"symbol")||"circle",r=t.hostModel,o=f(t,e),s=i!==this._symbolType;if(s){var l=t.getItemVisual(e,"symbolKeepAspect");this._createSymbol(i,t,e,o,l)}else{var u=this.childAt(0);u.silent=!1,a.updateProps(u,{scale:p(o)},r,e)}if(this._updateCommon(t,e,o,n),s){u=this.childAt(0);var c=n&&n.fadeIn,h={scale:u.scale.slice()};c&&(h.style={opacity:u.style.opacity}),u.scale=[0,0],c&&(u.style.opacity=0),a.initProps(u,h,r,e)}this._seriesModel=r};var v=["itemStyle"],m=["emphasis","itemStyle"],y=["label"],x=["emphasis","label"];function _(t,e){if(!this.incremental&&!this.useHoverLayer)if("emphasis"===e){var n=this.__symbolOriginalScale,i=n[1]/n[0],r={scale:[Math.max(1.1*n[0],n[0]+3),Math.max(1.1*n[1],n[1]+3*i)]};this.animateTo(r,400,"elasticOut")}else"normal"===e&&this.animateTo({scale:this.__symbolOriginalScale},400,"elasticOut")}d._updateCommon=function(t,e,n,r){var o=this.childAt(0),s=t.hostModel,u=t.getItemVisual(e,"color");"image"!==o.type?o.useStyle({strokeNoScale:!0}):o.setStyle({opacity:1,shadowBlur:null,shadowOffsetX:null,shadowOffsetY:null,shadowColor:null});var h=r&&r.itemStyle,d=r&&r.hoverItemStyle,f=r&&r.symbolOffset,g=r&&r.labelModel,b=r&&r.hoverLabelModel,w=r&&r.hoverAnimation,S=r&&r.cursorStyle;if(!r||t.hasItemOption){var M=r&&r.itemModel?r.itemModel:t.getItemModel(e);h=M.getModel(v).getItemStyle(["color"]),d=M.getModel(m).getItemStyle(),f=M.getShallow("symbolOffset"),g=M.getModel(y),b=M.getModel(x),w=M.getShallow("hoverAnimation"),S=M.getShallow("cursor")}else d=i.extend({},d);var A=o.style,T=t.getItemVisual(e,"symbolRotate");o.attr("rotation",(T||0)*Math.PI/180||0),f&&o.attr("position",[l(f[0],n[0]),l(f[1],n[1])]),S&&o.attr("cursor",S),o.setColor(u,r&&r.symbolInnerColor),o.setStyle(h);var I=t.getItemVisual(e,"opacity");null!=I&&(A.opacity=I);var C=t.getItemVisual(e,"liftZ"),D=o.__z2Origin;null!=C?null==D&&(o.__z2Origin=o.z2,o.z2+=C):null!=D&&(o.z2=D,o.__z2Origin=null);var k=r&&r.useNameLabel;function L(e,n){return k?t.getName(e):c(t,e)}a.setLabelStyle(A,d,g,b,{labelFetcher:s,labelDataIndex:e,defaultText:L,isRectText:!0,autoColor:u}),o.__symbolOriginalScale=p(n),o.hoverStyle=d,o.highDownOnUpdate=w&&s.isAnimationEnabled()?_:null,a.setHoverStyle(o)},d.fadeOut=function(t,e){var n=this.childAt(0);this.silent=n.silent=!0,(!e||!e.keepLabel)&&(n.style.text=null),a.updateProps(n,{style:{opacity:0},scale:[0,0]},this._seriesModel,this.dataIndex,t)},i.inherits(h,a.Group);var b=h;t.exports=b},1466:function(t,e,n){var i=n("3eba"),r=n("2306"),o=n("6d8b"),a=n("a15a");function s(t){return o.isArray(t)||(t=[+t,+t]),t}var l=i.extendChartView({type:"radar",render:function(t,e,n){var i=t.coordinateSystem,l=this.group,u=t.getData(),c=this._data;function h(t,e){var n=t.getItemVisual(e,"symbol")||"circle",i=t.getItemVisual(e,"color");if("none"!==n){var r=s(t.getItemVisual(e,"symbolSize")),o=a.createSymbol(n,-1,-1,2,2,i),l=t.getItemVisual(e,"symbolRotate")||0;return o.attr({style:{strokeNoScale:!0},z2:100,scale:[r[0]/2,r[1]/2],rotation:l*Math.PI/180||0}),o}}function d(e,n,i,o,a,s){i.removeAll();for(var l=0;ll)i.f(t,n=a[l++],e[n]);return t}},"14d3":function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("fab2"),a=n("6679"),s=["axisLine","axisTickLabel","axisName"],l=["splitLine","splitArea","minorSplitLine"],u=a.extend({type:"radiusAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,r=n.polar,a=r.getAngleAxis(),u=n.getTicksCoords(),h=n.getMinorTicksCoords(),d=a.getExtent()[0],f=n.getExtent(),p=c(r,t,d),g=new o(t,p);i.each(s,g.add,g),this.group.add(g.getGroup()),i.each(l,(function(e){t.get(e+".show")&&!n.scale.isBlank()&&this["_"+e](t,r,d,f,u,h)}),this)}},_splitLine:function(t,e,n,o,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),c=0;u=u instanceof Array?u:[u];for(var h=[],d=0;d=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})}))},1687:function(t,e){var n="undefined"===typeof Float32Array?Array:Float32Array;function i(){var t=new n(6);return r(t),t}function r(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function o(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function a(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function s(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function l(t,e,n){var i=e[0],r=e[2],o=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(n),c=Math.cos(n);return t[0]=i*c+a*u,t[1]=-i*u+a*c,t[2]=r*c+s*u,t[3]=-r*u+c*s,t[4]=c*o+u*l,t[5]=c*l-u*o,t}function u(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function c(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}function h(t){var e=i();return o(e,t),e}e.create=i,e.identity=r,e.copy=o,e.mul=a,e.translate=s,e.rotate=l,e.scale=u,e.invert=c,e.clone=h},1691:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},1748:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("71ad"),a=n("4319"),s=n("2023"),l=o.valueAxis;function u(t,e){return r.defaults({show:e},t)}var c=i.extendComponentModel({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),n=this.get("scale"),i=this.get("axisLine"),o=this.get("axisTick"),l=this.get("axisType"),u=this.get("axisLabel"),c=this.get("name"),h=this.get("name.show"),d=this.get("name.formatter"),f=this.get("nameGap"),p=this.get("triggerEvent"),g=r.map(this.get("indicator")||[],(function(g){null!=g.max&&g.max>0&&!g.min?g.min=0:null!=g.min&&g.min<0&&!g.max&&(g.max=0);var v=c;if(null!=g.color&&(v=r.defaults({color:g.color},c)),g=r.merge(r.clone(g),{boundaryGap:t,splitNumber:e,scale:n,axisLine:i,axisTick:o,axisType:l,axisLabel:u,name:g.text,nameLocation:"end",nameGap:f,nameTextStyle:v,triggerEvent:p},!1),h||(g.name=""),"string"===typeof d){var m=g.name;g.name=d.replace("{value}",null!=m?m:"")}else"function"===typeof d&&(g.name=d(g.name,g));var y=r.extend(new a(g,null,this.ecModel),s);return y.mainType="radar",y.componentIndex=this.componentIndex,y}),this);this.getIndicatorModels=function(){return g}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:r.merge({lineStyle:{color:"#bbb"}},l.axisLine),axisLabel:u(l.axisLabel,!1),axisTick:u(l.axisTick,!1),axisType:"interval",splitLine:u(l.splitLine,!0),splitArea:u(l.splitArea,!0),indicator:[]}}),h=c;t.exports=h},1792:function(t,e){var n={"南海诸岛":[32,80],"广东":[0,-10],"香港":[10,5],"澳门":[-10,10],"天津":[5,5]};function i(t,e){if("china"===t){var i=n[e.name];if(i){var r=e.center;r[0]+=i[0]/10.5,r[1]+=-i[1]/14}}}t.exports=i},"17b8":function(t,e,n){var i=n("3014"),r=i.extend({type:"series.bar",dependencies:["grid","polar"],brushSelector:"rect",getProgressive:function(){return!!this.get("large")&&this.get("progressive")},getProgressiveThreshold:function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},defaultOption:{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1}}});t.exports=r},"17d6":function(t,e,n){var i=n("6d8b"),r=n("22d1"),o=n("e0d3"),a=o.makeInner,s=a(),l=i.each;function u(t,e,n){if(!r.node){var i=e.getZr();s(i).records||(s(i).records={}),c(i,e);var o=s(i).records[t]||(s(i).records[t]={});o.handler=n}}function c(t,e){function n(n,i){t.on(n,(function(n){var r=p(e);l(s(t).records,(function(t){t&&i(t,n,r.dispatchAction)})),h(r.pendings,e)}))}s(t).initialized||(s(t).initialized=!0,n("click",i.curry(f,"click")),n("mousemove",i.curry(f,"mousemove")),n("globalout",d))}function h(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]),n&&(n.dispatchAction=null,e.dispatchAction(n))}function d(t,e,n){t.handler("leave",null,n)}function f(t,e,n,i){e.handler(t,n,i)}function p(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}function g(t,e){if(!r.node){var n=e.getZr(),i=(s(n).records||{})[t];i&&(s(n).records[t]=null)}}e.register=u,e.unregister=g},"17ed":function(t,e,n){t.exports={default:n("d8d6"),__esModule:!0}},"18c0":function(t,e,n){var i=n("6d8b"),r=n("e0d8"),o=n("8e43"),a=r.prototype,s=r.extend({type:"ordinal",init:function(t,e){t&&!i.isArray(t)||(t=new o({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),a.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return a.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(a.scale.call(this,t))},getTicks:function(){var t=[],e=this._extent,n=e[0];while(n<=e[1])t.push(n),n++;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:i.noop,niceExtent:i.noop});s.create=function(){return new s};var l=s;t.exports=l},1953:function(t,e,n){var i=n("2449"),r=i.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"}});t.exports=r},1991:function(t,e,n){var i,r,o,a=n("9b43"),s=n("31f4"),l=n("fab2e"),u=n("230e"),c=n("7726"),h=c.process,d=c.setImmediate,f=c.clearImmediate,p=c.MessageChannel,g=c.Dispatch,v=0,m={},y="onreadystatechange",x=function(){var t=+this;if(m.hasOwnProperty(t)){var e=m[t];delete m[t],e()}},_=function(t){x.call(t.data)};d&&f||(d=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return m[++v]=function(){s("function"==typeof t?t:Function(t),e)},i(v),v},f=function(t){delete m[t]},"process"==n("2d95")(h)?i=function(t){h.nextTick(a(x,t,1))}:g&&g.now?i=function(t){g.now(a(x,t,1))}:p?(r=new p,o=r.port2,r.port1.onmessage=_,i=a(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(i=function(t){c.postMessage(t+"","*")},c.addEventListener("message",_,!1)):i=y in u("script")?function(t){l.appendChild(u("script"))[y]=function(){l.removeChild(this),x.call(t)}}:function(t){setTimeout(a(x,t,1),0)}),t.exports={set:d,clear:f}},"19e2":function(t,e,n){var i=n("6d8b"),r=n("e887"),o=n("2306"),a=n("cbe5"),s=n("b0af"),l=s.createClipPath,u=["itemStyle"],c=["emphasis","itemStyle"],h=["color","color0","borderColor","borderColor0"],d=r.extend({type:"candlestick",render:function(t,e,n){this.group.removeClipPath(),this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},incrementalPrepareRender:function(t,e,n){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e,n,i){this._isLargeDraw?this._incrementalRenderLarge(t,e):this._incrementalRenderNormal(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t){var e=t.getData(),n=this._data,i=this.group,r=e.getLayout("isSimpleBox"),a=t.get("clip",!0),s=t.coordinateSystem,l=s.getArea&&s.getArea();this._data||i.removeAll(),e.diff(n).add((function(n){if(e.hasValue(n)){var s,u=e.getItemLayout(n);if(a&&g(l,u))return;s=p(u,n,!0),o.initProps(s,{shape:{points:u.ends}},t,n),v(s,e,n,r),i.add(s),e.setItemGraphicEl(n,s)}})).update((function(s,u){var c=n.getItemGraphicEl(u);if(e.hasValue(s)){var h=e.getItemLayout(s);a&&g(l,h)?i.remove(c):(c?o.updateProps(c,{shape:{points:h.ends}},t,s):c=p(h,s),v(c,e,s,r),i.add(c),e.setItemGraphicEl(s,c))}else i.remove(c)})).remove((function(t){var e=n.getItemGraphicEl(t);e&&i.remove(e)})).execute(),this._data=e},_renderLarge:function(t){this._clear(),x(t,this.group);var e=t.get("clip",!0)?l(t.coordinateSystem,!1,t):null;e?this.group.setClipPath(e):this.group.removeClipPath()},_incrementalRenderNormal:function(t,e){var n,i=e.getData(),r=i.getLayout("isSimpleBox");while(null!=(n=t.next())){var o,a=i.getItemLayout(n);o=p(a,n),v(o,i,n,r),o.incremental=!0,this.group.add(o)}},_incrementalRenderLarge:function(t,e){x(e,this.group,!0)},remove:function(t){this._clear()},_clear:function(){this.group.removeAll(),this._data=null},dispose:i.noop}),f=a.extend({type:"normalCandlestickBox",shape:{},buildPath:function(t,e){var n=e.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))}});function p(t,e,n){var i=t.ends;return new f({shape:{points:n?m(i,t):i},z2:100})}function g(t,e){for(var n=!0,i=0;i0?"P":"N",o=i.getVisual("borderColor"+r)||i.getVisual("color"+r),a=n.getModel(u).getItemStyle(h);e.useStyle(a),e.style.fill=null,e.style.stroke=o}var b=d;t.exports=b},"19eb":function(t,e,n){var i=n("6d8b"),r=n("2b61"),o=n("d5b7"),a=n("9e2e");function s(t){for(var e in t=t||{},o.call(this,t),t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new r(t.style,this),this._rect=null,this.__clipPaths=null}s.prototype={constructor:s,type:"displayable",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:"pointer",rectHover:!1,progressive:!1,incremental:!1,globalScaleRatio:1,beforeBrush:function(t){},afterBrush:function(t){},brush:function(t,e){},getBoundingRect:function(){},contain:function(t,e){return this.rectContain(t,e)},traverse:function(t,e){t.call(e,this)},rectContain:function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return i.contain(n[0],n[1])},dirty:function(){this.__dirty=this.__dirtyText=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(t){return this.animate("style",t)},attrKV:function(t,e){"style"!==t?o.prototype.attrKV.call(this,t,e):this.style.set(e)},setStyle:function(t,e){return this.style.set(t,e),this.dirty(!1),this},useStyle:function(t){return this.style=new r(t,this),this.dirty(!1),this},calculateTextPosition:null},i.inherits(s,o),i.mixin(s,a);var l=s;t.exports=l},"1ab3":function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("e887");function a(t,e,n,i){var r=e.getData(),o=this.dataIndex,a=r.getName(o),l=e.get("selectedOffset");i.dispatchAction({type:"pieToggleSelect",from:t,name:a,seriesId:e.id}),r.each((function(t){s(r.getItemGraphicEl(t),r.getItemLayout(t),e.isSelected(r.getName(t)),l,n)}))}function s(t,e,n,i,r){var o=(e.startAngle+e.endAngle)/2,a=Math.cos(o),s=Math.sin(o),l=n?i:0,u=[a*l,s*l];r?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function l(t,e){r.Group.call(this);var n=new r.Sector({z2:2}),i=new r.Polyline,o=new r.Text;this.add(n),this.add(i),this.add(o),this.updateData(t,e,!0)}var u=l.prototype;u.updateData=function(t,e,n){var o=this.childAt(0),a=this.childAt(1),l=this.childAt(2),u=t.hostModel,c=t.getItemModel(e),h=t.getItemLayout(e),d=i.extend({},h);d.label=null;var f=u.getShallow("animationTypeUpdate");if(n){o.setShape(d);var p=u.getShallow("animationType");"scale"===p?(o.shape.r=h.r0,r.initProps(o,{shape:{r:h.r}},u,e)):(o.shape.endAngle=h.startAngle,r.updateProps(o,{shape:{endAngle:h.endAngle}},u,e))}else"expansion"===f?o.setShape(d):r.updateProps(o,{shape:d},u,e);var g=t.getItemVisual(e,"color");o.useStyle(i.defaults({lineJoin:"bevel",fill:g},c.getModel("itemStyle").getItemStyle())),o.hoverStyle=c.getModel("emphasis.itemStyle").getItemStyle();var v=c.getShallow("cursor");v&&o.attr("cursor",v),s(this,t.getItemLayout(e),u.isSelected(t.getName(e)),u.get("selectedOffset"),u.get("animation"));var m=!n&&"transition"===f;this._updateLabel(t,e,m),this.highDownOnUpdate=u.get("silent")?null:function(t,e){var n=u.isAnimationEnabled()&&c.get("hoverAnimation");"emphasis"===e?(a.ignore=a.hoverIgnore,l.ignore=l.hoverIgnore,n&&(o.stopAnimation(!0),o.animateTo({shape:{r:h.r+u.get("hoverOffset")}},300,"elasticOut"))):(a.ignore=a.normalIgnore,l.ignore=l.normalIgnore,n&&(o.stopAnimation(!0),o.animateTo({shape:{r:h.r}},300,"elasticOut")))},r.setHoverStyle(this)},u._updateLabel=function(t,e,n){var i=this.childAt(1),o=this.childAt(2),a=t.hostModel,s=t.getItemModel(e),l=t.getItemLayout(e),u=l.label,c=t.getItemVisual(e,"color");if(!u||isNaN(u.x)||isNaN(u.y))o.ignore=o.normalIgnore=o.hoverIgnore=i.ignore=i.normalIgnore=i.hoverIgnore=!0;else{var h={points:u.linePoints||[[u.x,u.y],[u.x,u.y],[u.x,u.y]]},d={x:u.x,y:u.y};n?(r.updateProps(i,{shape:h},a,e),r.updateProps(o,{style:d},a,e)):(i.attr({shape:h}),o.attr({style:d})),o.attr({rotation:u.rotation,origin:[u.x,u.y],z2:10});var f=s.getModel("label"),p=s.getModel("emphasis.label"),g=s.getModel("labelLine"),v=s.getModel("emphasis.labelLine");c=t.getItemVisual(e,"color");r.setLabelStyle(o.style,o.hoverStyle={},f,p,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:u.text,autoColor:c,useInsideStyle:!!u.inside},{textAlign:u.textAlign,textVerticalAlign:u.verticalAlign,opacity:t.getItemVisual(e,"opacity")}),o.ignore=o.normalIgnore=!f.get("show"),o.hoverIgnore=!p.get("show"),i.ignore=i.normalIgnore=!g.get("show"),i.hoverIgnore=!v.get("show"),i.setStyle({stroke:c,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(g.getModel("lineStyle").getLineStyle()),i.hoverStyle=v.getModel("lineStyle").getLineStyle();var m=g.get("smooth");m&&!0===m&&(m=.4),i.setShape({smooth:m})}},i.inherits(l,r.Group);var c=o.extend({type:"pie",init:function(){var t=new r.Group;this._sectorGroup=t},render:function(t,e,n,r){if(!r||r.from!==this.uid){var o=t.getData(),s=this._data,u=this.group,c=e.get("animation"),h=!s,d=t.get("animationType"),f=t.get("animationTypeUpdate"),p=i.curry(a,this.uid,t,c,n),g=t.get("selectedMode");if(o.diff(s).add((function(t){var e=new l(o,t);h&&"scale"!==d&&e.eachChild((function(t){t.stopAnimation(!0)})),g&&e.on("click",p),o.setItemGraphicEl(t,e),u.add(e)})).update((function(t,e){var n=s.getItemGraphicEl(e);h||"transition"===f||n.eachChild((function(t){t.stopAnimation(!0)})),n.updateData(o,t),n.off("click"),g&&n.on("click",p),u.add(n),o.setItemGraphicEl(t,n)})).remove((function(t){var e=s.getItemGraphicEl(t);u.remove(e)})).execute(),c&&o.count()>0&&(h?"scale"!==d:"transition"!==f)){for(var v=o.getItemLayout(0),m=1;isNaN(v.startAngle)&&m=i.r0}}}),h=c;t.exports=h},"1af6":function(t,e,n){var i=n("63b6");i(i.S,"Array",{isArray:n("9003")})},"1bc3":function(t,e,n){var i=n("f772");t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},"1c4c":function(t,e,n){"use strict";var i=n("9b43"),r=n("5ca1"),o=n("4bf8"),a=n("1fa8"),s=n("33a4"),l=n("9def"),u=n("f1ae"),c=n("27ee");r(r.S+r.F*!n("5cc5")((function(t){Array.from(t)})),"Array",{from:function(t){var e,n,r,h,d=o(t),f="function"==typeof this?this:Array,p=arguments.length,g=p>1?arguments[1]:void 0,v=void 0!==g,m=0,y=c(d);if(v&&(g=i(g,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(e=l(d.length),n=new f(e);e>m;m++)u(n,m,v?g(d[m],m):d[m]);else for(h=y.call(d),n=new f;!(r=h.next()).done;m++)u(n,m,v?a(h,g,[r.value,m],!0):r.value);return n.length=m,n}})},"1c5f":function(t,e,n){var i=n("401b"),r=n("6d8b"),o=n("0c37"),a=o.getCurvenessForEdge;function s(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var n=t.getGraph();n.eachNode((function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])})),l(n,t)}}function l(t,e){t.eachEdge((function(t,n){var o=r.retrieve3(t.getModel().get("lineStyle.curveness"),-a(t,e,n,!0),0),s=i.clone(t.node1.getLayout()),l=i.clone(t.node2.getLayout()),u=[s,l];+o&&u.push([(s[0]+l[0])/2-(s[1]-l[1])*o,(s[1]+l[1])/2-(l[0]-s[0])*o]),t.setLayout(u)}))}e.simpleLayout=s,e.simpleLayoutEdge=l},"1ccf":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=n("fd27"),a=n("3842"),s=a.parsePercent,l=n("697e"),u=l.createScaleByModel,c=l.niceScaleExtent,h=n("2039"),d=n("ee1a"),f=d.getStackedDimension;function p(t,e,n){var i=e.get("center"),o=n.getWidth(),a=n.getHeight();t.cx=s(i[0],o),t.cy=s(i[1],a);var l=t.getRadiusAxis(),u=Math.min(o,a)/2,c=e.get("radius");null==c?c=[0,"100%"]:r.isArray(c)||(c=[0,c]),c=[s(c[0],u),s(c[1],u)],l.inverse?l.setExtent(c[1],c[0]):l.setExtent(c[0],c[1])}function g(t,e){var n=this,i=n.getAngleAxis(),o=n.getRadiusAxis();if(i.scale.setExtent(1/0,-1/0),o.scale.setExtent(1/0,-1/0),t.eachSeries((function(t){if(t.coordinateSystem===n){var e=t.getData();r.each(e.mapDimension("radius",!0),(function(t){o.scale.unionExtentFromData(e,f(e,t))})),r.each(e.mapDimension("angle",!0),(function(t){i.scale.unionExtentFromData(e,f(e,t))}))}})),c(i.scale,i.model),c(o.scale,o.model),"category"===i.type&&!i.onBand){var a=i.getExtent(),s=360/i.scale.count();i.inverse?a[1]+=s:a[1]-=s,i.setExtent(a[0],a[1])}}function v(t,e){if(t.type=e.get("type"),t.scale=u(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),"angleAxis"===e.mainType){t.inverse^=e.get("clockwise");var n=e.get("startAngle");t.setExtent(n,n+(t.inverse?-360:360))}e.axis=t,t.model=e}n("78f0");var m={dimensions:o.prototype.dimensions,create:function(t,e){var n=[];return t.eachComponent("polar",(function(t,i){var r=new o(i);r.update=g;var a=r.getRadiusAxis(),s=r.getAngleAxis(),l=t.findAxisModel("radiusAxis"),u=t.findAxisModel("angleAxis");v(a,l),v(s,u),p(r,t,e),n.push(r),t.coordinateSystem=r,r.model=t})),t.eachSeries((function(e){if("polar"===e.get("coordinateSystem")){var n=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=n.coordinateSystem}})),n}};h.register("polar",m)},"1d2b":function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),i=0;i=0?"p":"n",O=S;if(b&&(r[c][L]||(r[c][L]={p:S,n:S}),O=r[c][L][P]),"radius"===p.dim){var E=p.dataToRadius(k)-S,R=i.dataToAngle(L);Math.abs(E)=r/3?1:2),l=e.y-i(a)*o*(o>=r/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+n(a)*o,e.y+i(a)*o),t.lineTo(e.x+n(e.angle)*r,e.y+i(e.angle)*r),t.lineTo(e.x-n(a)*o,e.y-i(a)*o),t.lineTo(s,l)}});t.exports=r},"1f1a":function(t,e,n){var i=n("6d8b"),r=n("e0d3"),o=n("6cb7"),a=n("4319"),s=n("7023"),l=n("eeea"),u=o.extend({type:"geo",coordinateSystem:null,layoutMode:"box",init:function(t){o.prototype.init.apply(this,arguments),r.defaultEmphasis(t,"label",["show"])},optionUpdated:function(){var t=this.option,e=this;t.regions=l.getFilledRegions(t.regions,t.map,t.nameMap),this._optionModelMap=i.reduce(t.regions||[],(function(t,n){return n.name&&t.set(n.name,new a(n,e)),t}),i.createHashMap()),this.updateSelectedMap(t.regions)},defaultOption:{zlevel:0,z:0,show:!0,left:"center",top:"center",aspectScale:null,silent:!1,map:"",boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",color:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{color:"rgba(255,215,0,0.8)"}},regions:[]},getRegionModel:function(t){return this._optionModelMap.get(t)||new a(null,this,this.ecModel)},getFormattedLabel:function(t,e){e=e||"normal";var n=this.getRegionModel(t),i=n.get(("normal"===e?"":e+".")+"label.formatter"),r={name:t};return"function"===typeof i?(r.status=e,i(r)):"string"===typeof i?i.replace("{a}",null!=t?t:""):void 0},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t}});i.mixin(u,s);var c=u;t.exports=c},"1fa8":function(t,e,n){var i=n("cb7c");t.exports=function(t,e,n,r){try{return r?e(i(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&i(o.call(t)),a}}},"1fab":function(t,e){var n=Array.prototype.slice,i=function(t){this._$handlers={},this._$eventProcessor=t};function r(t,e){var n=t._$eventProcessor;return null!=e&&n&&n.normalizeQuery&&(e=n.normalizeQuery(e)),e}function o(t,e,n,i,o,a){var s=t._$handlers;if("function"===typeof n&&(o=i,i=n,n=null),!i||!e)return t;n=r(t,n),s[e]||(s[e]=[]);for(var l=0;l3&&(r=n.call(r,1));for(var a=e.length,s=0;s4&&(r=n.call(r,1,r.length-1));for(var a=r[r.length-1],s=e.length,l=0;lthis._ux||x(e-this._yi)>this._uy||this._len<5;return this.addData(u.L,t,e),this._ctx&&n&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),n&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,n,i,r,o){return this.addData(u.C,t,e,n,i,r,o),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,n,i,r,o):this._ctx.bezierCurveTo(t,e,n,i,r,o)),this._xi=r,this._yi=o,this},quadraticCurveTo:function(t,e,n,i){return this.addData(u.Q,t,e,n,i),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,n,i):this._ctx.quadraticCurveTo(t,e,n,i)),this._xi=n,this._yi=i,this},arc:function(t,e,n,i,r,o){return this.addData(u.A,t,e,n,n,i,r-i,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=v(r)*n+t,this._yi=m(r)*n+e,this},arcTo:function(t,e,n,i,r){return this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},rect:function(t,e,n,i){return this._ctx&&this._ctx.rect(t,e,n,i),this.addData(u.R,t,e,n,i),this},closePath:function(){this.addData(u.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,n),t.closePath()),this._xi=e,this._yi=n,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,this._dashIdx=0;for(var e=0,n=0;ne.length&&(this._expandData(),e=this.data);for(var n=0;n0&&f<=t||c<0&&f>=t||0===c&&(h>0&&v<=e||h<0&&v>=e))i=this._dashIdx,n=a[i],f+=c*n,v+=h*n,this._dashIdx=(i+1)%m,c>0&&fl||h>0&&vu||s[i%2?"moveTo":"lineTo"](c>=0?p(f,t):g(f,t),h>=0?p(v,e):g(v,e));c=f-t,h=v-e,this._dashOffset=-y(c*c+h*h)},_dashedBezierTo:function(t,e,n,r,o,a){var s,l,u,c,h,d=this._dashSum,f=this._dashOffset,p=this._lineDash,g=this._ctx,v=this._xi,m=this._yi,x=i.cubicAt,_=0,b=this._dashIdx,w=p.length,S=0;for(f<0&&(f=d+f),f%=d,s=0;s<1;s+=.1)l=x(v,t,n,o,s+.1)-x(v,t,n,o,s),u=x(m,e,r,a,s+.1)-x(m,e,r,a,s),_+=y(l*l+u*u);for(;bf)break;s=(S-f)/_;while(s<=1)c=x(v,t,n,o,s),h=x(m,e,r,a,s),b%2?g.moveTo(c,h):g.lineTo(c,h),s+=p[b]/_,b=(b+1)%w;b%2!==0&&g.lineTo(o,a),l=o-c,u=a-h,this._dashOffset=-y(l*l+u*u)},_dashedQuadraticTo:function(t,e,n,i){var r=n,o=i;n=(n+2*t)/3,i=(i+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,n,i,r,o)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,_&&(this.data=new Float32Array(t)))},getBoundingRect:function(){c[0]=c[1]=d[0]=d[1]=Number.MAX_VALUE,h[0]=h[1]=f[0]=f[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,n=0,i=0,s=0,l=0;ll||x(a-r)>c||d===h-1)&&(t.lineTo(o,a),i=o,r=a);break;case u.C:t.bezierCurveTo(s[d++],s[d++],s[d++],s[d++],s[d++],s[d++]),i=s[d-2],r=s[d-1];break;case u.Q:t.quadraticCurveTo(s[d++],s[d++],s[d++],s[d++]),i=s[d-2],r=s[d-1];break;case u.A:var p=s[d++],g=s[d++],y=s[d++],_=s[d++],b=s[d++],w=s[d++],S=s[d++],M=s[d++],A=y>_?y:_,T=y>_?1:y/_,I=y>_?_/y:1,C=Math.abs(y-_)>.001,D=b+w;C?(t.translate(p,g),t.rotate(S),t.scale(T,I),t.arc(0,0,A,b,D,1-M),t.scale(1/T,1/I),t.rotate(-S),t.translate(-p,-g)):t.arc(p,g,A,b,D,1-M),1===d&&(e=v(b)*y+p,n=m(b)*_+g),i=v(D)*y+p,r=m(D)*_+g;break;case u.R:e=i=s[d],n=r=s[d+1],t.rect(s[d++],s[d++],s[d++],s[d++]);break;case u.Z:t.closePath(),i=e,r=n}}}},b.CMD=u;var w=b;t.exports=w},"20d6":function(t,e,n){"use strict";var i=n("5ca1"),r=n("0a49")(6),o="findIndex",a=!0;o in[]&&Array(1)[o]((function(){a=!1})),i(i.P+i.F*a,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),n("9c6c")(o)},"20fd":function(t,e,n){"use strict";var i=n("d9f6"),r=n("aebd");t.exports=function(t,e,n){e in t?i.f(t,e,r(0,n)):t[e]=n}},2145:function(t,e){var n={};function i(t,e){n[t]=e}function r(t){return n[t]}e.register=i,e.get=r},"214f":function(t,e,n){"use strict";n("b0c5");var i=n("2aba"),r=n("32e9"),o=n("79e5"),a=n("be13"),s=n("2b4c"),l=n("520a"),u=s("species"),c=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var d=s(t),f=!o((function(){var e={};return e[d]=function(){return 7},7!=""[t](e)})),p=f?!o((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[u]=function(){return n}),n[d](""),!e})):void 0;if(!f||!p||"replace"===t&&!c||"split"===t&&!h){var g=/./[d],v=n(a,d,""[t],(function(t,e,n,i,r){return e.exec===l?f&&!r?{done:!0,value:g.call(e,n,i)}:{done:!0,value:t.call(n,e,i)}:{done:!1}})),m=v[0],y=v[1];i(String.prototype,t,m),r(RegExp.prototype,d,2==e?function(t,e){return y.call(t,this,e)}:function(t){return y.call(t,this)})}}},2163:function(t,e,n){var i=n("4f85"),r=n("06c7"),o=n("eda2"),a=o.encodeHTML,s=n("4319"),l=i.extend({type:"series.tree",layoutInfo:null,layoutMode:"box",getInitialData:function(t){var e={name:t.name,children:t.data},n=t.leaves||{},i=new s(n,this,this.ecModel),o=r.createTree(e,this,a);function a(t){t.wrapMethod("getItemModel",(function(t,e){var n=o.getNodeByDataIndex(e);return n.children.length&&n.isExpand||(t.parentModel=i),t}))}var l=0;o.eachNode("preorder",(function(t){t.depth>l&&(l=t.depth)}));var u=t.expandAndCollapse,c=u&&t.initialTreeDepth>=0?t.initialTreeDepth:l;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<=c})),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){var e=this.getData().tree,n=e.root.children[0],i=e.getNodeByDataIndex(t),r=i.getValue(),o=i.name;while(i&&i!==n)o=i.parentNode.name+"."+o,i=i.parentNode;return a(o+(isNaN(r)||null==r?"":" : "+r))},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}});t.exports=l},"216a":function(t,e,n){var i=n("6d8b"),r=n("3842"),o=n("eda2"),a=n("944e"),s=n("89e3"),l=s.prototype,u=Math.ceil,c=Math.floor,h=1e3,d=60*h,f=60*d,p=24*f,g=function(t,e,n,i){while(n>>1;t[r][1]n&&(s=n);var l=m.length,h=g(m,s,0,l),d=m[Math.min(h,l-1)],f=d[1];if("year"===d[0]){var p=o/f,v=r.nice(p/t,!0);f*=v}var y=this.getSetting("useUTC")?0:60*new Date(+i[0]||+i[1]).getTimezoneOffset()*1e3,x=[Math.round(u((i[0]-y)/f)*f+y),Math.round(c((i[1]-y)/f)*f+y)];a.fixExtent(x,i),this._stepLvl=d,this._interval=f,this._niceExtent=x},parse:function(t){return+r.parseDate(t)}});i.each(["contain","normalize"],(function(t){v.prototype[t]=function(e){return l[t].call(this,this.parse(e))}}));var m=[["hh:mm:ss",h],["hh:mm:ss",5*h],["hh:mm:ss",10*h],["hh:mm:ss",15*h],["hh:mm:ss",30*h],["hh:mm\nMM-dd",d],["hh:mm\nMM-dd",5*d],["hh:mm\nMM-dd",10*d],["hh:mm\nMM-dd",15*d],["hh:mm\nMM-dd",30*d],["hh:mm\nMM-dd",f],["hh:mm\nMM-dd",2*f],["hh:mm\nMM-dd",6*f],["hh:mm\nMM-dd",12*f],["MM-dd\nyyyy",p],["MM-dd\nyyyy",2*p],["MM-dd\nyyyy",3*p],["MM-dd\nyyyy",4*p],["MM-dd\nyyyy",5*p],["MM-dd\nyyyy",6*p],["week",7*p],["MM-dd\nyyyy",10*p],["week",14*p],["week",21*p],["month",31*p],["week",42*p],["month",62*p],["week",70*p],["quarter",95*p],["month",31*p*4],["month",31*p*5],["half-year",380*p/2],["month",31*p*8],["month",31*p*10],["year",380*p]];v.create=function(t){return new v({useUTC:t.ecModel.get("useUTC")})};var y=v;t.exports=y},"217b":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3301")),o=n("4f85"),a=o.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return r(this.getSource(),this,{useEncodeDefaulter:!0})},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clip:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});t.exports=a},"217c":function(t,e,n){var i=n("6d8b"),r=n("6cb7");n("df3a");var o=r.extend({type:"parallel",dependencies:["parallelAxis"],coordinateSystem:null,dimensions:null,parallelAxisIndex:null,layoutMode:"box",defaultOption:{zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},init:function(){r.prototype.init.apply(this,arguments),this.mergeOption({})},mergeOption:function(t){var e=this.option;t&&i.merge(e,t,!0),this._initDimensions()},contains:function(t,e){var n=t.get("parallelIndex");return null!=n&&e.getComponent("parallel",n)===this},setAxisExpand:function(t){i.each(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],(function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])}),this)},_initDimensions:function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[],n=i.filter(this.dependentModels.parallelAxis,(function(t){return(t.get("parallelIndex")||0)===this.componentIndex}),this);i.each(n,(function(n){t.push("dim"+n.get("dim")),e.push(n.componentIndex)}))}});t.exports=o},"21a1":function(t,e,n){(function(e){(function(e,n){t.exports=n()})(0,(function(){"use strict";"undefined"!==typeof window?window:"undefined"!==typeof e||"undefined"!==typeof self&&self;function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}var n=t((function(t,e){(function(e,n){t.exports=n()})(0,(function(){function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(t){return Array.isArray(t)?[]:{}}function n(n,i){var r=i&&!0===i.clone;return r&&t(n)?o(e(n),n,i):n}function i(e,i,r){var a=e.slice();return i.forEach((function(i,s){"undefined"===typeof a[s]?a[s]=n(i,r):t(i)?a[s]=o(e[s],i,r):-1===e.indexOf(i)&&a.push(n(i,r))})),a}function r(e,i,r){var a={};return t(e)&&Object.keys(e).forEach((function(t){a[t]=n(e[t],r)})),Object.keys(i).forEach((function(s){t(i[s])&&e[s]?a[s]=o(e[s],i[s],r):a[s]=n(i[s],r)})),a}function o(t,e,o){var a=Array.isArray(e),s=o||{arrayMerge:i},l=s.arrayMerge||i;return a?Array.isArray(t)?l(t,e,o):n(e,o):r(t,e,o)}return o.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return o(t,n,e)}))},o}))}));function i(t){return t=t||Object.create(null),{on:function(e,n){(t[e]||(t[e]=[])).push(n)},off:function(e,n){t[e]&&t[e].splice(t[e].indexOf(n)>>>0,1)},emit:function(e,n){(t[e]||[]).map((function(t){t(n)})),(t["*"]||[]).map((function(t){t(e,n)}))}}}var r=t((function(t,e){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};e.default=n,t.exports=e.default})),o=function(t){return Object.keys(t).map((function(e){var n=t[e].toString().replace(/"/g,""");return e+'="'+n+'"'})).join(" ")},a=r.svg,s=r.xlink,l={};l[a.name]=a.uri,l[s.name]=s.uri;var u,c=function(t,e){void 0===t&&(t="");var i=n(l,e||{}),r=o(i);return""+t+""},h=r.svg,d=r.xlink,f={attrs:(u={style:["position: absolute","width: 0","height: 0"].join("; ")},u[h.name]=h.uri,u[d.name]=d.uri,u)},p=function(t){this.config=n(f,t||{}),this.symbols=[]};p.prototype.add=function(t){var e=this,n=e.symbols,i=this.find(t.id);return i?(n[n.indexOf(i)]=t,!1):(n.push(t),!0)},p.prototype.remove=function(t){var e=this,n=e.symbols,i=this.find(t);return!!i&&(n.splice(n.indexOf(i),1),i.destroy(),!0)},p.prototype.find=function(t){return this.symbols.filter((function(e){return e.id===t}))[0]||null},p.prototype.has=function(t){return null!==this.find(t)},p.prototype.stringify=function(){var t=this.config,e=t.attrs,n=this.symbols.map((function(t){return t.stringify()})).join("");return c(n,e)},p.prototype.toString=function(){return this.stringify()},p.prototype.destroy=function(){this.symbols.forEach((function(t){return t.destroy()}))};var g=function(t){var e=t.id,n=t.viewBox,i=t.content;this.id=e,this.viewBox=n,this.content=i};g.prototype.stringify=function(){return this.content},g.prototype.toString=function(){return this.stringify()},g.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach((function(e){return delete t[e]}))};var v=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n},m=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"===typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return v(c(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(g),y={autoConfigure:!0,mountTo:"body",syncUrlsWithBaseTag:!1,listenLocationChangeEvent:!0,locationChangeEvent:"locationChange",locationChangeAngularEmitter:!1,usagesToUpdate:"use[*|href]",moveGradientsOutsideSymbol:!1},x=function(t){return Array.prototype.slice.call(t,0)},_=navigator.userAgent,b={isChrome:/chrome/i.test(_),isFirefox:/firefox/i.test(_),isIE:/msie/i.test(_)||/trident/i.test(_),isEdge:/edge/i.test(_)},w=function(t,e){var n=document.createEvent("CustomEvent");n.initCustomEvent(t,!1,!1,e),window.dispatchEvent(n)},S=function(t){var e=[];return x(t.querySelectorAll("style")).forEach((function(t){t.textContent+="",e.push(t)})),e},M=function(t){return(t||window.location.href).split("#")[0]},A=function(t){angular.module("ng").run(["$rootScope",function(e){e.$on("$locationChangeSuccess",(function(e,n,i){w(t,{oldUrl:i,newUrl:n})}))}])},T="linearGradient, radialGradient, pattern",I=function(t,e){return void 0===e&&(e=T),x(t.querySelectorAll("symbol")).forEach((function(t){x(t.querySelectorAll(e)).forEach((function(e){t.parentNode.insertBefore(e,t)}))})),t};function C(t,e){var n=x(t).reduce((function(t,n){if(!n.attributes)return t;var i=x(n.attributes),r=e?i.filter(e):i;return t.concat(r)}),[]);return n}var D=r.xlink.uri,k="xlink:href",L=/[{}|\\\^\[\]`"<>]/g;function P(t){return t.replace(L,(function(t){return"%"+t[0].charCodeAt(0).toString(16).toUpperCase()}))}function O(t,e,n){return x(t).forEach((function(t){var i=t.getAttribute(k);if(i&&0===i.indexOf(e)){var r=i.replace(e,n);t.setAttributeNS(D,k,r)}})),t}var E,R=["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke","style"],N=R.map((function(t){return"["+t+"]"})).join(","),z=function(t,e,n,i){var r=P(n),o=P(i),a=t.querySelectorAll(N),s=C(a,(function(t){var e=t.localName,n=t.value;return-1!==R.indexOf(e)&&-1!==n.indexOf("url("+r)}));s.forEach((function(t){return t.value=t.value.replace(r,o)})),O(e,r,o)},B={MOUNT:"mount",SYMBOL_MOUNT:"symbol_mount"},V=function(t){function e(e){var r=this;void 0===e&&(e={}),t.call(this,n(y,e));var o=i();this._emitter=o,this.node=null;var a=this,s=a.config;if(s.autoConfigure&&this._autoConfigure(e),s.syncUrlsWithBaseTag){var l=document.getElementsByTagName("base")[0].getAttribute("href");o.on(B.MOUNT,(function(){return r.updateUrls("#",l)}))}var u=this._handleLocationChange.bind(this);this._handleLocationChange=u,s.listenLocationChangeEvent&&window.addEventListener(s.locationChangeEvent,u),s.locationChangeAngularEmitter&&A(s.locationChangeEvent),o.on(B.MOUNT,(function(t){s.moveGradientsOutsideSymbol&&I(t)})),o.on(B.SYMBOL_MOUNT,(function(t){s.moveGradientsOutsideSymbol&&I(t.parentNode),(b.isIE||b.isEdge)&&S(t)}))}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={isMounted:{}};return r.isMounted.get=function(){return!!this.node},e.prototype._autoConfigure=function(t){var e=this,n=e.config;"undefined"===typeof t.syncUrlsWithBaseTag&&(n.syncUrlsWithBaseTag="undefined"!==typeof document.getElementsByTagName("base")[0]),"undefined"===typeof t.locationChangeAngularEmitter&&(n.locationChangeAngularEmitter="angular"in window),"undefined"===typeof t.moveGradientsOutsideSymbol&&(n.moveGradientsOutsideSymbol=b.isFirefox)},e.prototype._handleLocationChange=function(t){var e=t.detail,n=e.oldUrl,i=e.newUrl;this.updateUrls(n,i)},e.prototype.add=function(e){var n=this,i=t.prototype.add.call(this,e);return this.isMounted&&i&&(e.mount(n.node),this._emitter.emit(B.SYMBOL_MOUNT,e.node)),i},e.prototype.attach=function(t){var e=this,n=this;if(n.isMounted)return n.node;var i="string"===typeof t?document.querySelector(t):t;return n.node=i,this.symbols.forEach((function(t){t.mount(n.node),e._emitter.emit(B.SYMBOL_MOUNT,t.node)})),x(i.querySelectorAll("symbol")).forEach((function(t){var e=m.createFromExistingNode(t);e.node=t,n.add(e)})),this._emitter.emit(B.MOUNT,i),i},e.prototype.destroy=function(){var t=this,e=t.config,n=t.symbols,i=t._emitter;n.forEach((function(t){return t.destroy()})),i.off("*"),window.removeEventListener(e.locationChangeEvent,this._handleLocationChange),this.isMounted&&this.unmount()},e.prototype.mount=function(t,e){void 0===t&&(t=this.config.mountTo),void 0===e&&(e=!1);var n=this;if(n.isMounted)return n.node;var i="string"===typeof t?document.querySelector(t):t,r=n.render();return this.node=r,e&&i.childNodes[0]?i.insertBefore(r,i.childNodes[0]):i.appendChild(r),this._emitter.emit(B.MOUNT,r),r},e.prototype.render=function(){return v(this.stringify())},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},e.prototype.updateUrls=function(t,e){if(!this.isMounted)return!1;var n=document.querySelectorAll(this.config.usagesToUpdate);return z(this.node,n,M(t)+"#",M(e)+"#"),!0},Object.defineProperties(e.prototype,r),e}(p),F=t((function(t){ -/*! - * domready (c) Dustin Diaz 2014 - License MIT - */ -!function(e,n){t.exports=n()}(0,(function(){var t,e=[],n=document,i=n.documentElement.doScroll,r="DOMContentLoaded",o=(i?/^loaded|^c/:/^loaded|^i|^c/).test(n.readyState);return o||n.addEventListener(r,t=function(){n.removeEventListener(r,t),o=1;while(t=e.shift())t()}),function(t){o?setTimeout(t,0):e.push(t)}}))})),H="__SVG_SPRITE_NODE__",G="__SVG_SPRITE__",j=!!window[G];j?E=window[G]:(E=new V({attrs:{id:H}}),window[G]=E);var W=function(){var t=document.getElementById(H);t?E.attach(t):E.mount(document.body,!0)};document.body?W():F(W);var U=E;return U}))}).call(this,n("c8ba"))},"22d1":function(t,e){var n={};n="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}:r(navigator.userAgent);var i=n;function r(t){var e={},n={},i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge\/([\d.]+)/),a=/micromessenger/i.test(t);return i&&(n.firefox=!0,n.version=i[1]),r&&(n.ie=!0,n.version=r[1]),o&&(n.edge=!0,n.version=o[1]),a&&(n.weChat=!0),{browser:n,os:e,node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!==typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!n.ie&&!n.edge,pointerEventsSupported:"onpointerdown"in window&&(n.edge||n.ie&&n.version>=11),domSupported:"undefined"!==typeof document}}t.exports=i},"22da":function(t,e,n){var i=n("f934");function r(t){t.hierNode={defaultAncestor:null,ancestor:t,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};var e,n,i=[t];while(e=i.pop())if(n=e.children,e.isExpand&&n.length)for(var r=n.length,o=r-1;o>=0;o--){var a=n[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},i.push(a)}}function o(t,e){var n=t.isExpand?t.children:[],i=t.parentNode.children,r=t.hierNode.i?i[t.hierNode.i-1]:null;if(n.length){c(t);var o=(n[0].hierNode.prelim+n[n.length-1].hierNode.prelim)/2;r?(t.hierNode.prelim=r.hierNode.prelim+e(t,r),t.hierNode.modifier=t.hierNode.prelim-o):t.hierNode.prelim=o}else r&&(t.hierNode.prelim=r.hierNode.prelim+e(t,r));t.parentNode.hierNode.defaultAncestor=h(t,r,t.parentNode.hierNode.defaultAncestor||i[0],e)}function a(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function s(t){return arguments.length?t:v}function l(t,e){var n={};return t-=Math.PI/2,n.x=e*Math.cos(t),n.y=e*Math.sin(t),n}function u(t,e){return i.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function c(t){var e=t.children,n=e.length,i=0,r=0;while(--n>=0){var o=e[n];o.hierNode.prelim+=i,o.hierNode.modifier+=i,r+=o.hierNode.change,i+=o.hierNode.shift+r}}function h(t,e,n,i){if(e){var r=t,o=t,a=o.parentNode.children[0],s=e,l=r.hierNode.modifier,u=o.hierNode.modifier,c=a.hierNode.modifier,h=s.hierNode.modifier;while(s=d(s),o=f(o),s&&o){r=d(r),a=f(a),r.hierNode.ancestor=t;var v=s.hierNode.prelim+h-o.hierNode.prelim-u+i(s,o);v>0&&(g(p(s,t,n),t,v),u+=v,l+=v),h+=s.hierNode.modifier,u+=o.hierNode.modifier,l+=r.hierNode.modifier,c+=a.hierNode.modifier}s&&!d(r)&&(r.hierNode.thread=s,r.hierNode.modifier+=h-l),o&&!f(a)&&(a.hierNode.thread=o,a.hierNode.modifier+=u-c,n=t)}return n}function d(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function f(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function p(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:n}function g(t,e,n){var i=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=i,e.hierNode.shift+=n,e.hierNode.modifier+=n,e.hierNode.prelim+=n,t.hierNode.change+=i}function v(t,e){return t.parentNode===e.parentNode?1:2}e.init=r,e.firstWalk=o,e.secondWalk=a,e.separation=s,e.radialCoordinate=l,e.getViewRect=u},2306:function(t,e,n){var i=n("6d8b"),r=n("342d"),o=n("41ef"),a=n("1687"),s=n("401b"),l=n("cbe5"),u=n("0cde"),c=n("0da8");e.Image=c;var h=n("e1fc");e.Group=h;var d=n("76a5");e.Text=d;var f=n("d9fc");e.Circle=f;var p=n("4aa2");e.Sector=p;var g=n("4573");e.Ring=g;var v=n("87b1");e.Polygon=v;var m=n("d498");e.Polyline=m;var y=n("c7a2");e.Rect=y;var x=n("cb11");e.Line=x;var _=n("ac0f");e.BezierCurve=_;var b=n("8d32");e.Arc=b;var w=n("d4c6");e.CompoundPath=w;var S=n("48a9");e.LinearGradient=S;var M=n("dded");e.RadialGradient=M;var A=n("9850");e.BoundingRect=A;var T=n("392f");e.IncrementalDisplayable=T;var I=n("9cf9"),C=Math.max,D=Math.min,k={},L=1,P={color:"textFill",textBorderColor:"textStroke",textBorderWidth:"textStrokeWidth"},O="emphasis",E="normal",R=1,N={},z={};function B(t){return l.extend(t)}function V(t,e){return r.extendFromString(t,e)}function F(t,e){z[t]=e}function H(t){if(z.hasOwnProperty(t))return z[t]}function G(t,e,n,i){var o=r.createFromString(t,e);return n&&("center"===i&&(n=W(n,o.getBoundingRect())),q(o,n)),o}function j(t,e,n){var i=new c({style:{image:t,x:e.x,y:e.y,width:e.width,height:e.height},onload:function(t){if("center"===n){var r={width:t.width,height:t.height};i.setStyle(W(e,r))}}});return i}function W(t,e){var n,i=e.width/e.height,r=t.height*i;r<=t.width?n=t.height:(r=t.width,n=r/i);var o=t.x+t.width/2,a=t.y+t.height/2;return{x:o-r/2,y:a-n/2,width:r,height:n}}var U=r.mergePath;function q(t,e){if(t.applyTransform){var n=t.getBoundingRect(),i=n.calculateTransform(e);t.applyTransform(i)}}function $(t){return I.subPixelOptimizeLine(t.shape,t.shape,t.style),t}function Z(t){return I.subPixelOptimizeRect(t.shape,t.shape,t.style),t}var Y=I.subPixelOptimize;function X(t){return null!=t&&"none"!==t}var K=i.createHashMap(),J=0;function Q(t){if("string"!==typeof t)return t;var e=K.get(t);return e||(e=o.lift(t,-.1),J<1e4&&(K.set(t,e),J++)),e}function tt(t){if(t.__hoverStlDirty){t.__hoverStlDirty=!1;var e=t.__hoverStl;if(e){var n=t.__cachedNormalStl={};t.__cachedNormalZ2=t.z2;var i=t.style;for(var r in e)null!=e[r]&&(n[r]=i[r]);n.fill=i.fill,n.stroke=i.stroke}else t.__cachedNormalStl=t.__cachedNormalZ2=null}}function et(t){var e=t.__hoverStl;if(e&&!t.__highlighted){var n=t.__zr,i=t.useHoverLayer&&n&&"canvas"===n.painter.type;if(t.__highlighted=i?"layer":"plain",!(t.isGroup||!n&&t.useHoverLayer)){var r=t,o=t.style;i&&(r=n.addHover(t),o=r.style),Mt(o),i||tt(r),o.extendFrom(e),nt(o,e,"fill"),nt(o,e,"stroke"),St(o),i||(t.dirty(!1),t.z2+=L)}}}function nt(t,e,n){!X(e[n])&&X(t[n])&&(t[n]=Q(t[n]))}function it(t){var e=t.__highlighted;if(e&&(t.__highlighted=!1,!t.isGroup))if("layer"===e)t.__zr&&t.__zr.removeHover(t);else{var n=t.style,i=t.__cachedNormalStl;i&&(Mt(n),t.setStyle(i),St(n));var r=t.__cachedNormalZ2;null!=r&&t.z2-r===L&&(t.z2=r)}}function rt(t,e,n){var i,r=E,o=E;t.__highlighted&&(r=O,i=!0),e(t,n),t.__highlighted&&(o=O,i=!0),t.isGroup&&t.traverse((function(t){!t.isGroup&&e(t,n)})),i&&t.__highDownOnUpdate&&t.__highDownOnUpdate(r,o)}function ot(t,e){e=t.__hoverStl=!1!==e&&(t.hoverStyle||e||{}),t.__hoverStlDirty=!0,t.__highlighted&&(t.__cachedNormalStl=null,it(t),et(t))}function at(t){!ct(this,t)&&!this.__highByOuter&&rt(this,et)}function st(t){!ct(this,t)&&!this.__highByOuter&&rt(this,it)}function lt(t){this.__highByOuter|=1<<(t||0),rt(this,et)}function ut(t){!(this.__highByOuter&=~(1<<(t||0)))&&rt(this,it)}function ct(t,e){return t.__highDownSilentOnTouch&&e.zrByTouch}function ht(t,e){dt(t,!0),rt(t,ot,e)}function dt(t,e){var n=!1===e;if(t.__highDownSilentOnTouch=t.highDownSilentOnTouch,t.__highDownOnUpdate=t.highDownOnUpdate,!n||t.__highDownDispatcher){var i=n?"off":"on";t[i]("mouseover",at)[i]("mouseout",st),t[i]("emphasis",lt)[i]("normal",ut),t.__highByOuter=t.__highByOuter||0,t.__highDownDispatcher=!n}}function ft(t){return!(!t||!t.__highDownDispatcher)}function pt(t){var e=N[t];return null==e&&R<=32&&(e=N[t]=R++),e}function gt(t,e,n,r,o,a,s){o=o||k;var l,u=o.labelFetcher,c=o.labelDataIndex,h=o.labelDimIndex,d=o.labelProp,f=n.getShallow("show"),p=r.getShallow("show");(f||p)&&(u&&(l=u.getFormattedLabel(c,"normal",null,h,d)),null==l&&(l=i.isFunction(o.defaultText)?o.defaultText(c,o):o.defaultText));var g=f?l:null,v=p?i.retrieve2(u?u.getFormattedLabel(c,"emphasis",null,h,d):null,l):null;null==g&&null==v||(mt(t,n,a,o),mt(e,r,s,o,!0)),t.text=g,e.text=v}function vt(t,e,n){var r=t.style;e&&(Mt(r),t.setStyle(e),St(r)),r=t.__hoverStl,n&&r&&(Mt(r),i.extend(r,n),St(r))}function mt(t,e,n,r,o){return xt(t,e,r,o),n&&i.extend(t,n),t}function yt(t,e,n){var i,r={isRectText:!0};!1===n?i=!0:r.autoColor=n,xt(t,e,r,i)}function xt(t,e,n,r){if(n=n||k,n.isRectText){var o;n.getTextPosition?o=n.getTextPosition(e,r):(o=e.getShallow("position")||(r?null:"inside"),"outside"===o&&(o="top")),t.textPosition=o,t.textOffset=e.getShallow("offset");var a=e.getShallow("rotate");null!=a&&(a*=Math.PI/180),t.textRotation=a,t.textDistance=i.retrieve2(e.getShallow("distance"),r?null:5)}var s,l=e.ecModel,u=l&&l.option.textStyle,c=_t(e);if(c)for(var h in s={},c)if(c.hasOwnProperty(h)){var d=e.getModel(["rich",h]);bt(s[h]={},d,u,n,r)}return t.rich=s,bt(t,e,u,n,r,!0),n.forceRich&&!n.textStyle&&(n.textStyle={}),t}function _t(t){var e;while(t&&t!==t.ecModel){var n=(t.option||k).rich;if(n)for(var i in e=e||{},n)n.hasOwnProperty(i)&&(e[i]=1);t=t.parentModel}return e}function bt(t,e,n,r,o,a){n=!o&&n||k,t.textFill=wt(e.getShallow("color"),r)||n.color,t.textStroke=wt(e.getShallow("textBorderColor"),r)||n.textBorderColor,t.textStrokeWidth=i.retrieve2(e.getShallow("textBorderWidth"),n.textBorderWidth),o||(a&&(t.insideRollbackOpt=r,St(t)),null==t.textFill&&(t.textFill=r.autoColor)),t.fontStyle=e.getShallow("fontStyle")||n.fontStyle,t.fontWeight=e.getShallow("fontWeight")||n.fontWeight,t.fontSize=e.getShallow("fontSize")||n.fontSize,t.fontFamily=e.getShallow("fontFamily")||n.fontFamily,t.textAlign=e.getShallow("align"),t.textVerticalAlign=e.getShallow("verticalAlign")||e.getShallow("baseline"),t.textLineHeight=e.getShallow("lineHeight"),t.textWidth=e.getShallow("width"),t.textHeight=e.getShallow("height"),t.textTag=e.getShallow("tag"),a&&r.disableBox||(t.textBackgroundColor=wt(e.getShallow("backgroundColor"),r),t.textPadding=e.getShallow("padding"),t.textBorderColor=wt(e.getShallow("borderColor"),r),t.textBorderWidth=e.getShallow("borderWidth"),t.textBorderRadius=e.getShallow("borderRadius"),t.textBoxShadowColor=e.getShallow("shadowColor"),t.textBoxShadowBlur=e.getShallow("shadowBlur"),t.textBoxShadowOffsetX=e.getShallow("shadowOffsetX"),t.textBoxShadowOffsetY=e.getShallow("shadowOffsetY")),t.textShadowColor=e.getShallow("textShadowColor")||n.textShadowColor,t.textShadowBlur=e.getShallow("textShadowBlur")||n.textShadowBlur,t.textShadowOffsetX=e.getShallow("textShadowOffsetX")||n.textShadowOffsetX,t.textShadowOffsetY=e.getShallow("textShadowOffsetY")||n.textShadowOffsetY}function wt(t,e){return"auto"!==t?t:e&&e.autoColor?e.autoColor:null}function St(t){var e,n=t.textPosition,i=t.insideRollbackOpt;if(i&&null==t.textFill){var r=i.autoColor,o=i.isRectText,a=i.useInsideStyle,s=!1!==a&&(!0===a||o&&n&&"string"===typeof n&&n.indexOf("inside")>=0),l=!s&&null!=r;(s||l)&&(e={textFill:t.textFill,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth}),s&&(t.textFill="#fff",null==t.textStroke&&(t.textStroke=r,null==t.textStrokeWidth&&(t.textStrokeWidth=2))),l&&(t.textFill=r)}t.insideRollback=e}function Mt(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function At(t,e){var n=e&&e.getModel("textStyle");return i.trim([t.fontStyle||n&&n.getShallow("fontStyle")||"",t.fontWeight||n&&n.getShallow("fontWeight")||"",(t.fontSize||n&&n.getShallow("fontSize")||12)+"px",t.fontFamily||n&&n.getShallow("fontFamily")||"sans-serif"].join(" "))}function Tt(t,e,n,i,r,o){"function"===typeof r&&(o=r,r=null);var a=i&&i.isAnimationEnabled();if(a){var s=t?"Update":"",l=i.getShallow("animationDuration"+s),u=i.getShallow("animationEasing"+s),c=i.getShallow("animationDelay"+s);"function"===typeof c&&(c=c(r,i.getAnimationDelayParams?i.getAnimationDelayParams(e,r):null)),"function"===typeof l&&(l=l(r)),l>0?e.animateTo(n,l,c||0,u,o,!!o):(e.stopAnimation(),e.attr(n),o&&o())}else e.stopAnimation(),e.attr(n),o&&o()}function It(t,e,n,i,r){Tt(!0,t,e,n,i,r)}function Ct(t,e,n,i,r){Tt(!1,t,e,n,i,r)}function Dt(t,e){var n=a.identity([]);while(t&&t!==e)a.mul(n,t.getLocalTransform(),n),t=t.parent;return n}function kt(t,e,n){return e&&!i.isArrayLike(e)&&(e=u.getLocalTransform(e)),n&&(e=a.invert([],e)),s.applyTransform([],t,e)}function Lt(t,e,n){var i=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),r=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),o=["left"===t?-i:"right"===t?i:0,"top"===t?-r:"bottom"===t?r:0];return o=kt(o,e,n),Math.abs(o[0])>Math.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function Pt(t,e,n,r){if(t&&e){var o=a(t);e.traverse((function(t){if(!t.isGroup&&t.anid){var e=o[t.anid];if(e){var i=l(t);t.attr(l(e)),It(t,i,n,t.dataIndex)}}}))}function a(t){var e={};return t.traverse((function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)})),e}function l(t){var e={position:s.clone(t.position),rotation:t.rotation};return t.shape&&(e.shape=i.extend({},t.shape)),e}}function Ot(t,e){return i.map(t,(function(t){var n=t[0];n=C(n,e.x),n=D(n,e.x+e.width);var i=t[1];return i=C(i,e.y),i=D(i,e.y+e.height),[n,i]}))}function Et(t,e){var n=C(t.x,e.x),i=D(t.x+t.width,e.x+e.width),r=C(t.y,e.y),o=D(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function Rt(t,e,n){e=i.extend({rectHover:!0},e);var r=e.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),i.defaults(r,n),new c(e)):G(t.replace("path://",""),e,n,"center")}function Nt(t,e,n,i,r){for(var o=0,a=r[r.length-1];o1)return!1;var v=Bt(f,p,c,h)/d;return!(v<0||v>1)}function Bt(t,e,n,i){return t*i-n*e}function Vt(t){return t<=1e-6&&t>=-1e-6}F("circle",f),F("sector",p),F("ring",g),F("polygon",v),F("polyline",m),F("rect",y),F("line",x),F("bezierCurve",_),F("arc",b),e.Z2_EMPHASIS_LIFT=L,e.CACHED_LABEL_STYLE_PROPERTIES=P,e.extendShape=B,e.extendPath=V,e.registerShape=F,e.getShapeClass=H,e.makePath=G,e.makeImage=j,e.mergePath=U,e.resizePath=q,e.subPixelOptimizeLine=$,e.subPixelOptimizeRect=Z,e.subPixelOptimize=Y,e.setElementHoverStyle=ot,e.setHoverStyle=ht,e.setAsHighDownDispatcher=dt,e.isHighDownDispatcher=ft,e.getHighlightDigit=pt,e.setLabelStyle=gt,e.modifyLabelStyle=vt,e.setTextStyle=mt,e.setText=yt,e.getFont=At,e.updateProps=It,e.initProps=Ct,e.getTransform=Dt,e.applyTransform=kt,e.transformDirection=Lt,e.groupTransition=Pt,e.clipPointsByRect=Ot,e.clipRectByRect=Et,e.createIcon=Rt,e.linePolygonIntersect=Nt,e.lineLineIntersect=zt},"230e":function(t,e,n){var i=n("d3f4"),r=n("7726").document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},2325:function(t,e,n){var i=n("6d8b"),r=n("607d"),o=n("2306"),a=n("88b3"),s=n("7dcf"),l=n("3842"),u=n("f934"),c=n("ef6a"),h=o.Rect,d=l.linearMap,f=l.asc,p=i.bind,g=i.each,v=7,m=1,y=30,x="horizontal",_="vertical",b=5,w=["line","bar","candlestick","scatter"],S=s.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,n,i){S.superApply(this,"render",arguments),a.createOrUpdate(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),!1!==this.dataZoomModel.get("show")?(i&&"dataZoom"===i.type&&i.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){S.superApply(this,"remove",arguments),a.clear(this,"_dispatchZoomAction")},dispose:function(){S.superApply(this,"dispose",arguments),a.clear(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new o.Group;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,n=this._findCoordRect(),r={width:e.getWidth(),height:e.getHeight()},o=this._orient===x?{right:r.width-n.x-n.width,top:r.height-y-v,width:n.width,height:y}:{right:v,top:n.y,width:y,height:n.height},a=u.getLayoutParams(t.option);i.each(["right","top","width","height"],(function(t){"ph"===a[t]&&(a[t]=o[t])}));var s=u.getLayoutRect(a,r,t.padding);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===_&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.barGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==x||r?n===x&&r?{scale:a?[-1,1]:[-1,-1]}:n!==_||r?{scale:a?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:a?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:a?[1,1]:[1,-1]});var s=t.getBoundingRect([o]);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,n=this._displayables.barGroup;n.add(new h({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40})),n.add(new h({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:i.bind(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,n=t.series,r=n.getRawData(),a=n.getShadowDim?n.getShadowDim():t.otherDim;if(null!=a){var s=r.getDataExtent(a),l=.3*(s[1]-s[0]);s=[s[0]-l,s[1]+l];var u,c=[0,e[1]],h=[0,e[0]],f=[[e[0],0],[0,0]],p=[],g=h[1]/(r.count()-1),v=0,m=Math.round(r.count()/e[0]);r.each([a],(function(t,e){if(m>0&&e%m)v+=g;else{var n=null==t||isNaN(t)||""===t,i=n?0:d(t,s,c,!0);n&&!u&&e?(f.push([f[f.length-1][0],0]),p.push([p[p.length-1][0],0])):!n&&u&&(f.push([v,0]),p.push([v,0])),f.push([v,i]),p.push([v,i]),v+=g,u=n}}));var y=this.dataZoomModel;this._displayables.barGroup.add(new o.Polygon({shape:{points:f},style:i.defaults({fill:y.get("dataBackgroundColor")},y.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new o.Polyline({shape:{points:p},style:y.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,r=this.ecModel;return t.eachTargetAxis((function(o,a){var s=t.getAxisProxy(o.name,a).getTargetSeriesModels();i.each(s,(function(t){if(!n&&!(!0!==e&&i.indexOf(w,t.get("type"))<0)){var s,l=r.getComponent(o.axis,a).axis,u=M(o.name),c=t.coordinateSystem;null!=u&&c.getOtherAxis&&(s=c.getOtherAxis(l).inverse),u=t.getData().mapDimension(u),n={thisAxis:l,series:t,thisDim:o.name,otherDim:u,otherAxisInverse:s}}}),this)}),this),n}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],n=t.handleLabels=[],i=this._displayables.barGroup,r=this._size,a=this.dataZoomModel;i.add(t.filler=new h({draggable:!0,cursor:A(this._orient),drift:p(this._onDragMove,this,"all"),ondragstart:p(this._showDataInfo,this,!0),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),i.add(new h({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:r[0],height:r[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:m,fill:"rgba(0,0,0,0)"}})),g([0,1],(function(t){var r=o.createIcon(a.get("handleIcon"),{cursor:A(this._orient),draggable:!0,drift:p(this._onDragMove,this,t),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),s=r.getBoundingRect();this._handleHeight=l.parsePercent(a.get("handleSize"),this._size[1]),this._handleWidth=s.width/s.height*this._handleHeight,r.setStyle(a.getModel("handleStyle").getItemStyle());var u=a.get("handleColor");null!=u&&(r.style.fill=u),i.add(e[t]=r);var c=a.textStyleModel;this.group.add(n[t]=new o.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:c.getTextColor(),textFont:c.getFont()},z2:10}))}),this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[d(t[0],[0,100],e,!0),d(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];c(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?d(o.minSpan,a,r,!0):null,null!=o.maxSpan?d(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=f([d(i[0],r,a,!0),d(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(t){var e=this._displayables,n=this._handleEnds,i=f(n.slice()),r=this._size;g([0,1],(function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scale:[o/2,o/2],position:[n[t],r[1]/2-o/2]})}),this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){var e=this.dataZoomModel,n=this._displayables,i=n.handleLabels,r=this._orient,a=["",""];if(e.get("showDetail")){var s=e.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,u=this._range,c=t?s.calculateDataWindow({start:u[0],end:u[1]}).valueWindow:s.getDataValueWindow();a=[this._formatLabel(c[0],l),this._formatLabel(c[1],l)]}}var h=f(this._handleEnds.slice());function d(t){var e=o.getTransform(n.handles[t].parent,this.group),s=o.transformDirection(0===t?"right":"left",e),l=this._handleWidth/2+b,u=o.applyTransform([h[t]+(0===t?-l:l),this._size[1]/2],e);i[t].setStyle({x:u[0],y:u[1],textVerticalAlign:r===x?"middle":s,textAlign:r===x?s:"center",text:a[t]})}d.call(this,0),d.call(this,1)},_formatLabel:function(t,e){var n=this.dataZoomModel,r=n.get("labelFormatter"),o=n.get("labelPrecision");null!=o&&"auto"!==o||(o=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(o,20));return i.isFunction(r)?r(t,a):i.isString(r)?r.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,n,i){this._dragging=!0,r.stop(i.event);var a=this._displayables.barGroup.getLocalTransform(),s=o.applyTransform([e,n],a,!0),l=this._updateInterval(t,s[0]),u=this.dataZoomModel.get("realtime");this._updateView(!u),l&&u&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1);var t=this.dataZoomModel.get("realtime");!t&&this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,n=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(n[0]<0||n[0]>e[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&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 t;if(g(this.getTargetCoordInfo(),(function(e){if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}})),!t){var e=this.api.getWidth(),n=this.api.getHeight();t={x:.2*e,y:.2*n,width:.6*e,height:.6*n}}return t}});function M(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}function A(t){return"vertical"===t?"ns-resize":"ew-resize"}var T=S;t.exports=T},"237f":function(t,e,n){var i=n("6d8b"),r=n("6179"),o=n("7368"),a=n("31d9"),s=n("b1d4"),l=n("2039"),u=n("3301");function c(t,e,n,c,h){for(var d=new o(c),f=0;f "+x)),v++)}var _,b=n.get("coordinateSystem");if("cartesian2d"===b||"polar"===b)_=u(t,n);else{var w=l.get(b),S=w&&"view"!==w.type&&w.dimensions||[];i.indexOf(S,"value")<0&&S.concat(["value"]);var M=s(t,{coordDimensions:S});_=new r(M,n),_.initData(t)}var A=new r(["value"],n);return A.initData(g,p),h&&h(_,A),a({mainData:_,struct:d,structAttr:"graph",datas:{node:_,edge:A},datasAttr:{node:"data",edge:"edgeData"}}),d.update(),d}t.exports=c},"23c6":function(t,e,n){var i=n("2d95"),r=n("2b4c")("toStringTag"),o="Arguments"==i(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=a(e=Object(t),r))?n:o?i(e):"Object"==(s=i(e))&&"function"==typeof e.callee?"Arguments":s}},"23e0":function(t,e,n){var i=n("6d8b"),r=n("7887"),o=n("89e3"),a=n("3842"),s=n("697e"),l=s.getScaleExtent,u=s.niceScaleExtent,c=n("2039"),h=n("8c2a");function d(t,e,n){this._model=t,this.dimensions=[],this._indicatorAxes=i.map(t.getIndicatorModels(),(function(t,e){var n="indicator_"+e,i=new r(n,"log"===t.get("axisType")?new h:new o);return i.name=t.get("name"),i.model=t,t.axis=i,this.dimensions.push(n),i}),this),this.resize(t,n),this.cx,this.cy,this.r,this.r0,this.startAngle}d.prototype.getIndicatorAxes=function(){return this._indicatorAxes},d.prototype.dataToPoint=function(t,e){var n=this._indicatorAxes[e];return this.coordToPoint(n.dataToCoord(t),e)},d.prototype.coordToPoint=function(t,e){var n=this._indicatorAxes[e],i=n.angle,r=this.cx+t*Math.cos(i),o=this.cy-t*Math.sin(i);return[r,o]},d.prototype.pointToData=function(t){var e=t[0]-this.cx,n=t[1]-this.cy,i=Math.sqrt(e*e+n*n);e/=i,n/=i;for(var r,o=Math.atan2(-n,e),a=1/0,s=-1,l=0;ln[0]&&isFinite(g)&&isFinite(n[0]))}else{var f=r.getTicks().length-1;f>o&&(d=s(d));var p=Math.ceil(n[1]/d)*d,g=a.round(p-d*o);r.setExtent(g,p),r.setInterval(d)}}))},d.dimensions=[],d.create=function(t,e){var n=[];return t.eachComponent("radar",(function(i){var r=new d(i,t,e);n.push(r),i.coordinateSystem=r})),t.eachSeriesByType("radar",(function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=n[t.get("radarIndex")||0])})),n},c.register("radar",d);var f=d;t.exports=f},"23ee":function(t,e,n){var i=n("3eba");n("879e"),n("9704"),n("d747");var r=n("675a"),o=n("7f96"),a=n("2943"),s=n("de6e"),l=n("d357"),u=n("adda"),c=n("5866"),h=n("7b0c");i.registerProcessor(r),i.registerVisual(o("graph","circle",null)),i.registerVisual(a),i.registerVisual(s),i.registerLayout(l),i.registerLayout(i.PRIORITY.VISUAL.POST_CHART_LAYOUT,u),i.registerLayout(c),i.registerCoordinateSystem("graphView",{create:h})},"241e":function(t,e,n){var i=n("25eb");t.exports=function(t){return Object(i(t))}},2444:function(t,e,n){"use strict";(function(e){var i=n("c532"),r=n("c8af"),o=n("387f"),a={"Content-Type":"application/x-www-form-urlencoded"};function s(t,e){!i.isUndefined(t)&&i.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}function l(){var t;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof e&&"[object process]"===Object.prototype.toString.call(e))&&(t=n("b50d")),t}function u(t,e,n){if(i.isString(t))try{return(e||JSON.parse)(t),i.trim(t)}catch(r){if("SyntaxError"!==r.name)throw r}return(n||JSON.stringify)(t)}var c={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:l(),transformRequest:[function(t,e){return r(e,"Accept"),r(e,"Content-Type"),i.isFormData(t)||i.isArrayBuffer(t)||i.isBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(s(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):i.isObject(t)||e&&"application/json"===e["Content-Type"]?(s(e,"application/json"),u(t)):t}],transformResponse:[function(t){var e=this.transitional||c.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,a=!n&&"json"===this.responseType;if(a||r&&i.isString(t)&&t.length)try{return JSON.parse(t)}catch(s){if(a){if("SyntaxError"===s.name)throw o(s,this,"E_JSON_PARSE");throw s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(t){c.headers[t]={}})),i.forEach(["post","put","patch"],(function(t){c.headers[t]=i.merge(a)})),t.exports=c}).call(this,n("4362"))},2449:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("22d1"),s=n("e0d3"),l=n("eda2"),u=n("38a2"),c=l.addCommas,h=l.encodeHTML;function d(t){s.defaultEmphasis(t,"label",["show"])}var f=r.extendComponentModel({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,n){this.mergeDefaultAndTheme(t,n),this._mergeOption(t,n,!1,!0)},isAnimationEnabled:function(){if(a.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e){this._mergeOption(t,e,!1,!1)},_mergeOption:function(t,e,n,i){var r=this.constructor,a=this.mainType+"Model";n||e.eachSeries((function(t){var n=t.get(this.mainType,!0),s=t[a];n&&n.data?(s?s._mergeOption(n,e,!0):(i&&d(n),o.each(n.data,(function(t){t instanceof Array?(d(t[0]),d(t[1])):d(t)})),s=new r(n,this,e),o.extend(s,{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),t[a]=s):t[a]=null}),this)},formatTooltip:function(t,e,n,i){var r=this.getData(),a=this.getRawValue(t),s=o.isArray(a)?o.map(a,c).join(", "):c(a),l=r.getName(t),u=h(this.name),d="html"===i?"
":"\n";return(null!=a||l)&&(u+=d),l&&(u+=h(l),null!=a&&(u+=" : ")),null!=a&&(u+=h(s)),u},getData:function(){return this._data},setData:function(t){this._data=t}});o.mixin(f,u);var p=f;t.exports=p},"24b9":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("f934")),o=n("3842"),a=o.parsePercent,s=o.linearMap;function l(t,e){return r.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function u(t,e){for(var n=t.mapDimension("value"),i=t.mapArray(n,(function(t){return t})),r=[],o="ascending"===e,a=0,s=t.count();ao)a(n[o++]);t._c=[],t._n=!1,e&&!t._h&&R(t)}))}},R=function(t){m.call(l,(function(){var e,n,i,r=t._v,o=N(t);if(o&&(e=_((function(){D?A.emit("unhandledRejection",r,t):(n=l.onunhandledrejection)?n({promise:t,reason:r}):(i=l.console)&&i.error&&i.error("Unhandled promise rejection",r)})),t._h=D||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},z=function(t){m.call(l,(function(){var e;D?A.emit("rejectionHandled",t):(e=l.onrejectionhandled)&&e({promise:t,reason:t._v})}))},B=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),E(e,!0))},V=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw M("Promise can't be resolved itself");(e=O(t))?y((function(){var i={_w:n,_d:!1};try{e.call(t,u(V,i,1),u(B,i,1))}catch(r){B.call(i,r)}})):(n._v=t,n._s=1,E(n,!1))}catch(i){B.call({_w:n,_d:!1},i)}}};P||(C=function(t){p(this,C,S,"_h"),f(t),i.call(this);try{t(u(V,this,1),u(B,this,1))}catch(e){B.call(this,e)}},i=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=n("5c95")(C.prototype,{then:function(t,e){var n=L(v(this,C));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=D?A.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&E(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new i;this.promise=t,this.resolve=u(V,t,1),this.reject=u(B,t,1)},x.f=L=function(t){return t===C||t===a?new o(t):r(t)}),h(h.G+h.W+h.F*!P,{Promise:C}),n("45f2")(C,S),n("4c95")(S),a=n("584a")[S],h(h.S+h.F*!P,S,{reject:function(t){var e=L(this),n=e.reject;return n(t),e.promise}}),h(h.S+h.F*(s||!P),S,{resolve:function(t){return w(s&&this===a?C:this,t)}}),h(h.S+h.F*!(P&&n("4ee1")((function(t){C.all(t)["catch"](k)}))),S,{all:function(t){var e=this,n=L(e),i=n.resolve,r=n.reject,o=_((function(){var n=[],o=0,a=1;g(t,!1,(function(t){var s=o++,l=!1;n.push(void 0),a++,e.resolve(t).then((function(t){l||(l=!0,n[s]=t,--a||i(n))}),r)})),--a||i(n)}));return o.e&&r(o.v),n.promise},race:function(t){var e=this,n=L(e),i=n.reject,r=_((function(){g(t,!1,(function(t){e.resolve(t).then(n.resolve,i)}))}));return r.e&&i(r.v),n.promise}})},"255c":function(t,e,n){var i=n("3eba"),r=n("d4d1"),o=r.Polygon,a=n("2306"),s=n("6d8b"),l=s.bind,u=s.extend,c=n("80f0"),h=i.extendChartView({type:"themeRiver",init:function(){this._layers=[]},render:function(t,e,n){var i=t.getData(),r=this.group,s=t.getLayerSeries(),h=i.getLayout("layoutInfo"),f=h.rect,p=h.boundaryGap;function g(t){return t.name}r.attr("position",[0,f.y+p[0]]);var v=new c(this._layersSeries||[],s,g,g),m={};function y(e,n,l){var c=this._layers;if("remove"!==e){for(var h,f,p,g=[],v=[],y=s[n].indices,x=0;x=0||r&&i.indexOf(r,s)<0)){var l=e.getShallow(s);null!=l&&(o[t[a][0]]=l)}}return o}}t.exports=r},2877:function(t,e,n){"use strict";function i(t,e,n,i,r,o,a,s){var l,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(t,e){return l.call(e),c(t,e)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:t,options:u}}n.d(e,"a",(function(){return i}))},"28a5":function(t,e,n){"use strict";var i=n("aae3"),r=n("cb7c"),o=n("ebd6"),a=n("0390"),s=n("9def"),l=n("5f1b"),u=n("520a"),c=n("79e5"),h=Math.min,d=[].push,f="split",p="length",g="lastIndex",v=4294967295,m=!c((function(){RegExp(v,"y")}));n("214f")("split",2,(function(t,e,n,c){var y;return y="c"=="abbc"[f](/(b)*/)[1]||4!="test"[f](/(?:)/,-1)[p]||2!="ab"[f](/(?:ab)*/)[p]||4!="."[f](/(.?)(.?)/)[p]||"."[f](/()()/)[p]>1||""[f](/.?/)[p]?function(t,e){var r=String(this);if(void 0===t&&0===e)return[];if(!i(t))return n.call(r,t,e);var o,a,s,l=[],c=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,f=void 0===e?v:e>>>0,m=new RegExp(t.source,c+"g");while(o=u.call(m,r)){if(a=m[g],a>h&&(l.push(r.slice(h,o.index)),o[p]>1&&o.index=f))break;m[g]===o.index&&m[g]++}return h===r[p]?!s&&m.test("")||l.push(""):l.push(r.slice(h)),l[p]>f?l.slice(0,f):l}:"0"[f](void 0,0)[p]?function(t,e){return void 0===t&&0===e?[]:n.call(this,t,e)}:n,[function(n,i){var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r,i):y.call(String(r),n,i)},function(t,e){var i=c(y,t,this,e,y!==n);if(i.done)return i.value;var u=r(t),d=String(this),f=o(u,RegExp),p=u.unicode,g=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(m?"y":"g"),x=new f(m?u:"^(?:"+u.source+")",g),_=void 0===e?v:e>>>0;if(0===_)return[];if(0===d.length)return null===l(x,d)?[d]:[];var b=0,w=0,S=[];while(w";e.style.display="none",n("fab2e").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(r+"script"+a+"document.F=Object"+r+"/script"+a),t.close(),u=t.F;while(i--)delete u[l][o[i]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s[l]=i(t),n=new s,s[l]=null,n[a]=t):n=u(),void 0===e?n:r(n,e)}},"2b0e":function(t,e,n){"use strict";n.r(e),function(t){ -/*! - * Vue.js v2.6.10 - * (c) 2014-2019 Evan You - * Released under the MIT License. - */ -var n=Object.freeze({});function i(t){return void 0===t||null===t}function r(t){return void 0!==t&&null!==t}function o(t){return!0===t}function a(t){return!1===t}function s(t){return"string"===typeof t||"number"===typeof t||"symbol"===typeof t||"boolean"===typeof t}function l(t){return null!==t&&"object"===typeof t}var u=Object.prototype.toString;function c(t){return"[object Object]"===u.call(t)}function h(t){return"[object RegExp]"===u.call(t)}function d(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return r(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function p(t){return null==t?"":Array.isArray(t)||c(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),i=t.split(","),r=0;r-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function _(t,e){return x.call(t,e)}function b(t){var e=Object.create(null);return function(n){var i=e[n];return i||(e[n]=t(n))}}var w=/-(\w)/g,S=b((function(t){return t.replace(w,(function(t,e){return e?e.toUpperCase():""}))})),M=b((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),A=/\B([A-Z])/g,T=b((function(t){return t.replace(A,"-$1").toLowerCase()}));function I(t,e){function n(n){var i=arguments.length;return i?i>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function C(t,e){return t.bind(e)}var D=Function.prototype.bind?C:I;function k(t,e){e=e||0;var n=t.length-e,i=new Array(n);while(n--)i[n]=t[n+e];return i}function L(t,e){for(var n in e)t[n]=e[n];return t}function P(t){for(var e={},n=0;n0,nt=Q&&Q.indexOf("edge/")>0,it=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===J),rt=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/)),ot={}.watch,at=!1;if(X)try{var st={};Object.defineProperty(st,"passive",{get:function(){at=!0}}),window.addEventListener("test-passive",null,st)}catch(Sa){}var lt=function(){return void 0===Z&&(Z=!X&&!K&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),Z},ut=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"===typeof t&&/native code/.test(t.toString())}var ht,dt="undefined"!==typeof Symbol&&ct(Symbol)&&"undefined"!==typeof Reflect&&ct(Reflect.ownKeys);ht="undefined"!==typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=O,pt=0,gt=function(){this.id=pt++,this.subs=[]};gt.prototype.addSub=function(t){this.subs.push(t)},gt.prototype.removeSub=function(t){y(this.subs,t)},gt.prototype.depend=function(){gt.target&>.target.addDep(this)},gt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(o&&!_(r,"default"))a=!1;else if(""===a||a===T(t)){var l=te(String,r.type);(l<0||s0&&(a=Ie(a,(e||"")+"_"+n),Te(a[0])&&Te(u)&&(c[l]=wt(u.text+a[0].text),a.shift()),c.push.apply(c,a)):s(a)?Te(u)?c[l]=wt(u.text+a):""!==a&&c.push(wt(a)):Te(a)&&Te(u)?c[l]=wt(u.text+a.text):(o(t._isVList)&&r(a.tag)&&i(a.key)&&r(e)&&(a.key="__vlist"+e+"_"+n+"__"),c.push(a)));return c}function Ce(t){var e=t.$options.provide;e&&(t._provided="function"===typeof e?e.call(t):e)}function De(t){var e=ke(t.$options.inject,t);e&&(Dt(!1),Object.keys(e).forEach((function(n){Et(t,n,e[n])})),Dt(!0))}function ke(t,e){if(t){for(var n=Object.create(null),i=dt?Reflect.ownKeys(t):Object.keys(t),r=0;r0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&i&&i!==n&&s===i.$key&&!o&&!i.$hasNormal)return i;for(var l in r={},t)t[l]&&"$"!==l[0]&&(r[l]=Ee(e,l,t[l]))}else r={};for(var u in e)u in r||(r[u]=Re(e,u));return t&&Object.isExtensible(t)&&(t._normalized=r),U(r,"$stable",a),U(r,"$key",s),U(r,"$hasNormal",o),r}function Ee(t,e,n){var i=function(){var t=arguments.length?n.apply(null,arguments):n({});return t=t&&"object"===typeof t&&!Array.isArray(t)?[t]:Ae(t),t&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:i,enumerable:!0,configurable:!0}),i}function Re(t,e){return function(){return t[e]}}function Ne(t,e){var n,i,o,a,s;if(Array.isArray(t)||"string"===typeof t)for(n=new Array(t.length),i=0,o=t.length;i1?k(n):n;for(var i=k(arguments,1),r='event handler for "'+t+'"',o=0,a=n.length;odocument.createEvent("Event").timeStamp&&(Zn=function(){return Yn.now()})}function Xn(){var t,e;for($n=Zn(),Wn=!0,Fn.sort((function(t,e){return t.id-e.id})),Un=0;UnUn&&Fn[n].id>t.id)n--;Fn.splice(n+1,0,t)}else Fn.push(t);jn||(jn=!0,pe(Xn))}}var ei=0,ni=function(t,e,n,i,r){this.vm=t,r&&(t._watcher=this),t._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ei,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ht,this.newDepIds=new ht,this.expression="","function"===typeof e?this.getter=e:(this.getter=$(e),this.getter||(this.getter=O)),this.value=this.lazy?void 0:this.get()};ni.prototype.get=function(){var t;mt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(Sa){if(!this.user)throw Sa;ee(Sa,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&ve(t),yt(),this.cleanupDeps()}return t},ni.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},ni.prototype.cleanupDeps=function(){var t=this.deps.length;while(t--){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ni.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():ti(this)},ni.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(Sa){ee(Sa,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},ni.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ni.prototype.depend=function(){var t=this.deps.length;while(t--)this.deps[t].depend()},ni.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);var t=this.deps.length;while(t--)this.deps[t].removeSub(this);this.active=!1}};var ii={enumerable:!0,configurable:!0,get:O,set:O};function ri(t,e,n){ii.get=function(){return this[e][n]},ii.set=function(t){this[e][n]=t},Object.defineProperty(t,n,ii)}function oi(t){t._watchers=[];var e=t.$options;e.props&&ai(t,e.props),e.methods&&pi(t,e.methods),e.data?si(t):Ot(t._data={},!0),e.computed&&ci(t,e.computed),e.watch&&e.watch!==ot&&gi(t,e.watch)}function ai(t,e){var n=t.$options.propsData||{},i=t._props={},r=t.$options._propKeys=[],o=!t.$parent;o||Dt(!1);var a=function(o){r.push(o);var a=Xt(o,e,n,t);Et(i,o,a),o in t||ri(t,"_props",o)};for(var s in e)a(s);Dt(!0)}function si(t){var e=t.$options.data;e=t._data="function"===typeof e?li(e,t):e||{},c(e)||(e={});var n=Object.keys(e),i=t.$options.props,r=(t.$options.methods,n.length);while(r--){var o=n[r];0,i&&_(i,o)||W(o)||ri(t,"_data",o)}Ot(e,!0)}function li(t,e){mt();try{return t.call(e,e)}catch(Sa){return ee(Sa,e,"data()"),{}}finally{yt()}}var ui={lazy:!0};function ci(t,e){var n=t._computedWatchers=Object.create(null),i=lt();for(var r in e){var o=e[r],a="function"===typeof o?o:o.get;0,i||(n[r]=new ni(t,a||O,O,ui)),r in t||hi(t,r,o)}}function hi(t,e,n){var i=!lt();"function"===typeof n?(ii.get=i?di(e):fi(n),ii.set=O):(ii.get=n.get?i&&!1!==n.cache?di(e):fi(n.get):O,ii.set=n.set||O),Object.defineProperty(t,e,ii)}function di(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),gt.target&&e.depend(),e.value}}function fi(t){return function(){return t.call(this,this)}}function pi(t,e){t.$options.props;for(var n in e)t[n]="function"!==typeof e[n]?O:D(e[n],t)}function gi(t,e){for(var n in e){var i=e[n];if(Array.isArray(i))for(var r=0;r-1)return this;var n=k(arguments,1);return n.unshift(this),"function"===typeof t.install?t.install.apply(t,n):"function"===typeof t&&t.apply(null,n),e.push(t),this}}function Ai(t){t.mixin=function(t){return this.options=Zt(this.options,t),this}}function Ti(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,i=n.cid,r=t._Ctor||(t._Ctor={});if(r[i])return r[i];var o=t.name||n.options.name;var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Zt(n.options,t),a["super"]=n,a.options.props&&Ii(a),a.options.computed&&Ci(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,F.forEach((function(t){a[t]=n[t]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=L({},a.options),r[i]=a,a}}function Ii(t){var e=t.options.props;for(var n in e)ri(t.prototype,"_props",n)}function Ci(t){var e=t.options.computed;for(var n in e)hi(t.prototype,n,e[n])}function Di(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&c(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"===typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function ki(t){return t&&(t.Ctor.options.name||t.tag)}function Li(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function Pi(t,e){var n=t.cache,i=t.keys,r=t._vnode;for(var o in n){var a=n[o];if(a){var s=ki(a.componentOptions);s&&!e(s)&&Oi(n,o,i,r)}}}function Oi(t,e,n,i){var r=t[e];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),t[e]=null,y(n,e)}xi(Si),mi(Si),Dn(Si),On(Si),yn(Si);var Ei=[String,RegExp,Array],Ri={name:"keep-alive",abstract:!0,props:{include:Ei,exclude:Ei,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Oi(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",(function(e){Pi(t,(function(t){return Li(e,t)}))})),this.$watch("exclude",(function(e){Pi(t,(function(t){return!Li(e,t)}))}))},render:function(){var t=this.$slots.default,e=Sn(t),n=e&&e.componentOptions;if(n){var i=ki(n),r=this,o=r.include,a=r.exclude;if(o&&(!i||!Li(o,i))||a&&i&&Li(a,i))return e;var s=this,l=s.cache,u=s.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;l[c]?(e.componentInstance=l[c].componentInstance,y(u,c),u.push(c)):(l[c]=e,u.push(c),this.max&&u.length>parseInt(this.max)&&Oi(l,u[0],u,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Ni={KeepAlive:Ri};function zi(t){var e={get:function(){return G}};Object.defineProperty(t,"config",e),t.util={warn:ft,extend:L,mergeOptions:Zt,defineReactive:Et},t.set=Rt,t.delete=Nt,t.nextTick=pe,t.observable=function(t){return Ot(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,L(t.options.components,Ni),Mi(t),Ai(t),Ti(t),Di(t)}zi(Si),Object.defineProperty(Si.prototype,"$isServer",{get:lt}),Object.defineProperty(Si.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Si,"FunctionalRenderContext",{value:Ke}),Si.version="2.6.10";var Bi=v("style,class"),Vi=v("input,textarea,option,select,progress"),Fi=function(t,e,n){return"value"===n&&Vi(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Hi=v("contenteditable,draggable,spellcheck"),Gi=v("events,caret,typing,plaintext-only"),ji=function(t,e){return Zi(e)||"false"===e?"false":"contenteditable"===t&&Gi(e)?e:"true"},Wi=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Ui="http://www.w3.org/1999/xlink",qi=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},$i=function(t){return qi(t)?t.slice(6,t.length):""},Zi=function(t){return null==t||!1===t};function Yi(t){var e=t.data,n=t,i=t;while(r(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(e=Xi(i.data,e));while(r(n=n.parent))n&&n.data&&(e=Xi(e,n.data));return Ki(e.staticClass,e.class)}function Xi(t,e){return{staticClass:Ji(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Ki(t,e){return r(t)||r(e)?Ji(t,Qi(e)):""}function Ji(t,e){return t?e?t+" "+e:t:e||""}function Qi(t){return Array.isArray(t)?tr(t):l(t)?er(t):"string"===typeof t?t:""}function tr(t){for(var e,n="",i=0,o=t.length;i-1?sr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:sr[t]=/HTMLUnknownElement/.test(e.toString())}var ur=v("text,number,password,search,email,tel,url");function cr(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function hr(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function dr(t,e){return document.createElementNS(nr[t],e)}function fr(t){return document.createTextNode(t)}function pr(t){return document.createComment(t)}function gr(t,e,n){t.insertBefore(e,n)}function vr(t,e){t.removeChild(e)}function mr(t,e){t.appendChild(e)}function yr(t){return t.parentNode}function xr(t){return t.nextSibling}function _r(t){return t.tagName}function br(t,e){t.textContent=e}function wr(t,e){t.setAttribute(e,"")}var Sr=Object.freeze({createElement:hr,createElementNS:dr,createTextNode:fr,createComment:pr,insertBefore:gr,removeChild:vr,appendChild:mr,parentNode:yr,nextSibling:xr,tagName:_r,setTextContent:br,setStyleScope:wr}),Mr={create:function(t,e){Ar(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Ar(t,!0),Ar(e))},destroy:function(t){Ar(t,!0)}};function Ar(t,e){var n=t.data.ref;if(r(n)){var i=t.context,o=t.componentInstance||t.elm,a=i.$refs;e?Array.isArray(a[n])?y(a[n],o):a[n]===o&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(o)<0&&a[n].push(o):a[n]=[o]:a[n]=o}}var Tr=new xt("",{},[]),Ir=["create","activate","update","remove","destroy"];function Cr(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&Dr(t,e)||o(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&i(e.asyncFactory.error))}function Dr(t,e){if("input"!==t.tag)return!0;var n,i=r(n=t.data)&&r(n=n.attrs)&&n.type,o=r(n=e.data)&&r(n=n.attrs)&&n.type;return i===o||ur(i)&&ur(o)}function kr(t,e,n){var i,o,a={};for(i=e;i<=n;++i)o=t[i].key,r(o)&&(a[o]=i);return a}function Lr(t){var e,n,a={},l=t.modules,u=t.nodeOps;for(e=0;eg?(h=i(n[y+1])?null:n[y+1].elm,S(t,h,n,p,y,o)):p>y&&A(t,e,d,g)}function C(t,e,n,i){for(var o=n;o-1?Gr(t,e,n):Wi(e)?Zi(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Hi(e)?t.setAttribute(e,ji(e,n)):qi(e)?Zi(n)?t.removeAttributeNS(Ui,$i(e)):t.setAttributeNS(Ui,e,n):Gr(t,e,n)}function Gr(t,e,n){if(Zi(n))t.removeAttribute(e);else{if(tt&&!et&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var i=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",i)};t.addEventListener("input",i),t.__ieph=!0}t.setAttribute(e,n)}}var jr={create:Fr,update:Fr};function Wr(t,e){var n=e.elm,o=e.data,a=t.data;if(!(i(o.staticClass)&&i(o.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Yi(e),l=n._transitionClasses;r(l)&&(s=Ji(s,Qi(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ur,qr={create:Wr,update:Wr},$r="__r",Zr="__c";function Yr(t){if(r(t[$r])){var e=tt?"change":"input";t[e]=[].concat(t[$r],t[e]||[]),delete t[$r]}r(t[Zr])&&(t.change=[].concat(t[Zr],t.change||[]),delete t[Zr])}function Xr(t,e,n){var i=Ur;return function r(){var o=e.apply(null,arguments);null!==o&&Qr(t,r,n,i)}}var Kr=ae&&!(rt&&Number(rt[1])<=53);function Jr(t,e,n,i){if(Kr){var r=$n,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=r||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Ur.addEventListener(t,e,at?{capture:n,passive:i}:n)}function Qr(t,e,n,i){(i||Ur).removeEventListener(t,e._wrapper||e,n)}function to(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ur=e.elm,Yr(n),_e(n,r,Jr,Qr,Xr,e.context),Ur=void 0}}var eo,no={create:to,update:to};function io(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,o,a=e.elm,s=t.data.domProps||{},l=e.data.domProps||{};for(n in r(l.__ob__)&&(l=e.data.domProps=L({},l)),s)n in l||(a[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),o===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=o;var u=i(o)?"":String(o);ro(a,u)&&(a.value=u)}else if("innerHTML"===n&&rr(a.tagName)&&i(a.innerHTML)){eo=eo||document.createElement("div"),eo.innerHTML=""+o+"";var c=eo.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(c.firstChild)a.appendChild(c.firstChild)}else if(o!==s[n])try{a[n]=o}catch(Sa){}}}}function ro(t,e){return!t.composing&&("OPTION"===t.tagName||oo(t,e)||ao(t,e))}function oo(t,e){var n=!0;try{n=document.activeElement!==t}catch(Sa){}return n&&t.value!==e}function ao(t,e){var n=t.value,i=t._vModifiers;if(r(i)){if(i.number)return g(n)!==g(e);if(i.trim)return n.trim()!==e.trim()}return n!==e}var so={create:io,update:io},lo=b((function(t){var e={},n=/;(?![^(]*\))/g,i=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(i);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function uo(t){var e=co(t.style);return t.staticStyle?L(t.staticStyle,e):e}function co(t){return Array.isArray(t)?P(t):"string"===typeof t?lo(t):t}function ho(t,e){var n,i={};if(e){var r=t;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=uo(r.data))&&L(i,n)}(n=uo(t.data))&&L(i,n);var o=t;while(o=o.parent)o.data&&(n=uo(o.data))&&L(i,n);return i}var fo,po=/^--/,go=/\s*!important$/,vo=function(t,e,n){if(po.test(e))t.style.setProperty(e,n);else if(go.test(n))t.style.setProperty(T(e),n.replace(go,""),"important");else{var i=yo(e);if(Array.isArray(n))for(var r=0,o=n.length;r-1?e.split(bo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function So(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(bo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" "+(t.getAttribute("class")||"")+" ",i=" "+e+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Mo(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&L(e,Ao(t.name||"v")),L(e,t),e}return"string"===typeof t?Ao(t):void 0}}var Ao=b((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),To=X&&!et,Io="transition",Co="animation",Do="transition",ko="transitionend",Lo="animation",Po="animationend";To&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Do="WebkitTransition",ko="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Lo="WebkitAnimation",Po="webkitAnimationEnd"));var Oo=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Eo(t){Oo((function(){Oo(t)}))}function Ro(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),wo(t,e))}function No(t,e){t._transitionClasses&&y(t._transitionClasses,e),So(t,e)}function zo(t,e,n){var i=Vo(t,e),r=i.type,o=i.timeout,a=i.propCount;if(!r)return n();var s=r===Io?ko:Po,l=0,u=function(){t.removeEventListener(s,c),n()},c=function(e){e.target===t&&++l>=a&&u()};setTimeout((function(){l0&&(n=Io,c=a,h=o.length):e===Co?u>0&&(n=Co,c=u,h=l.length):(c=Math.max(a,u),n=c>0?a>u?Io:Co:null,h=n?n===Io?o.length:l.length:0);var d=n===Io&&Bo.test(i[Do+"Property"]);return{type:n,timeout:c,propCount:h,hasTransform:d}}function Fo(t,e){while(t.length1}function qo(t,e){!0!==e.data.show&&Go(e)}var $o=X?{create:qo,activate:qo,remove:function(t,e){!0!==t.data.show?jo(t,e):e()}}:{},Zo=[jr,qr,no,so,_o,$o],Yo=Zo.concat(Vr),Xo=Lr({nodeOps:Sr,modules:Yo});et&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&ra(t,"input")}));var Ko={inserted:function(t,e,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?be(n,"postpatch",(function(){Ko.componentUpdated(t,e,n)})):Jo(t,e,n.context),t._vOptions=[].map.call(t.options,ea)):("textarea"===n.tag||ur(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",na),t.addEventListener("compositionend",ia),t.addEventListener("change",ia),et&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Jo(t,e,n.context);var i=t._vOptions,r=t._vOptions=[].map.call(t.options,ea);if(r.some((function(t,e){return!N(t,i[e])}))){var o=t.multiple?e.value.some((function(t){return ta(t,r)})):e.value!==e.oldValue&&ta(e.value,r);o&&ra(t,"change")}}}};function Jo(t,e,n){Qo(t,e,n),(tt||nt)&&setTimeout((function(){Qo(t,e,n)}),0)}function Qo(t,e,n){var i=e.value,r=t.multiple;if(!r||Array.isArray(i)){for(var o,a,s=0,l=t.options.length;s-1,a.selected!==o&&(a.selected=o);else if(N(ea(a),i))return void(t.selectedIndex!==s&&(t.selectedIndex=s));r||(t.selectedIndex=-1)}}function ta(t,e){return e.every((function(e){return!N(e,t)}))}function ea(t){return"_value"in t?t._value:t.value}function na(t){t.target.composing=!0}function ia(t){t.target.composing&&(t.target.composing=!1,ra(t.target,"input"))}function ra(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function oa(t){return!t.componentInstance||t.data&&t.data.transition?t:oa(t.componentInstance._vnode)}var aa={bind:function(t,e,n){var i=e.value;n=oa(n);var r=n.data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;i&&r?(n.data.show=!0,Go(n,(function(){t.style.display=o}))):t.style.display=i?o:"none"},update:function(t,e,n){var i=e.value,r=e.oldValue;if(!i!==!r){n=oa(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,i?Go(n,(function(){t.style.display=t.__vOriginalDisplay})):jo(n,(function(){t.style.display="none"}))):t.style.display=i?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,i,r){r||(t.style.display=t.__vOriginalDisplay)}},sa={model:Ko,show:aa},la={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ua(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?ua(Sn(e.children)):t}function ca(t){var e={},n=t.$options;for(var i in n.propsData)e[i]=t[i];var r=n._parentListeners;for(var o in r)e[S(o)]=r[o];return e}function ha(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function da(t){while(t=t.parent)if(t.data.transition)return!0}function fa(t,e){return e.key===t.key&&e.tag===t.tag}var pa=function(t){return t.tag||wn(t)},ga=function(t){return"show"===t.name},va={name:"transition",props:la,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(pa),n.length)){0;var i=this.mode;0;var r=n[0];if(da(this.$vnode))return r;var o=ua(r);if(!o)return r;if(this._leaving)return ha(t,r);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var l=(o.data||(o.data={})).transition=ca(this),u=this._vnode,c=ua(u);if(o.data.directives&&o.data.directives.some(ga)&&(o.data.show=!0),c&&c.data&&!fa(o,c)&&!wn(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var h=c.data.transition=L({},l);if("out-in"===i)return this._leaving=!0,be(h,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),ha(t,r);if("in-out"===i){if(wn(o))return u;var d,f=function(){d()};be(l,"afterEnter",f),be(l,"enterCancelled",f),be(h,"delayLeave",(function(t){d=t}))}}return r}}},ma=L({tag:String,moveClass:String},la);delete ma.mode;var ya={props:ma,beforeMount:function(){var t=this,e=this._update;this._update=function(n,i){var r=Ln(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,r(),e.call(t,n,i)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],o=this.children=[],a=ca(this),s=0;s0},extendFrom:function(t,e){if(t)for(var n in t)!t.hasOwnProperty(n)||!0!==e&&(!1===e?this.hasOwnProperty(n):null==t[n])||(this[n]=t[n])},set:function(t,e){"string"===typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,n){for(var i="radial"===e.type?u:l,r=i(t,e,n),o=e.colorStops,a=0;a=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,c=!0,h=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return c=t.done,t},e:function(t){h=!0,s=t},f:function(){try{c||null==n["return"]||n["return"]()}finally{if(h)throw s}}}}},"2d83":function(t,e,n){"use strict";var i=n("387f");t.exports=function(t,e,n,r,o){var a=new Error(t);return i(a,e,n,r,o)}},"2d95":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"2e67":function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},"2f31":function(t,e,n){var i=n("3eba"),r=n("ae75");n("10cc"),n("f31f"),n("c2dd"),n("b8ec"),n("fecb"),i.registerPreprocessor(r)},"2f45":function(t,e,n){var i=n("6d8b"),r=i.each,o=i.createHashMap,a=(i.assert,n("4e08")),s=(a.__DEV__,o(["tooltip","label","itemName","itemId","seriesName"]));function l(t){var e={},n=e.encode={},i=o(),a=[],l=[],c=e.userOutput={dimensionNames:t.dimensions.slice(),encode:{}};r(t.dimensions,(function(e){var r=t.getDimensionInfo(e),o=r.coordDim;if(o){var d=r.coordDimIndex;u(n,o)[d]=e,r.isExtraCoord||(i.set(o,1),h(r.type)&&(a[0]=e),u(c.encode,o)[d]=r.index),r.defaultTooltip&&l.push(e)}s.each((function(t,e){var i=u(n,e),o=r.otherDims[e];null!=o&&!1!==o&&(i[o]=r.name)}))}));var d=[],f={};i.each((function(t,e){var i=n[e];f[e]=i[0],d=d.concat(i)})),e.dataDimsOnCoord=d,e.encodeFirstDimNotExtra=f;var p=n.label;p&&p.length&&(a=p.slice());var g=n.tooltip;return g&&g.length?l=g.slice():l.length||(l=a.slice()),n.defaultedLabel=a,n.defaultedTooltip=l,e}function u(t,e){return t.hasOwnProperty(e)||(t[e]=[]),t[e]}function c(t){return"category"===t?"ordinal":"time"===t?"time":"float"}function h(t){return!("ordinal"===t||"time"===t)}e.OTHER_DIMENSIONS=s,e.summarizeDimensions=l,e.getDimensionTypeByAxis=c},"2f62":function(t,e,n){"use strict"; -/** - * vuex v3.1.0 - * (c) 2019 Evan You - * @license MIT - */ -function i(t){var e=Number(t.version.split(".")[0]);if(e>=2)t.mixin({beforeCreate:i});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[i].concat(t.init):i,n.call(this,t)}}function i(){var t=this.$options;t.store?this.$store="function"===typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}n.d(e,"c",(function(){return D})),n.d(e,"b",(function(){return L}));var r="undefined"!==typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function o(t){r&&(t._devtoolHook=r,r.emit("vuex:init",t),r.on("vuex:travel-to-state",(function(e){t.replaceState(e)})),t.subscribe((function(t,e){r.emit("vuex:mutation",t,e)})))}function a(t,e){Object.keys(t).forEach((function(n){return e(t[n],n)}))}function s(t){return null!==t&&"object"===typeof t}function l(t){return t&&"function"===typeof t.then}var u=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"===typeof n?n():n)||{}},c={namespaced:{configurable:!0}};c.namespaced.get=function(){return!!this._rawModule.namespaced},u.prototype.addChild=function(t,e){this._children[t]=e},u.prototype.removeChild=function(t){delete this._children[t]},u.prototype.getChild=function(t){return this._children[t]},u.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},u.prototype.forEachChild=function(t){a(this._children,t)},u.prototype.forEachGetter=function(t){this._rawModule.getters&&a(this._rawModule.getters,t)},u.prototype.forEachAction=function(t){this._rawModule.actions&&a(this._rawModule.actions,t)},u.prototype.forEachMutation=function(t){this._rawModule.mutations&&a(this._rawModule.mutations,t)},Object.defineProperties(u.prototype,c);var h=function(t){this.register([],t,!1)};function d(t,e,n){if(e.update(n),n.modules)for(var i in n.modules){if(!e.getChild(i))return void 0;d(t.concat(i),e.getChild(i),n.modules[i])}}h.prototype.get=function(t){return t.reduce((function(t,e){return t.getChild(e)}),this.root)},h.prototype.getNamespace=function(t){var e=this.root;return t.reduce((function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")}),"")},h.prototype.update=function(t){d([],this.root,t)},h.prototype.register=function(t,e,n){var i=this;void 0===n&&(n=!0);var r=new u(e,n);if(0===t.length)this.root=r;else{var o=this.get(t.slice(0,-1));o.addChild(t[t.length-1],r)}e.modules&&a(e.modules,(function(e,r){i.register(t.concat(r),e,n)}))},h.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var f;var p=function(t){var e=this;void 0===t&&(t={}),!f&&"undefined"!==typeof window&&window.Vue&&C(window.Vue);var n=t.plugins;void 0===n&&(n=[]);var i=t.strict;void 0===i&&(i=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new h(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new f;var r=this,a=this,s=a.dispatch,l=a.commit;this.dispatch=function(t,e){return s.call(r,t,e)},this.commit=function(t,e,n){return l.call(r,t,e,n)},this.strict=i;var u=this._modules.root.state;x(this,u,[],this._modules.root),y(this,u),n.forEach((function(t){return t(e)}));var c=void 0!==t.devtools?t.devtools:f.config.devtools;c&&o(this)},g={state:{configurable:!0}};function v(t,e){return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function m(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;x(t,n,[],t._modules.root,!0),y(t,n,e)}function y(t,e,n){var i=t._vm;t.getters={};var r=t._wrappedGetters,o={};a(r,(function(e,n){o[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})}));var s=f.config.silent;f.config.silent=!0,t._vm=new f({data:{$$state:e},computed:o}),f.config.silent=s,t.strict&&A(t),i&&(n&&t._withCommit((function(){i._data.$$state=null})),f.nextTick((function(){return i.$destroy()})))}function x(t,e,n,i,r){var o=!n.length,a=t._modules.getNamespace(n);if(i.namespaced&&(t._modulesNamespaceMap[a]=i),!o&&!r){var s=T(e,n.slice(0,-1)),l=n[n.length-1];t._withCommit((function(){f.set(s,l,i.state)}))}var u=i.context=_(t,a,n);i.forEachMutation((function(e,n){var i=a+n;w(t,i,e,u)})),i.forEachAction((function(e,n){var i=e.root?n:a+n,r=e.handler||e;S(t,i,r,u)})),i.forEachGetter((function(e,n){var i=a+n;M(t,i,e,u)})),i.forEachChild((function(i,o){x(t,e,n.concat(o),i,r)}))}function _(t,e,n){var i=""===e,r={dispatch:i?t.dispatch:function(n,i,r){var o=I(n,i,r),a=o.payload,s=o.options,l=o.type;return s&&s.root||(l=e+l),t.dispatch(l,a)},commit:i?t.commit:function(n,i,r){var o=I(n,i,r),a=o.payload,s=o.options,l=o.type;s&&s.root||(l=e+l),t.commit(l,a,s)}};return Object.defineProperties(r,{getters:{get:i?function(){return t.getters}:function(){return b(t,e)}},state:{get:function(){return T(t.state,n)}}}),r}function b(t,e){var n={},i=e.length;return Object.keys(t.getters).forEach((function(r){if(r.slice(0,i)===e){var o=r.slice(i);Object.defineProperty(n,o,{get:function(){return t.getters[r]},enumerable:!0})}})),n}function w(t,e,n,i){var r=t._mutations[e]||(t._mutations[e]=[]);r.push((function(e){n.call(t,i.state,e)}))}function S(t,e,n,i){var r=t._actions[e]||(t._actions[e]=[]);r.push((function(e,r){var o=n.call(t,{dispatch:i.dispatch,commit:i.commit,getters:i.getters,state:i.state,rootGetters:t.getters,rootState:t.state},e,r);return l(o)||(o=Promise.resolve(o)),t._devtoolHook?o.catch((function(e){throw t._devtoolHook.emit("vuex:error",e),e})):o}))}function M(t,e,n,i){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(i.state,i.getters,t.state,t.getters)})}function A(t){t._vm.$watch((function(){return this._data.$$state}),(function(){0}),{deep:!0,sync:!0})}function T(t,e){return e.length?e.reduce((function(t,e){return t[e]}),t):t}function I(t,e,n){return s(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function C(t){f&&t===f||(f=t,i(f))}g.state.get=function(){return this._vm._data.$$state},g.state.set=function(t){0},p.prototype.commit=function(t,e,n){var i=this,r=I(t,e,n),o=r.type,a=r.payload,s=(r.options,{type:o,payload:a}),l=this._mutations[o];l&&(this._withCommit((function(){l.forEach((function(t){t(a)}))})),this._subscribers.forEach((function(t){return t(s,i.state)})))},p.prototype.dispatch=function(t,e){var n=this,i=I(t,e),r=i.type,o=i.payload,a={type:r,payload:o},s=this._actions[r];if(s){try{this._actionSubscribers.filter((function(t){return t.before})).forEach((function(t){return t.before(a,n.state)}))}catch(u){0}var l=s.length>1?Promise.all(s.map((function(t){return t(o)}))):s[0](o);return l.then((function(t){try{n._actionSubscribers.filter((function(t){return t.after})).forEach((function(t){return t.after(a,n.state)}))}catch(u){0}return t}))}},p.prototype.subscribe=function(t){return v(t,this._subscribers)},p.prototype.subscribeAction=function(t){var e="function"===typeof t?{before:t}:t;return v(e,this._actionSubscribers)},p.prototype.watch=function(t,e,n){var i=this;return this._watcherVM.$watch((function(){return t(i.state,i.getters)}),e,n)},p.prototype.replaceState=function(t){var e=this;this._withCommit((function(){e._vm._data.$$state=t}))},p.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"===typeof t&&(t=[t]),this._modules.register(t,e),x(this,this.state,t,this._modules.get(t),n.preserveState),y(this,this.state)},p.prototype.unregisterModule=function(t){var e=this;"string"===typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit((function(){var n=T(e.state,t.slice(0,-1));f.delete(n,t[t.length-1])})),m(this)},p.prototype.hotUpdate=function(t){this._modules.update(t),m(this,!0)},p.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(p.prototype,g);var D=R((function(t,e){var n={};return E(e).forEach((function(e){var i=e.key,r=e.val;n[i]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var i=N(this.$store,"mapState",t);if(!i)return;e=i.context.state,n=i.context.getters}return"function"===typeof r?r.call(this,e,n):e[r]},n[i].vuex=!0})),n})),k=R((function(t,e){var n={};return E(e).forEach((function(e){var i=e.key,r=e.val;n[i]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var i=this.$store.commit;if(t){var o=N(this.$store,"mapMutations",t);if(!o)return;i=o.context.commit}return"function"===typeof r?r.apply(this,[i].concat(e)):i.apply(this.$store,[r].concat(e))}})),n})),L=R((function(t,e){var n={};return E(e).forEach((function(e){var i=e.key,r=e.val;r=t+r,n[i]=function(){if(!t||N(this.$store,"mapGetters",t))return this.$store.getters[r]},n[i].vuex=!0})),n})),P=R((function(t,e){var n={};return E(e).forEach((function(e){var i=e.key,r=e.val;n[i]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var i=this.$store.dispatch;if(t){var o=N(this.$store,"mapActions",t);if(!o)return;i=o.context.dispatch}return"function"===typeof r?r.apply(this,[i].concat(e)):i.apply(this.$store,[r].concat(e))}})),n})),O=function(t){return{mapState:D.bind(null,t),mapGetters:L.bind(null,t),mapMutations:k.bind(null,t),mapActions:P.bind(null,t)}};function E(t){return Array.isArray(t)?t.map((function(t){return{key:t,val:t}})):Object.keys(t).map((function(e){return{key:e,val:t[e]}}))}function R(t){return function(e,n){return"string"!==typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function N(t,e,n){var i=t._modulesNamespaceMap[n];return i}var z={Store:p,install:C,version:"3.1.0",mapState:D,mapMutations:k,mapGetters:L,mapActions:P,createNamespacedHelpers:O};e["a"]=z},"2f73":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("1e32");n("1ccf"),n("f5e6"),n("792e"),n("cb8f"),n("6acf"),i.registerLayout(r.curry(o,"bar")),i.extendComponentView({type:"polar"})},"2f91":function(t,e){var n=["itemStyle","borderColor"];function i(t,e){var i=t.get("color");t.eachRawSeriesByType("boxplot",(function(e){var r=i[e.seriesIndex%i.length],o=e.getData();o.setVisual({legendSymbol:"roundRect",color:e.get(n)||r}),t.isSeriesFiltered(e)||o.each((function(t){var e=o.getItemModel(t);o.setItemVisual(t,{color:e.get(n,!0)})}))}))}t.exports=i},"2fdb":function(t,e,n){"use strict";var i=n("5ca1"),r=n("d2c8"),o="includes";i(i.P+i.F*n("5147")(o),"String",{includes:function(t){return!!~r(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},3014:function(t,e,n){var i=n("4f85"),r=n("3301"),o=i.extend({type:"series.__base_bar__",getInitialData:function(t,e){return r(this.getSource(),this,{useEncodeDefaulter:!0})},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var n=e.dataToPoint(e.clampData(t)),i=this.getData(),r=i.getLayout("offset"),o=i.getLayout("size"),a=e.getBaseAxis().isHorizontal()?0:1;return n[a]+=r+o/2,n}return[NaN,NaN]},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod",itemStyle:{},emphasis:{}}});t.exports=o},3024:function(t,e){t.exports=function(t,e,n){var i=void 0===n;switch(e.length){case 0:return i?t():t.call(n);case 1:return i?t(e[0]):t.call(n,e[0]);case 2:return i?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return i?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return i?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},3041:function(t,e,n){var i=n("e1fc"),r=n("0da8"),o=n("76a5"),a=n("d9fc"),s=n("c7a2"),l=n("ae69"),u=n("cb11"),c=n("cbe5"),h=n("87b1"),d=n("d498"),f=n("48a9"),p=n("2b61"),g=n("1687"),v=n("342d"),m=v.createFromString,y=n("6d8b"),x=y.isString,_=y.extend,b=y.defaults,w=y.trim,S=y.each,M=/[\s,]+/;function A(t){if(x(t)){var e=new DOMParser;t=e.parseFromString(t,"text/xml")}9===t.nodeType&&(t=t.firstChild);while("svg"!==t.nodeName.toLowerCase()||1!==t.nodeType)t=t.nextSibling;return t}function T(){this._defs={},this._root=null,this._isDefine=!1,this._isText=!1}T.prototype.parse=function(t,e){e=e||{};var n=A(t);if(!n)throw new Error("Illegal svg");var r=new i;this._root=r;var o=n.getAttribute("viewBox")||"",a=parseFloat(n.getAttribute("width")||e.width),l=parseFloat(n.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(l)&&(l=null),O(n,r,null,!0);var u,c,h=n.firstChild;while(h)this._parseNode(h,r),h=h.nextSibling;if(o){var d=w(o).split(M);d.length>=4&&(u={x:parseFloat(d[0]||0),y:parseFloat(d[1]||0),width:parseFloat(d[2]),height:parseFloat(d[3])})}if(u&&null!=a&&null!=l&&(c=F(u,a,l),!e.ignoreViewBox)){var f=r;r=new i,r.add(f),f.scale=c.scale.slice(),f.position=c.position.slice()}return e.ignoreRootClip||null==a||null==l||r.setClipPath(new s({shape:{x:0,y:0,width:a,height:l}})),{root:r,width:a,height:l,viewBoxRect:u,viewBoxTransform:c}},T.prototype._parseNode=function(t,e){var n,i=t.nodeName.toLowerCase();if("defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0),this._isDefine){var r=C[i];if(r){var o=r.call(this,t),a=t.getAttribute("id");a&&(this._defs[a]=o)}}else{r=I[i];r&&(n=r.call(this,t,e),e.add(n))}var s=t.firstChild;while(s)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},T.prototype._parseText=function(t,e){if(1===t.nodeType){var n=t.getAttribute("dx")||0,i=t.getAttribute("dy")||0;this._textX+=parseFloat(n),this._textY+=parseFloat(i)}var r=new o({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});k(e,r),O(t,r,this._defs);var a=r.style.fontSize;a&&a<9&&(r.style.fontSize=9,r.scale=r.scale||[1,1],r.scale[0]*=a/9,r.scale[1]*=a/9);var s=r.getBoundingRect();return this._textX+=s.width,e.add(r),r};var I={g:function(t,e){var n=new i;return k(e,n),O(t,n,this._defs),n},rect:function(t,e){var n=new s;return k(e,n),O(t,n,this._defs),n.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),n},circle:function(t,e){var n=new a;return k(e,n),O(t,n,this._defs),n.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),n},line:function(t,e){var n=new u;return k(e,n),O(t,n,this._defs),n.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),n},ellipse:function(t,e){var n=new l;return k(e,n),O(t,n,this._defs),n.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),n},polygon:function(t,e){var n=t.getAttribute("points");n&&(n=L(n));var i=new h({shape:{points:n||[]}});return k(e,i),O(t,i,this._defs),i},polyline:function(t,e){var n=new c;k(e,n),O(t,n,this._defs);var i=t.getAttribute("points");i&&(i=L(i));var r=new d({shape:{points:i||[]}});return r},image:function(t,e){var n=new r;return k(e,n),O(t,n,this._defs),n.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),n},text:function(t,e){var n=t.getAttribute("x")||0,r=t.getAttribute("y")||0,o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(n)+parseFloat(o),this._textY=parseFloat(r)+parseFloat(a);var s=new i;return k(e,s),O(t,s,this._defs),s},tspan:function(t,e){var n=t.getAttribute("x"),r=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=r&&(this._textY=parseFloat(r));var o=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,s=new i;return k(e,s),O(t,s,this._defs),this._textX+=o,this._textY+=a,s},path:function(t,e){var n=t.getAttribute("d")||"",i=m(n);return k(e,i),O(t,i,this._defs),i}},C={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),n=parseInt(t.getAttribute("y1")||0,10),i=parseInt(t.getAttribute("x2")||10,10),r=parseInt(t.getAttribute("y2")||0,10),o=new f(e,n,i,r);return D(t,o),o},radialgradient:function(t){}};function D(t,e){var n=t.firstChild;while(n){if(1===n.nodeType){var i=n.getAttribute("offset");i=i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var r=n.getAttribute("stop-color")||"#000000";e.addColorStop(i,r)}n=n.nextSibling}}function k(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),b(e.__inheritedStyle,t.__inheritedStyle))}function L(t){for(var e=w(t).split(M),n=[],i=0;i0;o-=2){var a=r[o],s=r[o-1];switch(i=i||g.create(),s){case"translate":a=w(a).split(M),g.translate(i,i,[parseFloat(a[0]),parseFloat(a[1]||0)]);break;case"scale":a=w(a).split(M),g.scale(i,i,[parseFloat(a[0]),parseFloat(a[1]||a[0])]);break;case"rotate":a=w(a).split(M),g.rotate(i,i,parseFloat(a[0]));break;case"skew":a=w(a).split(M),console.warn("Skew transform is not supported yet");break;case"matrix":a=w(a).split(M);i[0]=parseFloat(a[0]),i[1]=parseFloat(a[1]),i[2]=parseFloat(a[2]),i[3]=parseFloat(a[3]),i[4]=parseFloat(a[4]),i[5]=parseFloat(a[5]);break}}e.setLocalTransform(i)}}var B=/([^\s:;]+)\s*:\s*([^:;]+)/g;function V(t){var e=t.getAttribute("style"),n={};if(!e)return n;var i,r={};B.lastIndex=0;while(null!=(i=B.exec(e)))r[i[1]]=i[2];for(var o in P)P.hasOwnProperty(o)&&null!=r[o]&&(n[P[o]]=r[o]);return n}function F(t,e,n){var i=e/t.width,r=n/t.height,o=Math.min(i,r),a=[o,o],s=[-(t.x+t.width/2)*o+e/2,-(t.y+t.height/2)*o+n/2];return{scale:a,position:s}}function H(t,e){var n=new T;return n.parse(t,e)}e.parseXML=A,e.makeViewBoxTransform=F,e.parseSVG=H},"307a":function(t,e,n){var i=n("6d8b"),r=n("eaea"),o=n("3842"),a=[20,140],s=r.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:null},optionUpdated:function(t,e){s.superApply(this,"optionUpdated",arguments),this.resetExtent(),this.resetVisual((function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()})),this._resetRange()},resetItemSize:function(){s.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=a[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=a[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):i.isArray(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){r.prototype.completeVisualOption.apply(this,arguments),i.each(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=o.asc((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=n[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries((function(n){var i=[],r=n.getData();r.each(this.getDataDimension(r),(function(e,n){t[0]<=e&&e<=t[1]&&i.push(n)}),this),e.push({seriesId:n.id,dataIndex:i})}),this),e},getVisualMeta:function(t){var e=l(this,"outOfRange",this.getExtent()),n=l(this,"inRange",this.option.range.slice()),i=[];function r(e,n){i.push({value:e,color:t(e,n)})}for(var o=0,a=0,s=n.length,u=e.length;a=0&&"number"===typeof u&&(u=+u.toFixed(Math.min(m,20))),g.coord[f]=v.coord[f]=u,r=[g,v,{type:s,valueIndex:r.valueIndex,value:u}]}return r=[a.dataTransform(t,r[0]),a.dataTransform(t,r[1]),i.extend({},r[2])],r[2].type=r[2].type||"",i.merge(r[2],r[0]),i.merge(r[2],r[1]),r};function d(t){return!isNaN(t)&&!isFinite(t)}function f(t,e,n,i){var r=1-t,o=i.dimensions[t];return d(e[r])&&d(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function p(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&(f(1,n,i,t)||f(0,n,i,t)))return!0}return a.dataFilter(t,e[0])&&a.dataFilter(t,e[1])}function g(t,e,n,i,r){var a,s=i.coordinateSystem,l=t.getItemModel(e),u=o.parsePercent(l.get("x"),r.getWidth()),c=o.parsePercent(l.get("y"),r.getHeight());if(isNaN(u)||isNaN(c)){if(i.getMarkerPosition)a=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var h=s.dimensions,f=t.get(h[0],e),p=t.get(h[1],e);a=s.dataToPoint([f,p])}if("cartesian2d"===s.type){var g=s.getAxis("x"),v=s.getAxis("y");h=s.dimensions;d(t.get(h[0],e))?a[0]=g.toGlobalCoord(g.getExtent()[n?0:1]):d(t.get(h[1],e))&&(a[1]=v.toGlobalCoord(v.getExtent()[n?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];t.setItemLayout(e,a)}var v=l.extend({type:"markLine",updateTransform:function(t,e,n){e.eachSeries((function(t){var e=t.markLineModel;if(e){var i=e.getData(),r=e.__from,o=e.__to;r.each((function(e){g(r,e,!0,t,n),g(o,e,!1,t,n)})),i.each((function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},renderSeries:function(t,e,n,r){var o=t.coordinateSystem,a=t.id,l=t.getData(),u=this.markerGroupMap,c=u.get(a)||u.set(a,new s);this.group.add(c.group);var h=m(o,t,e),d=h.from,f=h.to,p=h.line;e.__from=d,e.__to=f,e.setData(p);var v=e.get("symbol"),y=e.get("symbolSize");function x(e,n,i){var o=e.getItemModel(n);g(e,n,i,t,r),e.setItemVisual(n,{symbolRotate:o.get("symbolRotate"),symbolSize:o.get("symbolSize")||y[i?0:1],symbol:o.get("symbol",!0)||v[i?0:1],color:o.get("itemStyle.color")||l.getVisual("color")})}i.isArray(v)||(v=[v,v]),"number"===typeof y&&(y=[y,y]),h.from.each((function(t){x(d,t,!0),x(f,t,!1)})),p.each((function(t){var e=p.getItemModel(t).get("lineStyle.color");p.setItemVisual(t,{color:e||d.getItemVisual(t,"color")}),p.setItemLayout(t,[d.getItemLayout(t),f.getItemLayout(t)]),p.setItemVisual(t,{fromSymbolRotate:d.getItemVisual(t,"symbolRotate"),fromSymbolSize:d.getItemVisual(t,"symbolSize"),fromSymbol:d.getItemVisual(t,"symbol"),toSymbolRotate:f.getItemVisual(t,"symbolRotate"),toSymbolSize:f.getItemVisual(t,"symbolSize"),toSymbol:f.getItemVisual(t,"symbol")})})),c.updateData(p),h.line.eachItemGraphicEl((function(t,n){t.traverse((function(t){t.dataModel=e}))})),c.__keep=!0,c.group.silent=e.get("silent")||t.get("silent")}});function m(t,e,n){var o;o=t?i.map(t&&t.dimensions,(function(t){var n=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return i.defaults({name:t},n)})):[{name:"value",type:"float"}];var s=new r(o,n),l=new r(o,n),u=new r([],n),c=i.map(n.get("data"),i.curry(h,e,t,n));t&&(c=i.filter(c,i.curry(p,t)));var d=t?a.dimValueGetter:function(t){return t.value};return s.initData(i.map(c,(function(t){return t[0]})),null,d),l.initData(i.map(c,(function(t){return t[1]})),null,d),u.initData(i.map(c,(function(t){return t[2]}))),u.hasItemOption=!0,{from:s,to:l,line:u}}t.exports=v},"30a3":function(t,e,n){var i=n("6d8b"),r=n("607d"),o=r.Dispatcher,a=n("98b7"),s=n("06ad"),l=function(t){t=t||{},this.stage=t.stage||{},this.onframe=t.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,o.call(this)};l.prototype={constructor:l,addClip:function(t){this._clips.push(t)},addAnimator:function(t){t.animation=this;for(var e=t.getClips(),n=0;n=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),n=0;n
'};function n(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}function r(t,n,r){var o;return o="translate3d"===e.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===e.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"},o.transition="all "+n+"ms "+r,o}t.configure=function(t){var n,i;for(n in t)i=t[n],void 0!==i&&t.hasOwnProperty(n)&&(e[n]=i);return this},t.status=null,t.set=function(i){var s=t.isStarted();i=n(i,e.minimum,1),t.status=1===i?null:i;var l=t.render(!s),u=l.querySelector(e.barSelector),c=e.speed,h=e.easing;return l.offsetWidth,o((function(n){""===e.positionUsing&&(e.positionUsing=t.getPositioningCSS()),a(u,r(i,c,h)),1===i?(a(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){a(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),c)}),c)):setTimeout(n,c)})),this},t.isStarted=function(){return"number"===typeof t.status},t.start=function(){t.status||t.set(0);var n=function(){setTimeout((function(){t.status&&(t.trickle(),n())}),e.trickleSpeed)};return e.trickle&&n(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var i=t.status;return i?("number"!==typeof e&&(e=(1-i)*n(Math.random()*i,.1,.95)),i=n(i+e,0,.994),t.set(i)):t.start()},t.trickle=function(){return t.inc(Math.random()*e.trickleRate)},function(){var e=0,n=0;t.promise=function(i){return i&&"resolved"!==i.state()?(0===n&&t.start(),e++,n++,i.always((function(){n--,0===n?(e=0,t.done()):t.set((e-n)/e)})),this):this}}(),t.render=function(n){if(t.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var r=document.createElement("div");r.id="nprogress",r.innerHTML=e.template;var o,s=r.querySelector(e.barSelector),u=n?"-100":i(t.status||0),c=document.querySelector(e.parent);return a(s,{transition:"all 0 linear",transform:"translate3d("+u+"%,0,0)"}),e.showSpinner||(o=r.querySelector(e.spinnerSelector),o&&h(o)),c!=document.body&&l(c,"nprogress-custom-parent"),c.appendChild(r),r},t.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(e.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&h(t)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var o=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),a=function(){var t=["Webkit","O","Moz","ms"],e={};function n(t){return t.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()}))}function i(e){var n=document.body.style;if(e in n)return e;var i,r=t.length,o=e.charAt(0).toUpperCase()+e.slice(1);while(r--)if(i=t[r]+o,i in n)return i;return e}function r(t){return t=n(t),e[t]||(e[t]=i(t))}function o(t,e,n){e=r(e),t.style[e]=n}return function(t,e){var n,i,r=arguments;if(2==r.length)for(n in e)i=e[n],void 0!==i&&e.hasOwnProperty(n)&&o(t,n,i);else o(t,r[1],r[2])}}();function s(t,e){var n="string"==typeof t?t:c(t);return n.indexOf(" "+e+" ")>=0}function l(t,e){var n=c(t),i=n+e;s(n,e)||(t.className=i.substring(1))}function u(t,e){var n,i=c(t);s(t,e)&&(n=i.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function c(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function h(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return t}))},"32a1":function(t,e,n){var i=n("6d8b"),r=n("7dcf"),o=n("ef6a"),a=n("5576"),s=i.bind,l=r.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,n,r){l.superApply(this,"render",arguments),this._range=t.getPercentRange(),i.each(this.getTargetCoordInfo(),(function(e,r){var o=i.map(e,(function(t){return a.generateCoordId(t.model)}));i.each(e,(function(e){var l=e.model,c={};i.each(["pan","zoom","scrollMove"],(function(t){c[t]=s(u[t],this,e,r)}),this),a.register(n,{coordId:a.generateCoordId(l),allCoordIds:o,containsPoint:function(t,e,n){return l.coordinateSystem.containPoint([e,n])},dataZoomId:t.id,dataZoomModel:t,getRange:c})}),this)}),this)},dispose:function(){a.unregister(this.api,this.dataZoomModel.id),l.superApply(this,"dispose",arguments),this._range=null}}),u={zoom:function(t,e,n,i){var r=this._range,a=r.slice(),s=t.axisModels[0];if(s){var l=h[e](null,[i.originX,i.originY],s,n,t),u=(l.signal>0?l.pixelStart+l.pixelLength-l.pixel:l.pixel-l.pixelStart)/l.pixelLength*(a[1]-a[0])+a[0],c=Math.max(1/i.scale,0);a[0]=(a[0]-u)*c+u,a[1]=(a[1]-u)*c+u;var d=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return o(0,a,[0,100],0,d.minSpan,d.maxSpan),this._range=a,r[0]!==a[0]||r[1]!==a[1]?a:void 0}},pan:c((function(t,e,n,i,r,o){var a=h[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:c((function(t,e,n,i,r,o){var a=h[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n);return a.signal*(t[1]-t[0])*o.scrollDelta}))};function c(t){return function(e,n,i,r){var a=this._range,s=a.slice(),l=e.axisModels[0];if(l){var u=t(s,l,e,n,i,r);return o(u,s,[0,100],"all"),this._range=s,a[0]!==s[0]||a[1]!==s[1]?s:void 0}}}var h={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}},d=l;t.exports=d},"32a6":function(t,e,n){var i=n("241e"),r=n("c3a1");n("ce7e")("keys",(function(){return function(t){return r(i(t))}}))},"32e9":function(t,e,n){var i=n("86cc"),r=n("4630");t.exports=n("9e1e")?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},"32fc":function(t,e,n){var i=n("e53d").document;t.exports=i&&i.documentElement},3301:function(t,e,n){var i=n("6d8b"),r=n("6179"),o=n("b1d4"),a=n("93d0"),s=a.SOURCE_FORMAT_ORIGINAL,l=n("2f45"),u=l.getDimensionTypeByAxis,c=n("e0d3"),h=c.getDataItemValue,d=n("2039"),f=n("8b7f"),p=f.getCoordSysInfoBySeries,g=n("ec6f"),v=n("ee1a"),m=v.enableDataStack,y=n("0f99"),x=y.makeSeriesEncodeForAxisCoordSys;function _(t,e,n){n=n||{},g.isInstance(t)||(t=g.seriesDataToSource(t));var a,s=e.get("coordinateSystem"),l=d.get(s),c=p(e);c&&(a=i.map(c.coordSysDims,(function(t){var e={name:t},n=c.axisMap.get(t);if(n){var i=n.get("type");e.type=u(i)}return e}))),a||(a=l&&(l.getDimensionsInfo?l.getDimensionsInfo():l.dimensions.slice())||["x","y"]);var h,f,v=o(t,{coordDimensions:a,generateCoord:n.generateCoord,encodeDefaulter:n.useEncodeDefaulter?i.curry(x,a,e):null});c&&i.each(v,(function(t,e){var n=t.coordDim,i=c.categoryAxisMap.get(n);i&&(null==h&&(h=e),t.ordinalMeta=i.getOrdinalMeta()),null!=t.otherDims.itemName&&(f=!0)})),f||null==h||(v[h].otherDims.itemName=0);var y=m(e,v),_=new r(v,e);_.setCalculationInfo(y);var w=null!=h&&b(t)?function(t,e,n,i){return i===h?n:this.defaultDimValueGetter(t,e,n,i)}:null;return _.hasItemOption=!1,_.initData(t,null,w),_}function b(t){if(t.sourceFormat===s){var e=w(t.data||[]);return null!=e&&!i.isArray(h(e))}}function w(t){var e=0;while(e0?1:a<0?-1:0}function x(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function _(t,e,n,i,o,a,s,l,c,h){var d=c.valueDim,f=c.categoryDim,p=Math.abs(n[f.wh]),g=t.getItemVisual(e,"symbolSize");r.isArray(g)?g=g.slice():(null==g&&(g="100%"),g=[g,g]),g[f.index]=u(g[f.index],p),g[d.index]=u(g[d.index],i?p:Math.abs(a)),h.symbolSize=g;var v=h.symbolScale=[g[0]/l,g[1]/l];v[d.index]*=(c.isHorizontal?-1:1)*s}function b(t,e,n,i,r){var o=t.get(f)||0;o&&(g.attr({scale:e.slice(),rotation:n}),g.updateTransform(),o/=g.getLineScale(),o*=e[i.valueDim.index]),r.valueLineWidth=o}function w(t,e,n,i,o,a,s,l,h,d,f,p){var g=f.categoryDim,v=f.valueDim,m=p.pxSign,y=Math.max(e[v.index]+l,0),x=y;if(i){var _=Math.abs(h),b=r.retrieve(t.get("symbolMargin"),"15%")+"",w=!1;b.lastIndexOf("!")===b.length-1&&(w=!0,b=b.slice(0,b.length-1)),b=u(b,e[v.index]);var S=Math.max(y+2*b,0),M=w?0:2*b,A=c(i),T=A?i:V((_+M)/S),I=_-T*y;b=I/2/(w?T:T-1),S=y+2*b,M=w?0:2*b,A||"fixed"===i||(T=d?V((Math.abs(d)+M)/S):0),x=T*S-M,p.repeatTimes=T,p.symbolMargin=b}var C=m*(x/2),D=p.pathPosition=[];D[g.index]=n[g.wh]/2,D[v.index]="start"===s?C:"end"===s?h-C:h/2,a&&(D[0]+=a[0],D[1]+=a[1]);var k=p.bundlePosition=[];k[g.index]=n[g.xy],k[v.index]=n[v.xy];var L=p.barRectShape=r.extend({},n);L[v.wh]=m*Math.max(Math.abs(n[v.wh]),Math.abs(D[v.index]+C)),L[g.wh]=n[g.wh];var P=p.clipShape={};P[g.xy]=-n[g.xy],P[g.wh]=f.ecSize[g.wh],P[v.xy]=0,P[v.wh]=n[v.wh]}function S(t){var e=t.symbolPatternSize,n=s(t.symbolType,-e/2,-e/2,e,e,t.color);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function M(t,e,n,i){var r=t.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=e.valueDim,u=n.repeatTimes||0,c=0,h=o[e.valueDim.index]+a+2*n.symbolMargin;for(N(t,(function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=u,c0:i<0)&&(r=u-1-t),e[l.index]=h*(r-u/2+.5)+s[l.index],{position:e,scale:n.symbolScale.slice(),rotation:n.rotation}}function g(){N(t,(function(t){t.trigger("emphasis")}))}function v(){N(t,(function(t){t.trigger("normal")}))}}function A(t,e,n,i){var r=t.__pictorialBundle,o=t.__pictorialMainPath;function a(){this.trigger("emphasis")}function s(){this.trigger("normal")}o?z(o,null,{position:n.pathPosition.slice(),scale:n.symbolScale.slice(),rotation:n.rotation},n,i):(o=t.__pictorialMainPath=S(n),r.add(o),z(o,{position:n.pathPosition.slice(),scale:[0,0],rotation:n.rotation},{scale:n.symbolScale.slice()},n,i),o.on("mouseover",a).on("mouseout",s)),L(o,n)}function T(t,e,n){var i=r.extend({},e.barRectShape),a=t.__pictorialBarRect;a?z(a,null,{shape:i},e,n):(a=t.__pictorialBarRect=new o.Rect({z2:2,shape:i,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),t.add(a))}function I(t,e,n,i){if(n.symbolClip){var a=t.__pictorialClipPath,s=r.extend({},n.clipShape),l=e.valueDim,u=n.animationModel,c=n.dataIndex;if(a)o.updateProps(a,{shape:s},u,c);else{s[l.wh]=0,a=new o.Rect({shape:s}),t.__pictorialBundle.setClipPath(a),t.__pictorialClipPath=a;var h={};h[l.wh]=n.clipShape[l.wh],o[i?"updateProps":"initProps"](a,{shape:h},u,c)}}}function C(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParams=D,n.isAnimationEnabled=k,n}function D(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function k(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function L(t,e){t.off("emphasis").off("normal");var n=e.symbolScale.slice();e.hoverAnimation&&t.on("emphasis",(function(){this.animateTo({scale:[1.1*n[0],1.1*n[1]]},400,"elasticOut")})).on("normal",(function(){this.animateTo({scale:n.slice()},400,"elasticOut")}))}function P(t,e,n,i){var r=new o.Group,a=new o.Group;return r.add(a),r.__pictorialBundle=a,a.attr("position",n.bundlePosition.slice()),n.symbolRepeat?M(r,e,n):A(r,e,n),T(r,n,i),I(r,e,n,i),r.__pictorialShapeStr=R(t,n),r.__pictorialSymbolMeta=n,r}function O(t,e,n){var i=n.animationModel,r=n.dataIndex,a=t.__pictorialBundle;o.updateProps(a,{position:n.bundlePosition.slice()},i,r),n.symbolRepeat?M(t,e,n,!0):A(t,e,n,!0),T(t,n,!0),I(t,e,n,!0)}function E(t,e,n,i){var a=i.__pictorialBarRect;a&&(a.style.text=null);var s=[];N(i,(function(t){s.push(t)})),i.__pictorialMainPath&&s.push(i.__pictorialMainPath),i.__pictorialClipPath&&(n=null),r.each(s,(function(t){o.updateProps(t,{scale:[0,0]},n,e,(function(){i.parent&&i.parent.remove(i)}))})),t.setItemGraphicEl(e,null)}function R(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function N(t,e,n){r.each(t.__pictorialBundle.children(),(function(i){i!==t.__pictorialBarRect&&e.call(n,i)}))}function z(t,e,n,i,r,a){e&&t.attr(e),i.symbolClip&&!r?n&&t.attr(n):n&&o[r?"updateProps":"initProps"](t,n,i.animationModel,i.dataIndex,a)}function B(t,e,n){var i=n.color,a=n.dataIndex,s=n.itemModel,l=s.getModel("itemStyle").getItemStyle(["color"]),u=s.getModel("emphasis.itemStyle").getItemStyle(),c=s.getShallow("cursor");N(t,(function(t){t.setColor(i),t.setStyle(r.defaults({fill:i,opacity:n.opacity},l)),o.setHoverStyle(t,u),c&&(t.cursor=c),t.z2=n.z2}));var h={},f=e.valueDim.posDesc[+(n.boundingLength>0)],p=t.__pictorialBarRect;d(p.style,h,s,i,e.seriesModel,a,f),o.setHoverStyle(p,h)}function V(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}var F=v;t.exports=F},"335c":function(t,e,n){var i=n("6b4c");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},"33a4":function(t,e,n){var i=n("84f2"),r=n("2b4c")("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[r]===t)}},"340d":function(t,e,n){var i=n("6d8b"),r=n("e887"),o=n("4e47"),a=n("80f0"),s=n("eda2"),l=s.windowOpen,u="sunburstRootToNode",c=r.extend({type:"sunburst",init:function(){},render:function(t,e,n,r){var s=this;this.seriesModel=t,this.api=n,this.ecModel=e;var l=t.getData(),u=l.tree.root,c=t.getViewRoot(),h=this.group,d=t.get("renderLabelForZeroData"),f=[];c.eachNode((function(t){f.push(t)}));var p=this._oldChildren||[];if(m(f,p),_(u,c),r&&r.highlight&&r.highlight.piece){var g=t.getShallow("highlightPolicy");r.highlight.piece.onEmphasis(g)}else if(r&&r.unhighlight){var v=this.virtualPiece;!v&&u.children.length&&(v=u.children[0].piece),v&&v.onNormal()}function m(t,e){function n(t){return t.getId()}function r(n,i){var r=null==n?null:t[n],o=null==i?null:e[i];y(r,o)}0===t.length&&0===e.length||new a(e,t,n,n).add(r).update(r).remove(i.curry(r,null)).execute()}function y(n,i){if(d||!n||n.getValue()||(n=null),n!==u&&i!==u)if(i&&i.piece)n?(i.piece.updateData(!1,n,"normal",t,e),l.setItemGraphicEl(n.dataIndex,i.piece)):x(i);else if(n){var r=new o(n,t,e);h.add(r),l.setItemGraphicEl(n.dataIndex,r)}}function x(t){t&&t.piece&&(h.remove(t.piece),t.piece=null)}function _(n,i){if(i.depth>0){s.virtualPiece?s.virtualPiece.updateData(!1,n,"normal",t,e):(s.virtualPiece=new o(n,t,e),h.add(s.virtualPiece)),i.piece._onclickEvent&&i.piece.off("click",i.piece._onclickEvent);var r=function(t){s._rootToNode(i.parentNode)};i.piece._onclickEvent=r,s.virtualPiece.on("click",r)}else s.virtualPiece&&(h.remove(s.virtualPiece),s.virtualPiece=null)}this._initEvents(),this._oldChildren=f},dispose:function(){},_initEvents:function(){var t=this,e=function(e){var n=!1,i=t.seriesModel.getViewRoot();i.eachNode((function(i){if(!n&&i.piece&&i.piece.childAt(0)===e.target){var r=i.getModel().get("nodeClick");if("rootToNode"===r)t._rootToNode(i);else if("link"===r){var o=i.getModel(),a=o.get("link");if(a){var s=o.get("target",!0)||"_blank";l(a,s)}}n=!0}}))};this.group._onclickEvent&&this.group.off("click",this.group._onclickEvent),this.group.on("click",e),this.group._onclickEvent=e},_rootToNode:function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:u,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},containPoint:function(t,e){var n=e.getData(),i=n.getItemLayout(0);if(i){var r=t[0]-i.cx,o=t[1]-i.cy,a=Math.sqrt(r*r+o*o);return a<=i.r&&a>=i.r0}}}),h=c;t.exports=h},"342d":function(t,e,n){var i=n("cbe5"),r=n("20c8"),o=n("ee84"),a=Math.sqrt,s=Math.sin,l=Math.cos,u=Math.PI,c=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},h=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(c(t)*c(e))},d=function(t,e){return(t[0]*e[1]1&&(c*=a(_),f*=a(_));var b=(r===o?-1:1)*a((c*c*(f*f)-c*c*(x*x)-f*f*(y*y))/(c*c*(x*x)+f*f*(y*y)))||0,w=b*c*x/f,S=b*-f*y/c,M=(t+n)/2+l(m)*w-s(m)*S,A=(e+i)/2+s(m)*w+l(m)*S,T=d([1,0],[(y-w)/c,(x-S)/f]),I=[(y-w)/c,(x-S)/f],C=[(-1*y-w)/c,(-1*x-S)/f],D=d(I,C);h(I,C)<=-1&&(D=u),h(I,C)>=1&&(D=0),0===o&&D>0&&(D-=2*u),1===o&&D<0&&(D+=2*u),v.addData(g,M,A,c,f,T,D,m,o)}var p=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,g=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function v(t){if(!t)return new r;for(var e,n=0,i=0,o=n,a=i,s=new r,l=r.CMD,u=t.match(p),c=0;c=0||"+"===n?"left":"right"},c={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},h={horizontal:0,vertical:y/2},d="vertical"===i?r.height:r.width,f=t.getModel("controlStyle"),p=f.get("show",!0),g=p?f.get("itemSize"):0,v=p?f.get("itemGap"):0,m=g+v,x=t.get("label.rotate")||0;x=x*y/180;var b=f.get("position",!0),w=p&&f.get("showPlayBtn",!0),S=p&&f.get("showPrevBtn",!0),M=p&&f.get("showNextBtn",!0),A=0,T=d;return"left"===b||"bottom"===b?(w&&(o=[0,0],A+=m),S&&(a=[A,0],A+=m),M&&(s=[T-g,0],T-=m)):(w&&(o=[T-g,0],T-=m),S&&(a=[0,0],A+=m),M&&(s=[T-g,0],T-=m)),l=[A,T],t.get("inverse")&&l.reverse(),{viewRect:r,mainLength:d,orient:i,rotation:h[i],labelRotation:x,labelPosOpt:n,labelAlign:t.get("label.align")||u[i],labelBaseline:t.get("label.verticalAlign")||t.get("label.baseline")||c[i],playPosition:o,prevBtnPosition:a,nextBtnPosition:s,axisExtent:l,controlSize:g,controlGap:v}},_position:function(t,e){var n=this._mainGroup,i=this._labelGroup,r=t.viewRect;if("vertical"===t.orient){var a=o.create(),s=r.x,l=r.y+r.height;o.translate(a,a,[-s,-l]),o.rotate(a,a,-y/2),o.translate(a,a,[s,l]),r=r.clone(),r.applyTransform(a)}var u=m(r),c=m(n.getBoundingRect()),h=m(i.getBoundingRect()),d=n.position,f=i.position;f[0]=d[0]=u[0][0];var p=t.labelPosOpt;if(isNaN(p)){var g="+"===p?0:1;x(d,c,u,1,g),x(f,h,u,1,1-g)}else{g=p>=0?0:1;x(d,c,u,1,g),f[1]=d[1]+p}function v(t){var e=t.position;t.origin=[u[0][0]-e[0],u[1][0]-e[1]]}function m(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function x(t,e,n,i,r){t[i]+=n[i][r]-e[i][r]}n.attr("position",d),i.attr("position",f),n.rotation=i.rotation=t.rotation,v(n),v(i)},_createAxis:function(t,e){var n=e.getData(),i=e.get("axisType"),r=d.createScaleByModel(e,i);r.getTicks=function(){return n.mapArray(["value"],(function(t){return t}))};var o=n.getDataExtent("value");r.setExtent(o[0],o[1]),r.niceTicks();var a=new u("value",r,t.axisExtent,i);return a.model=e,a},_createGroup:function(t){var e=this["_"+t]=new a.Group;return this.group.add(e),e},_renderAxisLine:function(t,e,n,r){var o=n.getExtent();r.get("lineStyle.show")&&e.add(new a.Line({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:i.extend({lineCap:"round"},r.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,n,i){var r=i.getData(),o=n.scale.getTicks();m(o,(function(t){var o=n.dataToCoord(t),s=r.getItemModel(t),l=s.getModel("itemStyle"),u=s.getModel("emphasis.itemStyle"),c={position:[o,0],onclick:v(this._changeTimeline,this,t)},h=w(s,l,e,c);a.setHoverStyle(h,u.getItemStyle()),s.get("tooltip")?(h.dataIndex=t,h.dataModel=i):h.dataIndex=h.dataModel=null}),this)},_renderAxisLabel:function(t,e,n,i){var r=n.getLabelModel();if(r.get("show")){var o=i.getData(),s=n.getViewLabels();m(s,(function(i){var r=i.tickValue,s=o.getItemModel(r),l=s.getModel("label"),u=s.getModel("emphasis.label"),c=n.dataToCoord(i.tickValue),h=new a.Text({position:[c,0],rotation:t.labelRotation-t.rotation,onclick:v(this._changeTimeline,this,r),silent:!1});a.setTextStyle(h.style,l,{text:i.formattedLabel,textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(h),a.setHoverStyle(h,a.setTextStyle({},u))}),this)}},_renderControl:function(t,e,n,i){var r=t.controlSize,o=t.rotation,s=i.getModel("controlStyle").getItemStyle(),l=i.getModel("emphasis.controlStyle").getItemStyle(),u=[0,-r/2,r,r],c=i.getPlayState(),h=i.get("inverse",!0);function d(t,n,c,h){if(t){var d={position:t,origin:[r/2,0],rotation:h?-o:0,rectHover:!0,style:s,onclick:c},f=b(i,n,u,d);e.add(f),a.setHoverStyle(f,l)}}d(t.nextBtnPosition,"controlStyle.nextIcon",v(this._changeTimeline,this,h?"-":"+")),d(t.prevBtnPosition,"controlStyle.prevIcon",v(this._changeTimeline,this,h?"+":"-")),d(t.playPosition,"controlStyle."+(c?"stopIcon":"playIcon"),v(this._handlePlayClick,this,!c),!0)},_renderCurrentPointer:function(t,e,n,i){var r=i.getData(),o=i.getCurrentIndex(),a=r.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=v(s._handlePointerDrag,s),t.ondragend=v(s._handlePointerDragend,s),S(t,o,n,i,!0)},onUpdate:function(t){S(t,o,n,i)}};this._currentPointer=w(a,a,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var n=this._toAxisCoord(t)[0],i=this._axis,r=f.asc(i.getExtent().slice());n>r[1]&&(n=r[1]),n0){if(t<=e[0])return n[0];if(t>=e[1])return n[1]}else{if(t>=e[0])return n[0];if(t<=e[1])return n[1]}else{if(t===e[0])return n[0];if(t===e[1])return n[1]}return(t-e[0])/r*o+n[0]}function s(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%";break}return"string"===typeof t?o(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function l(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function u(t){return t.sort((function(t,e){return t-e})),t}function c(t){if(t=+t,isNaN(t))return 0;var e=1,n=0;while(Math.round(t*e)/e!==t)e*=10,n++;return n}function h(t){var e=t.toString(),n=e.indexOf("e");if(n>0){var i=+e.slice(n+1);return i<0?-i:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function d(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function f(t,e,n){if(!t[e])return 0;var r=i.reduce(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===r)return 0;var o=Math.pow(10,n),a=i.map(t,(function(t){return(isNaN(t)?0:t)/r*o*100})),s=100*o,l=i.map(a,(function(t){return Math.floor(t)})),u=i.reduce(l,(function(t,e){return t+e}),0),c=i.map(a,(function(t,e){return t-l[e]}));while(uh&&(h=c[f],d=f);++l[d],c[d]=0,++u}return l[e]/o}var p=9007199254740991;function g(t){var e=2*Math.PI;return(t%e+e)%e}function v(t){return t>-r&&t=10&&e++,e}function b(t,e){var n,i=_(t),r=Math.pow(10,i),o=t/r;return n=e?o<1.5?1:o<2.5?2:o<4?3:o<7?5:10:o<1?1:o<2?2:o<3?3:o<5?5:10,t=n*r,i>=-20?+t.toFixed(i<0?-i:0):t}function w(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r}function S(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i=0}e.linearMap=a,e.parsePercent=s,e.round=l,e.asc=u,e.getPrecision=c,e.getPrecisionSafe=h,e.getPixelPrecision=d,e.getPercentWithPrecision=f,e.MAX_SAFE_INTEGER=p,e.remRadian=g,e.isRadianAroundZero=v,e.parseDate=y,e.quantity=x,e.quantityExponent=_,e.nice=b,e.quantile=w,e.reformIntervals=S,e.isNumeric=M},3846:function(t,e,n){n("9e1e")&&"g"!=/./g.flags&&n("86cc").f(RegExp.prototype,"flags",{configurable:!0,get:n("0bfb")})},"387f":function(t,e,n){"use strict";t.exports=function(t,e,n,i,r){return t.config=e,n&&(t.code=n),t.request=i,t.response=r,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},t}},"38a2":function(t,e,n){var i=n("2b17"),r=i.retrieveRawValue,o=n("eda2"),a=o.getTooltipMarker,s=o.formatTpl,l=n("e0d3"),u=l.getTooltipRenderMode,c=/\{@(.+?)\}/g,h={getDataParams:function(t,e){var n=this.getData(e),i=this.getRawValue(t,e),r=n.getRawIndex(t),o=n.getName(t),s=n.getRawDataItem(t),l=n.getItemVisual(t,"color"),c=n.getItemVisual(t,"borderColor"),h=this.ecModel.getComponent("tooltip"),d=h&&h.get("renderMode"),f=u(d),p=this.mainType,g="series"===p,v=n.userOutput;return{componentType:p,componentSubType:this.subType,componentIndex:this.componentIndex,seriesType:g?this.subType:null,seriesIndex:this.seriesIndex,seriesId:g?this.id:null,seriesName:g?this.name:null,name:o,dataIndex:r,data:s,dataType:e,value:i,color:l,borderColor:c,dimensionNames:v?v.dimensionNames:null,encode:v?v.encode:null,marker:a({color:l,renderMode:f}),$vars:["seriesName","name","value"]}},getFormattedLabel:function(t,e,n,i,o){e=e||"normal";var a=this.getData(n),l=a.getItemModel(t),u=this.getDataParams(t,n);null!=i&&u.value instanceof Array&&(u.value=u.value[i]);var h=l.get("normal"===e?[o||"label","formatter"]:[e,o||"label","formatter"]);if("function"===typeof h)return u.status=e,u.dimensionIndex=i,h(u);if("string"===typeof h){var d=s(h,u);return d.replace(c,(function(e,n){var i=n.length;return"["===n.charAt(0)&&"]"===n.charAt(i-1)&&(n=+n.slice(1,i-1)),r(a,t,n)}))}},getRawValue:function(t,e){return r(this.getData(e),t)},formatTooltip:function(){}};t.exports=h},"38fd":function(t,e,n){var i=n("69a8"),r=n("4bf8"),o=n("613b")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},3901:function(t,e,n){var i=n("282b"),r=i([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),o={getLineStyle:function(t){var e=r(this,t);return e.lineDash=this.getLineDash(e.lineWidth),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),n=Math.max(t,2),i=4*t;return"solid"!==e&&null!=e&&("dashed"===e?[i,i]:[n,n])}};t.exports=o},"392f":function(t,e,n){var i=n("6d8b"),r=i.inherits,o=n("19eb"),a=n("9850");function s(t){o.call(this,t),this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.notClear=!0}s.prototype.incremental=!0,s.prototype.clearDisplaybles=function(){this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.dirty(),this.notClear=!1},s.prototype.addDisplayable=function(t,e){e?this._temporaryDisplayables.push(t):this._displayables.push(t),this.dirty()},s.prototype.addDisplayables=function(t,e){e=e||!1;for(var n=0;n0?i:n)(t)}},"3a56":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("22d1"),s=n("e0d3"),l=n("50e5"),u=n("cc39"),c=o.each,h=l.eachAxisDim,d=r.extendComponentModel({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,n){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var i=f(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this.doInit(i)},mergeOption:function(t){var e=f(t);o.merge(this.option,t,!0),o.merge(this.settledOption,e,!0),this.doInit(e)},doInit:function(t){var e=this.option;a.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),p(this,t);var n=this.settledOption;c([["start","startValue"],["end","endValue"]],(function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)}),this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis((function(e,n,i,r){var o=this.dependentModels[e.axis][n],a=o.__dzAxisProxy||(o.__dzAxisProxy=new u(e.name,n,this,r));t[e.name+"_"+n]=a}),this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();h((function(e){var n=e.axisIndex;t[n]=s.normalizeToArray(t[n])}),this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;h((function(n){null!=t[n.axisIndex]&&(e=!0)}),this);var n=t.orient;return null==n&&e?"orient":e?void 0:(null==n&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),n=this.option,i=this.dependentModels;if(t){var r="vertical"===e?"y":"x";i[r+"Axis"].length?(n[r+"AxisIndex"]=[0],t=!1):c(i.singleAxis,(function(i){t&&i.get("orient",!0)===e&&(n.singleAxisIndex=[i.componentIndex],t=!1)}))}t&&h((function(e){if(t){var i=[],r=this.dependentModels[e.axis];if(r.length&&!i.length)for(var o=0,a=r.length;o0?100:20}},getFirstTargetAxisModel:function(){var t;return h((function(e){if(null==t){var n=this.get(e.axisIndex);n.length&&(t=this.dependentModels[e.axis][n[0]])}}),this),t},eachTargetAxis:function(t,e){var n=this.ecModel;h((function(i){c(this.get(i.axisIndex),(function(r){t.call(e,i,r,this,n)}),this)}),this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var n=this.getAxisProxy(t,e);return n&&n.getAxisModel()},setRawRange:function(t){var e=this.option,n=this.settledOption;c([["start","startValue"],["end","endValue"]],(function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])}),this),p(this,t)},setCalculatedRange:function(t){var e=this.option;c(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var n in e)if(e.hasOwnProperty(n)&&e[n].hostedBy(this))return e[n];for(var n in e)if(e.hasOwnProperty(n)&&!e[n].hostedBy(this))return e[n]},getRangePropMode:function(){return this._rangePropMode.slice()}});function f(t){var e={};return c(["start","end","startValue","endValue","throttle"],(function(n){t.hasOwnProperty(n)&&(e[n]=t[n])})),e}function p(t,e){var n=t._rangePropMode,i=t.get("rangeMode");c([["start","startValue"],["end","endValue"]],(function(t,r){var o=null!=e[t[0]],a=null!=e[t[1]];o&&!a?n[r]="percent":!o&&a?n[r]="value":i?n[r]=i[r]:o&&(n[r]="percent")}))}var g=d;t.exports=g},"3b2b":function(t,e,n){var i=n("7726"),r=n("5dbc"),o=n("86cc").f,a=n("9093").f,s=n("aae3"),l=n("0bfb"),u=i.RegExp,c=u,h=u.prototype,d=/a/g,f=/a/g,p=new u(d)!==d;if(n("9e1e")&&(!p||n("79e5")((function(){return f[n("2b4c")("match")]=!1,u(d)!=d||u(f)==f||"/a/i"!=u(d,"i")})))){u=function(t,e){var n=this instanceof u,i=s(t),o=void 0===e;return!n&&i&&t.constructor===u&&o?t:r(p?new c(i&&!o?t.source:t,e):c((i=t instanceof u)?t.source:t,i&&o?l.call(t):e),n?this:h,u)};for(var g=function(t){t in u||o(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})},v=a(c),m=0;v.length>m;)g(v[m++]);h.constructor=u,u.prototype=h,n("2aba")(i,"RegExp",u)}n("7a56")("RegExp")},"3b8d":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var i=n("795b"),r=n.n(i);function o(t,e,n,i,o,a,s){try{var l=t[a](s),u=l.value}catch(c){return void n(c)}l.done?e(u):r.a.resolve(u).then(i,o)}function a(t){return function(){var e=this,n=arguments;return new r.a((function(i,r){var a=t.apply(e,n);function s(t){o(a,i,r,s,l,"next",t)}function l(t){o(a,i,r,s,l,"throw",t)}s(void 0)}))}}},"3c11":function(t,e,n){"use strict";var i=n("63b6"),r=n("584a"),o=n("e53d"),a=n("f201"),s=n("cd78");i(i.P+i.R,"Promise",{finally:function(t){var e=a(this,r.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}})},"3c4e":function(t,e,n){"use strict";var i=function(t){return r(t)&&!o(t)};function r(t){return!!t&&"object"===typeof t}function o(t){var e=Object.prototype.toString.call(t);return"[object RegExp]"===e||"[object Date]"===e||l(t)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(t){return t.$$typeof===s}function u(t){return Array.isArray(t)?[]:{}}function c(t,e){var n=e&&!0===e.clone;return n&&i(t)?f(u(t),t,e):t}function h(t,e,n){var r=t.slice();return e.forEach((function(e,o){"undefined"===typeof r[o]?r[o]=c(e,n):i(e)?r[o]=f(t[o],e,n):-1===t.indexOf(e)&&r.push(c(e,n))})),r}function d(t,e,n){var r={};return i(t)&&Object.keys(t).forEach((function(e){r[e]=c(t[e],n)})),Object.keys(e).forEach((function(o){i(e[o])&&t[o]?r[o]=f(t[o],e[o],n):r[o]=c(e[o],n)})),r}function f(t,e,n){var i=Array.isArray(e),r=Array.isArray(t),o=n||{arrayMerge:h},a=i===r;if(a){if(i){var s=o.arrayMerge||h;return s(t,e,n)}return d(t,e,n)}return c(e,n)}f.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return f(t,n,e)}))};var p=f;t.exports=p},"3cd6":function(t,e,n){var i=n("6d8b"),r=n("48a9"),o=n("607d"),a=n("72b6"),s=n("2306"),l=n("3842"),u=n("ef6a"),c=n("cbb0"),h=n("e0d3"),d=l.linearMap,f=i.each,p=Math.min,g=Math.max,v=12,m=6,y=a.extend({type:"visualMap.continuous",init:function(){y.superApply(this,"init",arguments),this._shapes={},this._dataInterval=[],this._handleEnds=[],this._orient,this._useHandle,this._hoverLinkDataIndices=[],this._dragging,this._hovering},doRender:function(t,e,n,i){i&&"selectDataRange"===i.type&&i.from===this.uid||this._buildView()},_buildView:function(){this.group.removeAll();var t=this.visualMapModel,e=this.group;this._orient=t.get("orient"),this._useHandle=t.get("calculable"),this._resetInterval(),this._renderBar(e);var n=t.get("text");this._renderEndsText(e,n,0),this._renderEndsText(e,n,1),this._updateView(!0),this.renderBackground(e),this._updateView(),this._enableHoverLinkToSeries(),this._enableHoverLinkFromSeries(),this.positionGroup(e)},_renderEndsText:function(t,e,n){if(e){var i=e[1-n];i=null!=i?i+"":"";var r=this.visualMapModel,o=r.get("textGap"),a=r.itemSize,l=this._shapes.barGroup,u=this._applyTransform([a[0]/2,0===n?-o:a[1]+o],l),c=this._applyTransform(0===n?"bottom":"top",l),h=this._orient,d=this.visualMapModel.textStyleModel;this.group.add(new s.Text({style:{x:u[0],y:u[1],textVerticalAlign:"horizontal"===h?"middle":c,textAlign:"horizontal"===h?c:"center",text:i,textFont:d.getFont(),textFill:d.getTextColor()}}))}},_renderBar:function(t){var e=this.visualMapModel,n=this._shapes,r=e.itemSize,o=this._orient,a=this._useHandle,s=c.getItemAlign(e,this.api,r),l=n.barGroup=this._createBarGroup(s);l.add(n.outOfRange=x()),l.add(n.inRange=x(null,a?M(this._orient):null,i.bind(this._dragHandle,this,"all",!1),i.bind(this._dragHandle,this,"all",!0)));var u=e.textStyleModel.getTextRect("国"),h=g(u.width,u.height);a&&(n.handleThumbs=[],n.handleLabels=[],n.handleLabelPoints=[],this._createHandle(l,0,r,h,o,s),this._createHandle(l,1,r,h,o,s)),this._createIndicator(l,r,h,o),t.add(l)},_createHandle:function(t,e,n,r,a){var l=i.bind(this._dragHandle,this,e,!1),u=i.bind(this._dragHandle,this,e,!0),c=x(_(e,r),M(this._orient),l,u);c.position[0]=n[0],t.add(c);var h=this.visualMapModel.textStyleModel,d=new s.Text({draggable:!0,drift:l,onmousemove:function(t){o.stop(t.event)},ondragend:u,style:{x:0,y:0,text:"",textFont:h.getFont(),textFill:h.getTextColor()}});this.group.add(d);var f=["horizontal"===a?r/2:1.5*r,"horizontal"===a?0===e?-1.5*r:1.5*r:0===e?-r/2:r/2],p=this._shapes;p.handleThumbs[e]=c,p.handleLabelPoints[e]=f,p.handleLabels[e]=d},_createIndicator:function(t,e,n,i){var r=x([[0,0]],"move");r.position[0]=e[0],r.attr({invisible:!0,silent:!0}),t.add(r);var o=this.visualMapModel.textStyleModel,a=new s.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textFont:o.getFont(),textFill:o.getTextColor()}});this.group.add(a);var l=["horizontal"===i?n/2:m+3,0],u=this._shapes;u.indicator=r,u.indicatorLabel=a,u.indicatorLabelPoint=l},_dragHandle:function(t,e,n,i){if(this._useHandle){if(this._dragging=!e,!e){var r=this._applyTransform([n,i],this._shapes.barGroup,!0);this._updateInterval(t,r[1]),this._updateView()}e===!this.visualMapModel.get("realtime")&&this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:this._dataInterval.slice()}),e?!this._hovering&&this._clearHoverLinkToSeries():S(this.visualMapModel)&&this._doHoverLinkToSeries(this._handleEnds[t],!1)}},_resetInterval:function(){var t=this.visualMapModel,e=this._dataInterval=t.getSelected(),n=t.getExtent(),i=[0,t.itemSize[1]];this._handleEnds=[d(e[0],n,i,!0),d(e[1],n,i,!0)]},_updateInterval:function(t,e){e=e||0;var n=this.visualMapModel,i=this._handleEnds,r=[0,n.itemSize[1]];u(e,i,r,t,0);var o=n.getExtent();this._dataInterval=[d(i[0],r,o,!0),d(i[1],r,o,!0)]},_updateView:function(t){var e=this.visualMapModel,n=e.getExtent(),i=this._shapes,r=[0,e.itemSize[1]],o=t?r:this._handleEnds,a=this._createBarVisual(this._dataInterval,n,o,"inRange"),s=this._createBarVisual(n,n,r,"outOfRange");i.inRange.setStyle({fill:a.barColor,opacity:a.opacity}).setShape("points",a.barPoints),i.outOfRange.setStyle({fill:s.barColor,opacity:s.opacity}).setShape("points",s.barPoints),this._updateHandle(o,a)},_createBarVisual:function(t,e,n,i){var o={forceState:i,convertOpacityToAlpha:!0},a=this._makeColorGradient(t,o),s=[this.getControllerVisual(t[0],"symbolSize",o),this.getControllerVisual(t[1],"symbolSize",o)],l=this._createBarPoints(n,s);return{barColor:new r(0,0,0,1,a),barPoints:l,handlesColor:[a[0].color,a[a.length-1].color]}},_makeColorGradient:function(t,e){var n=100,i=[],r=(t[1]-t[0])/n;i.push({color:this.getControllerVisual(t[0],"color",e),offset:0});for(var o=1;ot[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/n})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var n=this.visualMapModel.itemSize;return[[n[0]-e[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,n=this.visualMapModel.get("inverse");return new s.Group("horizontal"!==e||n?"horizontal"===e&&n?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||n?{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(t,e){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,r=n.handleThumbs,o=n.handleLabels;f([0,1],(function(a){var l=r[a];l.setStyle("fill",e.handlesColor[a]),l.position[1]=t[a];var u=s.applyTransform(n.handleLabelPoints[a],s.getTransform(l,this.group));o[a].setStyle({x:u[0],y:u[1],text:i.formatValueText(this._dataInterval[a]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===a?"bottom":"top":"left",n.barGroup)})}),this)}},_showIndicator:function(t,e,n,i){var r=this.visualMapModel,o=r.getExtent(),a=r.itemSize,l=[0,a[1]],u=d(t,o,l,!0),c=this._shapes,h=c.indicator;if(h){h.position[1]=u,h.attr("invisible",!1),h.setShape("points",b(!!n,i,u,a[1]));var f={convertOpacityToAlpha:!0},p=this.getControllerVisual(t,"color",f);h.setStyle("fill",p);var g=s.applyTransform(c.indicatorLabelPoint,s.getTransform(h,this.group)),v=c.indicatorLabel;v.attr("invisible",!1);var m=this._applyTransform("left",c.barGroup),y=this._orient;v.setStyle({text:(n||"")+r.formatValueText(e),textVerticalAlign:"horizontal"===y?m:"middle",textAlign:"horizontal"===y?"center":m,x:g[0],y:g[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",(function(e){if(t._hovering=!0,!t._dragging){var n=t.visualMapModel.itemSize,i=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);i[1]=p(g(0,i[1]),n[1]),t._doHoverLinkToSeries(i[1],0<=i[0]&&i[0]<=n[0])}})).on("mouseout",(function(){t._hovering=!1,!t._dragging&&t._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 n=this.visualMapModel,i=n.itemSize;if(n.option.hoverLink){var r=[0,i[1]],o=n.getExtent();t=p(g(r[0],t),r[1]);var a=w(n,o,r),s=[t-a,t+a],l=d(t,r,o,!0),u=[d(s[0],r,o,!0),d(s[1],r,o,!0)];s[0]r[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var f=this._hoverLinkDataIndices,v=[];(e||S(n))&&(v=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var m=h.compressBatches(f,v);this._dispatchHighDown("downplay",c.makeHighDownBatch(m[0],n)),this._dispatchHighDown("highlight",c.makeHighDownBatch(m[1],n))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target,n=this.visualMapModel;if(e&&null!=e.dataIndex){var i=this.ecModel.getSeriesByIndex(e.seriesIndex);if(n.isTargetSeries(i)){var r=i.getData(e.dataType),o=r.get(n.getDataDimension(r),e.dataIndex,!0);isNaN(o)||this._showIndicator(o,o)}}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",c.makeHighDownBatch(t,this.visualMapModel)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,n,r){var o=s.getTransform(e,r?null:this.group);return s[i.isArray(t)?"applyTransform":"transformDirection"](t,o,n)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});function x(t,e,n,i){return new s.Polygon({shape:{points:t},draggable:!!n,cursor:e,drift:n,onmousemove:function(t){o.stop(t.event)},ondragend:i})}function _(t,e){return 0===t?[[0,0],[e,0],[e,-e]]:[[0,0],[e,0],[e,e]]}function b(t,e,n,i){return t?[[0,-p(e,g(n,0))],[m,0],[0,p(e,g(i-n,0))]]:[[0,0],[5,-5],[5,5]]}function w(t,e,n){var i=v/2,r=t.get("hoverLinkDataSize");return r&&(i=d(r,e,n,!0)/2),i}function S(t){var e=t.get("hoverLinkOnHandle");return!!(null==e?t.get("realtime"):e)}function M(t){return"vertical"===t?"ns-resize":"ew-resize"}var A=y;t.exports=A},"3eba":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("697e7")),o=n("6d8b"),a=n("41ef"),s=n("22d1"),l=n("04f6"),u=n("1fab"),c=n("7e63"),h=n("843e"),d=n("2039"),f=n("ca98"),p=n("fb05"),g=n("d15d"),v=n("6cb7"),m=n("4f85"),y=n("b12f"),x=n("e887"),_=n("2306"),b=n("e0d3"),w=n("88b3"),S=w.throttle,M=n("fd63"),A=n("b809"),T=n("998c"),I=n("69ff"),C=n("c533"),D=n("f219");n("0352");var k=n("ec34"),L=o.assert,P=o.each,O=o.isFunction,E=o.isObject,R=v.parseClassType,N="4.9.0",z={zrender:"4.3.2"},B=1,V=1e3,F=800,H=900,G=5e3,j=1e3,W=1100,U=2e3,q=3e3,$=3500,Z=4e3,Y=5e3,X={PROCESSOR:{FILTER:V,SERIES_FILTER:F,STATISTIC:G},VISUAL:{LAYOUT:j,PROGRESSIVE_LAYOUT:W,GLOBAL:U,CHART:q,POST_CHART_LAYOUT:$,COMPONENT:Z,BRUSH:Y}},K="__flagInMainProcess",J="__optionUpdated",Q=/^[a-zA-Z0-9_]+$/;function tt(t,e){return function(n,i,r){e||!this._disposed?(n=n&&n.toLowerCase(),u.prototype[t].call(this,n,i,r)):_t(this.id)}}function et(){u.call(this)}function nt(t,e,n){n=n||{},"string"===typeof e&&(e=Pt[e]),this.id,this.group,this._dom=t;var i="canvas",a=this._zr=r.init(t,{renderer:n.renderer||i,devicePixelRatio:n.devicePixelRatio,width:n.width,height:n.height});this._throttledZrFlush=S(o.bind(a.flush,a),17);e=o.clone(e);e&&p(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new d;var s=this._api=Mt(this);function c(t,e){return t.__prio-e.__prio}l(Lt,c),l(Ct,c),this._scheduler=new I(this,s,Ct,Lt),u.call(this,this._ecEventProcessor=new At),this._messageCenter=new et,this._initEvents(),this.resize=o.bind(this.resize,this),this._pendingActions=[],a.animation.on("frame",this._onframe,this),dt(a,this),o.setAsPrimitive(this)}et.prototype.on=tt("on",!0),et.prototype.off=tt("off",!0),et.prototype.one=tt("one",!0),o.mixin(et,u);var it=nt.prototype;function rt(t,e,n){if(this._disposed)_t(this.id);else{var i,r=this._model,o=this._coordSysMgr.getCoordinateSystems();e=b.parseFinder(r,e);for(var a=0;a0&&t.unfinished);t.unfinished||this._zr.flush()}}},it.getDom=function(){return this._dom},it.getZr=function(){return this._zr},it.setOption=function(t,e,n){if(this._disposed)_t(this.id);else{var i;if(E(e)&&(n=e.lazyUpdate,i=e.silent,e=e.notMerge),this[K]=!0,!this._model||e){var r=new f(this._api),o=this._theme,a=this._model=new c;a.scheduler=this._scheduler,a.init(null,null,o,r)}this._model.setOption(t,Dt),n?(this[J]={silent:i},this[K]=!1):(at(this),ot.update.call(this),this._zr.flush(),this[J]=!1,this[K]=!1,ct.call(this,i),ht.call(this,i))}},it.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},it.getModel=function(){return this._model},it.getOption=function(){return this._model&&this._model.getOption()},it.getWidth=function(){return this._zr.getWidth()},it.getHeight=function(){return this._zr.getHeight()},it.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},it.getRenderedCanvas=function(t){if(s.canvasSupported){t=t||{},t.pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr;return e.painter.getRenderedCanvas(t)}},it.getSvgDataURL=function(){if(s.svgSupported){var t=this._zr,e=t.storage.getDisplayList();return o.each(e,(function(t){t.stopAnimation(!0)})),t.painter.toDataURL()}},it.getDataURL=function(t){if(!this._disposed){t=t||{};var e=t.excludeComponents,n=this._model,i=[],r=this;P(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return P(i,(function(t){t.group.ignore=!1})),o}_t(this.id)},it.getConnectedDataURL=function(t){if(this._disposed)_t(this.id);else if(s.canvasSupported){var e="svg"===t.type,n=this.group,i=Math.min,a=Math.max,l=1/0;if(Rt[n]){var u=l,c=l,h=-l,d=-l,f=[],p=t&&t.pixelRatio||1;o.each(Et,(function(r,s){if(r.group===n){var l=e?r.getZr().painter.getSvgDom().innerHTML:r.getRenderedCanvas(o.clone(t)),p=r.getDom().getBoundingClientRect();u=i(p.left,u),c=i(p.top,c),h=a(p.right,h),d=a(p.bottom,d),f.push({dom:l,left:p.left,top:p.top})}})),u*=p,c*=p,h*=p,d*=p;var g=h-u,v=d-c,m=o.createCanvas(),y=r.init(m,{renderer:e?"svg":"canvas"});if(y.resize({width:g,height:v}),e){var x="";return P(f,(function(t){var e=t.left-u,n=t.top-c;x+=''+t.dom+""})),y.painter.getSvgRoot().innerHTML=x,t.connectedBackgroundColor&&y.painter.setBackgroundColor(t.connectedBackgroundColor),y.refreshImmediately(),y.painter.toDataURL()}return t.connectedBackgroundColor&&y.add(new _.Rect({shape:{x:0,y:0,width:g,height:v},style:{fill:t.connectedBackgroundColor}})),P(f,(function(t){var e=new _.Image({style:{x:t.left*p-u,y:t.top*p-c,image:t.dom}});y.add(e)})),y.refreshImmediately(),m.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},it.convertToPixel=o.curry(rt,"convertToPixel"),it.convertFromPixel=o.curry(rt,"convertFromPixel"),it.containPixel=function(t,e){if(!this._disposed){var n,i=this._model;return t=b.parseFinder(i,t),o.each(t,(function(t,i){i.indexOf("Models")>=0&&o.each(t,(function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n|=!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n|=o.containPoint(e,t))}}),this)}),this),!!n}_t(this.id)},it.getVisual=function(t,e){var n=this._model;t=b.parseFinder(n,t,{defaultMainType:"series"});var i=t.seriesModel,r=i.getData(),o=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?r.indexOfRawIndex(t.dataIndex):null;return null!=o?r.getItemVisual(o,e):r.getVisual(e)},it.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},it.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var ot={prepareAndUpdate:function(t){at(this),ot.update.call(this,t)},update:function(t){var e=this._model,n=this._api,i=this._zr,r=this._coordSysMgr,o=this._scheduler;if(e){o.restoreData(e,t),o.performSeriesTasks(e),r.create(e,n),o.performDataProcessorTasks(e,t),lt(this,e),r.update(e,n),pt(e),o.performVisualTasks(e,t),gt(this,e,n,t);var l=e.get("backgroundColor")||"transparent";if(s.canvasSupported)i.setBackgroundColor(l);else{var u=a.parse(l);l=a.stringify(u,"rgb"),0===u[3]&&(l="transparent")}yt(e,n)}},updateTransform:function(t){var e=this._model,n=this,i=this._api;if(e){var r=[];e.eachComponent((function(o,a){var s=n.getViewOfComponentModel(a);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(a,e,i,t);l&&l.update&&r.push(s)}else r.push(s)}));var a=o.createHashMap();e.eachSeries((function(r){var o=n._chartsMap[r.__viewId];if(o.updateTransform){var s=o.updateTransform(r,e,i,t);s&&s.update&&a.set(r.uid,1)}else a.set(r.uid,1)})),pt(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),mt(n,e,i,t,a),yt(e,this._api)}},updateView:function(t){var e=this._model;e&&(x.markUpdateMethod(t,"updateView"),pt(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),gt(this,this._model,this._api,t),yt(e,this._api))},updateVisual:function(t){ot.update.call(this,t)},updateLayout:function(t){ot.update.call(this,t)}};function at(t){var e=t._model,n=t._scheduler;n.restorePipelines(e),n.prepareStageTasks(),ft(t,"component",e,n),ft(t,"chart",e,n),n.plan()}function st(t,e,n,i,r){var a=t._model;if(i){var s={};s[i+"Id"]=n[i+"Id"],s[i+"Index"]=n[i+"Index"],s[i+"Name"]=n[i+"Name"];var l={mainType:i,query:s};r&&(l.subType=r);var u=n.excludeSeriesId;null!=u&&(u=o.createHashMap(b.normalizeToArray(u))),a&&a.eachComponent(l,(function(e){u&&null!=u.get(e.id)||c(t["series"===i?"_chartsMap":"_componentsMap"][e.__viewId])}),t)}else P(t._componentsViews.concat(t._chartsViews),c);function c(i){i&&i.__alive&&i[e]&&i[e](i.__model,a,t._api,n)}}function lt(t,e){var n=t._chartsMap,i=t._scheduler;e.eachSeries((function(t){i.updateStreamModes(t,n[t.__viewId])}))}function ut(t,e){var n=t.type,i=t.escapeConnect,r=Tt[n],a=r.actionInfo,s=(a.update||"update").split(":"),l=s.pop();s=null!=s[0]&&R(s[0]),this[K]=!0;var u=[t],c=!1;t.batch&&(c=!0,u=o.map(t.batch,(function(e){return e=o.defaults(o.extend({},e),t),e.batch=null,e})));var h,d=[],f="highlight"===n||"downplay"===n;P(u,(function(t){h=r.action(t,this._model,this._api),h=h||o.extend({},t),h.type=a.event||h.type,d.push(h),f?st(this,l,t,"series"):s&&st(this,l,t,s.main,s.sub)}),this),"none"===l||f||s||(this[J]?(at(this),ot.update.call(this,t),this[J]=!1):ot[l].call(this,t)),h=c?{type:a.event||n,escapeConnect:i,batch:d}:d[0],this[K]=!1,!e&&this._messageCenter.trigger(h.type,h)}function ct(t){var e=this._pendingActions;while(e.length){var n=e.shift();ut.call(this,n,t)}}function ht(t){!t&&this.trigger("updated")}function dt(t,e){t.on("rendered",(function(){e.trigger("rendered"),!t.animation.isFinished()||e[J]||e._scheduler.unfinished||e._pendingActions.length||e.trigger("finished")}))}function ft(t,e,n,i){for(var r="component"===e,o=r?t._componentsViews:t._chartsViews,a=r?t._componentsMap:t._chartsMap,s=t._zr,l=t._api,u=0;ue.get("hoverLayerThreshold")&&!s.node&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.group.traverse((function(t){t.useHoverLayer=!0}))}}))}function wt(t,e){var n=t.get("blendMode")||null;e.group.traverse((function(t){t.isGroup||t.style.blend!==n&&t.setStyle("blend",n),t.eachPendingDisplayable&&t.eachPendingDisplayable((function(t){t.setStyle("blend",n)}))}))}function St(t,e){var n=t.get("z"),i=t.get("zlevel");e.group.traverse((function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=i&&(t.zlevel=i))}))}function Mt(t){var e=t._coordSysMgr;return o.extend(new h(t),{getCoordinateSystems:o.bind(e.getCoordinateSystems,e),getComponentByElement:function(e){while(e){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}}})}function At(){this.eventInfo}it._initEvents=function(){P(xt,(function(t){var e=function(e){var n,i=this.getModel(),r=e.target,a="globalout"===t;if(a)n={};else if(r&&null!=r.dataIndex){var s=r.dataModel||i.getSeriesByIndex(r.seriesIndex);n=s&&s.getDataParams(r.dataIndex,r.dataType,r)||{}}else r&&r.eventData&&(n=o.extend({},r.eventData));if(n){var l=n.componentType,u=n.componentIndex;"markLine"!==l&&"markPoint"!==l&&"markArea"!==l||(l="series",u=n.seriesIndex);var c=l&&null!=u&&i.getComponent(l,u),h=c&&this["series"===c.mainType?"_chartsMap":"_componentsMap"][c.__viewId];n.event=e,n.type=t,this._ecEventProcessor.eventInfo={targetEl:r,packedEvent:n,model:c,view:h},this.trigger(t,n)}};e.zrEventfulCallAtLast=!0,this._zr.on(t,e,this)}),this),P(It,(function(t,e){this._messageCenter.on(e,(function(t){this.trigger(e,t)}),this)}),this)},it.isDisposed=function(){return this._disposed},it.clear=function(){this._disposed?_t(this.id):this.setOption({series:[]},!0)},it.dispose=function(){if(this._disposed)_t(this.id);else{this._disposed=!0,b.setAttribute(this.getDom(),Bt,"");var t=this._api,e=this._model;P(this._componentsViews,(function(n){n.dispose(e,t)})),P(this._chartsViews,(function(n){n.dispose(e,t)})),this._zr.dispose(),delete Et[this.id]}},o.mixin(nt,u),At.prototype={constructor:At,normalizeQuery:function(t){var e={},n={},i={};if(o.isString(t)){var r=R(t);e.mainType=r.main||null,e.subType=r.sub||null}else{var a=["Index","Name","Id"],s={name:1,dataIndex:1,dataType:1};o.each(t,(function(t,r){for(var o=!1,l=0;l0&&c===r.length-u.length){var h=r.slice(0,c);"data"!==h&&(e.mainType=h,e[u.toLowerCase()]=t,o=!0)}}s.hasOwnProperty(r)&&(n[r]=t,o=!0),o||(i[r]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:i}},filter:function(t,e,n){var i=this.eventInfo;if(!i)return!0;var r=i.targetEl,o=i.packedEvent,a=i.model,s=i.view;if(!a||!s)return!0;var l=e.cptQuery,u=e.dataQuery;return c(l,a,"mainType")&&c(l,a,"subType")&&c(l,a,"index","componentIndex")&&c(l,a,"name")&&c(l,a,"id")&&c(u,o,"name")&&c(u,o,"dataIndex")&&c(u,o,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,e.otherQuery,r,o));function c(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},afterTrigger:function(){this.eventInfo=null}};var Tt={},It={},Ct=[],Dt=[],kt=[],Lt=[],Pt={},Ot={},Et={},Rt={},Nt=new Date-0,zt=new Date-0,Bt="_echarts_instance_";function Vt(t){var e=0,n=1,i=2,r="__connectUpdateStatus";function o(t,e){for(var n=0;n-_}function S(t,e){var n=e?t.textFill:t.fill;return null!=n&&n!==f}function M(t,e){var n=e?t.textStroke:t.stroke;return null!=n&&n!==f}function A(t,e){e&&T(t,"transform","matrix("+d.call(e,",")+")")}function T(t,e,n){(!n||"linear"!==n.type&&"radial"!==n.type)&&t.setAttribute(e,n)}function I(t,e,n){t.setAttributeNS("http://www.w3.org/1999/xlink",e,n)}function C(t,e,n,i){if(S(e,n)){var r=n?e.textFill:e.fill;r="transparent"===r?f:r,T(t,"fill",r),T(t,"fill-opacity",null!=e.fillOpacity?e.fillOpacity*e.opacity:e.opacity)}else T(t,"fill",f);if(M(e,n)){var o=n?e.textStroke:e.stroke;o="transparent"===o?f:o,T(t,"stroke",o);var a=n?e.textStrokeWidth:e.lineWidth,s=!n&&e.strokeNoScale?i.getLineScale():1;T(t,"stroke-width",a/s),T(t,"paint-order",n?"stroke":"fill"),T(t,"stroke-opacity",null!=e.strokeOpacity?e.strokeOpacity:e.opacity);var l=e.lineDash;l?(T(t,"stroke-dasharray",e.lineDash.join(",")),T(t,"stroke-dashoffset",p(e.lineDashOffset||0))):T(t,"stroke-dasharray",""),e.lineCap&&T(t,"stroke-linecap",e.lineCap),e.lineJoin&&T(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&T(t,"stroke-miterlimit",e.miterLimit)}else T(t,"stroke",f)}function D(t){for(var e=[],n=t.data,i=t.len(),r=0;r=y:-_>=y),I=_>0?_%y:_%y+y,C=!1;C=!!T||!w(A)&&I>=m===!!M;var D=b(l+c*v(f)),k=b(u+d*g(f));T&&(_=M?y-1e-4:1e-4-y,C=!0,9===r&&e.push("M",D,k));var L=b(l+c*v(f+_)),P=b(u+d*g(f+_));e.push("A",b(c),b(d),p(S*x),+C,+M,L,P);break;case h.Z:a="Z";break;case h.R:L=b(n[r++]),P=b(n[r++]);var O=b(n[r++]),E=b(n[r++]);e.push("M",L,P,"L",L+O,P,"L",L+O,P+E,"L",L,P+E,"L",L,P);break}a&&e.push(a);for(var R=0;RP){for(;kn)e.push(arguments[n++]);return m[++v]=function(){s("function"==typeof t?t:Function(t),e)},i(v),v},f=function(t){delete m[t]},"process"==n("6b4c")(h)?i=function(t){h.nextTick(a(x,t,1))}:g&&g.now?i=function(t){g.now(a(x,t,1))}:p?(r=new p,o=r.port2,r.port1.onmessage=_,i=a(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(i=function(t){c.postMessage(t+"","*")},c.addEventListener("message",_,!1)):i=y in u("script")?function(t){l.appendChild(u("script"))[y]=function(){l.removeChild(this),x.call(t)}}:function(t){setTimeout(a(x,t,1),0)}),t.exports={set:d,clear:f}},"41a0":function(t,e,n){"use strict";var i=n("2aeb"),r=n("4630"),o=n("7f20"),a={};n("32e9")(a,n("2b4c")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=i(a,{next:r(1,n)}),o(t,e+" Iterator")}},"41b2":function(t,e,n){"use strict";e.__esModule=!0;var i=n("3f6b"),r=o(i);function o(t){return t&&t.__esModule?t:{default:t}}e.default=r.default||function(t){for(var e=1;e255?255:t}function a(t){return t=Math.round(t),t<0?0:t>360?360:t}function s(t){return t<0?0:t>1?1:t}function l(t){return t.length&&"%"===t.charAt(t.length-1)?o(parseFloat(t)/100*255):o(parseInt(t,10))}function u(t){return t.length&&"%"===t.charAt(t.length-1)?s(parseFloat(t)/100):s(parseFloat(t))}function c(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function h(t,e,n){return t+(e-t)*n}function d(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function f(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var p=new i(20),g=null;function v(t,e){g&&f(g,e),g=p.put(t,g||e.slice())}function m(t,e){if(t){e=e||[];var n=p.get(t);if(n)return f(e,n);t+="";var i=t.replace(/ /g,"").toLowerCase();if(i in r)return f(e,r[i]),v(t,e),e;if("#"!==i.charAt(0)){var o=i.indexOf("("),a=i.indexOf(")");if(-1!==o&&a+1===i.length){var s=i.substr(0,o),c=i.substr(o+1,a-(o+1)).split(","),h=1;switch(s){case"rgba":if(4!==c.length)return void d(e,0,0,0,1);h=u(c.pop());case"rgb":return 3!==c.length?void d(e,0,0,0,1):(d(e,l(c[0]),l(c[1]),l(c[2]),h),v(t,e),e);case"hsla":return 4!==c.length?void d(e,0,0,0,1):(c[3]=u(c[3]),y(c,e),v(t,e),e);case"hsl":return 3!==c.length?void d(e,0,0,0,1):(y(c,e),v(t,e),e);default:return}}d(e,0,0,0,1)}else{if(4===i.length){var g=parseInt(i.substr(1),16);return g>=0&&g<=4095?(d(e,(3840&g)>>4|(3840&g)>>8,240&g|(240&g)>>4,15&g|(15&g)<<4,1),v(t,e),e):void d(e,0,0,0,1)}if(7===i.length){g=parseInt(i.substr(1),16);return g>=0&&g<=16777215?(d(e,(16711680&g)>>16,(65280&g)>>8,255&g,1),v(t,e),e):void d(e,0,0,0,1)}}}}function y(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=u(t[1]),r=u(t[2]),a=r<=.5?r*(i+1):r+i-r*i,s=2*r-a;return e=e||[],d(e,o(255*c(s,a,n+1/3)),o(255*c(s,a,n)),o(255*c(s,a,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function x(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var c=((s-i)/6+l/2)/l,h=((s-r)/6+l/2)/l,d=((s-o)/6+l/2)/l;i===s?e=d-h:r===s?e=1/3+c-d:o===s&&(e=2/3+h-c),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,n,u];return null!=t[3]&&f.push(t[3]),f}}function _(t,e){var n=m(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:t[i]<0&&(n[i]=0);return C(n,4===n.length?"rgba":"rgb")}}function b(t){var e=m(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function w(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),a=Math.ceil(i),l=e[r],u=e[a],c=i-r;return n[0]=o(h(l[0],u[0],c)),n[1]=o(h(l[1],u[1],c)),n[2]=o(h(l[2],u[2],c)),n[3]=s(h(l[3],u[3],c)),n}}var S=w;function M(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),a=Math.ceil(i),l=m(e[r]),u=m(e[a]),c=i-r,d=C([o(h(l[0],u[0],c)),o(h(l[1],u[1],c)),o(h(l[2],u[2],c)),s(h(l[3],u[3],c))],"rgba");return n?{color:d,leftIndex:r,rightIndex:a,value:i}:d}}var A=M;function T(t,e,n,i){if(t=m(t),t)return t=x(t),null!=e&&(t[0]=a(e)),null!=n&&(t[1]=u(n)),null!=i&&(t[2]=u(i)),C(y(t),"rgba")}function I(t,e){if(t=m(t),t&&null!=e)return t[3]=s(e),C(t,"rgba")}function C(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}e.parse=m,e.lift=_,e.toHex=b,e.fastLerp=w,e.fastMapToColor=S,e.lerp=M,e.mapToColor=A,e.modifyHSL=T,e.modifyAlpha=I,e.stringify=C},"42e5":function(t,e){var n=function(t){this.colorStops=t||[]};n.prototype={constructor:n,addColorStop:function(t,e){this.colorStops.push({offset:t,color:e})}};var i=n;t.exports=i},"42f6":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("22d1"),a=n("07d7"),s=n("82f9"),l=n("eda2"),u=n("3842"),c=n("2306"),h=n("133d"),d=n("f934"),f=n("4319"),p=n("17d6"),g=n("697e"),v=n("ff2e"),m=n("e0d3"),y=m.getTooltipRenderMode,x=r.bind,_=r.each,b=u.parsePercent,w=new c.Rect({shape:{x:-1,y:-1,width:2,height:2}}),S=i.extendComponentView({type:"tooltip",init:function(t,e){if(!o.node){var n,i=t.getComponent("tooltip"),r=i.get("renderMode");this._renderMode=y(r),"html"===this._renderMode?(n=new a(e.getDom(),e,{appendToBody:i.get("appendToBody",!0)}),this._newLine="
"):(n=new s(e),this._newLine="\n"),this._tooltipContent=n}},render:function(t,e,n){if(!o.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=n,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var i=this._tooltipContent;i.update(t),i.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel,e=t.get("triggerOn");p.register("itemTooltip",this._api,x((function(t,n,i){"none"!==e&&(e.indexOf(t)>=0?this._tryShow(n,i):"leave"===t&&this._hide(i))}),this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,n=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var i=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&i.manuallyShowTip(t,e,n,{x:i._lastX,y:i._lastY})}))}},manuallyShowTip:function(t,e,n,i){if(i.from!==this.uid&&!o.node){var r=A(i,n);this._ticket="";var a=i.dataByCoordSys;if(i.tooltip&&null!=i.x&&null!=i.y){var s=w;s.position=[i.x,i.y],s.update(),s.tooltip=i.tooltip,this._tryShow({offsetX:i.x,offsetY:i.y,target:s},r)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:i.dataByCoordSys,tooltipOption:i.tooltipOption},r);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var l=h(i,e),u=l.point[0],c=l.point[1];null!=u&&null!=c&&this._tryShow({offsetX:u,offsetY:c,position:i.position,target:l.el},r)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},r))}},manuallyHideTip:function(t,e,n,i){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,i.from!==this.uid&&this._hide(A(i,n))},_manuallyAxisShowTip:function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s){var l=s.getData();t=M([l.getItemModel(o),s,(s.coordinateSystem||{}).model,t]);if("axis"===t.get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}}},_tryShow:function(t,e){var n=t.target,i=this._tooltipModel;if(i){this._lastX=t.offsetX,this._lastY=t.offsetY;var r=t.dataByCoordSys;r&&r.length?this._showAxisTooltip(r,t):n&&null!=n.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,n,e)):n&&n.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,n,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var n=t.get("showDelay");e=r.bind(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},_showAxisTooltip:function(t,e){var n=this._ecModel,i=this._tooltipModel,o=[e.offsetX,e.offsetY],a=[],s=[],u=M([e.tooltipOption,i]),c=this._renderMode,h=this._newLine,d={};_(t,(function(t){_(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),i=t.value,o=[];if(e&&null!=i){var u=v.getValueLabel(i,e.axis,n,t.seriesDataIndices,t.valueLabelOpt);r.each(t.seriesDataIndices,(function(a){var l=n.getSeriesByIndex(a.seriesIndex),h=a.dataIndexInside,f=l&&l.getDataParams(h);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=g.getAxisRawValue(e.axis,i),f.axisValueLabel=u,f){s.push(f);var p,v=l.formatTooltip(h,!0,null,c);if(r.isObject(v)){p=v.html;var m=v.markers;r.merge(d,m)}else p=v;o.push(p)}}));var f=u;"html"!==c?a.push(o.join(h)):a.push((f?l.encodeHTML(f)+h:"")+o.join(h))}}))}),this),a.reverse(),a=a.join(this._newLine+this._newLine);var f=e.position;this._showOrMove(u,(function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(u,f,o[0],o[1],this._tooltipContent,s):this._showTooltipContent(u,a,s,Math.random(),o[0],o[1],f,void 0,d)}))},_showSeriesItemTooltip:function(t,e,n){var i=this._ecModel,o=e.seriesIndex,a=i.getSeriesByIndex(o),s=e.dataModel||a,l=e.dataIndex,u=e.dataType,c=s.getData(u),h=M([c.getItemModel(l),s,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),d=h.get("trigger");if(null==d||"item"===d){var f,p,g=s.getDataParams(l,u),v=s.formatTooltip(l,!1,u,this._renderMode);r.isObject(v)?(f=v.html,p=v.markers):(f=v,p=null);var m="item_"+s.name+"_"+l;this._showOrMove(h,(function(){this._showTooltipContent(h,f,g,m,t.offsetX,t.offsetY,t.position,t.target,p)})),n({type:"showTip",dataIndexInside:l,dataIndex:c.getRawIndex(l),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(t,e,n){var i=e.tooltip;if("string"===typeof i){var r=i;i={content:r,formatter:r}}var o=new f(i,this._tooltipModel,this._ecModel),a=o.get("content"),s=Math.random();this._showOrMove(o,(function(){this._showTooltipContent(o,a,o.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)})),n({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,n,i,r,o,a,s,u){if(this._ticket="",t.get("showContent")&&t.get("show")){var c=this._tooltipContent,h=t.get("formatter");a=a||t.get("position");var d=e;if(h&&"string"===typeof h)d=l.formatTpl(h,n,!0);else if("function"===typeof h){var f=x((function(e,i){e===this._ticket&&(c.setContent(i,u,t),this._updatePosition(t,a,r,o,c,n,s))}),this);this._ticket=i,d=h(n,i,f)}c.setContent(d,u,t),c.show(t),this._updatePosition(t,a,r,o,c,n,s)}},_updatePosition:function(t,e,n,i,o,a,s){var l=this._api.getWidth(),u=this._api.getHeight();e=e||t.get("position");var c=o.getSize(),h=t.get("align"),f=t.get("verticalAlign"),p=s&&s.getBoundingRect().clone();if(s&&p.applyTransform(s.transform),"function"===typeof e&&(e=e([n,i],a,o.el,p,{viewSize:[l,u],contentSize:c.slice()})),r.isArray(e))n=b(e[0],l),i=b(e[1],u);else if(r.isObject(e)){e.width=c[0],e.height=c[1];var g=d.getLayoutRect(e,{width:l,height:u});n=g.x,i=g.y,h=null,f=null}else if("string"===typeof e&&s){var v=C(e,p,c);n=v[0],i=v[1]}else{v=T(n,i,o,l,u,h?null:20,f?null:20);n=v[0],i=v[1]}if(h&&(n-=D(h)?c[0]/2:"right"===h?c[0]:0),f&&(i-=D(f)?c[1]/2:"bottom"===f?c[1]:0),t.get("confine")){v=I(n,i,o,l,u);n=v[0],i=v[1]}o.moveTo(n,i)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,n=!!e&&e.length===t.length;return n&&_(e,(function(e,i){var r=e.dataByAxis||{},o=t[i]||{},a=o.dataByAxis||[];n&=r.length===a.length,n&&_(r,(function(t,e){var i=a[e]||{},r=t.seriesDataIndices||[],o=i.seriesDataIndices||[];n&=t.value===i.value&&t.axisType===i.axisType&&t.axisId===i.axisId&&r.length===o.length,n&&_(r,(function(t,e){var i=o[e];n&=t.seriesIndex===i.seriesIndex&&t.dataIndex===i.dataIndex}))}))})),this._lastDataByCoordSys=t,!!n},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){o.node||(this._tooltipContent.dispose(),p.unregister("itemTooltip",e))}});function M(t){var e=t.pop();while(t.length){var n=t.pop();n&&(f.isInstance(n)&&(n=n.get("tooltip",!0)),"string"===typeof n&&(n={formatter:n}),e=new f(n,e,e.ecModel))}return e}function A(t,e){return t.dispatchAction||r.bind(e.dispatchAction,e)}function T(t,e,n,i,r,o,a){var s=n.getOuterSize(),l=s.width,u=s.height;return null!=o&&(t+l+o>i?t-=l+o:t+=o),null!=a&&(e+u+a>r?e-=u+a:e+=a),[t,e]}function I(t,e,n,i,r){var o=n.getOuterSize(),a=o.width,s=o.height;return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function C(t,e,n){var i=n[0],r=n[1],o=5,a=0,s=0,l=e.width,u=e.height;switch(t){case"inside":a=e.x+l/2-i/2,s=e.y+u/2-r/2;break;case"top":a=e.x+l/2-i/2,s=e.y-r-o;break;case"bottom":a=e.x+l/2-i/2,s=e.y+u+o;break;case"left":a=e.x-i-o,s=e.y+u/2-r/2;break;case"right":a=e.x+l+o,s=e.y+u/2-r/2}return[a,s]}function D(t){return"center"===t||"middle"===t}t.exports=S},4319:function(t,e,n){var i=n("6d8b"),r=n("22d1"),o=n("e0d3"),a=o.makeInner,s=n("625e"),l=s.enableClassExtend,u=s.enableClassCheck,c=n("3901"),h=n("9bdb"),d=n("fe21"),f=n("551f"),p=i.mixin,g=a();function v(t,e,n){this.parentModel=e,this.ecModel=n,this.option=t}function m(t,e,n){for(var i=0;i0?i:n)(t)}},"45f2":function(t,e,n){var i=n("d9f6").f,r=n("07e3"),o=n("5168")("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},4630:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},4650:function(t,e,n){var i=n("3eba"),r=n("6d8b");function o(t,e,n){var i,o={},a="toggleSelected"===t;return n.eachComponent("legend",(function(n){a&&null!=i?n[i?"select":"unSelect"](e.name):"allSelect"===t||"inverseSelect"===t?n[t]():(n[t](e.name),i=n.isSelected(e.name));var s=n.getData();r.each(s,(function(t){var e=t.get("name");if("\n"!==e&&""!==e){var i=n.isSelected(e);o.hasOwnProperty(e)?o[e]=o[e]&&i:o[e]=i}}))})),"allSelect"===t||"inverseSelect"===t?{selected:o}:{name:e.name,selected:o}}i.registerAction("legendToggleSelect","legendselectchanged",r.curry(o,"toggleSelected")),i.registerAction("legendAllSelect","legendselectall",r.curry(o,"allSelect")),i.registerAction("legendInverseSelect","legendinverseselect",r.curry(o,"inverseSelect")),i.registerAction("legendSelect","legendselected",r.curry(o,"select")),i.registerAction("legendUnSelect","legendunselected",r.curry(o,"unSelect"))},"467f":function(t,e,n){"use strict";var i=n("2d83");t.exports=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(i("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},"46a7":function(t,e,n){var i=n("63b6");i(i.S+i.F*!n("8e60"),"Object",{defineProperty:n("d9f6").f})},"471e":function(t,e){function n(t){var e=t.getRect(),n=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:n.start,end:n.end,weeks:n.weeks,dayCount:n.allDay}},api:{coord:function(e,n){return t.dataToPoint(e,n)}}}}t.exports=n},4784:function(t,e,n){var i=n("3eba"),r=n("f706"),o=n("c8ef"),a=n("1687"),s=n("87c3"),l=i.extendChartView({type:"effectScatter",init:function(){this._symbolDraw=new r(o)},render:function(t,e,n){var i=t.getData(),r=this._symbolDraw;r.updateData(i),this.group.add(r.group)},updateTransform:function(t,e,n){var i=t.getData();this.group.dirty();var r=s().reset(t);r.progress&&r.progress({start:0,end:i.count()},i),this._symbolDraw.updateLayout(i)},_updateGroupTransform:function(t){var e=t.coordinateSystem;e&&e.getRoamTransform&&(this.group.transform=a.clone(e.getRoamTransform()),this.group.decomposeTransform())},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e)},dispose:function(){}});t.exports=l},"47ee":function(t,e,n){var i=n("c3a1"),r=n("9aa9"),o=n("355d");t.exports=function(t){var e=i(t),n=r.f;if(n){var a,s=n(t),l=o.f,u=0;while(s.length>u)l.call(t,a=s[u++])&&e.push(a)}return e}},"480e":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("2306"),a=n("cd84"),s=n("6d8b");function l(t,e,n){var i=t[1]-t[0];e=s.map(e,(function(e){return{interval:[(e.interval[0]-t[0])/i,(e.interval[1]-t[0])/i]}}));var r=e.length,o=0;return function(t){for(var i=o;i=0;i--){a=e[i].interval;if(a[0]<=t&&t<=a[1]){o=i;break}}return i>=0&&i=e[0]&&t<=e[1]}}function c(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var h=r.extendChartView({type:"heatmap",render:function(t,e,n){var i;e.eachComponent("visualMap",(function(e){e.eachTargetSeries((function(n){n===t&&(i=e)}))})),this.group.removeAll(),this._incrementalDisplayable=null;var r=t.coordinateSystem;"cartesian2d"===r.type||"calendar"===r.type?this._renderOnCartesianAndCalendar(t,n,0,t.getData().count()):c(r)&&this._renderOnGeo(r,t,i,n)},incrementalPrepareRender:function(t,e,n){this.group.removeAll()},incrementalRender:function(t,e,n,i){var r=e.coordinateSystem;r&&this._renderOnCartesianAndCalendar(e,i,t.start,t.end,!0)},_renderOnCartesianAndCalendar:function(t,e,n,i,r){var a,l,u=t.coordinateSystem;if("cartesian2d"===u.type){var c=u.getAxis("x"),h=u.getAxis("y");a=c.getBandWidth(),l=h.getBandWidth()}for(var d=this.group,f=t.getData(),p="itemStyle",g="emphasis.itemStyle",v="label",m="emphasis.label",y=t.getModel(p).getItemStyle(["color"]),x=t.getModel(g).getItemStyle(),_=t.getModel(v),b=t.getModel(m),w=u.type,S="cartesian2d"===w?[f.mapDimension("x"),f.mapDimension("y"),f.mapDimension("value")]:[f.mapDimension("time"),f.mapDimension("value")],M=n;M=0?i+=g:i-=g:_>=0?i-=g:i+=g}return i}function p(t,e){var n=[],o=i.quadraticSubdivide,s=[[],[],[]],l=[[],[]],u=[];e/=2,t.eachEdge((function(t,i){var c=t.getLayout(),h=t.getVisual("fromSymbol"),d=t.getVisual("toSymbol");c.__original||(c.__original=[r.clone(c[0]),r.clone(c[1])],c[2]&&c.__original.push(r.clone(c[2])));var p=c.__original;if(null!=c[2]){if(r.copy(s[0],p[0]),r.copy(s[1],p[2]),r.copy(s[2],p[1]),h&&"none"!==h){var g=a(t.node1),v=f(s,p[0],g*e);o(s[0][0],s[1][0],s[2][0],v,n),s[0][0]=n[3],s[1][0]=n[4],o(s[0][1],s[1][1],s[2][1],v,n),s[0][1]=n[3],s[1][1]=n[4]}if(d&&"none"!==d){g=a(t.node2),v=f(s,p[1],g*e);o(s[0][0],s[1][0],s[2][0],v,n),s[1][0]=n[1],s[2][0]=n[2],o(s[0][1],s[1][1],s[2][1],v,n),s[1][1]=n[1],s[2][1]=n[2]}r.copy(c[0],s[0]),r.copy(c[1],s[2]),r.copy(c[2],s[1])}else{if(r.copy(l[0],p[0]),r.copy(l[1],p[1]),r.sub(u,l[1],l[0]),r.normalize(u,u),h&&"none"!==h){g=a(t.node1);r.scaleAndAdd(l[0],l[0],u,g*e)}if(d&&"none"!==d){g=a(t.node2);r.scaleAndAdd(l[1],l[1],u,-g*e)}r.copy(c[0],l[0]),r.copy(c[1],l[1])}}))}t.exports=p},"481b":function(t,e){t.exports={}},"48a9":function(t,e,n){var i=n("6d8b"),r=n("42e5"),o=function(t,e,n,i,o,a){this.x=null==t?0:t,this.y=null==e?0:e,this.x2=null==n?1:n,this.y2=null==i?0:i,this.type="linear",this.global=a||!1,r.call(this,o)};o.prototype={constructor:o},i.inherits(o,r);var a=o;t.exports=a},"48ac":function(t,e,n){var i=n("3eba"),r=i.extendComponentModel({type:"axisPointer",coordSysAxesInfo:null,defaultOption:{show:"auto",triggerOn:null,zlevel:0,z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#aaa",width:1,type:"solid"},shadowStyle:{color:"rgba(150,150,150,0.3)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,shadowBlur:3,shadowColor:"#aaa"},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}}}),o=r;t.exports=o},"48c7":function(t,e,n){var i=n("6d8b"),r=n("6cb7"),o=n("9e47"),a=n("2023"),s=r.extend({type:"cartesian2dAxis",axis:null,init:function(){s.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){s.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){s.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function l(t,e){return e.type||(e.data?"category":"value")}i.merge(s.prototype,a);var u={offset:0};o("x",s,l,u),o("y",s,l,u);var c=s;t.exports=c},4917:function(t,e,n){"use strict";var i=n("cb7c"),r=n("9def"),o=n("0390"),a=n("5f1b");n("214f")("match",1,(function(t,e,n,s){return[function(n){var i=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=s(n,t,this);if(e.done)return e.value;var l=i(t),u=String(this);if(!l.global)return a(l,u);var c=l.unicode;l.lastIndex=0;var h,d=[],f=0;while(null!==(h=a(l,u))){var p=String(h[0]);d[f]=p,""===p&&(l.lastIndex=o(u,r(l.lastIndex),c)),f++}return 0===f?null:d}]}))},4942:function(t,e,n){var i=n("2cf4"),r=i.debugMode,o=function(){};1===r&&(o=console.error);var a=o;t.exports=a},"49e8":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("d81e"),a=o.updateCenterAndZoom;i.registerAction({type:"geoRoam",event:"geoRoam",update:"updateTransform"},(function(t,e){var n=t.componentType||"series";e.eachComponent({mainType:n,query:t},(function(e){var i=e.coordinateSystem;if("geo"===i.type){var o=a(i,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(o.center),e.setZoom&&e.setZoom(o.zoom),"series"===n&&r.each(e.seriesGroup,(function(t){t.setCenter(o.center),t.setZoom(o.zoom)}))}}))}))},"4a01":function(t,e,n){var i=n("6d8b"),r=n("1fab"),o=n("607d"),a=n("a4fe");function s(t){this.pointerChecker,this._zr=t,this._opt={};var e=i.bind,n=e(l,this),o=e(u,this),a=e(c,this),s=e(h,this),f=e(d,this);r.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(e,r){this.disable(),this._opt=i.defaults(i.clone(r)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==e&&(e=!0),!0!==e&&"move"!==e&&"pan"!==e||(t.on("mousedown",n),t.on("mousemove",o),t.on("mouseup",a)),!0!==e&&"scale"!==e&&"zoom"!==e||(t.on("mousewheel",s),t.on("pinch",f))},this.disable=function(){t.off("mousedown",n),t.off("mousemove",o),t.off("mouseup",a),t.off("mousewheel",s),t.off("pinch",f)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function l(t){if(!(o.isMiddleOrRightButtonOnMouseUpDown(t)||t.target&&t.target.draggable)){var e=t.offsetX,n=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,n)&&(this._x=e,this._y=n,this._dragging=!0)}}function u(t){if(this._dragging&&g("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!a.isTaken(this._zr,"globalPan")){var e=t.offsetX,n=t.offsetY,i=this._x,r=this._y,s=e-i,l=n-r;this._x=e,this._y=n,this._opt.preventDefaultMouseMove&&o.stop(t.event),p(this,"pan","moveOnMouseMove",t,{dx:s,dy:l,oldX:i,oldY:r,newX:e,newY:n})}}function c(t){o.isMiddleOrRightButtonOnMouseUpDown(t)||(this._dragging=!1)}function h(t){var e=g("zoomOnMouseWheel",t,this._opt),n=g("moveOnMouseWheel",t,this._opt),i=t.wheelDelta,r=Math.abs(i),o=t.offsetX,a=t.offsetY;if(0!==i&&(e||n)){if(e){var s=r>3?1.4:r>1?1.2:1.1,l=i>0?s:1/s;f(this,"zoom","zoomOnMouseWheel",t,{scale:l,originX:o,originY:a})}if(n){var u=Math.abs(i),c=(i>0?1:-1)*(u>3?.4:u>1?.15:.05);f(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:c,originX:o,originY:a})}}}function d(t){if(!a.isTaken(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;f(this,"zoom",null,t,{scale:e,originX:t.pinchX,originY:t.pinchY})}}function f(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r.originY)&&(o.stop(i.event),p(t,e,n,i,r))}function p(t,e,n,r,o){o.isAvailableBehavior=i.bind(g,null,n,r),t.trigger(e,o)}function g(t,e,n){var r=n[t];return!t||r&&(!i.isString(r)||e.event[r+"Key"])}i.mixin(s,r);var v=s;t.exports=v},"4a3f":function(t,e,n){var i=n("401b"),r=i.create,o=i.distSquare,a=Math.pow,s=Math.sqrt,l=1e-8,u=1e-4,c=s(3),h=1/3,d=r(),f=r(),p=r();function g(t){return t>-l&&tl||t<-l}function m(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function y(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function x(t,e,n,i,r,o){var l=i+3*(e-n)-t,u=3*(n-2*e+t),d=3*(e-t),f=t-r,p=u*u-3*l*d,v=u*d-9*l*f,m=d*d-3*u*f,y=0;if(g(p)&&g(v))if(g(u))o[0]=0;else{var x=-d/u;x>=0&&x<=1&&(o[y++]=x)}else{var _=v*v-4*p*m;if(g(_)){var b=v/p,w=(x=-u/l+b,-b/2);x>=0&&x<=1&&(o[y++]=x),w>=0&&w<=1&&(o[y++]=w)}else if(_>0){var S=s(_),M=p*u+1.5*l*(-v+S),A=p*u+1.5*l*(-v-S);M=M<0?-a(-M,h):a(M,h),A=A<0?-a(-A,h):a(A,h);x=(-u-(M+A))/(3*l);x>=0&&x<=1&&(o[y++]=x)}else{var T=(2*p*u-3*l*v)/(2*s(p*p*p)),I=Math.acos(T)/3,C=s(p),D=Math.cos(I),k=(x=(-u-2*C*D)/(3*l),w=(-u+C*(D+c*Math.sin(I)))/(3*l),(-u+C*(D-c*Math.sin(I)))/(3*l));x>=0&&x<=1&&(o[y++]=x),w>=0&&w<=1&&(o[y++]=w),k>=0&&k<=1&&(o[y++]=k)}}return y}function _(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,l=3*e-3*t,u=0;if(g(a)){if(v(o)){var c=-l/o;c>=0&&c<=1&&(r[u++]=c)}}else{var h=o*o-4*a*l;if(g(h))r[0]=-o/(2*a);else if(h>0){var d=s(h),f=(c=(-o+d)/(2*a),(-o-d)/(2*a));c>=0&&c<=1&&(r[u++]=c),f>=0&&f<=1&&(r[u++]=f)}}return u}function b(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,c=(l-s)*r+s,h=(c-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=h,o[4]=h,o[5]=c,o[6]=l,o[7]=i}function w(t,e,n,i,r,a,l,c,h,g,v){var y,x,_,b,w,S=.005,M=1/0;d[0]=h,d[1]=g;for(var A=0;A<1;A+=.05)f[0]=m(t,n,r,l,A),f[1]=m(e,i,a,c,A),b=o(d,f),b=0&&b=0&&c<=1&&(r[u++]=c)}}else{var h=a*a-4*o*l;if(g(h)){c=-a/(2*o);c>=0&&c<=1&&(r[u++]=c)}else if(h>0){var d=s(h),f=(c=(-a+d)/(2*o),(-a-d)/(2*o));c>=0&&c<=1&&(r[u++]=c),f>=0&&f<=1&&(r[u++]=f)}}return u}function T(t,e,n){var i=t+n-2*e;return 0===i?.5:(t-e)/i}function I(t,e,n,i,r){var o=(e-t)*i+t,a=(n-e)*i+e,s=(a-o)*i+o;r[0]=t,r[1]=o,r[2]=s,r[3]=s,r[4]=a,r[5]=n}function C(t,e,n,i,r,a,l,c,h){var g,v=.005,m=1/0;d[0]=l,d[1]=c;for(var y=0;y<1;y+=.05){f[0]=S(t,n,r,y),f[1]=S(e,i,a,y);var x=o(d,f);x=0&&xx;x++)if(v=e?y(a(p=t[x])[0],p[1]):y(t[x]),v===u||v===c)return v}else for(g=m.call(t);!(p=g.next()).done;)if(v=r(g,y,p.value,e),v===u||v===c)return v};e.BREAK=u,e.RETURN=c},"4a7b":function(t,e,n){"use strict";var i=n("c532");t.exports=function(t,e){e=e||{};var n={};function r(t,e){return i.isPlainObject(t)&&i.isPlainObject(e)?i.merge(t,e):i.isPlainObject(e)?i.merge({},e):i.isArray(e)?e.slice():e}function o(n){return i.isUndefined(e[n])?i.isUndefined(t[n])?void 0:r(void 0,t[n]):r(t[n],e[n])}function a(t){if(!i.isUndefined(e[t]))return r(void 0,e[t])}function s(n){return i.isUndefined(e[n])?i.isUndefined(t[n])?void 0:r(void 0,t[n]):r(void 0,e[n])}function l(n){return n in e?r(t[n],e[n]):n in t?r(void 0,t[n]):void 0}var u={url:a,method:a,data:a,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l};return i.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=u[t]||o,r=e(t);i.isUndefined(r)&&e!==l||(n[t]=r)})),n}},"4a9d":function(t,e,n){var i=n("dcb3"),r=n("ff2e"),o=n("0156"),a=n("6679"),s=i.extend({makeElOption:function(t,e,n,i,a){var s=n.axis,c=s.grid,h=i.get("type"),d=l(c,s).getOtherAxis(s).getGlobalExtent(),f=s.toGlobalCoord(s.dataToCoord(e,!0));if(h&&"none"!==h){var p=r.buildElStyle(i),g=u[h](s,f,d);g.style=p,t.graphicKey=g.type,t.pointer=g}var v=o.layout(c.model,n);r.buildCartesianSingleLabelElOption(e,t,v,n,i,a)},getHandleTransform:function(t,e,n){var i=o.layout(e.axis.grid.model,e,{labelInside:!1});return i.labelMargin=n.get("handle.margin"),{position:r.getTransformedPosition(e.axis,t,i),rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=l(o,r).getOtherAxis(r).getGlobalExtent(),u="x"===r.dim?0:1,c=t.position;c[u]+=e[u],c[u]=Math.min(a[1],c[u]),c[u]=Math.max(a[0],c[u]);var h=(s[1]+s[0])/2,d=[h,h];d[u]=c[u];var f=[{verticalAlign:"middle"},{align:"center"}];return{position:c,rotation:t.rotation,cursorPoint:d,tooltipOption:f[u]}}});function l(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var u={line:function(t,e,n){var i=r.makeLineShape([e,n[0]],[e,n[1]],c(t));return{type:"Line",subPixelOptimize:!0,shape:i}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),o=n[1]-n[0];return{type:"Rect",shape:r.makeRectShape([e-i/2,n[0]],[i,o],c(t))}}};function c(t){return"x"===t.dim?0:1}a.registerAxisPointerClass("CartesianAxisPointer",s);var h=s;t.exports=h},"4aa2":function(t,e,n){var i=n("cbe5"),r=n("897a"),o=i.extend({type:"sector",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},brush:r(i.prototype.brush),buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=e.startAngle,s=e.endAngle,l=e.clockwise,u=Math.cos(a),c=Math.sin(a);t.moveTo(u*r+n,c*r+i),t.lineTo(u*o+n,c*o+i),t.arc(n,i,o,a,s,!l),t.lineTo(Math.cos(s)*r+n,Math.sin(s)*r+i),0!==r&&t.arc(n,i,r,s,a,l),t.closePath()}});t.exports=o},"4ab1":function(t,e,n){var i=n("8727"),r=i.createElement,o=n("6d8b"),a=n("cbe5"),s=n("0da8"),l=n("76a5"),u=n("3f8e"),c=u.path,h=u.image,d=u.text,f="0",p="1";function g(t,e,n,i,r){this._zrId=t,this._svgRoot=e,this._tagNames="string"===typeof n?[n]:n,this._markLabel=i,this._domName=r||"_dom",this.nextId=0}g.prototype.createElement=r,g.prototype.getDefs=function(t){var e=this._svgRoot,n=this._svgRoot.getElementsByTagName("defs");return 0===n.length?t?(n=e.insertBefore(this.createElement("defs"),e.firstChild),n.contains||(n.contains=function(t){var e=n.children;if(!e)return!1;for(var i=e.length-1;i>=0;--i)if(e[i]===t)return!0;return!1}),n):null:n[0]},g.prototype.update=function(t,e){if(t){var n=this.getDefs(!1);if(t[this._domName]&&n.contains(t[this._domName]))"function"===typeof e&&e(t);else{var i=this.add(t);i&&(t[this._domName]=i)}}},g.prototype.addDom=function(t){var e=this.getDefs(!0);e.appendChild(t)},g.prototype.removeDom=function(t){var e=this.getDefs(!1);e&&t[this._domName]&&(e.removeChild(t[this._domName]),t[this._domName]=null)},g.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return o.each(this._tagNames,(function(n){var i=t.getElementsByTagName(n);e=e.concat([].slice.call(i))})),e},g.prototype.markAllUnused=function(){var t=this.getDoms(),e=this;o.each(t,(function(t){t[e._markLabel]=f}))},g.prototype.markUsed=function(t){t&&(t[this._markLabel]=p)},g.prototype.removeUnused=function(){var t=this.getDefs(!1);if(t){var e=this.getDoms(),n=this;o.each(e,(function(e){e[n._markLabel]!==p&&t.removeChild(e)}))}},g.prototype.getSvgProxy=function(t){return t instanceof a?c:t instanceof s?h:t instanceof l?d:c},g.prototype.getTextSvgElement=function(t){return t.__textSvgEl},g.prototype.getSvgElement=function(t){return t.__svgEl};var v=g;t.exports=v},"4b08":function(t,e,n){var i=n("7dcf"),r=i.extend({type:"dataZoom.select"});t.exports=r},"4bf6":function(t,e,n){var i=n("66fc"),r=n("697e"),o=n("f934"),a=o.getLayoutRect,s=n("6d8b"),l=s.each;function u(t,e,n){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(t,e,n),this.model=t}u.prototype={type:"singleAxis",axisPointerEnabled:!0,constructor:u,_init:function(t,e,n){var o=this.dimension,a=new i(o,r.createScaleByModel(t),[0,0],t.get("type"),t.get("position")),s="category"===a.type;a.onBand=s&&t.get("boundaryGap"),a.inverse=t.get("inverse"),a.orient=t.get("orient"),t.axis=a,a.model=t,a.coordinateSystem=this,this._axis=a},update:function(t,e){t.eachSeries((function(t){if(t.coordinateSystem===this){var e=t.getData();l(e.mapDimension(this.dimension,!0),(function(t){this._axis.scale.unionExtentFromData(e,t)}),this),r.niceScaleExtent(this._axis.scale,this._axis.model)}}),this)},resize:function(t,e){this._rect=a({left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")},{width:e.getWidth(),height:e.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var t=this._rect,e=this._axis,n=e.isHorizontal(),i=n?[0,t.width]:[0,t.height],r=e.reverse?1:0;e.setExtent(i[r],i[1-r]),this._updateAxisTransform(e,n?t.x:t.y)},_updateAxisTransform:function(t,e){var n=t.getExtent(),i=n[0]+n[1],r=t.isHorizontal();t.toGlobalCoord=r?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord=r?function(t){return t-e}:function(t){return i-t+e}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},getAxes:function(){return[this._axis]},getTooltipAxes:function(){return{baseAxes:[this.getAxis()]}},containPoint:function(t){var e=this.getRect(),n=this.getAxis(),i=n.orient;return"horizontal"===i?n.contain(n.toLocalCoord(t[0]))&&t[1]>=e.y&&t[1]<=e.y+e.height:n.contain(n.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(),n=this.getRect(),i=[],r="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),i[r]=e.toGlobalCoord(e.dataToCoord(+t)),i[1-r]=0===r?n.y+n.height/2:n.x+n.width/2,i}};var c=u;t.exports=c},"4bf8":function(t,e,n){var i=n("be13");t.exports=function(t){return Object(i(t))}},"4c86":function(t,e,n){var i=n("6d8b"),r=i.each,o=n("bda7"),a=n("e0d3"),s=a.makeInner,l=n("320a"),u=n("1792"),c=n("6bd4"),h=n("a7f2"),d=s(),f={load:function(t,e,n){var i=d(e).parsed;if(i)return i;var a,s=e.specialAreas||{},f=e.geoJSON;try{a=f?o(f,n):[]}catch(g){throw new Error("Invalid geoJson format\n"+g.message)}return l(t,a),r(a,(function(e){var n=e.name;u(t,e),c(t,e),h(t,e);var i=s[n];i&&e.transformTo(i.left,i.top,i.width,i.height)})),d(e).parsed={regions:a,boundingRect:p(a)}}};function p(t){for(var e,n=0;n0?a:s)}function c(t,e){return e.get(t>0?r:o)}}};t.exports=l},"4d62":function(t,e,n){var i=n("2306"),r=n("6d8b"),o=n("e887");function a(t,e){i.Group.call(this);var n=new i.Polygon,r=new i.Polyline,o=new i.Text;this.add(n),this.add(r),this.add(o),this.highDownOnUpdate=function(t,e){"emphasis"===e?(r.ignore=r.hoverIgnore,o.ignore=o.hoverIgnore):(r.ignore=r.normalIgnore,o.ignore=o.normalIgnore)},this.updateData(t,e,!0)}var s=a.prototype,l=["itemStyle","opacity"];s.updateData=function(t,e,n){var o=this.childAt(0),a=t.hostModel,s=t.getItemModel(e),u=t.getItemLayout(e),c=t.getItemModel(e).get(l);c=null==c?1:c,o.useStyle({}),n?(o.setShape({points:u.points}),o.setStyle({opacity:0}),i.initProps(o,{style:{opacity:c}},a,e)):i.updateProps(o,{style:{opacity:c},shape:{points:u.points}},a,e);var h=s.getModel("itemStyle"),d=t.getItemVisual(e,"color");o.setStyle(r.defaults({lineJoin:"round",fill:d},h.getItemStyle(["opacity"]))),o.hoverStyle=h.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),i.setHoverStyle(this)},s._updateLabel=function(t,e){var n=this.childAt(1),r=this.childAt(2),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=s.label,u=t.getItemVisual(e,"color");i.updateProps(n,{shape:{points:l.linePoints||l.linePoints}},o,e),i.updateProps(r,{style:{x:l.x,y:l.y}},o,e),r.attr({rotation:l.rotation,origin:[l.x,l.y],z2:10});var c=a.getModel("label"),h=a.getModel("emphasis.label"),d=a.getModel("labelLine"),f=a.getModel("emphasis.labelLine");u=t.getItemVisual(e,"color");i.setLabelStyle(r.style,r.hoverStyle={},c,h,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:u,useInsideStyle:!!l.inside},{textAlign:l.textAlign,textVerticalAlign:l.verticalAlign}),r.ignore=r.normalIgnore=!c.get("show"),r.hoverIgnore=!h.get("show"),n.ignore=n.normalIgnore=!d.get("show"),n.hoverIgnore=!f.get("show"),n.setStyle({stroke:u}),n.setStyle(d.getModel("lineStyle").getLineStyle()),n.hoverStyle=f.getModel("lineStyle").getLineStyle()},r.inherits(a,i.Group);var u=o.extend({type:"funnel",render:function(t,e,n){var i=t.getData(),r=this._data,o=this.group;i.diff(r).add((function(t){var e=new a(i,t);i.setItemGraphicEl(t,e),o.add(e)})).update((function(t,e){var n=r.getItemGraphicEl(e);n.updateData(i,t),o.add(n),i.setItemGraphicEl(t,n)})).remove((function(t){var e=r.getItemGraphicEl(t);o.remove(e)})).execute(),this._data=i},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}}),c=u;t.exports=c},"4d85":function(t,e,n){var i=n("e46b"),r=n("4f85"),o=r.extend({type:"series.gauge",getInitialData:function(t,e){return i(this,["value"])},defaultOption:{zlevel:0,z:2,center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#91c7ae"],[.8,"#63869e"],[1,"#c23531"]],width:30}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,distance:5,color:"auto"},pointer:{show:!0,length:"80%",width:8},itemStyle:{color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],color:"#333",fontSize:15},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:"auto",fontSize:30}}}),a=o;t.exports=a},"4e08":function(t,e,n){(function(t){var n;"undefined"!==typeof window?n=window.__DEV__:"undefined"!==typeof t&&(n=t.__DEV__),"undefined"===typeof n&&(n=!0);var i=n;e.__DEV__=i}).call(this,n("c8ba"))},"4e10":function(t,e,n){var i=n("6d8b"),r=n("e46b"),o=n("4f85"),a=n("eda2"),s=a.encodeHTML,l=a.addCommas,u=n("7023"),c=n("2b17"),h=c.retrieveRawAttr,d=n("5b87"),f=n("0f99"),p=f.makeSeriesEncodeForNameBased,g=o.extend({type:"series.map",dependencies:["geo"],layoutMode:"box",needsDrawMap:!1,seriesGroup:[],getInitialData:function(t){for(var e=r(this,{coordDimensions:["value"],encodeDefaulter:i.curry(p,this)}),n=e.mapDimension("value"),o=i.createHashMap(),a=[],s=[],l=0,u=e.count();l":"\n";return c.join(", ")+p+s(a+" : "+o)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),n=this.coordinateSystem,i=n.getRegion(e);return i&&n.dataToPoint(i.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)"}},nameProperty:"name"}});i.mixin(g,u);var v=g;t.exports=v},"4e47":function(t,e,n){var i=n("6d8b"),r=n("2306"),o={NONE:"none",DESCENDANT:"descendant",ANCESTOR:"ancestor",SELF:"self"},a=2,s=4;function l(t,e,n){r.Group.call(this);var i=new r.Sector({z2:a});i.seriesIndex=e.seriesIndex;var o=new r.Text({z2:s,silent:t.getModel("label").get("silent")});function l(){o.ignore=o.hoverIgnore}function u(){o.ignore=o.normalIgnore}this.add(i),this.add(o),this.updateData(!0,t,"normal",e,n),this.on("emphasis",l).on("normal",u).on("mouseover",l).on("mouseout",u)}var u=l.prototype;u.updateData=function(t,e,n,o,a){this.node=e,e.piece=this,o=o||this._seriesModel,a=a||this._ecModel;var s=this.childAt(0);s.dataIndex=e.dataIndex;var l=e.getModel(),u=e.getLayout(),c=i.extend({},u);c.label=null;var d=h(e,o,a);p(e,o,d);var f,g=l.getModel("itemStyle").getItemStyle();if("normal"===n)f=g;else{var v=l.getModel(n+".itemStyle").getItemStyle();f=i.merge(v,g)}f=i.defaults({lineJoin:"bevel",fill:f.fill||d},f),t?(s.setShape(c),s.shape.r=u.r0,r.updateProps(s,{shape:{r:u.r}},o,e.dataIndex),s.useStyle(f)):"object"===typeof f.fill&&f.fill.type||"object"===typeof s.style.fill&&s.style.fill.type?(r.updateProps(s,{shape:c},o),s.useStyle(f)):r.updateProps(s,{shape:c,style:f},o),this._updateLabel(o,d,n);var m=l.getShallow("cursor");if(m&&s.attr("cursor",m),t){var y=o.getShallow("highlightPolicy");this._initEvents(s,e,o,y)}this._seriesModel=o||this._seriesModel,this._ecModel=a||this._ecModel,r.setHoverStyle(this)},u.onEmphasis=function(t){var e=this;this.node.hostTree.root.eachNode((function(n){n.piece&&(e.node===n?n.piece.updateData(!1,n,"emphasis"):f(n,e.node,t)?n.piece.childAt(0).trigger("highlight"):t!==o.NONE&&n.piece.childAt(0).trigger("downplay"))}))},u.onNormal=function(){this.node.hostTree.root.eachNode((function(t){t.piece&&t.piece.updateData(!1,t,"normal")}))},u.onHighlight=function(){this.updateData(!1,this.node,"highlight")},u.onDownplay=function(){this.updateData(!1,this.node,"downplay")},u._updateLabel=function(t,e,n){var o=this.node.getModel(),a=o.getModel("label"),s="normal"===n||"emphasis"===n?a:o.getModel(n+".label"),l=o.getModel("emphasis.label"),u=s.get("formatter"),c=u?n:"normal",h=i.retrieve(t.getFormattedLabel(this.node.dataIndex,c,null,null,"label"),this.node.name);!1===I("show")&&(h="");var d=this.node.getLayout(),f=s.get("minAngle");null==f&&(f=a.get("minAngle")),f=f/180*Math.PI;var p=d.endAngle-d.startAngle;null!=f&&Math.abs(p)Math.PI/2?"right":"left"):w&&"center"!==w?"left"===w?(v=d.r0+b,m>Math.PI/2&&(w="right")):"right"===w&&(v=d.r-b,m>Math.PI/2&&(w="left")):(v=(d.r+d.r0)/2,w="center"),g.attr("style",{text:h,textAlign:w,textVerticalAlign:I("verticalAlign")||"middle",opacity:I("opacity")});var S=v*y+d.cx,M=v*x+d.cy;g.attr("position",[S,M]);var A=I("rotate"),T=0;function I(t){var e=s.get(t);return null==e?a.get(t):e}"radial"===A?(T=-m,T<-Math.PI/2&&(T+=Math.PI)):"tangential"===A?(T=Math.PI/2-m,T>Math.PI/2?T-=Math.PI:T<-Math.PI/2&&(T+=Math.PI)):"number"===typeof A&&(T=A*Math.PI/180),g.attr("rotation",T)},u._initEvents=function(t,e,n,i){t.off("mouseover").off("mouseout").off("emphasis").off("normal");var r=this,o=function(){r.onEmphasis(i)},a=function(){r.onNormal()},s=function(){r.onDownplay()},l=function(){r.onHighlight()};n.isAnimationEnabled()&&t.on("mouseover",o).on("mouseout",a).on("emphasis",o).on("normal",a).on("downplay",s).on("highlight",l)},i.inherits(l,r.Group);var c=l;function h(t,e,n){var i=t.getVisual("color"),r=t.getVisual("visualMeta");r&&0!==r.length||(i=null);var o=t.getModel("itemStyle").get("color");if(o)return o;if(i)return i;if(0===t.depth)return n.option.color[0];var a=n.option.color.length;return o=n.option.color[d(t)%a],o}function d(t){var e=t;while(e.depth>1)e=e.parentNode;var n=t.getAncestors()[0];return i.indexOf(n.children,e)}function f(t,e,n){return n!==o.NONE&&(n===o.SELF?t===e:n===o.ANCESTOR?t===e||t.isAncestorOf(e):t===e||t.isDescendantOf(e))}function p(t,e,n){var i=e.getData();i.setItemVisual(t.dataIndex,"color",n)}t.exports=c},"4e9f":function(t,e,n){var i=n("22d1"),r=n("29a8"),o=n("2145"),a=r.toolbox.saveAsImage;function s(t){this.model=t}s.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:a.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:a.lang.slice()},s.prototype.unusable=!i.canvasSupported;var l=s.prototype;l.onclick=function(t,e){var n=this.model,r=n.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")});if("function"!==typeof MouseEvent||i.browser.ie||i.browser.edge)if(window.navigator.msSaveOrOpenBlob){var l=atob(s.split(",")[1]),u=l.length,c=new Uint8Array(u);while(u--)c[u]=l.charCodeAt(u);var h=new Blob([c]);window.navigator.msSaveOrOpenBlob(h,r+"."+a)}else{var d=n.get("lang"),f='',p=window.open();p.document.write(f)}else{var g=document.createElement("a");g.download=r+"."+a,g.target="_blank",g.href=s;var v=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});g.dispatchEvent(v)}},o.register("saveAsImage",s);var u=s;t.exports=u},"4ee1":function(t,e,n){var i=n("5168")("iterator"),r=!1;try{var o=[7][i]();o["return"]=function(){r=!0},Array.from(o,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var o=[7],s=o[i]();s.next=function(){return{done:n=!0}},o[i]=function(){return s},t(o)}catch(a){}return n}},"4f7f":function(t,e,n){"use strict";var i=n("c26b"),r=n("b39a"),o="Set";t.exports=n("e0b8")(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return i.def(r(this,o),t=0===t?0:t,t)}},i)},"4f85":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=n("22d1"),a=n("eda2"),s=a.formatTime,l=a.encodeHTML,u=a.addCommas,c=a.getTooltipMarker,h=n("e0d3"),d=n("6cb7"),f=n("e47b"),p=n("38a2"),g=n("f934"),v=g.getLayoutParams,m=g.mergeLayoutParam,y=n("f47d"),x=y.createTask,_=n("0f99"),b=_.prepareSource,w=_.getSource,S=n("2b17"),M=S.retrieveRawValue,A=h.makeInner(),T=d.extend({type:"series.__base__",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendVisualProvider:null,visualColorAccessPath:"itemStyle.color",visualBorderColorAccessPath:"itemStyle.borderColor",layoutMode:null,init:function(t,e,n,i){this.seriesIndex=this.componentIndex,this.dataTask=x({count:D,reset:k}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),b(this);var r=this.getInitialData(t,n);P(r,this),this.dataTask.context.data=r,A(this).dataBeforeProcessed=r,I(this)},mergeDefaultAndTheme:function(t,e){var n=this.layoutMode,i=n?v(t):{},o=this.subType;d.hasClass(o)&&(o+="Series"),r.merge(t,e.getTheme().get(this.subType)),r.merge(t,this.getDefaultOption()),h.defaultEmphasis(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&m(t,i,n)},mergeOption:function(t,e){t=r.merge(this.option,t,!0),this.fillDataTextStyle(t.data);var n=this.layoutMode;n&&m(this.option,t,n),b(this);var i=this.getInitialData(t,e);P(i,this),this.dataTask.dirty(),this.dataTask.context.data=i,A(this).dataBeforeProcessed=i,I(this)},fillDataTextStyle:function(t){if(t&&!r.isTypedArray(t))for(var e=["show"],n=0;n":"\n",d="richText"===i,f={},p=0;function g(n){var a=r.reduce(n,(function(t,e,n){var i=m.getDimensionInfo(n);return t|(i&&!1!==i.tooltip&&null!=i.displayName)}),0),h=[];function g(t,n){var r=m.getDimensionInfo(n);if(r&&!1!==r.otherDims.tooltip){var g=r.type,v="sub"+o.seriesIndex+"at"+p,y=c({color:w,type:"subItem",renderMode:i,markerId:v}),x="string"===typeof y?y:y.content,_=(a?x+l(r.displayName||"-")+": ":"")+l("ordinal"===g?t+"":"time"===g?e?"":s("yyyy/MM/dd hh:mm:ss",t):u(t));_&&h.push(_),d&&(f[v]=w,++p)}}y.length?r.each(y,(function(e){g(M(m,t,e),e)})):r.each(n,g);var v=a?d?"\n":"
":"",x=v+h.join(v||", ");return{renderMode:i,content:x,style:f}}function v(t){return{renderMode:i,content:l(u(t)),style:f}}var m=this.getData(),y=m.mapDimension("defaultedTooltip",!0),x=y.length,_=this.getRawValue(t),b=r.isArray(_),w=m.getItemVisual(t,"color");r.isObject(w)&&w.colorStops&&(w=(w.colorStops[0]||{}).color),w=w||"transparent";var S=x>1||b&&!x?g(_):v(x?M(m,t,y[0]):b?_[0]:_),A=S.content,T=o.seriesIndex+"at"+p,I=c({color:w,type:"item",renderMode:i,markerId:T});f[T]=w,++p;var C=m.getName(t),D=this.name;h.isNameSpecified(this)||(D=""),D=D?l(D)+(e?": ":a):"";var k="string"===typeof I?I:I.content,L=e?k+D+A:D+k+(C?l(C)+": "+A:A);return{html:L,markers:f}},isAnimationEnabled:function(){if(o.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,n){var i=this.ecModel,r=f.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},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 I(t){var e=t.name;h.isNameSpecified(t)||(t.name=C(t)||e)}function C(t){var e=t.getRawData(),n=e.mapDimension("seriesName",!0),i=[];return r.each(n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)})),i.join(" ")}function D(t){return t.model.getRawData().count()}function k(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),L}function L(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function P(t,e){r.each(t.CHANGABLE_METHODS,(function(n){t.wrapMethod(n,r.curry(O,e))}))}function O(t){var e=E(t);e&&e.setOutputEnd(this.count())}function E(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}r.mixin(T,p),r.mixin(T,f);var R=T;t.exports=R},"4fac":function(t,e,n){var i=n("620b"),r=n("9c2c");function o(t,e,n){var o=e.points,a=e.smooth;if(o&&o.length>=2){if(a&&"spline"!==a){var s=r(o,a,n,e.smoothConstraint);t.moveTo(o[0][0],o[0][1]);for(var l=o.length,u=0;u<(n?l:l-1);u++){var c=s[2*u],h=s[2*u+1],d=o[(u+1)%l];t.bezierCurveTo(c[0],c[1],h[0],h[1],d[0],d[1])}}else{"spline"===a&&(o=i(o,n)),t.moveTo(o[0][0],o[0][1]);u=1;for(var f=o.length;u=0}function l(t,e){t=t.slice();var n=i.map(t,r.capitalFirst);e=(e||[]).slice();var o=i.map(e,r.capitalFirst);return function(r,a){i.each(t,(function(t,i){for(var s={name:t,capital:n[i]},l=0;l=0}function o(t,r){var o=!1;return e((function(e){i.each(n(t,e)||[],(function(t){r.records[e.name][t]&&(o=!0)}))})),o}function a(t,r){r.nodes.push(t),e((function(e){i.each(n(t,e)||[],(function(t){r.records[e.name][t]=!0}))}))}}e.isCoordSupported=s,e.createNameEach=l,e.eachAxisDim=u,e.createLinkedNodesFinder=c},"50ed":function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},5147:function(t,e,n){var i=n("2b4c")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[i]=!1,!"/./"[t](e)}catch(r){}}return!0}},5168:function(t,e,n){var i=n("dbdb")("wks"),r=n("62a0"),o=n("e53d").Symbol,a="function"==typeof o,s=t.exports=function(t){return i[t]||(i[t]=a&&o[t]||(a?o:r)("Symbol."+t))};s.store=i},"51b6":function(t,e,n){n("a3c3"),t.exports=n("584a").Object.assign},"520a":function(t,e,n){"use strict";var i=n("0bfb"),r=RegExp.prototype.exec,o=String.prototype.replace,a=r,s="lastIndex",l=function(){var t=/a/,e=/b*/g;return r.call(t,"a"),r.call(e,"a"),0!==t[s]||0!==e[s]}(),u=void 0!==/()??/.exec("")[1],c=l||u;c&&(a=function(t){var e,n,a,c,h=this;return u&&(n=new RegExp("^"+h.source+"$(?!\\s)",i.call(h))),l&&(e=h[s]),a=r.call(h,t),l&&a&&(h[s]=h.global?a.index+a[0].length:e),u&&a&&a.length>1&&o.call(a[0],n,(function(){for(c=1;co&&(o=u),i.push(u)}for(var c=0;co&&(o=d)}return a.y0=r,a.max=o,a}t.exports=o},"52a7":function(t,e){e.f={}.propertyIsEnumerable},"53e2":function(t,e,n){var i=n("07e3"),r=n("241e"),o=n("5559")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},"53f3":function(t,e){function n(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var n=t.option.nodeScaleRatio,i=e.scale,r=i&&i[0]||1,o=e.getZoom(),a=(o-1)*n+1;return a/r}function i(t){var e=t.getVisual("symbolSize");return e instanceof Array&&(e=(e[0]+e[1])/2),+e}e.getNodeGlobalScale=n,e.getSymbolSize=i},5450:function(t,e,n){n("7419"),n("29a9")},"549b":function(t,e,n){"use strict";var i=n("d864"),r=n("63b6"),o=n("241e"),a=n("b0dc"),s=n("3702"),l=n("b447"),u=n("20fd"),c=n("7cd6");r(r.S+r.F*!n("4ee1")((function(t){Array.from(t)})),"Array",{from:function(t){var e,n,r,h,d=o(t),f="function"==typeof this?this:Array,p=arguments.length,g=p>1?arguments[1]:void 0,v=void 0!==g,m=0,y=c(d);if(v&&(g=i(g,p>2?arguments[2]:void 0,2)),void 0==y||f==Array&&s(y))for(e=l(d.length),n=new f(e);e>m;m++)u(n,m,v?g(d[m],m):d[m]);else for(h=y.call(d),n=new f;!(r=h.next()).done;m++)u(n,m,v?a(h,g,[r.value,m],!0):r.value);return n.length=m,n}})},"54fb":function(t,e){function n(t){t.eachSeriesByType("map",(function(t){var e=t.get("color"),n=t.getModel("itemStyle"),i=n.get("areaColor"),r=n.get("color")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:i,color:r})}))}t.exports=n},"551c":function(t,e,n){"use strict";var i,r,o,a,s=n("2d00"),l=n("7726"),u=n("9b43"),c=n("23c6"),h=n("5ca1"),d=n("d3f4"),f=n("d8e8"),p=n("f605"),g=n("4a59"),v=n("ebd6"),m=n("1991").set,y=n("8079")(),x=n("a5b8"),_=n("9c80"),b=n("a25f"),w=n("bcaa"),S="Promise",M=l.TypeError,A=l.process,T=A&&A.versions,I=T&&T.v8||"",C=l[S],D="process"==c(A),k=function(){},L=r=x.f,P=!!function(){try{var t=C.resolve(1),e=(t.constructor={})[n("2b4c")("species")]=function(t){t(k,k)};return(D||"function"==typeof PromiseRejectionEvent)&&t.then(k)instanceof e&&0!==I.indexOf("6.6")&&-1===b.indexOf("Chrome/66")}catch(i){}}(),O=function(t){var e;return!(!d(t)||"function"!=typeof(e=t.then))&&e},E=function(t,e){if(!t._n){t._n=!0;var n=t._c;y((function(){var i=t._v,r=1==t._s,o=0,a=function(e){var n,o,a,s=r?e.ok:e.fail,l=e.resolve,u=e.reject,c=e.domain;try{s?(r||(2==t._h&&z(t),t._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&(c.exit(),a=!0)),n===e.promise?u(M("Promise-chain cycle")):(o=O(n))?o.call(n,l,u):l(n)):u(i)}catch(h){c&&!a&&c.exit(),u(h)}};while(n.length>o)a(n[o++]);t._c=[],t._n=!1,e&&!t._h&&R(t)}))}},R=function(t){m.call(l,(function(){var e,n,i,r=t._v,o=N(t);if(o&&(e=_((function(){D?A.emit("unhandledRejection",r,t):(n=l.onunhandledrejection)?n({promise:t,reason:r}):(i=l.console)&&i.error&&i.error("Unhandled promise rejection",r)})),t._h=D||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},z=function(t){m.call(l,(function(){var e;D?A.emit("rejectionHandled",t):(e=l.onrejectionhandled)&&e({promise:t,reason:t._v})}))},B=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),E(e,!0))},V=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw M("Promise can't be resolved itself");(e=O(t))?y((function(){var i={_w:n,_d:!1};try{e.call(t,u(V,i,1),u(B,i,1))}catch(r){B.call(i,r)}})):(n._v=t,n._s=1,E(n,!1))}catch(i){B.call({_w:n,_d:!1},i)}}};P||(C=function(t){p(this,C,S,"_h"),f(t),i.call(this);try{t(u(V,this,1),u(B,this,1))}catch(e){B.call(this,e)}},i=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=n("dcbc")(C.prototype,{then:function(t,e){var n=L(v(this,C));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=D?A.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&E(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new i;this.promise=t,this.resolve=u(V,t,1),this.reject=u(B,t,1)},x.f=L=function(t){return t===C||t===a?new o(t):r(t)}),h(h.G+h.W+h.F*!P,{Promise:C}),n("7f20")(C,S),n("7a56")(S),a=n("8378")[S],h(h.S+h.F*!P,S,{reject:function(t){var e=L(this),n=e.reject;return n(t),e.promise}}),h(h.S+h.F*(s||!P),S,{resolve:function(t){return w(s&&this===a?C:this,t)}}),h(h.S+h.F*!(P&&n("5cc5")((function(t){C.all(t)["catch"](k)}))),S,{all:function(t){var e=this,n=L(e),i=n.resolve,r=n.reject,o=_((function(){var n=[],o=0,a=1;g(t,!1,(function(t){var s=o++,l=!1;n.push(void 0),a++,e.resolve(t).then((function(t){l||(l=!0,n[s]=t,--a||i(n))}),r)})),--a||i(n)}));return o.e&&r(o.v),n.promise},race:function(t){var e=this,n=L(e),i=n.reject,r=_((function(){g(t,!1,(function(t){e.resolve(t).then(n.resolve,i)}))}));return r.e&&i(r.v),n.promise}})},"551f":function(t,e,n){var i=n("282b"),r=i([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]),o={getItemStyle:function(t,e){var n=r(this,t,e),i=this.getBorderLineDash();return i&&(n.lineDash=i),n},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}};t.exports=o},5522:function(t,e,n){n("23e0"),n("1748"),n("6c12")},5537:function(t,e,n){var i=n("8378"),r=n("7726"),o="__core-js_shared__",a=r[o]||(r[o]={});(t.exports=function(t,e){return a[t]||(a[t]=void 0!==e?e:{})})("versions",[]).push({version:i.version,mode:n("2d00")?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},5559:function(t,e,n){var i=n("dbdb")("keys"),r=n("62a0");t.exports=function(t){return i[t]||(i[t]=r(t))}},5576:function(t,e,n){var i=n("6d8b"),r=n("4a01"),o=n("88b3"),a="\0_ec_dataZoom_roams";function s(t,e){var n=c(t),r=e.dataZoomId,a=e.coordId;i.each(n,(function(t,n){var o=t.dataZoomInfos;o[r]&&i.indexOf(e.allCoordIds,a)<0&&(delete o[r],t.count--)})),d(n);var s=n[a];s||(s=n[a]={coordId:a,dataZoomInfos:{},count:0},s.controller=h(t,s),s.dispatchAction=i.curry(f,t)),!s.dataZoomInfos[r]&&s.count++,s.dataZoomInfos[r]=e;var l=p(s.dataZoomInfos);s.controller.enable(l.controlType,l.opt),s.controller.setPointerChecker(e.containsPoint),o.createOrUpdate(s,"dispatchAction",e.dataZoomModel.get("throttle",!0),"fixRate")}function l(t,e){var n=c(t);i.each(n,(function(t){t.controller.dispose();var n=t.dataZoomInfos;n[e]&&(delete n[e],t.count--)})),d(n)}function u(t){return t.type+"\0_"+t.id}function c(t){var e=t.getZr();return e[a]||(e[a]={})}function h(t,e){var n=new r(t.getZr());return i.each(["pan","zoom","scrollMove"],(function(t){n.on(t,(function(n){var r=[];i.each(e.dataZoomInfos,(function(i){if(n.isAvailableBehavior(i.dataZoomModel.option)){var o=(i.getRange||{})[t],a=o&&o(e.controller,n);!i.dataZoomModel.get("disabled",!0)&&a&&r.push({dataZoomId:i.dataZoomId,start:a[0],end:a[1]})}})),r.length&&e.dispatchAction(r)}))})),n}function d(t){i.each(t,(function(e,n){e.count||(e.controller.dispose(),delete t[n])}))}function f(t,e){t.dispatchAction({type:"dataZoom",batch:e})}function p(t){var e,n="type_",r={type_true:2,type_move:1,type_false:0,type_undefined:-1},o=!0;return i.each(t,(function(t){var i=t.dataZoomModel,a=!i.get("disabled",!0)&&(!i.get("zoomLock",!0)||"move");r[n+a]>r[n+e]&&(e=a),o&=i.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!o}}}e.register=s,e.unregister=l,e.generateCoordId=u},"55ac":function(t,e,n){var i=n("6d8b");function r(t,e,n){if(t&&i.indexOf(e,t.type)>=0){var r=n.getData().tree.root,o=t.targetNode;if("string"===typeof o&&(o=r.getNodeById(o)),o&&r.contains(o))return{node:o};var a=t.targetNodeId;if(null!=a&&(o=r.getNodeById(a)))return{node:o}}}function o(t){var e=[];while(t)t=t.parentNode,t&&e.push(t);return e.reverse()}function a(t,e){var n=o(t);return i.indexOf(n,e)>=0}function s(t,e){var n=[];while(t){var i=t.dataIndex;n.push({name:t.name,dataIndex:i,value:e.getRawValue(i)}),t=t.parentNode}return n.reverse(),n}e.retrieveTargetInfo=r,e.getPathToRoot=o,e.aboveViewRoot=a,e.wrapTreePathInfo=s},"562e":function(t,e,n){var i=n("6d8b");function r(t){null!=t&&i.extend(this,t),this.otherDims={}}var o=r;t.exports=o},5693:function(t,e){function n(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,c=e.height,h=e.r;u<0&&(s+=u,u=-u),c<0&&(l+=c,c=-c),"number"===typeof h?n=i=r=o=h:h instanceof Array?1===h.length?n=i=r=o=h[0]:2===h.length?(n=r=h[0],i=o=h[1]):3===h.length?(n=h[0],i=o=h[1],r=h[2]):(n=h[0],i=h[1],r=h[2],o=h[3]):n=i=r=o=0,n+i>u&&(a=n+i,n*=u/a,i*=u/a),r+o>u&&(a=r+o,r*=u/a,o*=u/a),i+r>c&&(a=i+r,i*=c/a,r*=c/a),n+o>c&&(a=n+o,n*=c/a,o*=c/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+c-r),0!==r&&t.arc(s+u-r,l+c-r,r,0,Math.PI/2),t.lineTo(s+o,l+c),0!==o&&t.arc(s+o,l+c-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}e.buildPath=n},"584a":function(t,e){var n=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},5866:function(t,e,n){var i=n("ef2b"),r=i.forceLayout,o=n("1c5f"),a=o.simpleLayout,s=n("94e4"),l=s.circularLayout,u=n("3842"),c=u.linearMap,h=n("401b"),d=n("6d8b"),f=n("0c37"),p=f.getCurvenessForEdge;function g(t){t.eachSeriesByType("graph",(function(t){var e=t.coordinateSystem;if(!e||"view"===e.type)if("force"===t.get("layout")){var n=t.preservedPoints||{},i=t.getGraph(),o=i.data,s=i.edgeData,u=t.getModel("force"),f=u.get("initLayout");t.preservedPoints?o.each((function(t){var e=o.getId(t);o.setItemLayout(t,n[e]||[NaN,NaN])})):f&&"none"!==f?"circular"===f&&l(t,"value"):a(t);var g=o.getDataExtent("value"),v=s.getDataExtent("value"),m=u.get("repulsion"),y=u.get("edgeLength");d.isArray(m)||(m=[m,m]),d.isArray(y)||(y=[y,y]),y=[y[1],y[0]];var x=o.mapArray("value",(function(t,e){var n=o.getItemLayout(e),i=c(t,g,m);return isNaN(i)&&(i=(m[0]+m[1])/2),{w:i,rep:i,fixed:o.getItemModel(e).get("fixed"),p:!n||isNaN(n[0])||isNaN(n[1])?null:n}})),_=s.mapArray("value",(function(e,n){var r=i.getEdgeByIndex(n),o=c(e,v,y);isNaN(o)&&(o=(y[0]+y[1])/2);var a=r.getModel(),s=d.retrieve3(a.get("lineStyle.curveness"),-p(r,t,n,!0),0);return{n1:x[r.node1.dataIndex],n2:x[r.node2.dataIndex],d:o,curveness:s,ignoreForceLayout:a.get("ignoreForceLayout")}})),b=(e=t.coordinateSystem,e.getBoundingRect()),w=r(x,_,{rect:b,gravity:u.get("gravity"),friction:u.get("friction")}),S=w.step;w.step=function(t){for(var e=0,r=x.length;et?u():!0!==e&&(r=setTimeout(i?c:u,void 0===i?t-s:t))}return"boolean"!==typeof e&&(i=n,n=e,e=void 0),a}},"5aa9":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=r.isObject,a=r.each,s=r.map,l=r.indexOf,u=(r.retrieve,n("f934")),c=u.getLayoutRect,h=n("697e"),d=h.createScaleByModel,f=h.ifAxisCrossZero,p=h.niceScaleExtent,g=h.estimateLabelUnionRect,v=n("cbe9"),m=n("ec02"),y=n("2039"),x=n("ee1a"),_=x.getStackedDimension;function b(t,e,n){return t.getCoordSysModel()===e}function w(t,e,n){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,n),this.model=t}n("8ed2");var S=w.prototype;function M(t,e,n,i){n.getAxesOnZeroOf=function(){return r?[r]:[]};var r,o=t[e],a=n.model,s=a.get("axisLine.onZero"),l=a.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)A(o[l])&&(r=o[l]);else for(var u in o)if(o.hasOwnProperty(u)&&A(o[u])&&!i[c(o[u])]){r=o[u];break}r&&(i[c(r)]=!0)}function c(t){return t.dim+"_"+t.index}}function A(t){return t&&"category"!==t.type&&"time"!==t.type&&f(t)}function T(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}S.type="grid",S.axisPointerEnabled=!0,S.getRect=function(){return this._rect},S.update=function(t,e){var n=this._axesMap;this._updateScale(t,this.model),a(n.x,(function(t){p(t.scale,t.model)})),a(n.y,(function(t){p(t.scale,t.model)}));var i={};a(n.x,(function(t){M(n,"y",t,i)})),a(n.y,(function(t){M(n,"x",t,i)})),this.resize(this.model,e)},S.resize=function(t,e,n){var i=c(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=i;var r=this._axesList;function o(){a(r,(function(t){var e=t.isHorizontal(),n=e?[0,i.width]:[0,i.height],r=t.inverse?1:0;t.setExtent(n[r],n[1-r]),T(t,e?i.x:i.y)}))}o(),!n&&t.get("containLabel")&&(a(r,(function(t){if(!t.model.get("axisLabel.inside")){var e=g(t);if(e){var n=t.isHorizontal()?"height":"width",r=t.model.get("axisLabel.margin");i[n]-=e[n]+r,"top"===t.position?i.y+=e.height+r:"left"===t.position&&(i.x+=e.width+r)}}})),o())},S.getAxis=function(t,e){var n=this._axesMap[t];if(null!=n){if(null==e)for(var i in n)if(n.hasOwnProperty(i))return n[i];return n[e]}},S.getAxes=function(){return this._axesList.slice()},S.getCartesian=function(t,e){if(null!=t&&null!=e){var n="x"+t+"y"+e;return this._coordsMap[n]}o(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var i=0,r=this._coordsList;ic)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}}},"5b69":function(t,e,n){var i=n("2306"),r=n("3eba"),o=n("6d8b"),a=["itemStyle","opacity"],s=["emphasis","itemStyle","opacity"],l=["lineStyle","opacity"],u=["emphasis","lineStyle","opacity"];function c(t,e){return t.getVisual("opacity")||t.getModel().get(e)}function h(t,e,n){var i=t.getGraphicEl(),r=c(t,e);null!=n&&(null==r&&(r=1),r*=n),i.downplay&&i.downplay(),i.traverse((function(t){"group"!==t.type&&t.setStyle("opacity",r)}))}function d(t,e){var n=c(t,e),i=t.getGraphicEl();i.traverse((function(t){"group"!==t.type&&t.setStyle("opacity",n)})),i.highlight&&i.highlight()}var f=i.extendShape({shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,cpx2:0,cpy2:0,extent:0,orient:""},buildPath:function(t,e){var n=e.extent;t.moveTo(e.x1,e.y1),t.bezierCurveTo(e.cpx1,e.cpy1,e.cpx2,e.cpy2,e.x2,e.y2),"vertical"===e.orient?(t.lineTo(e.x2+n,e.y2),t.bezierCurveTo(e.cpx2+n,e.cpy2,e.cpx1+n,e.cpy1,e.x1+n,e.y1)):(t.lineTo(e.x2,e.y2+n),t.bezierCurveTo(e.cpx2,e.cpy2+n,e.cpx1,e.cpy1+n,e.x1,e.y1+n)),t.closePath()},highlight:function(){this.trigger("emphasis")},downplay:function(){this.trigger("normal")}}),p=r.extendChartView({type:"sankey",_model:null,_focusAdjacencyDisabled:!1,render:function(t,e,n){var r=this,o=t.getGraph(),a=this.group,s=t.layoutInfo,l=s.width,u=s.height,c=t.getData(),h=t.getData("edge"),d=t.get("orient");this._model=t,a.removeAll(),a.attr("position",[s.x,s.y]),o.eachEdge((function(e){var n=new f;n.dataIndex=e.dataIndex,n.seriesIndex=t.seriesIndex,n.dataType="edge";var r,o,s,c,p,g,v,m,y=e.getModel("lineStyle"),x=y.get("curveness"),_=e.node1.getLayout(),b=e.node1.getModel(),w=b.get("localX"),S=b.get("localY"),M=e.node2.getLayout(),A=e.node2.getModel(),T=A.get("localX"),I=A.get("localY"),C=e.getLayout();switch(n.shape.extent=Math.max(1,C.dy),n.shape.orient=d,"vertical"===d?(r=(null!=w?w*l:_.x)+C.sy,o=(null!=S?S*u:_.y)+_.dy,s=(null!=T?T*l:M.x)+C.ty,c=null!=I?I*u:M.y,p=r,g=o*(1-x)+c*x,v=s,m=o*x+c*(1-x)):(r=(null!=w?w*l:_.x)+_.dx,o=(null!=S?S*u:_.y)+C.sy,s=null!=T?T*l:M.x,c=(null!=I?I*u:M.y)+C.ty,p=r*(1-x)+s*x,g=o,v=r*x+s*(1-x),m=c),n.setShape({x1:r,y1:o,x2:s,y2:c,cpx1:p,cpy1:g,cpx2:v,cpy2:m}),n.setStyle(y.getItemStyle()),n.style.fill){case"source":n.style.fill=e.node1.getVisual("color");break;case"target":n.style.fill=e.node2.getVisual("color");break}i.setHoverStyle(n,e.getModel("emphasis.lineStyle").getItemStyle()),a.add(n),h.setItemGraphicEl(e.dataIndex,n)})),o.eachNode((function(e){var n=e.getLayout(),r=e.getModel(),o=r.get("localX"),s=r.get("localY"),h=r.getModel("label"),d=r.getModel("emphasis.label"),f=new i.Rect({shape:{x:null!=o?o*l:n.x,y:null!=s?s*u:n.y,width:n.dx,height:n.dy},style:r.getModel("itemStyle").getItemStyle()}),p=e.getModel("emphasis.itemStyle").getItemStyle();i.setLabelStyle(f.style,p,h,d,{labelFetcher:t,labelDataIndex:e.dataIndex,defaultText:e.id,isRectText:!0}),f.setStyle("fill",e.getVisual("color")),i.setHoverStyle(f,p),a.add(f),c.setItemGraphicEl(e.dataIndex,f),f.dataType="node"})),c.eachItemGraphicEl((function(e,i){var o=c.getItemModel(i);o.get("draggable")&&(e.drift=function(e,o){r._focusAdjacencyDisabled=!0,this.shape.x+=e,this.shape.y+=o,this.dirty(),n.dispatchAction({type:"dragNode",seriesId:t.id,dataIndex:c.getRawIndex(i),localX:this.shape.x/l,localY:this.shape.y/u})},e.ondragend=function(){r._focusAdjacencyDisabled=!1},e.draggable=!0,e.cursor="move"),e.highlight=function(){this.trigger("emphasis")},e.downplay=function(){this.trigger("normal")},e.focusNodeAdjHandler&&e.off("mouseover",e.focusNodeAdjHandler),e.unfocusNodeAdjHandler&&e.off("mouseout",e.unfocusNodeAdjHandler),o.get("focusNodeAdjacency")&&(e.on("mouseover",e.focusNodeAdjHandler=function(){r._focusAdjacencyDisabled||(r._clearTimer(),n.dispatchAction({type:"focusNodeAdjacency",seriesId:t.id,dataIndex:e.dataIndex}))}),e.on("mouseout",e.unfocusNodeAdjHandler=function(){r._focusAdjacencyDisabled||r._dispatchUnfocus(n)}))})),h.eachItemGraphicEl((function(e,i){var o=h.getItemModel(i);e.focusNodeAdjHandler&&e.off("mouseover",e.focusNodeAdjHandler),e.unfocusNodeAdjHandler&&e.off("mouseout",e.unfocusNodeAdjHandler),o.get("focusNodeAdjacency")&&(e.on("mouseover",e.focusNodeAdjHandler=function(){r._focusAdjacencyDisabled||(r._clearTimer(),n.dispatchAction({type:"focusNodeAdjacency",seriesId:t.id,edgeDataIndex:e.dataIndex}))}),e.on("mouseout",e.unfocusNodeAdjHandler=function(){r._focusAdjacencyDisabled||r._dispatchUnfocus(n)}))})),!this._data&&t.get("animation")&&a.setClipPath(g(a.getBoundingRect(),t,(function(){a.removeClipPath()}))),this._data=t.getData()},dispose:function(){this._clearTimer()},_dispatchUnfocus:function(t){var e=this;this._clearTimer(),this._unfocusDelayTimer=setTimeout((function(){e._unfocusDelayTimer=null,t.dispatchAction({type:"unfocusNodeAdjacency",seriesId:e._model.id})}),500)},_clearTimer:function(){this._unfocusDelayTimer&&(clearTimeout(this._unfocusDelayTimer),this._unfocusDelayTimer=null)},focusNodeAdjacency:function(t,e,n,i){var r=t.getData(),c=r.graph,f=i.dataIndex,p=r.getItemModel(f),g=i.edgeDataIndex;if(null!=f||null!=g){var v=c.getNodeByIndex(f),m=c.getEdgeByIndex(g);if(c.eachNode((function(t){h(t,a,.1)})),c.eachEdge((function(t){h(t,l,.1)})),v){d(v,s);var y=p.get("focusNodeAdjacency");"outEdges"===y?o.each(v.outEdges,(function(t){t.dataIndex<0||(d(t,u),d(t.node2,s))})):"inEdges"===y?o.each(v.inEdges,(function(t){t.dataIndex<0||(d(t,u),d(t.node1,s))})):"allEdges"===y&&o.each(v.edges,(function(t){t.dataIndex<0||(d(t,u),t.node1!==v&&d(t.node1,s),t.node2!==v&&d(t.node2,s))}))}m&&(d(m,u),d(m.node1,s),d(m.node2,s))}},unfocusNodeAdjacency:function(t,e,n,i){var r=t.getGraph();r.eachNode((function(t){h(t,a)})),r.eachEdge((function(t){h(t,l)}))}});function g(t,e,n){var r=new i.Rect({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return i.initProps(r,{shape:{width:t.width+20}},e,n),r}t.exports=p},"5b87":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=r.each,a=r.createHashMap,s=n("ec34"),l=n("4c86"),u=n("c92f"),c=n("9850"),h={geoJSON:l,svg:u},d={load:function(t,e,n){var i,r=[],s=a(),l=a(),u=p(t);return o(u,(function(a){var u=h[a.type].load(t,a,n);o(u.regions,(function(t){var n=t.name;e&&e.hasOwnProperty(n)&&(t=t.cloneShallow(n=e[n])),r.push(t),s.set(n,t),l.set(n,t.center)}));var c=u.boundingRect;c&&(i?i.union(c):i=c.clone())})),{regions:r,regionsMap:s,nameCoordMap:l,boundingRect:i||new c(0,0,0,0)}},makeGraphic:f("makeGraphic"),removeGraphic:f("removeGraphic")};function f(t){return function(e,n){var i=p(e),r=[];return o(i,(function(i){var o=h[i.type][t];o&&r.push(o(e,i,n))})),r}}function p(t){var e=s.retrieveMap(t)||[];return e}t.exports=d},"5bba":function(t,e,n){n("9d98");var i=n("584a").Object;t.exports=function(t,e){return i.defineProperties(t,e)}},"5c95":function(t,e,n){var i=n("35e8");t.exports=function(t,e,n){for(var r in e)n&&t[r]?t[r]=e[r]:i(t,r,e[r]);return t}},"5ca1":function(t,e,n){var i=n("7726"),r=n("8378"),o=n("32e9"),a=n("2aba"),s=n("9b43"),l="prototype",u=function(t,e,n){var c,h,d,f,p=t&u.F,g=t&u.G,v=t&u.S,m=t&u.P,y=t&u.B,x=g?i:v?i[e]||(i[e]={}):(i[e]||{})[l],_=g?r:r[e]||(r[e]={}),b=_[l]||(_[l]={});for(c in g&&(n=e),n)h=!p&&x&&void 0!==x[c],d=(h?x:n)[c],f=y&&h?s(d,i):m&&"function"==typeof d?s(Function.call,d):d,x&&a(x,c,d,t&u.U),_[c]!=d&&o(_,c,f),m&&b[c]!=d&&(b[c]=d)};i.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},"5cc5":function(t,e,n){var i=n("2b4c")("iterator"),r=!1;try{var o=[7][i]();o["return"]=function(){r=!0},Array.from(o,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var o=[7],s=o[i]();s.next=function(){return{done:n=!0}},o[i]=function(){return s},t(o)}catch(a){}return n}},"5cce":function(t,e){t.exports={version:"0.24.0"}},"5ce2":function(t,e,n){n("3970"),n("480e")},"5d58":function(t,e,n){t.exports=n("d8d6")},"5dbc":function(t,e,n){var i=n("d3f4"),r=n("8b97").set;t.exports=function(t,e,n){var o,a=e.constructor;return a!==n&&"function"==typeof a&&(o=a.prototype)!==n.prototype&&i(o)&&r&&r(t,o),t}},"5df3":function(t,e,n){"use strict";var i=n("02f4")(!0);n("01f9")(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})}))},"5e68":function(t,e,n){var i=n("6d8b"),r=n("2cf4"),o=r.devicePixelRatio,a=n("2b61"),s=n("dc2f");function l(){return!1}function u(t,e,n){var r=i.createCanvas(),o=e.getWidth(),a=e.getHeight(),s=r.style;return s&&(s.position="absolute",s.left=0,s.top=0,s.width=o+"px",s.height=a+"px",r.setAttribute("data-zr-dom-id",t)),r.width=o*n,r.height=a*n,r}var c=function(t,e,n){var r;n=n||o,"string"===typeof t?r=u(t,e,n):i.isObject(t)&&(r=t,t=r.id),this.id=t,this.dom=r;var a=r.style;a&&(r.onselectstart=l,a["-webkit-user-select"]="none",a["user-select"]="none",a["-webkit-touch-callout"]="none",a["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",a["padding"]=0,a["margin"]=0,a["border-width"]=0),this.domBack=null,this.ctxBack=null,this.painter=e,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=n};c.prototype={constructor:c,__dirty:!0,__used:!1,__drawIndex:0,__startIndex:0,__endIndex:0,incremental:!1,getElementCount:function(){return this.__endIndex-this.__startIndex},initContext:function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},createBackBuffer:function(){var t=this.dpr;this.domBack=u("back-"+this.id,this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!==t&&this.ctxBack.scale(t,t)},resize:function(t,e){var n=this.dpr,i=this.dom,r=i.style,o=this.domBack;r&&(r.width=t+"px",r.height=e+"px"),i.width=t*n,i.height=e*n,o&&(o.width=t*n,o.height=e*n,1!==n&&this.ctxBack.scale(n,n))},clear:function(t,e){var n,i=this.dom,r=this.ctx,o=i.width,l=i.height,u=(e=e||this.clearColor,this.motionBlur&&!t),c=this.lastFrameAlpha,h=this.dpr;(u&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(i,0,0,o/h,l/h)),r.clearRect(0,0,o,l),e&&"transparent"!==e)&&(e.colorStops?(n=e.__canvasGradient||a.getGradient(r,e,{x:0,y:0,width:o,height:l}),e.__canvasGradient=n):e.image&&(n=s.prototype.getCanvasPattern.call(e,r)),r.save(),r.fillStyle=n||e,r.fillRect(0,0,o,l),r.restore());if(u){var d=this.domBack;r.save(),r.globalAlpha=c,r.drawImage(d,0,0,o,l),r.restore()}}};var h=c;t.exports=h},"5e76":function(t,e,n){var i=n("d51b"),r=new i(50);function o(t){if("string"===typeof t){var e=r.get(t);return e&&e.image}return t}function a(t,e,n,i,o){if(t){if("string"===typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var a=r.get(t),u={hostEl:n,cb:i,cbPayload:o};return a?(e=a.image,!l(e)&&a.pending.push(u)):(e=new Image,e.onload=e.onerror=s,r.put(t,e.__cachedImgObj={image:e,pending:[u]}),e.src=e.__zrImageSrc=t),e}return t}return e}function s(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=0;a--)null==n[a]&&(delete r[e[a]],e.pop())}function p(t,e){var n=t.visual,r=[];i.isObject(n)?s(n,(function(t){r.push(t)})):null!=n&&r.push(n);var o={color:1,symbol:1};e||1!==r.length||o.hasOwnProperty(t.type)||(r[1]=r[0]),w(t,r)}function g(t){return{applyVisual:function(e,n,i){e=this.mapValueToVisual(e),i("color",t(n("color"),e))},_doMap:_([0,1])}}function v(t){var e=this.option.visual;return e[Math.round(a(t,[0,1],[0,e.length-1],!0))]||{}}function m(t){return function(e,n,i){i(t,this.mapValueToVisual(e))}}function y(t){var e=this.option.visual;return e[this.option.loop&&t!==u?t%e.length:t]}function x(){return this.option.visual[0]}function _(t){return{linear:function(e){return a(e,t,this.option.visual,!0)},category:y,piecewise:function(e,n){var i=b.call(this,n);return null==i&&(i=a(e,t,this.option.visual,!0)),i},fixed:x}}function b(t){var e=this.option,n=e.pieceList;if(e.hasSpecialVisual){var i=c.findPieceIndex(t,n),r=n[i];if(r&&r.visual)return r.visual[this.type]}}function w(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=i.map(e,(function(t){return r.parse(t)}))),e}var S={linear:function(t){return a(t,this.option.dataExtent,[0,1],!0)},piecewise:function(t){var e=this.option.pieceList,n=c.findPieceIndex(t,e,!0);if(null!=n)return a(n,[0,e.length-1],[0,1],!0)},category:function(t){var e=this.option.categories?this.option.categoryMap[t]:t;return null==e?u:e},fixed:i.noop};function M(t,e,n){return t?e<=n:e=0;if(r){var o="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];o&&h(t,o,e,n)}else h(t,e,e,n),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&u.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function g(t,e,n,i){l?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}function v(t,e,n,i){l?t.removeEventListener(e,n,i):t.detachEvent("on"+e,n)}var m=l?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function y(t){return 2===t.which||3===t.which}function x(t){return t.which>1}e.clientToLocal=h,e.getNativeEvent=f,e.normalizeEvent=p,e.addEventListener=g,e.removeEventListener=v,e.stop=m,e.isMiddleOrRightButtonOnMouseUpDown=y,e.notLeftMouse=x},"60d7":function(t,e,n){var i=n("2306"),r=n("e887"),o=.3,a=r.extend({type:"parallel",init:function(){this._dataGroup=new i.Group,this.group.add(this._dataGroup),this._data,this._initialized},render:function(t,e,n,r){var o=this._dataGroup,a=t.getData(),d=this._data,f=t.coordinateSystem,p=f.dimensions,g=c(t);function v(t){var e=u(a,o,t,p,f);h(e,a,t,g)}function m(e,n){var o=d.getItemGraphicEl(n),s=l(a,e,p,f);a.setItemGraphicEl(e,o);var u=r&&!1===r.animation?null:t;i.updateProps(o,{shape:{points:s}},u,e),h(o,a,e,g)}function y(t){var e=d.getItemGraphicEl(t);o.remove(e)}if(a.diff(d).add(v).update(m).remove(y).execute(),!this._initialized){this._initialized=!0;var x=s(f,t,(function(){setTimeout((function(){o.removeClipPath()}))}));o.setClipPath(x)}this._data=a},incrementalPrepareRender:function(t,e,n){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},incrementalRender:function(t,e,n){for(var i=e.getData(),r=e.coordinateSystem,o=r.dimensions,a=c(e),s=t.start;s65535?x:b}function S(t){var e=t.constructor;return e===Array?t.slice():new e(t)}var M=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_rawData","_chunkSize","_chunkCount","_dimValueGetter","_count","_rawCount","_nameDimIdx","_idDimIdx"],A=["_extent","_approximateExtent","_rawExtent"];function T(t,e){r.each(M.concat(e.__wrappedMethods||[]),(function(n){e.hasOwnProperty(n)&&(t[n]=e[n])})),t.__wrappedMethods=e.__wrappedMethods,r.each(A,(function(n){t[n]=r.clone(e[n])})),t._calculationInfo=r.extend(e._calculationInfo)}var I=function(t,e){t=t||["x","y"];for(var n={},i=[],o={},a=0;a=0?this._indices[t]:-1}function E(t,e){var n=t._idList[e];return null==n&&(n=L(t,t._idDimIdx,e)),null==n&&(n=m+e),n}function R(t){return r.isArray(t)||(t=[t]),t}function N(t,e){var n=t.dimensions,i=new I(r.map(n,t.getDimensionInfo,t),t.hostModel);T(i,t);for(var o=i._storage={},a=t._storage,s=0;s=0?(o[l]=z(a[l]),i._rawExtent[l]=B(),i._extent[l]=null):o[l]=a[l])}return i}function z(t){for(var e=new Array(t.length),n=0;nx[1]&&(x[1]=y)}e&&(this._nameList[f]=e[p])}this._rawCount=this._count=l,this._extent={},k(this)},C._initDataFromProvider=function(t,e){if(!(t>=e)){for(var n,i=this._chunkSize,r=this._rawData,o=this._storage,a=this.dimensions,s=a.length,l=this._dimensionInfos,u=this._nameList,c=this._idList,h=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!r.pure){var A=u[y];if(m&&null==A)if(null!=m.name)u[y]=A=m.name;else if(null!=n){var T=a[n],I=o[T][x];if(I){A=I[_];var C=l[T].ordinalMeta;C&&C.categories.length&&(A=C.categories[A])}}var L=null==m?null:m.id;null==L&&null!=A&&(d[A]=d[A]||0,L=A,d[A]>0&&(L+="__ec__"+d[A]),d[A]++),null!=L&&(c[y]=L)}}!r.persistent&&r.clean&&r.clean(),this._rawCount=this._count=e,this._extent={},k(this)}},C.count=function(){return this._count},C.getIndices=function(){var t=this._indices;if(t){var e=t.constructor,n=this._count;if(e===Array){r=new e(n);for(var i=0;i=0&&e=0&&es&&(s=u)}return i=[a,s],this._extent[t]=i,i},C.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},C.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},C.getCalculationInfo=function(t){return this._calculationInfo[t]},C.setCalculationInfo=function(t,e){p(t)?r.extend(this._calculationInfo,t):this._calculationInfo[t]=e},C.getSum=function(t){var e=this._storage[t],n=0;if(e)for(var i=0,r=this.count();i=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},C.indicesOfNearest=function(t,e,n){var i=this._storage,r=i[t],o=[];if(!r)return o;null==n&&(n=1/0);for(var a=1/0,s=-1,l=0,u=0,c=this.count();u=0&&s<0)&&(a=d,s=h,l=0),h===s&&(o[l++]=u))}return o.length=l,o},C.getRawIndex=P,C.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],n=0;n=u&&y<=c||isNaN(y))&&(a[s++]=d),d++}h=!0}else if(2===i){f=this._storage[l];var x=this._storage[e[1]],_=t[e[1]][0],b=t[e[1]][1];for(p=0;p=u&&y<=c||isNaN(y))&&(M>=_&&M<=b||isNaN(M))&&(a[s++]=d),d++}}h=!0}}if(!h)if(1===i)for(m=0;m=u&&y<=c||isNaN(y))&&(a[s++]=A)}else for(m=0;mt[I][1])&&(T=!1)}T&&(a[s++]=this.getRawIndex(m))}return sw[1]&&(w[1]=b)}}}return o},C.downSample=function(t,e,n,i){for(var r=N(this,[t]),o=r._storage,a=[],s=Math.floor(1/e),l=o[t],u=this.count(),c=this._chunkSize,h=r._rawExtent[t],d=new(w(this))(u),f=0,p=0;pu-p&&(s=u-p,a.length=s);for(var g=0;gh[1]&&(h[1]=x),d[f++]=_}return r._count=f,r._indices=d,r.getRawIndex=O,r},C.getItemModel=function(t){var e=this.hostModel;return new o(this.getRawDataItem(t),e,e&&e.ecModel)},C.diff=function(t){var e=this;return new a(t?t.getIndices():[],this.getIndices(),(function(e){return E(t,e)}),(function(t){return E(e,t)}))},C.getVisual=function(t){var e=this._visual;return e&&e[t]},C.setVisual=function(t,e){if(p(t))for(var n in t)t.hasOwnProperty(n)&&this.setVisual(n,t[n]);else this._visual=this._visual||{},this._visual[t]=e},C.setLayout=function(t,e){if(p(t))for(var n in t)t.hasOwnProperty(n)&&this.setLayout(n,t[n]);else this._layout[t]=e},C.getLayout=function(t){return this._layout[t]},C.getItemLayout=function(t){return this._itemLayouts[t]},C.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?r.extend(this._itemLayouts[t]||{},e):e},C.clearItemLayouts=function(){this._itemLayouts.length=0},C.getItemVisual=function(t,e,n){var i=this._itemVisuals[t],r=i&&i[e];return null!=r||n?r:this.getVisual(e)},C.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{},r=this.hasItemVisual;if(this._itemVisuals[t]=i,p(e))for(var o in e)e.hasOwnProperty(o)&&(i[o]=e[o],r[o]=!0);else i[e]=n,r[e]=!0},C.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var V=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};C.setItemGraphicEl=function(t,e){var n=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=n&&n.seriesIndex,"group"===e.type&&e.traverse(V,e)),this._graphicEls[t]=e},C.getItemGraphicEl=function(t){return this._graphicEls[t]},C.eachItemGraphicEl=function(t,e){r.each(this._graphicEls,(function(n,i){n&&t&&t.call(e,n,i)}))},C.cloneShallow=function(t){if(!t){var e=r.map(this.dimensions,this.getDimensionInfo,this);t=new I(e,this.hostModel)}if(t._storage=this._storage,T(t,this),this._indices){var n=this._indices.constructor;t._indices=new n(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?O:P,t},C.wrapMethod=function(t,e){var n=this[t];"function"===typeof n&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(r.slice(arguments)))})},C.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],C.CHANGABLE_METHODS=["filterSelf","selectRange"];var F=I;t.exports=F},"620b":function(t,e,n){var i=n("401b"),r=i.distance;function o(t,e,n,i,r,o,a){var s=.5*(n-t),l=.5*(i-e);return(2*(e-n)+s+l)*a+(-3*(e-n)-2*s-l)*o+s*r+e}function a(t,e){for(var n=t.length,i=[],a=0,s=1;sn-2?n-1:f+1],h=t[f>n-3?n-1:f+2]);var v=p*p,m=p*v;i.push([o(u[0],g[0],c[0],h[0],p,v,m),o(u[1],g[1],c[1],h[1],p,v,m)])}return i}t.exports=a},"625e":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=".",a="___EC__COMPONENT__CONTAINER___";function s(t){var e={main:"",sub:""};return t&&(t=t.split(o),e.main=t[0]||"",e.sub=t[1]||""),e}function l(t){r.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}function u(t,e){t.$constructor=t,t.extend=function(t){var e=this,n=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return r.extend(n.prototype,t),n.extend=this.extend,n.superCall=d,n.superApply=f,r.inherits(n,this),n.superClass=e,n}}var c=0;function h(t){var e=["__\0is_clz",c++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function d(t,e){var n=r.slice(arguments,2);return this.superClass.prototype[e].apply(t,n)}function f(t,e,n){return this.superClass.prototype[e].apply(t,n)}function p(t,e){e=e||{};var n={};function i(t){var e=n[t.main];return e&&e[a]||(e=n[t.main]={},e[a]=!0),e}if(t.registerClass=function(t,e){if(e)if(l(e),e=s(e),e.sub){if(e.sub!==a){var r=i(e);r[e.sub]=t}}else n[e.main]=t;return t},t.getClass=function(t,e,i){var r=n[t];if(r&&r[a]&&(r=e?r[e]:null),i&&!r)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return r},t.getClassesByMainType=function(t){t=s(t);var e=[],i=n[t.main];return i&&i[a]?r.each(i,(function(t,n){n!==a&&e.push(t)})):e.push(i),e},t.hasClass=function(t){return t=s(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return r.each(n,(function(e,n){t.push(n)})),t},t.hasSubTypes=function(t){t=s(t);var e=n[t.main];return e&&e[a]},t.parseClassType=s,e.registerWhenExtend){var o=t.extend;o&&(t.extend=function(e){var n=o.call(this,e);return t.registerClass(n,e.type)})}return t}function g(t,e){}e.parseClassType=s,e.enableClassExtend=u,e.enableClassCheck=h,e.enableClassManagement=p,e.setReadOnly=g},"626a":function(t,e,n){var i=n("2d95");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},"627c":function(t,e,n){var i=n("6d8b"),r=n("3eba"),o=n("2306"),a=n("f934"),s=a.getLayoutRect,l=n("eda2"),u=l.windowOpen;r.extendComponentModel({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"}}}),r.extendComponentView({type:"title",render:function(t,e,n){if(this.group.removeAll(),t.get("show")){var r=this.group,a=t.getModel("textStyle"),l=t.getModel("subtextStyle"),c=t.get("textAlign"),h=i.retrieve2(t.get("textBaseline"),t.get("textVerticalAlign")),d=new o.Text({style:o.setTextStyle({},a,{text:t.get("text"),textFill:a.getTextColor()},{disableBox:!0}),z2:10}),f=d.getBoundingRect(),p=t.get("subtext"),g=new o.Text({style:o.setTextStyle({},l,{text:p,textFill:l.getTextColor(),y:f.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),v=t.get("link"),m=t.get("sublink"),y=t.get("triggerEvent",!0);d.silent=!v&&!y,g.silent=!m&&!y,v&&d.on("click",(function(){u(v,"_"+t.get("target"))})),m&&g.on("click",(function(){u(m,"_"+t.get("subtarget"))})),d.eventData=g.eventData=y?{componentType:"title",componentIndex:t.componentIndex}:null,r.add(d),p&&r.add(g);var x=r.getBoundingRect(),_=t.getBoxLayoutParams();_.width=x.width,_.height=x.height;var b=s(_,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));c||(c=t.get("left")||t.get("right"),"middle"===c&&(c="center"),"right"===c?b.x+=b.width:"center"===c&&(b.x+=b.width/2)),h||(h=t.get("top")||t.get("bottom"),"center"===h&&(h="middle"),"bottom"===h?b.y+=b.height:"middle"===h&&(b.y+=b.height/2),h=h||"top"),r.attr("position",[b.x,b.y]);var w={textAlign:c,textVerticalAlign:h};d.setStyle(w),g.setStyle(w),x=r.getBoundingRect();var S=b.margin,M=t.getItemStyle(["color","opacity"]);M.fill=t.get("backgroundColor");var A=new o.Rect({shape:{x:x.x-S[3],y:x.y-S[0],width:x.width+S[1]+S[3],height:x.height+S[0]+S[2],r:t.get("borderRadius")},style:M,subPixelOptimize:!0,silent:!0});r.add(A)}}})},"62a0":function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},"63b6":function(t,e,n){var i=n("e53d"),r=n("584a"),o=n("d864"),a=n("35e8"),s=n("07e3"),l="prototype",u=function(t,e,n){var c,h,d,f=t&u.F,p=t&u.G,g=t&u.S,v=t&u.P,m=t&u.B,y=t&u.W,x=p?r:r[e]||(r[e]={}),_=x[l],b=p?i:g?i[e]:(i[e]||{})[l];for(c in p&&(n=e),n)h=!f&&b&&void 0!==b[c],h&&s(x,c)||(d=h?b[c]:n[c],x[c]=p&&"function"!=typeof b[c]?n[c]:m&&h?o(d,i):y&&b[c]==d?function(t){var e=function(e,n,i){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,i)}return t.apply(this,arguments)};return e[l]=t[l],e}(d):v&&"function"==typeof d?o(Function.call,d):d,v&&((x.virtual||(x.virtual={}))[c]=d,t&u.R&&_&&!_[c]&&a(_,c,d)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},6569:function(t,e,n){var i=n("6d8b"),r=n("e0d3");function o(t){a(t),s(t)}function a(t){if(!t.parallel){var e=!1;i.each(t.series,(function(t){t&&"parallel"===t.type&&(e=!0)})),e&&(t.parallel=[{}])}}function s(t){var e=r.normalizeToArray(t.parallelAxis);i.each(e,(function(e){if(i.isObject(e)){var n=e.parallelIndex||0,o=r.normalizeToArray(t.parallel)[n];o&&o.parallelAxisDefault&&i.merge(e,o.parallelAxisDefault,!1)}}))}t.exports=o},"656e":function(t,e,n){"use strict";var i=n("79aa");function r(t){var e,n;this.promise=new t((function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i})),this.resolve=i(e),this.reject=i(n)}t.exports.f=function(t){return new r(t)}},6582:function(t,e,n){var i=n("cccd"),r={seriesType:"lines",plan:i(),reset:function(t){var e=t.coordinateSystem,n=t.get("polyline"),i=t.pipelineContext.large;function r(r,o){var a=[];if(i){var s,l=r.end-r.start;if(n){for(var u=0,c=r.start;c>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[l]+":0",r[u]+":0",i[1-l]+":auto",r[1-u]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}function h(t,e,n){for(var i=n?"invTrans":"trans",r=e[i],a=e.srcCoords,s=!0,l=[],u=[],c=0;c<4;c++){var h=t[c].getBoundingClientRect(),d=2*c,f=h.left,p=h.top;l.push(f,p),s=s&&a&&f===a[d]&&p===a[d+1],u.push(t[c].offsetLeft,t[c].offsetTop)}return s&&r?r:(e.srcCoords=l,e[i]=n?o(u,l):o(l,u))}function d(t){return"CANVAS"===t.nodeName.toUpperCase()}e.transformLocalCoord=l,e.transformCoordWithViewport=u,e.isCanvasEl=d},6679:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("cd33"),a=r.extendComponentView({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,n,i){this.axisPointerClass&&o.fixValue(t),a.superApply(this,"render",arguments),s(this,t,e,n,i,!0)},updateAxisPointer:function(t,e,n,i,r){s(this,t,e,n,i,!1)},remove:function(t,e){var n=this._axisPointer;n&&n.remove(e),a.superApply(this,"remove",arguments)},dispose:function(t,e){l(this,e),a.superApply(this,"dispose",arguments)}});function s(t,e,n,i,r,s){var u=a.getAxisPointerClass(t.axisPointerClass);if(u){var c=o.getAxisPointerModel(e);c?(t._axisPointer||(t._axisPointer=new u)).render(e,c,i,s):l(t,i)}}function l(t,e,n){var i=t._axisPointer;i&&i.dispose(e,n),t._axisPointer=null}var u=[];a.registerAxisPointerClass=function(t,e){u[t]=e},a.getAxisPointerClass=function(t){return t&&u[t]};var c=a;t.exports=c},"66a4":function(t,e,n){var i=n("6d8b");function r(t){var e=t&&t.timeline;i.isArray(e)||(e=e?[e]:[]),i.each(e,(function(t){t&&o(t)}))}function o(t){var e=t.type,n={number:"value",time:"time"};if(n[e]&&(t.axisType=n[e],delete t.type),a(t),s(t,"controlPosition")){var r=t.controlStyle||(t.controlStyle={});s(r,"position")||(r.position=t.controlPosition),"none"!==r.position||s(r,"show")||(r.show=!1,delete r.position),delete t.controlPosition}i.each(t.data||[],(function(t){i.isObject(t)&&!i.isArray(t)&&(!s(t,"value")&&s(t,"name")&&(t.value=t.name),a(t))}))}function a(t){var e=t.itemStyle||(t.itemStyle={}),n=e.emphasis||(e.emphasis={}),r=t.label||t.label||{},o=r.normal||(r.normal={}),a={normal:1,emphasis:1};i.each(r,(function(t,e){a[e]||s(o,e)||(o[e]=t)})),n.label&&!s(r,"emphasis")&&(r.emphasis=n.label,delete n.label)}function s(t,e){return t.hasOwnProperty(e)}t.exports=r},"66fc":function(t,e,n){var i=n("6d8b"),r=n("84ce"),o=function(t,e,n,i,o){r.call(this,t,e,n),this.type=i||"value",this.position=o||"bottom",this.orient=null};o.prototype={constructor:o,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},pointToData:function(t,e){return this.coordinateSystem.pointToData(t,e)[0]},toGlobalCoord:null,toLocalCoord:null},i.inherits(o,r);var a=o;t.exports=a},6718:function(t,e,n){var i=n("e53d"),r=n("584a"),o=n("b8e3"),a=n("ccb9"),s=n("d9f6").f;t.exports=function(t){var e=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},"675a":function(t,e){function n(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.eachSeriesByType("graph",(function(t){var n=t.getCategoriesData(),i=t.getGraph(),r=i.data,o=n.mapArray(n.getName);r.filterSelf((function(t){var n=r.getItemModel(t),i=n.getShallow("category");if(null!=i){"number"===typeof i&&(i=o[i]);for(var a=0;a1?arguments[1]:void 0)}}),n("9c6c")("includes")},"67a8":function(t,e,n){var i=n("3301"),r=n("4f85"),o=r.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){return i(this.getSource(),this,{useEncodeDefaulter:!0})},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}});t.exports=o},"67ab":function(t,e,n){var i=n("ca5a")("meta"),r=n("d3f4"),o=n("69a8"),a=n("86cc").f,s=0,l=Object.isExtensible||function(){return!0},u=!n("79e5")((function(){return l(Object.preventExtensions({}))})),c=function(t){a(t,i,{value:{i:"O"+ ++s,w:{}}})},h=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!l(t))return"F";if(!e)return"E";c(t)}return t[i].i},d=function(t,e){if(!o(t,i)){if(!l(t))return!0;if(!e)return!1;c(t)}return t[i].w},f=function(t){return u&&p.NEED&&l(t)&&!o(t,i)&&c(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:h,getWeak:d,onFreeze:f}},"67bb":function(t,e,n){t.exports=n("f921")},"67cc":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("2306"),s=n("e7aa"),l=s.setLabel,u=n("4319"),c=n("b5c7"),h=n("cbe5"),d=n("e1fc"),f=n("88b3"),p=f.throttle,g=n("b0af"),v=g.createClipPath,m=n("c2be"),y=["itemStyle","barBorderWidth"],x=[0,0];function _(t,e){var n=t.getArea&&t.getArea();if("cartesian2d"===t.type){var i=t.getBaseAxis();if("category"!==i.type||!i.onBand){var r=e.getLayout("bandWidth");i.isHorizontal()?(n.x-=r,n.width+=2*r):(n.y-=r,n.height+=2*r)}}return n}o.extend(u.prototype,c);var b=r.extendChartView({type:"bar",render:function(t,e,n){this._updateDrawMode(t);var i=t.get("coordinateSystem");return"cartesian2d"!==i&&"polar"!==i||(this._isLargeDraw?this._renderLarge(t,e,n):this._renderNormal(t,e,n)),this.group},incrementalPrepareRender:function(t,e,n){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e,n,i){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t,e,n){var i,r=this.group,o=t.getData(),s=this._data,l=t.coordinateSystem,u=l.getBaseAxis();"cartesian2d"===l.type?i=u.isHorizontal():"polar"===l.type&&(i="angle"===u.dim);var c=t.isAnimationEnabled()?t:null,h=t.get("clip",!0),f=_(l,o);r.removeClipPath();var p=t.get("roundCap",!0),g=t.get("showBackground",!0),v=t.getModel("backgroundStyle"),m=v.get("barBorderRadius")||0,y=[],x=this._backgroundEls||[],b=function(t){var e=C[l.type](o,t),n=V(l,i,e);return n.useStyle(v.getBarItemStyle()),"cartesian2d"===l.type&&n.setShape("r",m),y[t]=n,n};o.diff(s).add((function(e){var n=o.getItemModel(e),a=C[l.type](o,e,n);if(g&&b(e),o.hasValue(e)){if(h){var s=M[l.type](f,a);if(s)return void r.remove(u)}var u=A[l.type](e,a,i,c,!1,p);o.setItemGraphicEl(e,u),r.add(u),k(u,o,e,n,a,t,i,"polar"===l.type)}})).update((function(e,n){var u=o.getItemModel(e),d=C[l.type](o,e,u);if(g){var _;0===x.length?_=b(n):(_=x[n],_.useStyle(v.getBarItemStyle()),"cartesian2d"===l.type&&_.setShape("r",m),y[e]=_);var w=C[l.type](o,e),S=B(i,w,l);a.updateProps(_,{shape:S},c,e)}var T=s.getItemGraphicEl(n);if(o.hasValue(e)){if(h){var I=M[l.type](f,d);if(I)return void r.remove(T)}T?a.updateProps(T,{shape:d},c,e):T=A[l.type](e,d,i,c,!0,p),o.setItemGraphicEl(e,T),r.add(T),k(T,o,e,u,d,t,i,"polar"===l.type)}else r.remove(T)})).remove((function(t){var e=s.getItemGraphicEl(t);"cartesian2d"===l.type?e&&T(t,c,e):e&&I(t,c,e)})).execute();var w=this._backgroundGroup||(this._backgroundGroup=new d);w.removeAll();for(var S=0;S0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle}}};function D(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}function k(t,e,n,i,r,s,u,c){var h=e.getItemVisual(n,"color"),d=e.getItemVisual(n,"opacity"),f=e.getVisual("borderColor"),p=i.getModel("itemStyle"),g=i.getModel("emphasis.itemStyle").getBarItemStyle();c||t.setShape("r",p.get("barBorderRadius")||0),t.useStyle(o.defaults({stroke:D(r)?"none":f,fill:D(r)?"none":h,opacity:d},p.getBarItemStyle()));var v=i.getShallow("cursor");v&&t.attr("cursor",v);var m=u?r.height>0?"bottom":"top":r.width>0?"left":"right";c||l(t.style,g,i,h,s,n,m),D(r)&&(g.fill=g.stroke="none"),a.setHoverStyle(t,g)}function L(t,e){var n=t.get(y)||0,i=isNaN(e.width)?Number.MAX_VALUE:Math.abs(e.width),r=isNaN(e.height)?Number.MAX_VALUE:Math.abs(e.height);return Math.min(n,i,r)}var P=h.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var n=e.points,i=this.__startPoint,r=this.__baseDimIdx,o=0;o=0?n:null}),30,!1);function R(t,e,n){var i=t.__baseDimIdx,r=1-i,o=t.shape.points,a=t.__largeDataIndices,s=Math.abs(t.__barWidth/2),l=t.__startPoint[r];x[0]=e,x[1]=n;for(var u=x[i],c=x[1-i],h=u-s,d=u+s,f=0,p=o.length/2;f=h&&v<=d&&(l<=m?c>=l&&c<=m:c>=m&&c<=l))return a[f]}return-1}function N(t,e,n){var i=n.getVisual("borderColor")||n.getVisual("color"),r=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(r),t.style.fill=null,t.style.stroke=i,t.style.lineWidth=n.getLayout("barWidth")}function z(t,e,n){var i=e.get("borderColor")||e.get("color"),r=e.getItemStyle(["color","borderColor"]);t.useStyle(r),t.style.fill=null,t.style.stroke=i,t.style.lineWidth=n.getLayout("barWidth")}function B(t,e,n){var i,r="polar"===n.type;return i=r?n.getArea():n.grid.getRect(),r?{cx:i.cx,cy:i.cy,r0:t?i.r0:e.r0,r:t?i.r:e.r,startAngle:t?e.startAngle:0,endAngle:t?e.endAngle:2*Math.PI}:{x:t?e.x:i.x,y:t?i.y:e.y,width:t?e.width:i.width,height:t?i.height:e.height}}function V(t,e,n){var i="polar"===t.type?a.Sector:a.Rect;return new i({shape:B(e,n,t),silent:!0,z2:0})}t.exports=b},6821:function(t,e,n){var i=n("626a"),r=n("be13");t.exports=function(t){return i(r(t))}},"68ab":function(t,e,n){var i=n("4a3f"),r=i.quadraticProjectPoint;function o(t,e,n,i,o,a,s,l,u){if(0===s)return!1;var c=s;if(u>e+c&&u>i+c&&u>a+c||ut+c&&l>n+c&&l>o+c||l0&&u>0&&!f&&(s=0),s<0&&u<0&&!p&&(u=0));var v=e.ecModel;if(v&&"time"===a){var m,y=c("bar",v);if(r.each(y,(function(t){m|=t.getBaseAxis()===e.axis})),m){var x=h(y),_=g(s,u,e,x);s=_.min,u=_.max}}return{extent:[s,u],fixMin:f,fixMax:p}}function g(t,e,n,i){var o=n.axis.getExtent(),a=o[1]-o[0],s=d(i,n.axis);if(void 0===s)return{min:t,max:e};var l=1/0;r.each(s,(function(t){l=Math.min(t.offset,l)}));var u=-1/0;r.each(s,(function(t){u=Math.max(t.offset+t.width,u)})),l=Math.abs(l),u=Math.abs(u);var c=l+u,h=e-t,f=1-(l+u)/a,p=h/f-h;return e+=p*(u/c),t-=p*(l/c),{min:t,max:e}}function v(t,e){var n=p(t,e),i=n.extent,r=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var o=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:r,fixMin:n.fixMin,fixMax:n.fixMax,minInterval:"interval"===o||"time"===o?e.get("minInterval"):null,maxInterval:"interval"===o||"time"===o?e.get("maxInterval"):null});var a=e.get("interval");null!=a&&t.setInterval&&t.setInterval(a)}function m(t,e){if(e=e||t.get("type"),e)switch(e){case"category":return new o(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new a;default:return(s.getClass(e)||a).create(t)}}function y(t){var e=t.scale.getExtent(),n=e[0],i=e[1];return!(n>0&&i>0||n<0&&i<0)}function x(t){var e=t.getLabelModel().get("formatter"),n="category"===t.type?t.scale.getExtent()[0]:null;return"string"===typeof e?(e=function(e){return function(n){return n=t.scale.getLabel(n),e.replace("{value}",null!=n?n:"")}}(e),e):"function"===typeof e?function(i,r){return null!=n&&(r=i-n),e(_(t,i),r)}:function(e){return t.scale.getLabel(e)}}function _(t,e){return"category"===t.type?t.scale.getLabel(e):e}function b(t){var e=t.model,n=t.scale;if(e.get("axisLabel.show")&&!n.isBlank()){var i,r,o="category"===t.type,a=n.getExtent();o?r=n.count():(i=n.getTicks(),r=i.length);var s,l=t.getLabelModel(),u=x(t),c=1;r>40&&(c=Math.ceil(r/40));for(var h=0;hn.blockIndex,o=r?n.step:null,a=i&&i.modDataCount,s=null!=a?Math.ceil(a/o):null;return{step:o,modBy:s,modDataCount:a}}},y.getPipeline=function(t){return this._pipelineMap.get(t)},y.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData(),r=i.count(),o=n.progressiveEnabled&&e.incrementalPrepareRender&&r>=n.threshold,a=t.get("large")&&r>=t.get("largeThreshold"),s="mod"===t.get("progressiveChunkMode")?r:null;t.pipelineContext=n.context={progressiveRender:o,modDataCount:s,large:a}},y.restorePipelines=function(t){var e=this,n=e._pipelineMap=s();t.eachSeries((function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),P(e,t,t.dataTask)}))},y.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),n=this.api;r(this._allHandlers,(function(i){var r=t.get(i.uid)||t.set(i.uid,[]);i.reset&&b(this,i,r,e,n),i.overallReset&&w(this,i,r,e,n)}),this)},y.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,P(this,e,r)},y.performDataProcessorTasks=function(t,e){x(this,this._dataProcessorHandlers,t,e,{block:!0})},y.performVisualTasks=function(t,e,n){x(this,this._visualHandlers,t,e,n)},y.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e|=t.dataTask.perform()})),this.unfinished|=e},y.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 _=y.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)};function b(t,e,n,i,r){var o=n.seriesTaskMap||(n.seriesTaskMap=s()),a=e.seriesType,l=e.getTargetSeries;function u(n){var a=n.uid,s=o.get(a)||o.set(a,c({plan:I,reset:C,count:L}));s.context={model:n,ecModel:i,api:r,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},P(t,n,s)}e.createOnAllSeries?i.eachRawSeries(u):a?i.eachRawSeriesByType(a,u):l&&l(i,r).each(u);var h=t._pipelineMap;o.each((function(t,e){h.get(e)||(t.dispose(),o.removeKey(e))}))}function w(t,e,n,i,o){var a=n.overallTask=n.overallTask||c({reset:S});a.context={ecModel:i,api:o,overallReset:e.overallReset,scheduler:t};var l=a.agentStubMap=a.agentStubMap||s(),u=e.seriesType,h=e.getTargetSeries,d=!0,f=e.modifyOutputEnd;function p(e){var n=e.uid,i=l.get(n);i||(i=l.set(n,c({reset:M,onDirty:T})),a.dirty()),i.context={model:e,overallProgress:d,modifyOutputEnd:f},i.agent=a,i.__block=d,P(t,e,i)}u?i.eachRawSeriesByType(u,p):h?h(i,o).each(p):(d=!1,r(i.getSeries(),p));var g=t._pipelineMap;l.each((function(t,e){g.get(e)||(t.dispose(),a.dirty(),l.removeKey(e))}))}function S(t){t.overallReset(t.ecModel,t.api,t.payload)}function M(t,e){return t.overallProgress&&A}function A(){this.agent.dirty(),this.getDownstream().dirty()}function T(){this.agent&&this.agent.dirty()}function I(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function C(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=v(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?o(e,(function(t,e){return k(e)})):D}var D=k(0);function k(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o=0;l--)if(i[l]<=e)break;l=Math.min(l,r-2)}else{for(var l=o;le)break;l=Math.min(l-1,r-2)}a.lerp(t.position,n[l],n[l+1],(e-i[l])/(i[l+1]-i[l]));var u=n[l+1][0]-n[l][0],c=n[l+1][1]-n[l][1];t.rotation=-Math.atan2(c,u)-Math.PI/2,this._lastFrame=l,this._lastFramePercent=e,t.ignore=!1}},r.inherits(s,o);var u=s;t.exports=u},"6a99":function(t,e,n){var i=n("d3f4");t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},"6abf":function(t,e,n){var i=n("e6f3"),r=n("1691").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},"6acf":function(t,e,n){var i=n("eda2"),r=n("dcb3"),o=n("2306"),a=n("ff2e"),s=n("1687"),l=n("fab2"),u=n("6679"),c=r.extend({makeElOption:function(t,e,n,r,o){var s=n.axis;"angle"===s.dim&&(this.animationThreshold=Math.PI/18);var l,u=s.polar,c=u.getOtherAxis(s),f=c.getExtent();l=s["dataTo"+i.capitalFirst(s.dim)](e);var p=r.get("type");if(p&&"none"!==p){var g=a.buildElStyle(r),v=d[p](s,u,l,f,g);v.style=g,t.graphicKey=v.type,t.pointer=v}var m=r.get("label.margin"),y=h(e,n,r,u,m);a.buildLabelElOption(t,n,r,o,y)}});function h(t,e,n,i,r){var a=e.axis,u=a.dataToCoord(t),c=i.getAngleAxis().getExtent()[0];c=c/180*Math.PI;var h,d,f,p=i.getRadiusAxis().getExtent();if("radius"===a.dim){var g=s.create();s.rotate(g,g,c),s.translate(g,g,[i.cx,i.cy]),h=o.applyTransform([u,-r],g);var v=e.getModel("axisLabel").get("rotate")||0,m=l.innerTextLayout(c,v*Math.PI/180,-1);d=m.textAlign,f=m.textVerticalAlign}else{var y=p[1];h=i.coordToPoint([y+r,u]);var x=i.cx,_=i.cy;d=Math.abs(h[0]-x)/y<.3?"center":h[0]>x?"left":"right",f=Math.abs(h[1]-_)/y<.3?"middle":h[1]>_?"top":"bottom"}return{position:h,align:d,verticalAlign:f}}var d={line:function(t,e,n,i,r){return"angle"===t.dim?{type:"Line",shape:a.makeLineShape(e.coordToPoint([i[0],n]),e.coordToPoint([i[1],n]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:n}}},shadow:function(t,e,n,i,r){var o=Math.max(1,t.getBandWidth()),s=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:a.makeSectorShape(e.cx,e.cy,i[0],i[1],(-n-o/2)*s,(o/2-n)*s)}:{type:"Sector",shape:a.makeSectorShape(e.cx,e.cy,n-o/2,n+o/2,0,2*Math.PI)}}};u.registerAxisPointerClass("PolarAxisPointer",c);var f=c;t.exports=f},"6b4c":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"6b54":function(t,e,n){"use strict";n("3846");var i=n("cb7c"),r=n("0bfb"),o=n("9e1e"),a="toString",s=/./[a],l=function(t){n("2aba")(RegExp.prototype,a,t,!0)};n("79e5")((function(){return"/a/b"!=s.call({source:"a",flags:"b"})}))?l((function(){var t=i(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?r.call(t):void 0)})):s.name!=a&&l((function(){return s.call(this)}))},"6bd4":function(t,e){var n={Russia:[100,60],"United States":[-99,38],"United States of America":[-99,38]};function i(t,e){if("world"===t){var i=n[e.name];if(i){var r=e.center;r[0]=i[0],r[1]=i[1]}}}t.exports=i},"6c12":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("fab2"),s=n("2306"),l=["axisLine","axisTickLabel","axisName"],u=r.extendComponentView({type:"radar",render:function(t,e,n){var i=this.group;i.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes(),i=o.map(n,(function(t){var n=new a(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return n}));o.each(i,(function(t){o.each(l,t.add,t),this.group.add(t.getGroup())}),this)},_buildSplitLineAndArea:function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes();if(n.length){var i=t.get("shape"),r=t.getModel("splitLine"),a=t.getModel("splitArea"),l=r.getModel("lineStyle"),u=a.getModel("areaStyle"),c=r.get("show"),h=a.get("show"),d=l.get("color"),f=u.get("color");d=o.isArray(d)?d:[d],f=o.isArray(f)?f:[f];var p=[],g=[];if("circle"===i)for(var v=n[0].getTicksCoords(),m=e.cx,y=e.cy,x=0;x=0;a--)o=i.merge(o,e[a],!0);t.defaultOption=o}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});function g(t){var e=[];return i.each(p.getClassesByMainType(t),(function(t){e=e.concat(t.prototype.dependencies||[])})),e=i.map(e,(function(t){return l(t).main})),"dataset"!==t&&i.indexOf(e,"dataset")<=0&&e.unshift("dataset"),e}s(p,{registerWhenExtend:!0}),o.enableSubTypeDefaulter(p),o.enableTopologicalTravel(p,g),i.mixin(p,d);var v=p;t.exports=v},"6cc5":function(t,e,n){var i=n("6d8b"),r=n("401b"),o=n("1687"),a=n("9850"),s=n("0cde"),l=r.applyTransform;function u(){s.call(this)}function c(t){this.name=t,this.zoomLimit,s.call(this),this._roamTransformable=new u,this._rawTransformable=new u,this._center,this._zoom}function h(t,e,n,i){var r=n.seriesModel,o=r?r.coordinateSystem:null;return o===this?o[t](i):null}i.mixin(u,s),c.prototype={constructor:c,type:"view",dimensions:["x","y"],setBoundingRect:function(t,e,n,i){return this._rect=new a(t,e,n,i),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,n,i){this.transformTo(t,e,n,i),this._viewRect=new a(t,e,n,i)},transformTo:function(t,e,n,i){var r=this.getBoundingRect(),o=this._rawTransformable;o.transform=r.calculateTransform(new a(t,e,n,i)),o.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect(),e=t.x+t.width/2,n=t.y+t.height/2;return[e,n]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransformable.getLocalTransform()},_updateCenterAndZoom:function(){var t=this._rawTransformable.getLocalTransform(),e=this._roamTransformable,n=this.getDefaultCenter(),i=this.getCenter(),o=this.getZoom();i=r.applyTransform([],i,t),n=r.applyTransform([],n,t),e.origin=i,e.position=[n[0]-i[0],n[1]-i[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransformable,e=this._rawTransformable;e.parent=t,t.updateTransform(),e.updateTransform(),o.copy(this.transform||(this.transform=[]),e.transform||o.create()),this._rawTransform=e.getLocalTransform(),this.invTransform=this.invTransform||[],o.invert(this.invTransform,this.transform),this.decomposeTransform()},getTransformInfo:function(){var t=this._roamTransformable.transform,e=this._rawTransformable;return{roamTransform:t?i.slice(t):o.create(),rawScale:i.slice(e.scale),rawPosition:i.slice(e.position)}},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t,e,n){var i=e?this._rawTransform:this.transform;return n=n||[],i?l(n,t,i):r.copy(n,t)},pointToData:function(t){var e=this.invTransform;return e?l([],t,e):[t[0],t[1]]},convertToPixel:i.curry(h,"dataToPoint"),convertFromPixel:i.curry(h,"pointToData"),containPoint:function(t){return this.getViewRectAfterRoam().contain(t[0],t[1])}},i.mixin(c,s);var d=c;t.exports=d},"6cd8":function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("1418"),a=n("22da"),s=a.radialCoordinate,l=n("3eba"),u=n("e263"),c=n("6cc5"),h=n("01ef"),d=n("4a01"),f=n("c526"),p=f.onIrrelevantElement,g=n("4e08"),v=(g.__DEV__,n("3842")),m=v.parsePercent,y=r.extendShape({shape:{parentPoint:[],childPoints:[],orient:"",forkPosition:""},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n=e.childPoints,i=n.length,r=e.parentPoint,o=n[0],a=n[i-1];if(1===i)return t.moveTo(r[0],r[1]),void t.lineTo(o[0],o[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,c=m(e.forkPosition,1),h=[];h[l]=r[l],h[u]=r[u]+(a[u]-r[u])*c,t.moveTo(r[0],r[1]),t.lineTo(h[0],h[1]),t.moveTo(o[0],o[1]),h[l]=o[l],t.lineTo(h[0],h[1]),h[l]=a[l],t.lineTo(h[0],h[1]),t.lineTo(a[0],a[1]);for(var d=1;dw.x,x||(y-=Math.PI));var T=x?"left":"right",I=s.labelModel.get("rotate"),C=I*(Math.PI/180);m.setStyle({textPosition:s.labelModel.get("position")||T,textRotation:null==I?-y:C,textOrigin:"center",verticalAlign:"middle"})}S(a,u,h,n,g,p,v,i,s)}function S(t,e,n,o,a,s,l,u,c){var h=c.edgeShape,d=o.__edge;if("curve"===h)e.parentNode&&e.parentNode!==n&&(d||(d=o.__edge=new r.BezierCurve({shape:A(c,a,a),style:i.defaults({opacity:0,strokeNoScale:!0},c.lineStyle)})),r.updateProps(d,{shape:A(c,s,l),style:i.defaults({opacity:1},c.lineStyle)},t));else if("polyline"===h&&"orthogonal"===c.layout&&e!==n&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var f=e.children,p=[],g=0;g=0;o--)i.push(r[o])}}e.eachAfter=n,e.eachBefore=i},"6dd8":function(t,e,n){"use strict";n.r(e),function(t){var n=function(){if("undefined"!==typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,i){return t[0]===e&&(n=i,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),i=this.__entries__[n];return i&&i[1]},e.prototype.set=function(e,n){var i=t(this.__entries__,e);~i?this.__entries__[i][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,i=t(n,e);~i&&n.splice(i,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,i=this.__entries__;n0},t.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e,i=u.some((function(t){return!!~n.indexOf(t)}));i&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),d=function(t,e){for(var n=0,i=Object.keys(e);n0},t}(),C="undefined"!==typeof WeakMap?new WeakMap:new n,D=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=h.getInstance(),i=new I(e,n,this);C.set(this,i)}return t}();["observe","unobserve","disconnect"].forEach((function(t){D.prototype[t]=function(){var e;return(e=C.get(this))[t].apply(e,arguments)}}));var k=function(){return"undefined"!==typeof r.ResizeObserver?r.ResizeObserver:D}();e["default"]=k}.call(this,n("c8ba"))},"6fda":function(t,e,n){var i=n("6d8b"),r=i.each,o="\0_ec_hist_store";function a(t,e){var n=c(t);r(e,(function(e,i){for(var r=n.length-1;r>=0;r--){var o=n[r];if(o[i])break}if(r<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(a){var s=a.getPercentRange();n[0][i]={dataZoomId:i,start:s[0],end:s[1]}}}})),n.push(e)}function s(t){var e=c(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return r(n,(function(t,n){for(var r=e.length-1;r>=0;r--){t=e[r][n];if(t){i[n]=t;break}}})),i}function l(t){t[o]=null}function u(t){return c(t).length}function c(t){var e=t[o];return e||(e=t[o]=[{}]),e}e.push=a,e.pop=s,e.clear=l,e.count=u},7023:function(t,e,n){var i=n("6d8b"),r={updateSelectedMap:function(t){this._targetList=i.isArray(t)?t.slice():[],this._selectTargetMap=i.reduce(t||[],(function(t,e){return t.set(e.name,e),t}),i.createHashMap())},select:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t),i=this.get("selectedMode");"single"===i&&this._selectTargetMap.each((function(t){t.selected=!1})),n&&(n.selected=!0)},unSelect:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);n&&(n.selected=!1)},toggleSelected:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);if(null!=n)return this[n.selected?"unSelect":"select"](t,e),n.selected},isSelected:function(t,e){var n=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return n&&n.selected}};t.exports=r},"71ad":function(t,e,n){var i=n("6d8b"),r={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)"]}}},o={};o.categoryAxis=i.merge({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},r),o.valueAxis=i.merge({boundaryGap:[0,0],splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#eee",width:1}}},r),o.timeAxis=i.defaults({scale:!0,min:"dataMin",max:"dataMax"},o.valueAxis),o.logAxis=i.defaults({scale:!0,logBase:10},o.valueAxis);var a=o;t.exports=a},"71b2":function(t,e,n){var i=n("6d8b"),r=i.createHashMap;function o(t){t.eachSeriesByType("themeRiver",(function(t){var e=t.getData(),n=t.getRawData(),i=t.get("color"),o=r();e.each((function(t){o.set(e.getRawIndex(t),t)})),n.each((function(r){var a=n.getName(r),s=i[(t.nameMap.get(a)-1)%i.length];n.setItemVisual(r,"color",s);var l=o.get(r);null!=l&&e.setItemVisual(l,"color",s)}))}))}t.exports=o},"71c1":function(t,e,n){var i=n("3a38"),r=n("25eb");t.exports=function(t){return function(e,n){var o,a,s=String(r(e)),l=i(n),u=s.length;return l<0||l>=u?t?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?t?s.charAt(l):o:t?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},7293:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("4f85")),o=n("6179"),a=n("6d8b"),s=a.concatArray,l=a.mergeAll,u=a.map,c=n("eda2"),h=c.encodeHTML,d=(n("2039"),"undefined"===typeof Uint32Array?Array:Uint32Array),f="undefined"===typeof Float64Array?Array:Float64Array;function p(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=u(e,(function(t){var e=[t[0].coord,t[1].coord],n={coords:e};return t[0].name&&(n.fromName=t[0].name),t[1].name&&(n.toName=t[1].name),l([n,t[0],t[1]])})))}var g=r.extend({type:"series.lines",dependencies:["grid","polar"],visualColorAccessPath:"lineStyle.color",init:function(t){t.data=t.data||[],p(t);var e=this._processFlatCoordsArray(t.data);this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset,e.flatCoords&&(t.data=new Float32Array(e.count)),g.superApply(this,"init",arguments)},mergeOption:function(t){if(p(t),t.data){var e=this._processFlatCoordsArray(t.data);this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset,e.flatCoords&&(t.data=new Float32Array(e.count))}g.superApply(this,"mergeOption",arguments)},appendData:function(t){var e=this._processFlatCoordsArray(t.data);e.flatCoords&&(this._flatCoords?(this._flatCoords=s(this._flatCoords,e.flatCoords),this._flatCoordsOffset=s(this._flatCoordsOffset,e.flatCoordsOffset)):(this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset),t.data=new Float32Array(e.count)),this.getRawData().appendData(t.data)},_getCoordsFromItemModel:function(t){var e=this.getData().getItemModel(t),n=e.option instanceof Array?e.option:e.getShallow("coords");return n},getLineCoordsCount:function(t){return this._flatCoordsOffset?this._flatCoordsOffset[2*t+1]:this._getCoordsFromItemModel(t).length},getLineCoords:function(t,e){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[2*t],i=this._flatCoordsOffset[2*t+1],r=0;r "))},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}}}),v=g;t.exports=v},"72b6":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2306"),a=n("eda2"),s=n("f934"),l=n("5f14"),u=i.extendComponentView({type:"visualMap",autoPositionValues:{left:1,right:1,top:1,bottom:1},init:function(t,e){this.ecModel=t,this.api=e,this.visualMapModel},render:function(t,e,n,i){this.visualMapModel=t,!1!==t.get("show")?this.doRender.apply(this,arguments):this.group.removeAll()},renderBackground:function(t){var e=this.visualMapModel,n=a.normalizeCssArray(e.get("padding")||0),i=t.getBoundingRect();t.add(new o.Rect({z2:-1,silent:!0,shape:{x:i.x-n[3],y:i.y-n[0],width:i.width+n[3]+n[1],height:i.height+n[0]+n[2]},style:{fill:e.get("backgroundColor"),stroke:e.get("borderColor"),lineWidth:e.get("borderWidth")}}))},getControllerVisual:function(t,e,n){n=n||{};var i=n.forceState,o=this.visualMapModel,a={};if("symbol"===e&&(a.symbol=o.get("itemSymbol")),"color"===e){var s=o.get("contentColor");a.color=s}function u(t){return a[t]}function c(t,e){a[t]=e}var h=o.controllerVisuals[i||o.getValueState(t)],d=l.prepareVisualTypes(h);return r.each(d,(function(i){var r=h[i];n.convertOpacityToAlpha&&"opacity"===i&&(i="colorAlpha",r=h.__alphaForOpacity),l.dependsOn(i,e)&&r&&r.applyVisual(t,u,c)})),a[e]},positionGroup:function(t){var e=this.visualMapModel,n=this.api;s.positionElement(t,e.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()})},doRender:r.noop});t.exports=u},7333:function(t,e,n){"use strict";var i=n("9e1e"),r=n("0d58"),o=n("2621"),a=n("52a7"),s=n("4bf8"),l=n("626a"),u=Object.assign;t.exports=!u||n("79e5")((function(){var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=u({},t)[n]||Object.keys(u({},e)).join("")!=i}))?function(t,e){var n=s(t),u=arguments.length,c=1,h=o.f,d=a.f;while(u>c){var f,p=l(arguments[c++]),g=h?r(p).concat(h(p)):r(p),v=g.length,m=0;while(v>m)f=g[m++],i&&!d.call(p,f)||(n[f]=p[f])}return n}:u},7368:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=n("625e"),a=o.enableClassCheck;function s(t){return"_EC_"+t}var l=function(t){this._directed=t||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this.data,this.edgeData},u=l.prototype;function c(t,e){this.id=null==t?"":t,this.inEdges=[],this.outEdges=[],this.edges=[],this.hostGraph,this.dataIndex=null==e?-1:e}function h(t,e,n){this.node1=t,this.node2=e,this.dataIndex=null==n?-1:n}u.type="graph",u.isDirected=function(){return this._directed},u.addNode=function(t,e){t=null==t?""+e:""+t;var n=this._nodesMap;if(!n[s(t)]){var i=new c(t,e);return i.hostGraph=this,this.nodes.push(i),n[s(t)]=i,i}},u.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},u.getNodeById=function(t){return this._nodesMap[s(t)]},u.addEdge=function(t,e,n){var i=this._nodesMap,r=this._edgesMap;if("number"===typeof t&&(t=this.nodes[t]),"number"===typeof e&&(e=this.nodes[e]),c.isInstance(t)||(t=i[s(t)]),c.isInstance(e)||(e=i[s(e)]),t&&e){var o=t.id+"-"+e.id,a=new h(t,e,n);return a.hostGraph=this,this._directed&&(t.outEdges.push(a),e.inEdges.push(a)),t.edges.push(a),t!==e&&e.edges.push(a),this.edges.push(a),r[o]=a,a}},u.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},u.getEdge=function(t,e){c.isInstance(t)&&(t=t.id),c.isInstance(e)&&(e=e.id);var n=this._edgesMap;return this._directed?n[t+"-"+e]:n[t+"-"+e]||n[e+"-"+t]},u.eachNode=function(t,e){for(var n=this.nodes,i=n.length,r=0;r=0&&t.call(e,n[r],r)},u.eachEdge=function(t,e){for(var n=this.edges,i=n.length,r=0;r=0&&n[r].node1.dataIndex>=0&&n[r].node2.dataIndex>=0&&t.call(e,n[r],r)},u.breadthFirstTraverse=function(t,e,n,i){if(c.isInstance(e)||(e=this._nodesMap[s(e)]),e){for(var r="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0}));for(r=0,o=i.length;r=0&&this[t][e].setItemVisual(this.dataIndex,n,i)},getVisual:function(n,i){return this[t][e].getItemVisual(this.dataIndex,n,i)},setLayout:function(n,i){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,n,i)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};r.mixin(c,d("hostGraph","data")),r.mixin(h,d("hostGraph","edgeData")),l.Node=c,l.Edge=h,a(c),a(h);var f=l;t.exports=f},"73ca":function(t,e,n){var i=n("2306"),r=n("7e5b");function o(t){this._ctor=t||r,this.group=new i.Group}var a=o.prototype;function s(t,e,n,i){var r=e.getItemLayout(n);if(d(r)){var o=new t._ctor(e,n,i);e.setItemGraphicEl(n,o),t.group.add(o)}}function l(t,e,n,i,r,o){var a=e.getItemGraphicEl(i);d(n.getItemLayout(r))?(a?a.updateData(n,r,o):a=new t._ctor(n,r,o),n.setItemGraphicEl(r,a),t.group.add(a)):t.group.remove(a)}function u(t){return t.animators&&t.animators.length>0}function c(t){var e=t.hostModel;return{lineStyle:e.getModel("lineStyle").getLineStyle(),hoverLineStyle:e.getModel("emphasis.lineStyle").getLineStyle(),labelModel:e.getModel("label"),hoverLabelModel:e.getModel("emphasis.label")}}function h(t){return isNaN(t[0])||isNaN(t[1])}function d(t){return!h(t[0])&&!h(t[1])}a.isPersistent=function(){return!0},a.updateData=function(t){var e=this,n=e.group,i=e._lineData;e._lineData=t,i||n.removeAll();var r=c(t);t.diff(i).add((function(n){s(e,t,n,r)})).update((function(n,o){l(e,i,t,o,n,r)})).remove((function(t){n.remove(i.getItemGraphicEl(t))})).execute()},a.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},a.incrementalPrepareUpdate=function(t){this._seriesScope=c(t),this._lineData=null,this.group.removeAll()},a.incrementalUpdate=function(t,e){function n(t){t.isGroup||u(t)||(t.incremental=t.useHoverLayer=!0)}for(var i=t.start;i=0)return!0}var m=new RegExp("["+c+"]+","g");function y(t){for(var e=t.split(/\n+/g),n=g(e.shift()).split(m),i=[],o=r.map(n,(function(t){return{name:t,data:[]}})),a=0;a1?"emphasis":"normal")}function x(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive),n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var s=new a(m(t.option),e,{include:["grid"]});n._brushController.setPanels(s.makePanelOpts(r,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}))).enableBrush(!!o&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}g._onBrush=function(t,e){if(e.isEnd&&t.length){var n={},i=this.ecModel;this._brushController.updateCovers([]);var r=new a(m(this.model.option),i,{include:["grid"]});r.matchOutputRanges(t,i,(function(t,e,n){if("cartesian2d"===n.type){var i=t.brushType;"rect"===i?(o("x",n,e[0]),o("y",n,e[1])):o({lineX:"x",lineY:"y"}[i],n,e)}})),s.push(i,n),this._dispatchZoomAction(n)}function o(t,e,r){var o=e.getAxis(t),a=o.model,s=u(t,a,i),c=s.findRepresentativeAxisProxy(a).getMinMaxSpan();null==c.minValueSpan&&null==c.maxValueSpan||(r=l(0,r.slice(),o.scale.getExtent(),0,c.minValueSpan,c.maxValueSpan)),s&&(n[s.id]={dataZoomId:s.id,startValue:r[0],endValue:r[1]})}function u(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){var r=n.getAxisModel(t,e.componentIndex);r&&(i=n)})),i}},g._dispatchZoomAction=function(t){var e=[];d(t,(function(t,n){e.push(r.clone(t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},c.register("dataZoom",p),i.registerPreprocessor((function(t){if(t){var e=t.dataZoom||(t.dataZoom=[]);r.isArray(e)||(t.dataZoom=e=[e]);var n=t.toolbox;if(n&&(r.isArray(n)&&(n=n[0]),n&&n.feature)){var i=n.feature.dataZoom;o("xAxis",i),o("yAxis",i)}}function o(t,n){if(n){var i=t+"Index",o=n[i];null==o||"all"===o||r.isArray(o)||(o=!1===o||"none"===o?[]:[o]),a(t,(function(a,s){if(null==o||"all"===o||-1!==r.indexOf(o,s)){var l={type:"select",$fromToolbox:!0,filterMode:n.filterMode||"filter",id:f+t+s};l[i]=s,e.push(l)}}))}}function a(e,n){var i=t[e];r.isArray(i)||(i=i?[i]:[]),d(i,n)}}));var _=p;t.exports=_},"7cd6":function(t,e,n){var i=n("40c3"),r=n("5168")("iterator"),o=n("481b");t.exports=n("584a").getIteratorMethod=function(t){if(void 0!=t)return t[r]||t["@@iterator"]||o[i(t)]}},"7d6d":function(t,e){var n={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1};function i(t,e,i){return n.hasOwnProperty(e)?i*t.dpr:i}t.exports=i},"7dcf":function(t,e,n){var i=n("b12f"),r=i.extend({type:"dataZoom",render:function(t,e,n,i){this.dataZoomModel=t,this.ecModel=e,this.api=n},getTargetCoordInfo:function(){var t=this.dataZoomModel,e=this.ecModel,n={};function i(t,e,n,i){for(var r,o=0;o0&&(w[0]=-w[0],w[1]=-w[1]);var M,A=f[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var T=-Math.atan2(f[1],f[0]);c[0].8?"left":h[0]<-.8?"right":"center",v=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":p=[-h[0]*x+u[0],-h[1]*_+u[1]],g=h[0]>.8?"right":h[0]<-.8?"left":"center",v=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":p=[x*A+u[0],u[1]+M],g=f[0]<0?"right":"left",m=[-x*A,-M];break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":p=[S[0],S[1]+M],g="center",m=[0,-M];break;case"insideEndTop":case"insideEnd":case"insideEndBottom":p=[-x*A+c[0],c[1]+M],g=f[0]>=0?"right":"left",m=[x*A,-M];break}i.attr({style:{textVerticalAlign:i.__verticalAlign||v,textAlign:i.__textAlign||g},position:p,scale:[o,o],origin:m})}}}}function v(t,e,n){s.Group.call(this),this._createLine(t,e,n)}var m=v.prototype;m.beforeUpdate=g,m._createLine=function(t,e,n){var r=t.hostModel,o=t.getItemLayout(e),a=f(o);a.shape.percent=0,s.initProps(a,{shape:{percent:1}},r,e),this.add(a);var l=new s.Text({name:"label",lineLabelOriginalOpacity:1});this.add(l),i.each(c,(function(n){var i=d(n,t,e);this.add(i),this[h(n)]=t.getItemVisual(e,n)}),this),this._updateCommonStl(t,e,n)},m.updateData=function(t,e,n){var r=t.hostModel,o=this.childOfName("line"),a=t.getItemLayout(e),l={shape:{}};p(l.shape,a),s.updateProps(o,l,r,e),i.each(c,(function(n){var i=t.getItemVisual(e,n),r=h(n);if(this[r]!==i){this.remove(this.childOfName(n));var o=d(n,t,e);this.add(o)}this[r]=i}),this),this._updateCommonStl(t,e,n)},m._updateCommonStl=function(t,e,n){var r=t.hostModel,o=this.childOfName("line"),a=n&&n.lineStyle,l=n&&n.hoverLineStyle,h=n&&n.labelModel,d=n&&n.hoverLabelModel;if(!n||t.hasItemOption){var f=t.getItemModel(e);a=f.getModel("lineStyle").getLineStyle(),l=f.getModel("emphasis.lineStyle").getLineStyle(),h=f.getModel("label"),d=f.getModel("emphasis.label")}var p=t.getItemVisual(e,"color"),g=i.retrieve3(t.getItemVisual(e,"opacity"),a.opacity,1);o.useStyle(i.defaults({strokeNoScale:!0,fill:"none",stroke:p,opacity:g},a)),o.hoverStyle=l,i.each(c,(function(t){var e=this.childOfName(t);e&&(e.setColor(p),e.setStyle({opacity:g}))}),this);var v,m,y=h.getShallow("show"),x=d.getShallow("show"),_=this.childOfName("label");if((y||x)&&(v=p||"#000",m=r.getFormattedLabel(e,"normal",t.dataType),null==m)){var b=r.getRawValue(e);m=null==b?t.getName(e):isFinite(b)?u(b):b}var w=y?m:null,S=x?i.retrieve2(r.getFormattedLabel(e,"emphasis",t.dataType),m):null,M=_.style;if(null!=w||null!=S){s.setTextStyle(_.style,h,{text:w},{autoColor:v}),_.__textAlign=M.textAlign,_.__verticalAlign=M.textVerticalAlign,_.__position=h.get("position")||"middle";var A=h.get("distance");i.isArray(A)||(A=[A,A]),_.__labelDistance=A}_.hoverStyle=null!=S?{text:S,textFill:d.getTextColor(!0),fontStyle:d.getShallow("fontStyle"),fontWeight:d.getShallow("fontWeight"),fontSize:d.getShallow("fontSize"),fontFamily:d.getShallow("fontFamily")}:{text:null},_.ignore=!y&&!x,s.setHoverStyle(this)},m.highlight=function(){this.trigger("emphasis")},m.downplay=function(){this.trigger("normal")},m.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},m.setLinePoints=function(t){var e=this.childOfName("line");p(e.shape,t),e.dirty()},i.inherits(v,s.Group);var y=v;t.exports=y},"7e63":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=r.each,a=r.filter,s=r.map,l=r.isArray,u=r.indexOf,c=r.isObject,h=r.isString,d=r.createHashMap,f=r.assert,p=r.clone,g=r.merge,v=r.extend,m=r.mixin,y=n("e0d3"),x=n("4319"),_=n("6cb7"),b=n("8971"),w=n("e47b"),S=n("0f99"),M=S.resetSourceDefaulter,A="\0_ec_inner",T=x.extend({init:function(t,e,n,i){n=n||{},this.option=null,this._theme=new x(n),this._optionManager=i},setOption:function(t,e){f(!(A in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,n=this._optionManager;if(!t||"recreate"===t){var i=n.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(i)):D.call(this,i),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var r=n.getTimelineOption(this);r&&(this.mergeOption(r),e=!0)}if(!t||"recreate"===t||"media"===t){var a=n.getMediaOption(this,this._api);a.length&&o(a,(function(t){this.mergeOption(t,e=!0)}),this)}return e},mergeOption:function(t){var e=this.option,n=this._componentsMap,i=[];function r(i,r){var a=y.normalizeToArray(t[i]),s=y.mappingToExists(n.get(i),a);y.makeIdAndName(s),o(s,(function(t,e){var n=t.option;c(n)&&(t.keyInfo.mainType=i,t.keyInfo.subType=L(i,n,t.exist))}));var l=k(n,r);e[i]=[],n.set(i,[]),o(s,(function(t,r){var o=t.exist,a=t.option;if(f(c(a)||o,"Empty component definition"),a){var s=_.getClass(i,t.keyInfo.subType,!0);if(o&&o.constructor===s)o.name=t.keyInfo.name,o.mergeOption(a,this),o.optionUpdated(a,!1);else{var u=v({dependentModels:l,componentIndex:r},t.keyInfo);o=new s(a,this,this,u),v(o,u),o.init(a,this,this,u),o.optionUpdated(null,!0)}}else o.mergeOption({},this),o.optionUpdated({},!1);n.get(i)[r]=o,e[i][r]=o.option}),this),"series"===i&&P(this,n.get("series"))}M(this),o(t,(function(t,n){null!=t&&(_.hasClass(n)?n&&i.push(n):e[n]=null==e[n]?p(t):g(e[n],t,!0))})),_.topologicalTravel(i,_.getAllClassMainTypes(),r,this),this._seriesIndicesMap=d(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=p(this.option);return o(t,(function(e,n){if(_.hasClass(n)){e=y.normalizeToArray(e);for(var i=e.length-1;i>=0;i--)y.isIdInner(e[i])&&e.splice(i,1);t[n]=e}})),delete t[A],t},getTheme:function(){return this._theme},getComponent:function(t,e){var n=this._componentsMap.get(t);if(n)return n[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var n,i=t.index,r=t.id,o=t.name,c=this._componentsMap.get(e);if(!c||!c.length)return[];if(null!=i)l(i)||(i=[i]),n=a(s(i,(function(t){return c[t]})),(function(t){return!!t}));else if(null!=r){var h=l(r);n=a(c,(function(t){return h&&u(r,t.id)>=0||!h&&t.id===r}))}else if(null!=o){var d=l(o);n=a(c,(function(t){return d&&u(o,t.name)>=0||!d&&t.name===o}))}else n=c.slice();return O(n,t)},findComponents:function(t){var e=t.query,n=t.mainType,i=o(e),r=i?this.queryComponents(i):this._componentsMap.get(n);return s(O(r,t));function o(t){var e=n+"Index",i=n+"Id",r=n+"Name";return!t||null==t[e]&&null==t[i]&&null==t[r]?null:{mainType:n,index:t[e],id:t[i],name:t[r]}}function s(e){return t.filter?a(e,t.filter):e}},eachComponent:function(t,e,n){var i=this._componentsMap;if("function"===typeof t)n=e,e=t,i.each((function(t,i){o(t,(function(t,r){e.call(n,i,t,r)}))}));else if(h(t))o(i.get(t),e,n);else if(c(t)){var r=this.findComponents(t);o(r,e,n)}},getSeriesByName:function(t){var e=this._componentsMap.get("series");return a(e,(function(e){return e.name===t}))},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){var e=this._componentsMap.get("series");return a(e,(function(e){return e.subType===t}))},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){E(this),o(this._seriesIndices,(function(n){var i=this._componentsMap.get("series")[n];t.call(e,i,n)}),this)},eachRawSeries:function(t,e){o(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,n){E(this),o(this._seriesIndices,(function(i){var r=this._componentsMap.get("series")[i];r.subType===t&&e.call(n,r,i)}),this)},eachRawSeriesByType:function(t,e,n){return o(this.getSeriesByType(t),e,n)},isSeriesFiltered:function(t){return E(this),null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){E(this);var n=a(this._componentsMap.get("series"),t,e);P(this,n)},restoreData:function(t){var e=this._componentsMap;P(this,e.get("series"));var n=[];e.each((function(t,e){n.push(e)})),_.topologicalTravel(n,_.getAllClassMainTypes(),(function(n,i){o(e.get(n),(function(e){("series"!==n||!I(e,t))&&e.restoreData()}))}))}});function I(t,e){if(e){var n=e.seiresIndex,i=e.seriesId,r=e.seriesName;return null!=n&&t.componentIndex!==n||null!=i&&t.id!==i||null!=r&&t.name!==r}}function C(t,e){var n=t.color&&!t.colorLayer;o(e,(function(e,i){"colorLayer"===i&&n||_.hasClass(i)||("object"===typeof e?t[i]=t[i]?g(t[i],e,!1):p(e):null==t[i]&&(t[i]=e))}))}function D(t){t=t,this.option={},this.option[A]=1,this._componentsMap=d({series:[]}),this._seriesIndices,this._seriesIndicesMap,C(t,this._theme.option),g(t,b,!1),this.mergeOption(t)}function k(t,e){l(e)||(e=e?[e]:[]);var n={};return o(e,(function(e){n[e]=(t.get(e)||[]).slice()})),n}function L(t,e,n){var i=e.type?e.type:n?n.subType:_.determineSubType(t,e);return i}function P(t,e){t._seriesIndicesMap=d(t._seriesIndices=s(e,(function(t){return t.componentIndex}))||[])}function O(t,e){return e.hasOwnProperty("subType")?a(t,(function(t){return t.subType===e.subType})):t}function E(t){}m(T,w);var R=T;t.exports=R},"7e90":function(t,e,n){var i=n("d9f6"),r=n("e4ae"),o=n("c3a1");t.exports=n("8e60")?Object.defineProperties:function(t,e){r(t);var n,a=o(e),s=a.length,l=0;while(s>l)i.f(t,n=a[l++],e[n]);return t}},"7f20":function(t,e,n){var i=n("86cc").f,r=n("69a8"),o=n("2b4c")("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},"7f59":function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("e0d3"),s=n("2306"),l=n("f934"),u=n("3842"),c=u.parsePercent,h={path:null,compoundPath:null,group:s.Group,image:s.Image,text:s.Text};r.registerPreprocessor((function(t){var e=t.graphic;o.isArray(e)?e[0]&&e[0].elements?t.graphic=[t.graphic[0]]:t.graphic=[{elements:e}]:e&&!e.elements&&(t.graphic=[{elements:[e]}])}));var d=r.extendComponentModel({type:"graphic",defaultOption:{elements:[],parentId:null},_elOptionsToUpdate:null,mergeOption:function(t){var e=this.option.elements;this.option.elements=null,d.superApply(this,"mergeOption",arguments),this.option.elements=e},optionUpdated:function(t,e){var n=this.option,i=(e?n:t).elements,r=n.elements=e?[]:n.elements,s=[];this._flatten(i,s);var l=a.mappingToExists(r,s);a.makeIdAndName(l);var u=this._elOptionsToUpdate=[];o.each(l,(function(t,e){var n=t.option;n&&(u.push(n),m(t,n),y(r,e,n),x(r[e],n))}),this);for(var c=r.length-1;c>=0;c--)null==r[c]?r.splice(c,1):delete r[c].$action},_flatten:function(t,e,n){o.each(t,(function(t){if(t){n&&(t.parentOption=n),e.push(t);var i=t.children;"group"===t.type&&i&&this._flatten(i,e,t),delete t.children}}),this)},useElOptionsToUpdate:function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t}});function f(t,e,n,i){var r=n.type,o=h.hasOwnProperty(r)?h[r]:s.getShapeClass(r),a=new o(n);e.add(a),i.set(t,a),a.__ecGraphicId=t}function p(t,e){var n=t&&t.parent;n&&("group"===t.type&&t.traverse((function(t){p(t,e)})),e.removeKey(t.__ecGraphicId),n.remove(t))}function g(t){return t=o.extend({},t),o.each(["id","parentId","$action","hv","bounding"].concat(l.LOCATION_PARAMS),(function(e){delete t[e]})),t}function v(t,e){var n;return o.each(e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}function m(t,e){var n=t.exist;if(e.id=t.keyInfo.id,!e.type&&n&&(e.type=n.type),null==e.parentId){var i=e.parentOption;i?e.parentId=i.id:n&&(e.parentId=n.parentId)}e.parentOption=null}function y(t,e,n){var i=o.extend({},n),r=t[e],a=n.$action||"merge";"merge"===a?r?(o.merge(r,i,!0),l.mergeLayoutParam(r,i,{ignoreSize:!0}),l.copyLayoutParams(n,r)):t[e]=i:"replace"===a?t[e]=i:"remove"===a&&r&&(t[e]=null)}function x(t,e){t&&(t.hv=e.hv=[v(e,["left","right"]),v(e,["top","bottom"])],"group"===t.type&&(null==t.width&&(t.width=e.width=0),null==t.height&&(t.height=e.height=0)))}function _(t,e,n){var i=t.eventData;t.silent||t.ignore||i||(i=t.eventData={componentType:"graphic",componentIndex:e.componentIndex,name:t.name}),i&&(i.info=t.info)}r.extendComponentView({type:"graphic",init:function(t,e){this._elMap=o.createHashMap(),this._lastGraphicModel},render:function(t,e,n){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t),this._relocate(t,n)},_updateElements:function(t){var e=t.useElOptionsToUpdate();if(e){var n=this._elMap,i=this.group;o.each(e,(function(e){var r=e.$action,o=e.id,a=n.get(o),s=e.parentId,l=null!=s?n.get(s):i,u=e.style;"text"===e.type&&u&&(e.hv&&e.hv[1]&&(u.textVerticalAlign=u.textBaseline=null),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke));var c=g(e);r&&"merge"!==r?"replace"===r?(p(a,n),f(o,l,c,n)):"remove"===r&&p(a,n):a?a.attr(c):f(o,l,c,n);var h=n.get(o);h&&(h.__ecGraphicWidthOption=e.width,h.__ecGraphicHeightOption=e.height,_(h,t,e))}))}},_relocate:function(t,e){for(var n=t.option.elements,i=this.group,r=this._elMap,o=e.getWidth(),a=e.getHeight(),s=0;s=0;s--){u=n[s],h=r.get(u.id);if(h){d=h.parent;var p=d===i?{width:o,height:a}:{width:d.__ecGraphicWidth,height:d.__ecGraphicHeight};l.positionElement(h,u,p,null,{hv:u.hv,boundingMode:u.bounding})}}},_clear:function(){var t=this._elMap;t.each((function(e){p(e,t)})),this._elMap=o.createHashMap()},dispose:function(){this._clear()}})},"7f72":function(t,e,n){n("6932"),n("3a56"),n("7dcf"),n("a18f"),n("32a1"),n("2c17"),n("9e87")},"7f7f":function(t,e,n){var i=n("86cc").f,r=Function.prototype,o=/^\s*function ([^ (]*)/,a="name";a in r||n("9e1e")&&i(r,a,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},"7f91":function(t,e,n){var i=n("2306"),r=n("401b"),o=i.Line.prototype,a=i.BezierCurve.prototype;function s(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var l=i.extendShape({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[s(e)?"_buildPathLine":"_buildPathCurve"](t,e)},_buildPathLine:o.buildPath,_buildPathCurve:a.buildPath,pointAt:function(t){return this[s(this.shape)?"_pointAtLine":"_pointAtCurve"](t)},_pointAtLine:o.pointAt,_pointAtCurve:a.pointAt,tangentAt:function(t){var e=this.shape,n=s(e)?[e.x2-e.x1,e.y2-e.y1]:this._tangentAtCurve(t);return r.normalize(n,n)},_tangentAtCurve:a.tangentAt});t.exports=l},"7f96":function(t,e,n){var i=n("6d8b"),r=i.isFunction;function o(t,e,n){return{seriesType:t,performRawSeries:!0,reset:function(t,i,o){var a=t.getData(),s=t.get("symbol"),l=t.get("symbolSize"),u=t.get("symbolKeepAspect"),c=t.get("symbolRotate"),h=r(s),d=r(l),f=r(c),p=h||d||f,g=!h&&s?s:e,v=d?null:l;if(a.setVisual({legendSymbol:n||g,symbol:g,symbolSize:v,symbolKeepAspect:u,symbolRotate:c}),!i.isSeriesFiltered(t))return{dataEach:a.hasItemOption||p?m:null};function m(e,n){if(p){var i=t.getRawValue(n),r=t.getDataParams(n);h&&e.setItemVisual(n,"symbol",s(i,r)),d&&e.setItemVisual(n,"symbolSize",l(i,r)),f&&e.setItemVisual(n,"symbolRotate",c(i,r))}if(e.hasItemOption){var o=e.getItemModel(n),a=o.getShallow("symbol",!0),u=o.getShallow("symbolSize",!0),g=o.getShallow("symbolRotate",!0),v=o.getShallow("symbolKeepAspect",!0);null!=a&&e.setItemVisual(n,"symbol",a),null!=u&&e.setItemVisual(n,"symbolSize",u),null!=g&&e.setItemVisual(n,"symbolRotate",g),null!=v&&e.setItemVisual(n,"symbolKeepAspect",v)}}}}}t.exports=o},8079:function(t,e,n){var i=n("7726"),r=n("1991").set,o=i.MutationObserver||i.WebKitMutationObserver,a=i.process,s=i.Promise,l="process"==n("2d95")(a);t.exports=function(){var t,e,n,u=function(){var i,r;l&&(i=a.domain)&&i.exit();while(t){r=t.fn,t=t.next;try{r()}catch(o){throw t?n():e=void 0,o}}e=void 0,i&&i.enter()};if(l)n=function(){a.nextTick(u)};else if(!o||i.navigator&&i.navigator.standalone)if(s&&s.resolve){var c=s.resolve(void 0);n=function(){c.then(u)}}else n=function(){r.call(i,u)};else{var h=!0,d=document.createTextNode("");new o(u).observe(d,{characterData:!0}),n=function(){d.data=h=!h}}return function(i){var r={fn:i,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},"80f0":function(t,e){function n(t){return t}function i(t,e,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=i||n,this._newKeyGetter=r||n,this.context=o}function r(t,e,n,i,r){for(var o=0;o=0;_&&x.depth>v&&(v=x.depth),y.setLayout({depth:_?x.depth:h},!0),"vertical"===o?y.setLayout({dy:n},!0):y.setLayout({dx:n},!0);for(var b=0;bh-1?v:h-1;a&&"left"!==a&&f(t,a,o,T);d="vertical"===o?(r-n)/T:(i-n)/T;g(t,d,o)}function d(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return null!=e.depth&&e.depth>=0}function f(t,e,n,i){if("right"===e){var o=[],a=t,s=0;while(a.length){for(var l=0;l0;o--)l*=.99,_(s,l,a),x(s,r,n,i,a),C(s,l,a),x(s,r,n,i,a)}function m(t,e){var n=[],i="vertical"===e?"y":"x",o=a(t,(function(t){return t.getLayout()[i]}));return o.keys.sort((function(t,e){return t-e})),r.each(o.keys,(function(t){n.push(o.buckets.get(t))})),n}function y(t,e,n,i,o,a){var s=1/0;r.each(t,(function(t){var e=t.length,l=0;r.each(t,(function(t){l+=t.getLayout().value}));var u="vertical"===a?(i-(e-1)*o)/l:(n-(e-1)*o)/l;u0&&(r=s.getLayout()[a]+l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0)),u=s.getLayout()[a]+s.getLayout()[h]+e;var f="vertical"===o?i:n;if(l=u-e-f,l>0)for(r=s.getLayout()[a]-l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0),u=r,d=c-2;d>=0;--d)s=t[d],l=s.getLayout()[a]+s.getLayout()[h]+e-u,l>0&&(r=s.getLayout()[a]-l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0)),u=s.getLayout()[a]}))}function _(t,e,n){r.each(t.slice().reverse(),(function(t){r.each(t,(function(t){if(t.outEdges.length){var i=I(t.outEdges,b,n)/I(t.outEdges,T,n);if(isNaN(i)){var r=t.outEdges.length;i=r?I(t.outEdges,w,n)/r:0}if("vertical"===n){var o=t.getLayout().x+(i-A(t,n))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(i-A(t,n))*e;t.setLayout({y:a},!0)}}}))}))}function b(t,e){return A(t.node2,e)*t.getValue()}function w(t,e){return A(t.node2,e)}function S(t,e){return A(t.node1,e)*t.getValue()}function M(t,e){return A(t.node1,e)}function A(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function T(t){return t.getValue()}function I(t,e,n){var i=0,r=t.length,o=-1;while(++o=0){var c=a.indexOf(l),h=a.substr(u+s.length,c-u-s.length);h.indexOf("sub")>-1?i["marker"+h]={textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[h],textOffset:[3,0]}:i["marker"+h]={textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[h]},a=a.substr(c+1),u=a.indexOf("{marker")}var d=n.getModel("textStyle"),f=d.get("fontSize"),p=n.get("textLineHeight");null==p&&(p=Math.round(3*f/2)),this.el=new r({style:o.setTextStyle({},d,{rich:i,text:t,textBackgroundColor:n.get("backgroundColor"),textBorderRadius:n.get("borderRadius"),textFill:n.get("textStyle.color"),textPadding:n.get("padding"),textLineHeight:p}),z:n.get("z")}),this._zr.add(this.el);var g=this;this.el.on("mouseover",(function(){g._enterable&&(clearTimeout(g._hideTimeout),g._show=!0),g._inContent=!0})),this.el.on("mouseout",(function(){g._enterable&&g._show&&g.hideLater(g._hideDelay),g._inContent=!1}))},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){if(this.el){var n=this._styleCoord;a(n,this._zr,t,e),this.el.attr("position",[n[0],n[1]])}},hide:function(){this.el&&this.el.hide(),this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(i.bind(this.hide,this),t)):this.hide())},isShow:function(){return this._show},dispose:function(){clearTimeout(this._hideTimeout),this.el&&this._zr.remove(this.el)},getOuterSize:function(){var t=this.getSize();return{width:t[0],height:t[1]}}};var l=s;t.exports=l},8344:function(t,e,n){var i=n("6d8b"),r=n("f706"),o=n("3842"),a=n("6179"),s=n("923d"),l=n("88f0");function u(t,e,n){var i=e.coordinateSystem;t.each((function(r){var a,s=t.getItemModel(r),l=o.parsePercent(s.get("x"),n.getWidth()),u=o.parsePercent(s.get("y"),n.getHeight());if(isNaN(l)||isNaN(u)){if(e.getMarkerPosition)a=e.getMarkerPosition(t.getValues(t.dimensions,r));else if(i){var c=t.get(i.dimensions[0],r),h=t.get(i.dimensions[1],r);a=i.dataToPoint([c,h])}}else a=[l,u];isNaN(l)||(a[0]=l),isNaN(u)||(a[1]=u),t.setItemLayout(r,a)}))}var c=l.extend({type:"markPoint",updateTransform:function(t,e,n){e.eachSeries((function(t){var e=t.markPointModel;e&&(u(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout(e))}),this)},renderSeries:function(t,e,n,o){var a=t.coordinateSystem,s=t.id,l=t.getData(),c=this.markerGroupMap,d=c.get(s)||c.set(s,new r),f=h(a,t,e);e.setData(f),u(e.getData(),t,o),f.each((function(t){var n=f.getItemModel(t),r=n.getShallow("symbol"),o=n.getShallow("symbolSize"),a=n.getShallow("symbolRotate"),s=i.isFunction(r),u=i.isFunction(o),c=i.isFunction(a);if(s||u||c){var h=e.getRawValue(t),d=e.getDataParams(t);s&&(r=r(h,d)),u&&(o=o(h,d)),c&&(a=a(h,d))}f.setItemVisual(t,{symbol:r,symbolSize:o,symbolRotate:a,color:n.get("itemStyle.color")||l.getVisual("color")})})),d.updateData(f),this.group.add(d.group),f.eachItemGraphicEl((function(t){t.traverse((function(t){t.dataModel=e}))})),d.__keep=!0,d.group.silent=e.get("silent")||t.get("silent")}});function h(t,e,n){var r;r=t?i.map(t&&t.dimensions,(function(t){var n=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return i.defaults({name:t},n)})):[{name:"value",type:"float"}];var o=new a(r,n),l=i.map(n.get("data"),i.curry(s.dataTransform,e));return t&&(l=i.filter(l,i.curry(s.dataFilter,t))),o.initData(l,null,t?s.dimValueGetter:function(t){return t.value}),o}t.exports=c},8378:function(t,e){var n=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},"83b9":function(t,e,n){"use strict";var i=n("d925"),r=n("e683");t.exports=function(t,e){return t&&!i(e)?r(t,e):e}},"83ba":function(t,e,n){var i=n("6d8b"),r=n("6cb7"),o=n("f934"),a=o.getLayoutParams,s=o.sizeCalculable,l=o.mergeLayoutParam,u=r.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,n,i){var r=a(t);u.superApply(this,"init",arguments),c(t,r)},mergeOption:function(t,e){u.superApply(this,"mergeOption",arguments),c(this.option,t)}});function c(t,e){var n=t.cellSize;i.isArray(n)?1===n.length&&(n[1]=n[0]):n=t.cellSize=[n,n];var r=i.map([0,1],(function(t){return s(e,t)&&(n[t]="auto"),null!=n[t]&&"auto"!==n[t]}));l(t,e,{type:"box",ignoreSize:r})}var h=u;t.exports=h},8436:function(t,e){t.exports=function(){}},"843e":function(t,e,n){var i=n("6d8b"),r=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"];function o(t){i.each(r,(function(e){this[e]=i.bind(t[e],t)}),this)}var a=o;t.exports=a},8459:function(t,e,n){var i=n("3eba"),r={type:"axisAreaSelect",event:"axisAreaSelected"};i.registerAction(r,(function(t,e){e.eachComponent({mainType:"parallelAxis",query:t},(function(e){e.axis.model.setActiveIntervals(t.intervals)}))})),i.registerAction("parallelAxisExpand",(function(t,e){e.eachComponent({mainType:"parallel",query:t},(function(e){e.setAxisExpand(t)}))}))},"848b":function(t,e,n){"use strict";var i=n("5cce").version,r={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){r[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var o={};function a(t,e,n){if("object"!==typeof t)throw new TypeError("options must be an object");var i=Object.keys(t),r=i.length;while(r-- >0){var o=i[r],a=e[o];if(a){var s=t[o],l=void 0===s||a(s,o,t);if(!0!==l)throw new TypeError("option "+o+" must be "+l)}else if(!0!==n)throw Error("Unknown option "+o)}}r.transitional=function(t,e,n){function r(t,e){return"[Axios v"+i+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,a){if(!1===t)throw new Error(r(i," has been removed"+(e?" in "+e:"")));return e&&!o[i]&&(o[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,a)}},t.exports={assertOptions:a,validators:r}},"849b":function(t,e,n){var i=n("d9d0"),r=n("2039");function o(t,e){var n=[];return t.eachComponent("parallel",(function(r,o){var a=new i(r,t,e);a.name="parallel_"+o,a.resize(r,e),r.coordinateSystem=a,a.model=r,n.push(a)})),t.eachSeries((function(e){if("parallel"===e.get("coordinateSystem")){var n=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=n.coordinateSystem}})),n}r.register("parallel",{create:o})},"84ce":function(t,e,n){var i=n("6d8b"),r=i.each,o=i.map,a=n("3842"),s=a.linearMap,l=a.getPixelPrecision,u=a.round,c=n("e073"),h=c.createAxisTicks,d=c.createAxisLabels,f=c.calculateCategoryInterval,p=[0,1],g=function(t,e,n){this.dim=t,this.scale=e,this._extent=n||[0,0],this.inverse=!1,this.onBand=!1};function v(t,e){var n=t[1]-t[0],i=e,r=n/i/2;t[0]+=r,t[1]-=r}function m(t,e,n,i){var o=e.length;if(t.onBand&&!n&&o){var a,s,l=t.getExtent();if(1===o)e[0].coord=l[0],a=e[1]={coord:l[0]};else{var c=e[o-1].tickValue-e[0].tickValue,h=(e[o-1].coord-e[0].coord)/c;r(e,(function(t){t.coord-=h/2}));var d=t.scale.getExtent();s=1+d[1]-e[o-1].tickValue,a={coord:e[o-1].coord+h*s},e.push(a)}var f=l[0]>l[1];p(e[0].coord,l[0])&&(i?e[0].coord=l[0]:e.shift()),i&&p(l[0],e[0].coord)&&e.unshift({coord:l[0]}),p(l[1],a.coord)&&(i?a.coord=l[1]:e.pop()),i&&p(a.coord,l[1])&&e.push({coord:l[1]})}function p(t,e){return t=u(t),e=u(e),f?t>e:t=n&&t<=i},containData:function(t){return this.scale.contain(t)},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return l(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var n=this._extent;n[0]=t,n[1]=e},dataToCoord:function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&(n=n.slice(),v(n,i.count())),s(t,p,n,e)},coordToData:function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&(n=n.slice(),v(n,i.count()));var r=s(t,n,p,e);return this.scale.scale(r)},pointToData:function(t,e){},getTicksCoords:function(t){t=t||{};var e=t.tickModel||this.getTickModel(),n=h(this,e),i=n.ticks,r=o(i,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this),a=e.get("alignWithLabel");return m(this,r,a,t.clamp),r},getMinorTicksCoords:function(){if("ordinal"===this.scale.type)return[];var t=this.model.getModel("minorTick"),e=t.get("splitNumber");e>0&&e<100||(e=5);var n=this.scale.getMinorTicks(e),i=o(n,(function(t){return o(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this);return i},getViewLabels:function(){return d(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return f(this)}};var y=g;t.exports=y},"84d5":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("4319"),a=n("e0d3"),s=a.isNameSpecified,l=n("29a8"),u=l.legend.selector,c={all:{type:"all",title:r.clone(u.all)},inverse:{type:"inverse",title:r.clone(u.inverse)}},h=i.extendComponentModel({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,n){this.mergeDefaultAndTheme(t,n),t.selected=t.selected||{},this._updateSelector(t)},mergeOption:function(t){h.superCall(this,"mergeOption",t),this._updateSelector(t)},_updateSelector:function(t){var e=t.selector;!0===e&&(e=t.selector=["all","inverse"]),r.isArray(e)&&r.each(e,(function(t,n){r.isString(t)&&(t={type:t}),e[n]=r.merge(t,c[t.type])}))},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,n=0;n=0},getOrient:function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",itemStyle:{borderWidth:0},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:" sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}}}),d=h;t.exports=d},"84ec":function(t,e){var n=Math.log(2);function i(t,e,r,o,a,s){var l=o+"-"+a,u=t.length;if(s.hasOwnProperty(l))return s[l];if(1===e){var c=Math.round(Math.log((1<e&&o>i||or?a:0}t.exports=n},"879e":function(t,e,n){var i=n("3eba"),r=n("6179"),o=n("6d8b"),a=n("e0d3"),s=a.defaultEmphasis,l=n("4319"),u=n("eda2"),c=u.encodeHTML,h=n("237f"),d=n("c4a3"),f=n("0c37"),p=f.initCurvenessList,g=f.createEdgeMapForCurveness,v=i.extendSeriesModel({type:"series.graph",init:function(t){v.superApply(this,"init",arguments);var e=this;function n(){return e._categoriesData}this.legendVisualProvider=new d(n,n),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){v.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){v.superApply(this,"mergeDefaultAndTheme",arguments),s(t,["edgeLabel"],["show"])},getInitialData:function(t,e){var n=t.edges||t.links||[],i=t.data||t.nodes||[],r=this;if(i&&n){p(this);var a=h(i,n,this,!0,s);return o.each(a.edges,(function(t){g(t.node1,t.node2,this,t.dataIndex)}),this),a.data}function s(t,n){t.wrapMethod("getItemModel",(function(t){var e=r._categoriesModels,n=t.getShallow("category"),i=e[n];return i&&(i.parentModel=t.parentModel,t.parentModel=i),t}));var i=r.getModel("edgeLabel"),o=new l({label:i.option},i.parentModel,e),a=r.getModel("emphasis.edgeLabel"),s=new l({emphasis:{label:a.option}},a.parentModel,e);function u(t){return t=this.parsePath(t),t&&"label"===t[0]?o:t&&"emphasis"===t[0]&&"label"===t[1]?s:this.parentModel}n.wrapMethod("getItemModel",(function(t){return t.customizeGetParent(u),t}))}},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,n){if("edge"===n){var i=this.getData(),r=this.getDataParams(t,n),o=i.graph.getEdgeByIndex(t),a=i.getName(o.node1.dataIndex),s=i.getName(o.node2.dataIndex),l=[];return null!=a&&l.push(a),null!=s&&l.push(s),l=c(l.join(" > ")),r.value&&(l+=" : "+c(r.value)),l}return v.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=o.map(this.option.categories||[],(function(t){return null!=t.value?t:o.extend({value:0},t)})),e=new r(["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 v.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,opacity:.5},emphasis:{label:{show:!0}}}}),m=v;t.exports=m},"87b1":function(t,e,n){var i=n("cbe5"),r=n("4fac"),o=i.extend({type:"polygon",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){r.buildPath(t,e,!0)}});t.exports=o},"87c3":function(t,e,n){var i=n("6d8b"),r=i.map,o=n("cccd"),a=n("ee1a"),s=a.isDimensionStacked;function l(t){return{seriesType:t,plan:o(),reset:function(t){var e=t.getData(),n=t.coordinateSystem,i=t.pipelineContext,o=i.large;if(n){var a=r(n.dimensions,(function(t){return e.mapDimension(t)})).slice(0,2),l=a.length,u=e.getCalculationInfo("stackResultDimension");return s(e,a[0])&&(a[0]=u),s(e,a[1])&&(a[1]=u),l&&{progress:c}}function c(t,e){for(var i=t.end-t.start,r=o&&new Float32Array(i*l),s=t.start,u=0,c=[],h=[];s=0?h():c=setTimeout(h,-r),l=i};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){s=t},d}function a(t,e,a,s){var l=t[e];if(l){var u=l[n]||l,c=l[r],h=l[i];if(h!==a||c!==s){if(null==a||!s)return t[e]=u;l=t[e]=o(u,a,"debounce"===s),l[n]=u,l[r]=s,l[i]=a}return l}}function s(t,e){var i=t[e];i&&i[n]&&(t[e]=i[n])}e.throttle=o,e.createOrUpdate=a,e.clear=s},"88f0":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=i.extendComponentView({type:"marker",init:function(){this.markerGroupMap=r.createHashMap()},render:function(t,e,n){var i=this.markerGroupMap;i.each((function(t){t.__keep=!1}));var r=this.type+"Model";e.eachSeries((function(t){var i=t[r];i&&this.renderSeries(t,i,e,n)}),this),i.each((function(t){!t.__keep&&this.group.remove(t.group)}),this)},renderSeries:function(){}});t.exports=o},8918:function(t,e,n){var i=n("6d8b"),r=n("625e"),o=r.parseClassType,a=0;function s(t){return[t||"",a++,Math.random().toFixed(5)].join("_")}function l(t){var e={};return t.registerSubTypeDefaulter=function(t,n){t=o(t),e[t.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var a=o(n).main;t.hasSubTypes(n)&&e[a]&&(r=e[a](i))}return r},t}function u(t,e){function n(t){var n={},a=[];return i.each(t,(function(s){var l=r(n,s),u=l.originalDeps=e(s),c=o(u,t);l.entryCount=c.length,0===l.entryCount&&a.push(s),i.each(c,(function(t){i.indexOf(l.predecessor,t)<0&&l.predecessor.push(t);var e=r(n,t);i.indexOf(e.successor,t)<0&&e.successor.push(s)}))})),{graph:n,noEntryList:a}}function r(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function o(t,e){var n=[];return i.each(t,(function(t){i.indexOf(e,t)>=0&&n.push(t)})),n}t.topologicalTravel=function(t,e,r,o){if(t.length){var a=n(e),s=a.graph,l=a.noEntryList,u={};i.each(t,(function(t){u[t]=!0}));while(l.length){var c=l.pop(),h=s[c],d=!!u[c];d&&(r.call(o,c,h.originalDeps.slice()),delete u[c]),i.each(h.successor,d?p:f)}i.each(u,(function(){throw new Error("Circle dependency may exists")}))}function f(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function p(t){u[t]=!0,f(t)}}}e.getUID=s,e.enableSubTypeDefaulter=l,e.enableTopologicalTravel=u},8971:function(t,e){var n="";"undefined"!==typeof navigator&&(n=navigator.platform||"");var i={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:n.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1};t.exports=i},"897a":function(t,e,n){var i=n("22d1"),r=[["shadowBlur",0],["shadowColor","#000"],["shadowOffsetX",0],["shadowOffsetY",0]];function o(t){return i.browser.ie&&i.browser.version>=11?function(){var e,n=this.__clipPaths,i=this.style;if(n)for(var o=0;oe[1]&&(e[1]=t[1]),l.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=a.getIntervalPrecision(t)},getTicks:function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;var a=1e4;n[0]a)return[]}var u=o.length?o[o.length-1]:i[1];return n[1]>u&&(t?o.push(s(u+e,r)):o.push(n[1])),o},getMinorTicks:function(t){for(var e=this.getTicks(!0),n=[],r=this.getExtent(),o=1;or[0]&&d0)i*=10;var a=[o.round(d(e[0]/i)*i),o.round(h(e[1]/i)*i)];this._interval=i,this._niceExtent=a}},niceExtent:function(t){l.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});function v(t,e){return c(t,u(e))}i.each(["contain","normalize"],(function(t){g.prototype[t]=function(e){return e=p(e)/p(this.base),s[t].call(this,e)}})),g.create=function(){return new g};var m=g;t.exports=m},"8c4f":function(t,e,n){"use strict"; -/*! - * vue-router v3.0.2 - * (c) 2018 Evan You - * @license MIT - */function i(t,e){0}function r(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function o(t,e){for(var n in e)t[n]=e[n];return t}var a={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,i=e.children,r=e.parent,a=e.data;a.routerView=!0;var l=r.$createElement,u=n.name,c=r.$route,h=r._routerViewCache||(r._routerViewCache={}),d=0,f=!1;while(r&&r._routerRoot!==r)r.$vnode&&r.$vnode.data.routerView&&d++,r._inactive&&(f=!0),r=r.$parent;if(a.routerViewDepth=d,f)return l(h[u],a,i);var p=c.matched[d];if(!p)return h[u]=null,l();var g=h[u]=p.components[u];a.registerRouteInstance=function(t,e){var n=p.instances[u];(e&&n!==t||!e&&n===t)&&(p.instances[u]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){p.instances[u]=e.componentInstance};var v=a.props=s(c,p.props&&p.props[u]);if(v){v=a.props=o({},v);var m=a.attrs=a.attrs||{};for(var y in v)g.props&&y in g.props||(m[y]=v[y],delete v[y])}return l(g,a,i)}};function s(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}var l=/[!'()*]/g,u=function(t){return"%"+t.charCodeAt(0).toString(16)},c=/%2C/g,h=function(t){return encodeURIComponent(t).replace(l,u).replace(c,",")},d=decodeURIComponent;function f(t,e,n){void 0===e&&(e={});var i,r=n||p;try{i=r(t||"")}catch(a){i={}}for(var o in e)i[o]=e[o];return i}function p(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),i=d(n.shift()),r=n.length>0?d(n.join("=")):null;void 0===e[i]?e[i]=r:Array.isArray(e[i])?e[i].push(r):e[i]=[e[i],r]})),e):e}function g(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return h(e);if(Array.isArray(n)){var i=[];return n.forEach((function(t){void 0!==t&&(null===t?i.push(h(e)):i.push(h(e)+"="+h(t)))})),i.join("&")}return h(e)+"="+h(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var v=/\/?$/;function m(t,e,n,i){var r=i&&i.options.stringifyQuery,o=e.query||{};try{o=y(o)}catch(s){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:o,params:e.params||{},fullPath:b(e,r),matched:t?_(t):[]};return n&&(a.redirectedFrom=b(n,r)),Object.freeze(a)}function y(t){if(Array.isArray(t))return t.map(y);if(t&&"object"===typeof t){var e={};for(var n in t)e[n]=y(t[n]);return e}return t}var x=m(null,{path:"/"});function _(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}function b(t,e){var n=t.path,i=t.query;void 0===i&&(i={});var r=t.hash;void 0===r&&(r="");var o=e||g;return(n||"/")+o(i)+r}function w(t,e){return e===x?t===e:!!e&&(t.path&&e.path?t.path.replace(v,"")===e.path.replace(v,"")&&t.hash===e.hash&&S(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&S(t.query,e.query)&&S(t.params,e.params)))}function S(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),i=Object.keys(e);return n.length===i.length&&n.every((function(n){var i=t[n],r=e[n];return"object"===typeof i&&"object"===typeof r?S(i,r):String(i)===String(r)}))}function M(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&A(t.query,e.query)}function A(t,e){for(var n in e)if(!(n in t))return!1;return!0}var T,I=[String,Object],C=[String,Array],D={name:"RouterLink",props:{to:{type:I,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:C,default:"click"}},render:function(t){var e=this,n=this.$router,i=this.$route,r=n.resolve(this.to,i,this.append),a=r.location,s=r.route,l=r.href,u={},c=n.options.linkActiveClass,h=n.options.linkExactActiveClass,d=null==c?"router-link-active":c,f=null==h?"router-link-exact-active":h,p=null==this.activeClass?d:this.activeClass,g=null==this.exactActiveClass?f:this.exactActiveClass,v=a.path?m(null,a,null,n):s;u[g]=w(i,v),u[p]=this.exact?u[g]:M(i,v);var y=function(t){k(t)&&(e.replace?n.replace(a):n.push(a))},x={click:k};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=y})):x[this.event]=y;var _={class:u};if("a"===this.tag)_.on=x,_.attrs={href:l};else{var b=L(this.$slots.default);if(b){b.isStatic=!1;var S=b.data=o({},b.data);S.on=x;var A=b.data.attrs=o({},b.data.attrs);A.href=l}else _.on=x}return t(this.tag,_,this.$slots.default)}};function k(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function L(t){if(t)for(var e,n=0;n=0&&(e=t.slice(i),t=t.slice(0,i));var r=t.indexOf("?");return r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),{path:t,query:n,hash:e}}function N(t){return t.replace(/\/\//g,"/")}var z=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},B=it,V=W,F=U,H=Z,G=nt,j=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function W(t,e){var n,i=[],r=0,o=0,a="",s=e&&e.delimiter||"/";while(null!=(n=j.exec(t))){var l=n[0],u=n[1],c=n.index;if(a+=t.slice(o,c),o=c+l.length,u)a+=u[1];else{var h=t[o],d=n[2],f=n[3],p=n[4],g=n[5],v=n[6],m=n[7];a&&(i.push(a),a="");var y=null!=d&&null!=h&&h!==d,x="+"===v||"*"===v,_="?"===v||"*"===v,b=n[2]||s,w=p||g;i.push({name:f||r++,prefix:d||"",delimiter:b,optional:_,repeat:x,partial:y,asterisk:!!m,pattern:w?X(w):m?".*":"[^"+Y(b)+"]+?"})}}return o-1&&(s.params[d]=n.params[d]);if(u)return s.path=ot(u.path,s.params,'named route "'+l+'"'),c(u,s,a)}else if(s.path){s.params={};for(var f=0;f=t.length?n():t[r]?e(t[r],(function(){i(r+1)})):i(r+1)};i(0)}function Et(t){return function(e,n,i){var o=!1,a=0,s=null;Rt(t,(function(t,e,n,l){if("function"===typeof t&&void 0===t.cid){o=!0,a++;var u,c=Vt((function(e){Bt(e)&&(e=e.default),t.resolved="function"===typeof e?e:T.extend(e),n.components[l]=e,a--,a<=0&&i()})),h=Vt((function(t){var e="Failed to resolve async component "+l+": "+t;s||(s=r(t)?t:new Error(e),i(s))}));try{u=t(c,h)}catch(f){h(f)}if(u)if("function"===typeof u.then)u.then(c,h);else{var d=u.component;d&&"function"===typeof d.then&&d.then(c,h)}}})),o||i()}}function Rt(t,e){return Nt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Nt(t){return Array.prototype.concat.apply([],t)}var zt="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Bt(t){return t.__esModule||zt&&"Module"===t[Symbol.toStringTag]}function Vt(t){var e=!1;return function(){var n=[],i=arguments.length;while(i--)n[i]=arguments[i];if(!e)return e=!0,t.apply(this,n)}}var Ft=function(t,e){this.router=t,this.base=Ht(e),this.current=x,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function Ht(t){if(!t)if(O){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function Gt(t,e){var n,i=Math.max(t.length,e.length);for(n=0;n=0?e.slice(0,n):e;return i+"#"+t}function re(t){At?Lt(ie(t)):window.location.hash=t}function oe(t){At?Pt(ie(t)):window.location.replace(ie(t))}var ae=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var i=this;this.transitionTo(t,(function(t){i.stack=i.stack.slice(0,i.index+1).concat(t),i.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var i=this;this.transitionTo(t,(function(t){i.stack=i.stack.slice(0,i.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var i=this.stack[n];this.confirmTransition(i,(function(){e.index=n,e.updateRoute(i)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ft),se=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ht(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!At&&!1!==t.fallback,this.fallback&&(e="hash"),O||(e="abstract"),this.mode=e,e){case"history":this.history=new Kt(this,t.base);break;case"hash":this.history=new Qt(this,t.base,this.fallback);break;case"abstract":this.history=new ae(this,t.base);break;default:0}},le={currentRoute:{configurable:!0}};function ue(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function ce(t,e,n){var i="hash"===n?"#"+e:e;return t?N(t+"/"+i):i}se.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},le.currentRoute.get=function(){return this.history&&this.history.current},se.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof Kt)n.transitionTo(n.getCurrentLocation());else if(n instanceof Qt){var i=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),i,i)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},se.prototype.beforeEach=function(t){return ue(this.beforeHooks,t)},se.prototype.beforeResolve=function(t){return ue(this.resolveHooks,t)},se.prototype.afterEach=function(t){return ue(this.afterHooks,t)},se.prototype.onReady=function(t,e){this.history.onReady(t,e)},se.prototype.onError=function(t){this.history.onError(t)},se.prototype.push=function(t,e,n){this.history.push(t,e,n)},se.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},se.prototype.go=function(t){this.history.go(t)},se.prototype.back=function(){this.go(-1)},se.prototype.forward=function(){this.go(1)},se.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},se.prototype.resolve=function(t,e,n){var i=ct(t,e||this.history.current,n,this),r=this.match(i,e),o=r.redirectedFrom||r.fullPath,a=this.history.base,s=ce(a,o,this.mode);return{location:i,route:r,href:s,normalizedTo:i,resolved:r}},se.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==x&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(se.prototype,le),se.install=P,se.version="3.0.2",O&&window.Vue&&window.Vue.use(se),e["a"]=se},"8d32":function(t,e,n){var i=n("cbe5"),r=i.extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r,0),o=e.startAngle,a=e.endAngle,s=e.clockwise,l=Math.cos(o),u=Math.sin(o);t.moveTo(l*r+n,u*r+i),t.arc(n,i,r,o,a,!s)}});t.exports=r},"8deb":function(t,e,n){var i=n("3eba");n("5522"),n("a016"),n("1466");var r=n("98e7"),o=n("7f96"),a=n("870e"),s=n("d3f47"),l=n("7891");i.registerVisual(r("radar")),i.registerVisual(o("radar","circle")),i.registerLayout(a),i.registerProcessor(s("radar")),i.registerPreprocessor(l)},"8df4":function(t,e,n){"use strict";var i=n("7a77");function r(t){if("function"!==typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,i=n._listeners.length;for(e=0;en},ie64:function(){return x.ie()&&d},firefox:function(){return y()||i},opera:function(){return y()||r},webkit:function(){return y()||o},safari:function(){return x.webkit()},chrome:function(){return y()||a},windows:function(){return y()||u},osx:function(){return y()||l},linux:function(){return y()||c},iphone:function(){return y()||f},mobile:function(){return y()||f||p||h||v},nativeApp:function(){return y()||g},android:function(){return y()||h},ipad:function(){return y()||p}};t.exports=x},"8ec5":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2145"),a=i.extendComponentModel({type:"toolbox",layoutMode:{type:"box",ignoreSize:!0},optionUpdated:function(){a.superApply(this,"optionUpdated",arguments),r.each(this.option.feature,(function(t,e){var n=o.get(e);n&&r.merge(t,n.defaultOption)}))},defaultOption:{show:!0,z:6,zlevel:0,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1}}}),s=a;t.exports=s},"8ed2":function(t,e,n){n("48c7");var i=n("6cb7"),r=i.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"}});t.exports=r},"8ee0":function(t,e,n){n("3f8e");var i=n("697e7"),r=i.registerPainter,o=n("dc20");r("svg",o)},"8f60":function(t,e,n){"use strict";var i=n("a159"),r=n("aebd"),o=n("45f2"),a={};n("35e8")(a,n("5168")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=i(a,{next:r(1,n)}),o(t,e+" Iterator")}},9003:function(t,e,n){var i=n("6b4c");t.exports=Array.isArray||function(t){return"Array"==i(t)}},"903c":function(t,e){function n(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries((function(t){for(var n=0;n=n.length||t===n[t.depth]){var o=v(r,g,t,e,_,i);u(t,o,n,i)}}))}else l=h(g,t),t.setVisual("color",l)}}function c(t,e,n){var i=o.extend({},e),r=n.designatedVisualItemStyle;return o.each(["color","colorAlpha","colorSaturation"],(function(n){r[n]=e[n];var o=t.get(n);r[n]=null,null!=o&&(i[n]=o)})),i}function h(t){var e=f(t,"color");if(e){var n=f(t,"colorAlpha"),i=f(t,"colorSaturation");return i&&(e=r.modifyHSL(e,null,null,i)),n&&(e=r.modifyAlpha(e,n)),e}}function d(t,e){return null!=e?r.modifyHSL(e,null,null,t):null}function f(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}function p(t,e,n,r,o,a){if(a&&a.length){var s=g(e,"color")||null!=o.color&&"none"!==o.color&&(g(e,"colorAlpha")||g(e,"colorSaturation"));if(s){var l=e.get("visualMin"),u=e.get("visualMax"),c=n.dataExtent.slice();null!=l&&lc[1]&&(c[1]=u);var h=e.get("colorMappingBy"),d={type:s.name,dataExtent:c,visual:s.range};"color"!==d.type||"index"!==h&&"id"!==h?d.mappingMethod="linear":(d.mappingMethod="category",d.loop=!0);var f=new i(d);return f.__drColorMappingBy=h,f}}}function g(t,e){var n=t.get(e);return a(n)&&n.length?{name:e,range:n}:null}function v(t,e,n,i,r,a){var s=o.extend({},e);if(r){var l=r.type,u="color"===l&&r.__drColorMappingBy,c="index"===u?i:"id"===u?a.mapIdToIndex(n.getId()):n.getValue(t.get("visualDimension"));s[l]=r.mapValueToVisual(c)}return s}t.exports=l},9138:function(t,e,n){t.exports=n("35e8")},"923d":function(t,e,n){var i=n("6d8b"),r=n("3842"),o=n("ee1a"),a=o.isDimensionStacked,s=i.indexOf;function l(t){return!(isNaN(parseFloat(t.x))&&isNaN(parseFloat(t.y)))}function u(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}function c(t,e,n,i,o,s){var l=[],u=a(e,i),c=u?e.getCalculationInfo("stackResultDimension"):i,h=y(e,c,t),d=e.indicesOfNearest(c,h)[0];l[o]=e.get(n,d),l[s]=e.get(c,d);var f=e.get(i,d),p=r.getPrecision(e.get(i,d));return p=Math.min(p,20),p>=0&&(l[s]=+l[s].toFixed(p)),[l,f]}var h=i.curry,d={min:h(c,"min"),max:h(c,"max"),average:h(c,"average")};function f(t,e){var n=t.getData(),r=t.coordinateSystem;if(e&&!u(e)&&!i.isArray(e.coord)&&r){var o=r.dimensions,a=p(e,n,r,t);if(e=i.clone(e),e.type&&d[e.type]&&a.baseAxis&&a.valueAxis){var l=s(o,a.baseAxis.dim),c=s(o,a.valueAxis.dim),h=d[e.type](n,a.baseDataDim,a.valueDataDim,l,c);e.coord=h[0],e.value=h[1]}else{for(var f=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],g=0;g<2;g++)d[f[g]]&&(f[g]=y(n,n.mapDimension(o[g]),f[g]));e.coord=f}}return e}function p(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(g(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function g(t,e){var n=t.getData(),i=n.dimensions;e=n.getDimension(e);for(var r=0;rc){var f,p=l(arguments[c++]),g=h?r(p).concat(h(p)):r(p),v=g.length,m=0;while(v>m)f=g[m++],i&&!d.call(p,f)||(n[f]=p[f])}return n}:u},"933b":function(t,e,n){var i=n("b12f"),r=i.extend({type:"timeline"});t.exports=r},9390:function(t,e,n){n("d090"),n("83ba"),n("ee66")},"93d0":function(t,e){var n="original",i="arrayRows",r="objectRows",o="keyedColumns",a="unknown",s="typedArray",l="column",u="row";e.SOURCE_FORMAT_ORIGINAL=n,e.SOURCE_FORMAT_ARRAY_ROWS=i,e.SOURCE_FORMAT_OBJECT_ROWS=r,e.SOURCE_FORMAT_KEYED_COLUMNS=o,e.SOURCE_FORMAT_UNKNOWN=a,e.SOURCE_FORMAT_TYPED_ARRAY=s,e.SERIES_LAYOUT_BY_COLUMN=l,e.SERIES_LAYOUT_BY_ROW=u},9442:function(t,e,n){var i=n("6d8b");function r(t){var e=[];i.each(t.series,(function(t){t&&"map"===t.type&&(e.push(t),t.map=t.map||t.mapType,i.defaults(t,t.mapLocation))}))}t.exports=r},"944e":function(t,e,n){var i=n("3842"),r=i.round;function o(t,e,n,o){var s={},u=t[1]-t[0],c=s.interval=i.nice(u/e,!0);null!=n&&co&&(c=s.interval=o);var h=s.intervalPrecision=a(c),d=s.niceTickExtent=[r(Math.ceil(t[0]/c)*c,h),r(Math.floor(t[1]/c)*c,h)];return l(d,t),s}function a(t){return i.getPrecisionSafe(t)+2}function s(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function l(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),s(t,0,e),s(t,1,e),t[0]>t[1]&&(t[0]=t[1])}e.intervalScaleNiceTicks=o,e.getIntervalPrecision=a,e.fixExtent=l},"94b1":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("9d57"),a=o.layout,s=o.largeLayout;n("5aa9"),n("17b8"),n("67cc"),n("01ed"),i.registerLayout(i.PRIORITY.VISUAL.LAYOUT,r.curry(a,"bar")),i.registerLayout(i.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,s),i.registerVisual({seriesType:"bar",reset:function(t){t.getData().setVisual("legendSymbol","roundRect")}})},"94e4":function(t,e,n){var i=n("401b"),r=n("53f3"),o=r.getSymbolSize,a=r.getNodeGlobalScale,s=n("6d8b"),l=n("0c37"),u=l.getCurvenessForEdge,c=Math.PI,h=[];function d(t,e){var n=t.coordinateSystem;if(!n||"view"===n.type){var r=n.getBoundingRect(),o=t.getData(),a=o.graph,l=r.width/2+r.x,c=r.height/2+r.y,h=Math.min(r.width,r.height)/2,d=o.count();o.setLayout({cx:l,cy:c}),d&&(f[e](t,n,a,o,h,l,c,d),a.eachEdge((function(e,n){var r,o=s.retrieve3(e.getModel().get("lineStyle.curveness"),u(e,t,n),0),a=i.clone(e.node1.getLayout()),h=i.clone(e.node2.getLayout()),d=(a[0]+h[0])/2,f=(a[1]+h[1])/2;+o&&(o*=3,r=[l*o+d*(1-o),c*o+f*(1-o)]),e.setLayout([a,h,r])})))}}var f={value:function(t,e,n,i,r,o,a,s){var l=0,u=i.getSum("value"),c=2*Math.PI/(u||s);n.eachNode((function(t){var e=t.getValue("value"),n=c*(u?e:1)/2;l+=n,t.setLayout([r*Math.cos(l)+o,r*Math.sin(l)+a]),l+=n}))},symbolSize:function(t,e,n,i,r,s,l,u){var d=0;h.length=u;var f=a(t);n.eachNode((function(t){var e=o(t);isNaN(e)&&(e=2),e<0&&(e=0),e*=f;var n=Math.asin(e/2/r);isNaN(n)&&(n=c/2),h[t.dataIndex]=n,d+=2*n}));var p=(2*c-d)/u/2,g=0;n.eachNode((function(t){var e=p+h[t.dataIndex];g+=e,t.setLayout([r*Math.cos(g)+s,r*Math.sin(g)+l]),g+=e}))}};e.circularLayout=d},"95a8":function(t,e,n){var i=n("3eba");n("1953"),n("307d"),i.registerPreprocessor((function(t){t.markLine=t.markLine||{}}))},9619:function(t,e,n){var i=n("597f"),r=n("0e15");t.exports={throttle:i,debounce:r}},9680:function(t,e){function n(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0,u=t;if(a>e+s&&a>i+s||at+s&&o>n+s||o=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var l=r.call(a,"catchLoc"),u=r.call(a,"finallyLoc");if(l&&u){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),k(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;k(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:P(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=n),g}}}function _(t,e,n,i){var r=e&&e.prototype instanceof w?e:w,o=Object.create(r.prototype),a=new L(i||[]);return o._invoke=I(t,n,a),o}function b(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(i){return{type:"throw",arg:i}}}function w(){}function S(){}function M(){}function A(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function T(t){function e(n,i,o,a){var s=b(t[n],t,i);if("throw"!==s.type){var l=s.arg,u=l.value;return u&&"object"===typeof u&&r.call(u,"__await")?Promise.resolve(u.__await).then((function(t){e("next",t,o,a)}),(function(t){e("throw",t,o,a)})):Promise.resolve(u).then((function(t){l.value=t,o(l)}),a)}a(s.arg)}var n;function i(t,i){function r(){return new Promise((function(n,r){e(t,i,n,r)}))}return n=n?n.then(r,r):r()}this._invoke=i}function I(t,e,n){var i=h;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===p){if("throw"===r)throw o;return O()}n.method=r,n.arg=o;while(1){var a=n.delegate;if(a){var s=C(a,n);if(s){if(s===g)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===h)throw i=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=b(t,e,n);if("normal"===l.type){if(i=n.done?p:d,l.arg===g)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=p,n.method="throw",n.arg=l.arg)}}}function C(t,e){var i=t.iterator[e.method];if(i===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,C(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var r=b(i,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,g;var o=r.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function D(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function k(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function L(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(D,this),this.reset(!0)}function P(t){if(t){var e=t[a];if(e)return e.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function e(){while(++i1)return this.getValueByKeyPath(key,options);if(templateContext&&"object"===typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handler.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random)&&!(lkey in Random)&&!(okey in Random))return placeholder;for(var i=0;i1&&(r=e.context.path.slice(0),r.pop(),r=this.normalizePath(r.concat(i))),t=i[i.length-1];for(var o=e.context.root,a=e.context.templateRoot,s=1;s1/(t+e)*t?!n:n):Math.random()>=.5},bool:function(t,e,n){return this.boolean(t,e,n)},natural:function(t,e){return t="undefined"!==typeof t?parseInt(t,10):0,e="undefined"!==typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},integer:function(t,e){return t="undefined"!==typeof t?parseInt(t,10):-9007199254740992,e="undefined"!==typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},int:function(t,e){return this.integer(t,e)},float:function(t,e,n,i){n=void 0===n?0:n,n=Math.max(Math.min(n,17),0),i=void 0===i?17:i,i=Math.max(Math.min(i,17),0);for(var r=this.integer(t,e)+".",o=0,a=this.natural(n,i);o1&&i--,o=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,r[u]=255*o;return r},hsl2hsv:function(t){var e,n,i=t[0],r=t[1]/100,o=t[2]/100;return o*=2,r*=o<=1?o:2-o,n=(o+r)/2,e=2*r/(o+r),[i,100*e,100*n]},hsv2rgb:function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,r=Math.floor(e)%6,o=e-Math.floor(e),a=255*i*(1-n),s=255*i*(1-n*o),l=255*i*(1-n*(1-o));switch(i*=255,r){case 0:return[i,l,a];case 1:return[s,i,a];case 2:return[a,i,l];case 3:return[a,s,i];case 4:return[l,a,i];case 5:return[i,a,s]}},hsv2hsl:function(t){var e,n,i=t[0],r=t[1]/100,o=t[2]/100;return n=(2-r)*o,e=r*o,e/=n<=1?n:2-n,n/=2,[i,100*e,100*n]},rgb2hex:function(t,e,n){return"#"+((256+t<<8|e)<<8|n).toString(16).slice(1)},hex2rgb:function(t){return t="0x"+t.slice(1).replace(t.length>4?t:/./g,"$&$&")|0,[t>>16,t>>8&255,255&t]}}},function(t,e){t.exports={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}}},function(t,e,n){var i=n(6),r=n(14);function o(t,e,n,r){return void 0===n?i.natural(t,e):void 0===r?n:i.natural(parseInt(n,10),parseInt(r,10))}t.exports={paragraph:function(t,e){for(var n=o(3,7,t,e),i=[],r=0;r1&&(e=[].slice.call(arguments,0));var n=t.options,i=n.context.templatePath.join("."),r=t.cache[i]=t.cache[i]||{index:0,array:e};return r.array[r.index++%r.array.length]}}},function(t,e){t.exports={first:function(){var t=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(t)},last:function(){var t=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(t)},name:function(t){return this.first()+" "+(t?this.first()+" ":"")+this.last()},cfirst:function(){var t="王 李 张 刘 陈 杨 赵 黄 周 吴 徐 孙 胡 朱 高 林 何 郭 马 罗 梁 宋 郑 谢 韩 唐 冯 于 董 萧 程 曹 袁 邓 许 傅 沈 曾 彭 吕 苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 余 潘 杜 戴 夏 锺 汪 田 任 姜 范 方 石 姚 谭 廖 邹 熊 金 陆 郝 孔 白 崔 康 毛 邱 秦 江 史 顾 侯 邵 孟 龙 万 段 雷 钱 汤 尹 黎 易 常 武 乔 贺 赖 龚 文".split(" ");return this.pick(t)},clast:function(){var t="伟 芳 娜 秀英 敏 静 丽 强 磊 军 洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 平 刚 桂英".split(" ");return this.pick(t)},cname:function(){return this.cfirst()+this.clast()}}},function(t,e){t.exports={url:function(t,e){return(t||this.protocol())+"://"+(e||this.domain())+"/"+this.word()},protocol:function(){return this.pick("http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "))},domain:function(t){return this.word()+"."+(t||this.tld())},tld:function(){return this.pick("com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" "))},email:function(t){return this.character("lower")+"."+this.word()+"@"+(t||this.word()+"."+this.tld())},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)}}},function(t,e,n){var i=n(18),r=["东北","华北","华东","华中","华南","西南","西北"];t.exports={region:function(){return this.pick(r)},province:function(){return this.pick(i).name},city:function(t){var e=this.pick(i),n=this.pick(e.children);return t?[e.name,n.name].join(" "):n.name},county:function(t){var e=this.pick(i),n=this.pick(e.children),r=this.pick(n.children)||{name:"-"};return t?[e.name,n.name,r.name].join(" "):r.name},zip:function(t){for(var e="",n=0;n<(t||6);n++)e+=this.natural(0,9);return e}}},function(t,e){var n={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",471005:"其它区",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};function i(t){for(var e,n={},i=0;ir;r++)o=t.charAt(r),"\n"===o?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return ti!==e&&(ti>e&&(ti=0,ei={line:1,column:1,seenCR:!1}),n(ei,ti,e),ti=e),ei}function _(t){ni>Jn||(Jn>ni&&(ni=Jn,ii=[]),ii.push(t))}function b(t){var e=0;for(t.sort();eJn?(i=t.charAt(Jn),Jn++):(i=null,0===ri&&_(Ln)),null!==i?(Qn=e,n=Pn(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}function ft(){var e,n,i;return e=Jn,92===t.charCodeAt(Jn)?(n=On,Jn++):(n=null,0===ri&&_(En)),null!==n?(Rn.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ri&&_(Nn)),null!==i?(Qn=e,n=zn(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}function pt(){var e,n,i,r;if(e=Jn,t.substr(Jn,2)===Bn?(n=Bn,Jn+=2):(n=null,0===ri&&_(Vn)),null!==n){if(i=[],Fn.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(Hn)),null!==r)for(;null!==r;)i.push(r),Fn.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(Hn));else i=St;null!==i?(Qn=e,n=Gn(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function gt(){var e,n,i,r;if(e=Jn,t.substr(Jn,2)===jn?(n=jn,Jn+=2):(n=null,0===ri&&_(Wn)),null!==n){if(i=[],Un.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(qn)),null!==r)for(;null!==r;)i.push(r),Un.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(qn));else i=St;null!==i?(Qn=e,n=$n(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function vt(){var e,n,i,r;if(e=Jn,t.substr(Jn,2)===Zn?(n=Zn,Jn+=2):(n=null,0===ri&&_(Yn)),null!==n){if(i=[],Un.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(qn)),null!==r)for(;null!==r;)i.push(r),Un.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ri&&_(qn));else i=St;null!==i?(Qn=e,n=Xn(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function mt(){var e,n;return e=Jn,t.substr(Jn,2)===Bn?(n=Bn,Jn+=2):(n=null,0===ri&&_(Vn)),null!==n&&(Qn=e,n=Kn()),null===n?(Jn=e,e=n):e=n,e}function yt(){var e,n,i;return e=Jn,92===t.charCodeAt(Jn)?(n=On,Jn++):(n=null,0===ri&&_(En)),null!==n?(t.length>Jn?(i=t.charAt(Jn),Jn++):(i=null,0===ri&&_(Ln)),null!==i?(Qn=e,n=Re(i),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}var xt,_t=arguments.length>1?arguments[1]:{},bt={regexp:w},wt=w,St=null,Mt="",At="|",Tt='"|"',It=function(t,e){return e?new i(t,e[1]):t},Ct=function(t,e,n){return new r([t].concat(e).concat([n]))},Dt="^",kt='"^"',Lt=function(){return new n("start")},Pt="$",Ot='"$"',Et=function(){return new n("end")},Rt=function(t,e){return new s(t,e)},Nt="Quantifier",zt=function(t,e){return e&&(t.greedy=!1),t},Bt="{",Vt='"{"',Ft=",",Ht='","',Gt="}",jt='"}"',Wt=function(t,e){return new l(t,e)},Ut=",}",qt='",}"',$t=function(t){return new l(t,1/0)},Zt=function(t){return new l(t,t)},Yt="+",Xt='"+"',Kt=function(){return new l(1,1/0)},Jt="*",Qt='"*"',te=function(){return new l(0,1/0)},ee="?",ne='"?"',ie=function(){return new l(0,1)},re=/^[0-9]/,oe="[0-9]",ae=function(t){return+t.join("")},se="(",le='"("',ue=")",ce='")"',he=function(t){return t},de=function(t){return new a(t)},fe="?:",pe='"?:"',ge=function(t){return new o("non-capture-group",t)},ve="?=",me='"?="',ye=function(t){return new o("positive-lookahead",t)},xe="?!",_e='"?!"',be=function(t){return new o("negative-lookahead",t)},we="CharacterSet",Se="[",Me='"["',Ae="]",Te='"]"',Ie=function(t,e){return new u(!!t,e)},Ce="CharacterRange",De="-",ke='"-"',Le=function(t,e){return new c(t,e)},Pe="Character",Oe=/^[^\\\]]/,Ee="[^\\\\\\]]",Re=function(t){return new h(t)},Ne=".",ze='"."',Be=function(){return new n("any-character")},Ve="Literal",Fe=/^[^|\\\/.[()?+*$\^]/,He="[^|\\\\\\/.[()?+*$\\^]",Ge="\\b",je='"\\\\b"',We=function(){return new n("backspace")},Ue=function(){return new n("word-boundary")},qe="\\B",$e='"\\\\B"',Ze=function(){return new n("non-word-boundary")},Ye="\\d",Xe='"\\\\d"',Ke=function(){return new n("digit")},Je="\\D",Qe='"\\\\D"',tn=function(){return new n("non-digit")},en="\\f",nn='"\\\\f"',rn=function(){return new n("form-feed")},on="\\n",an='"\\\\n"',sn=function(){return new n("line-feed")},ln="\\r",un='"\\\\r"',cn=function(){return new n("carriage-return")},hn="\\s",dn='"\\\\s"',fn=function(){return new n("white-space")},pn="\\S",gn='"\\\\S"',vn=function(){return new n("non-white-space")},mn="\\t",yn='"\\\\t"',xn=function(){return new n("tab")},_n="\\v",bn='"\\\\v"',wn=function(){return new n("vertical-tab")},Sn="\\w",Mn='"\\\\w"',An=function(){return new n("word")},Tn="\\W",In='"\\\\W"',Cn=function(){return new n("non-word")},Dn="\\c",kn='"\\\\c"',Ln="any character",Pn=function(t){return new v(t)},On="\\",En='"\\\\"',Rn=/^[1-9]/,Nn="[1-9]",zn=function(t){return new g(t)},Bn="\\0",Vn='"\\\\0"',Fn=/^[0-7]/,Hn="[0-7]",Gn=function(t){return new p(t.join(""))},jn="\\x",Wn='"\\\\x"',Un=/^[0-9a-fA-F]/,qn="[0-9a-fA-F]",$n=function(t){return new f(t.join(""))},Zn="\\u",Yn='"\\\\u"',Xn=function(t){return new d(t.join(""))},Kn=function(){return new n("null-character")},Jn=0,Qn=0,ti=0,ei={line:1,column:1,seenCR:!1},ni=0,ii=[],ri=0;if("startRule"in _t){if(!(_t.startRule in bt))throw new Error("Can't start parsing from rule \""+_t.startRule+'".');wt=bt[_t.startRule]}if(n.offset=y,n.text=m,xt=wt(),null!==xt&&Jn===t.length)return xt;throw b(ii),Qn=Math.max(Jn,ni),new e(ii,Qni)return!0;var a={path:e,type:t,actual:n,expected:i,action:"is greater than",message:o};return a.message=l.message(a),r.push(a),!1},lessThan:function(t,e,n,i,r,o){if(n=i)return!0;var a={path:e,type:t,actual:n,expected:i,action:"is greater than or equal to",message:o};return a.message=l.message(a),r.push(a),!1},lessThanOrEqualTo:function(t,e,n,i,r,o){if(n<=i)return!0;var a={path:e,type:t,actual:n,expected:i,action:"is less than or equal to",message:o};return a.message=l.message(a),r.push(a),!1}};a.Diff=s,a.Assert=l,t.exports=a},function(t,e,n){t.exports=n(28)},function(t,e,n){var i=n(3);window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(f){window.Event=function(t,e,n,i){var r=document.createEvent("CustomEvent");return r.initCustomEvent(t,e,n,i),r}}var r={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},o="readystatechange loadstart progress abort error load timeout loadend".split(" "),a="timeout withCredentials".split(" "),s="readyState responseURL status statusText responseType response responseText responseXML".split(" "),l={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};function u(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}function c(){var t=function(){var t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,e=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,n=location.href,i=e.exec(n.toLowerCase())||[];return t.test(i[1])}();return window.ActiveXObject?!t&&e()||n():e();function e(){try{return new window._XMLHttpRequest}catch(t){}}function n(){try{return new window._ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}}function h(t){for(var e in u.Mock._mocked){var n=u.Mock._mocked[e];if((!n.rurl||r(n.rurl,t.url))&&(!n.rtype||r(n.rtype,t.type.toLowerCase())))return n}function r(t,e){return"string"===i.type(t)?t===e:"regexp"===i.type(t)?t.test(e):void 0}}function d(t,e){return i.isFunction(t.template)?t.template(e):u.Mock.mock(t.template)}u._settings={timeout:"10-100"},u.setup=function(t){return i.extend(u._settings,t),u._settings},i.extend(u,r),i.extend(u.prototype,r),u.prototype.mock=!0,u.prototype.match=!1,i.extend(u.prototype,{open:function(t,e,n,r,l){var d=this;i.extend(this.custom,{method:t,url:e,async:"boolean"!==typeof n||n,username:r,password:l,options:{url:e,type:t}}),this.custom.timeout=function(t){if("number"===typeof t)return t;if("string"===typeof t&&!~t.indexOf("-"))return parseInt(t,10);if("string"===typeof t&&~t.indexOf("-")){var e=t.split("-"),n=parseInt(e[0],10),i=parseInt(e[1],10);return Math.round(Math.random()*(i-n))+n}}(u._settings.timeout);var f=h(this.custom.options);function p(t){for(var e=0;e=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},clone:function(){return new l(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}}},l.create=function(t){return new l(t.x,t.y,t.width,t.height)};var u=l;t.exports=u},"98b7":function(t,e){var n="undefined"!==typeof window&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){setTimeout(t,16)};t.exports=n},"98e7":function(t,e,n){var i=n("6d8b"),r=i.createHashMap;function o(t){return{getTargetSeries:function(e){var n={},i=r();return e.eachSeriesByType(t,(function(t){t.__paletteScope=n,i.set(t.uid,t)})),i},reset:function(t,e){var n=t.getRawData(),i={},r=t.getData();r.each((function(t){var e=r.getRawIndex(t);i[e]=t})),n.each((function(e){var o,a=i[e],s=null!=a&&r.getItemVisual(a,"color",!0),l=null!=a&&r.getItemVisual(a,"borderColor",!0);if(s&&l||(o=n.getItemModel(e)),!s){var u=o.get("itemStyle.color")||t.getColorFromPalette(n.getName(e)||e+"",t.__paletteScope,n.count());null!=a&&r.setItemVisual(a,"color",u)}if(!l){var c=o.get("itemStyle.borderColor");null!=a&&r.setItemVisual(a,"borderColor",c)}}))}}}t.exports=o},"998c":function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("e86a"),a=Math.PI;function s(t,e){e=e||{},i.defaults(e,{text:"loading",textColor:"#000",fontSize:"12px",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#c23531",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new r.Group,s=new r.Rect({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(s);var l=e.fontSize+" sans-serif",u=new r.Rect({style:{fill:"none",text:e.text,font:l,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});if(n.add(u),e.showSpinner){var c=new r.Arc({shape:{startAngle:-a/2,endAngle:-a/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001});c.animateShape(!0).when(1e3,{endAngle:3*a/2}).start("circularInOut"),c.animateShape(!0).when(1e3,{startAngle:3*a/2}).delay(300).start("circularInOut"),n.add(c)}return n.resize=function(){var n=o.getWidth(e.text,l),i=e.showSpinner?e.spinnerRadius:0,r=(t.getWidth()-2*i-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner?0:n/2),a=t.getHeight()/2;e.showSpinner&&c.setShape({cx:r,cy:a}),u.setShape({x:r-i,y:a-i,width:2*i,height:2*i}),s.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n}t.exports=s},"9aa9":function(t,e){e.f=Object.getOwnPropertySymbols},"9b43":function(t,e,n){var i=n("d8e8");t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},"9bdb":function(t,e,n){var i=n("282b"),r=i([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),o={getAreaStyle:function(t,e){return r(this,t,e)}};t.exports=o},"9c2c":function(t,e,n){var i=n("401b"),r=i.min,o=i.max,a=i.scale,s=i.distance,l=i.add,u=i.clone,c=i.sub;function h(t,e,n,i){var h,d,f,p,g=[],v=[],m=[],y=[];if(i){f=[1/0,1/0],p=[-1/0,-1/0];for(var x=0,_=t.length;x<_;x++)r(f,f,t[x]),o(p,p,t[x]);r(f,f,i[0]),o(p,p,i[1])}for(x=0,_=t.length;x<_;x++){var b=t[x];if(n)h=t[x?x-1:_-1],d=t[(x+1)%_];else{if(0===x||x===_-1){g.push(u(t[x]));continue}h=t[x-1],d=t[x+1]}c(v,d,h),a(v,v,e);var w=s(b,h),S=s(b,d),M=w+S;0!==M&&(w/=M,S/=M),a(m,v,-w),a(y,v,S);var A=l([],b,m),T=l([],b,y);i&&(o(A,A,f),r(A,A,p),o(T,T,f),r(T,T,p)),g.push(A),g.push(T)}return n&&g.push(g.shift()),g}t.exports=h},"9c6c":function(t,e,n){var i=n("2b4c")("unscopables"),r=Array.prototype;void 0==r[i]&&n("32e9")(r,i,{}),t.exports=function(t){r[i][t]=!0}},"9c80":function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},"9ca8":function(t,e,n){var i=n("6d8b"),r=n("9850"),o=n("3842"),a=o.parsePercent,s=o.MAX_SAFE_INTEGER,l=n("f934"),u=n("55ac"),c=Math.max,h=Math.min,d=i.retrieve,f=i.each,p=["itemStyle","borderWidth"],g=["itemStyle","gapWidth"],v=["upperLabel","show"],m=["upperLabel","height"],y={seriesType:"treemap",reset:function(t,e,n,o){var s=n.getWidth(),c=n.getHeight(),h=t.option,p=l.getLayoutRect(t.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()}),g=h.size||[],v=a(d(p.width,g[0]),s),m=a(d(p.height,g[1]),c),y=o&&o.type,_=["treemapZoomToNode","treemapRootToNode"],b=u.retrieveTargetInfo(o,_,t),w="treemapRender"===y||"treemapMove"===y?o.rootRect:null,S=t.getViewRoot(),M=u.getPathToRoot(S);if("treemapMove"!==y){var A="treemapZoomToNode"===y?T(t,b,S,v,m):w?[w.width,w.height]:[v,m],D=h.sort;D&&"asc"!==D&&"desc"!==D&&(D="desc");var k={squareRatio:h.squareRatio,sort:D,leafDepth:h.leafDepth};S.hostTree.clearLayouts();var L={x:0,y:0,width:A[0],height:A[1],area:A[0]*A[1]};S.setLayout(L),x(S,k,!1,0);L=S.getLayout();f(M,(function(t,e){var n=(M[e+1]||S).getValue();t.setLayout(i.extend({dataExtent:[n,n],borderWidth:0,upperHeight:0},L))}))}var P=t.getData().tree.root;P.setLayout(I(p,w,b),!0),t.setLayoutInfo(p),C(P,new r(-p.x,-p.y,s,c),M,S,0)}};function x(t,e,n,i){var r,o;if(!t.isRemoved()){var a=t.getLayout();r=a.width,o=a.height;var s=t.getModel(),l=s.get(p),u=s.get(g)/2,d=D(s),f=Math.max(l,d),v=l-u,m=f-u;s=t.getModel();t.setLayout({borderWidth:l,upperHeight:f,upperLabelHeight:d},!0),r=c(r-2*v,0),o=c(o-v-m,0);var y=r*o,b=_(t,s,y,e,n,i);if(b.length){var w={x:v,y:m,width:r,height:o},S=h(r,o),T=1/0,I=[];I.area=0;for(var C=0,k=b.length;C=0;l--){var u=r["asc"===i?a-l-1:l].getValue();u/n*es[1]&&(s[1]=e)}))}else s=[NaN,NaN];return{sum:i,dataExtent:s}}function M(t,e,n){for(var i,r=0,o=1/0,a=0,s=t.length;ar&&(r=i));var l=t.area*t.area,u=e*e*n;return l?c(u*r/l,l/(u*o)):1/0}function A(t,e,n,i,r){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width","height"],u=n[s[o]],d=e?t.area/e:0;(r||d>n[l[a]])&&(d=n[l[a]]);for(var f=0,p=t.length;fs&&(c=s),a=o}c0&&(a=null===a?l:Math.min(a,l))}n[r]=a}}return n}function m(t){var e=v(t),n=[];return i.each(t,(function(t){var i,r=t.coordinateSystem,a=r.getBaseAxis(),s=a.getExtent();if("category"===a.type)i=a.getBandWidth();else if("value"===a.type||"time"===a.type){var l=a.dim+"_"+a.index,u=e[l],c=Math.abs(s[1]-s[0]),h=a.scale.getExtent(),p=Math.abs(h[1]-h[0]);i=u?c/p*u:c}else{var g=t.getData();i=Math.abs(s[1]-s[0])/g.count()}var v=o(t.get("barWidth"),i),m=o(t.get("barMaxWidth"),i),y=o(t.get("barMinWidth")||1,i),x=t.get("barGap"),_=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:v,barMaxWidth:m,barMinWidth:y,barGap:x,barCategoryGap:_,axisKey:f(a),stackId:d(t)})})),y(n)}function y(t){var e={};i.each(t,(function(t,n){var i=t.axisKey,r=t.bandWidth,o=e[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},a=o.stacks;e[i]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var c=t.barMinWidth;c&&(a[s].minWidth=c);var h=t.barGap;null!=h&&(o.gap=h);var d=t.barCategoryGap;null!=d&&(o.categoryGap=d)}));var n={};return i.each(e,(function(t,e){n[e]={};var r=t.stacks,a=t.bandWidth,s=o(t.categoryGap,a),l=o(t.gap,1),u=t.remainedWidth,c=t.autoWidthCount,h=(u-s)/(c+(c-1)*l);h=Math.max(h,0),i.each(r,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,u-=i+l*i,c--}else{var i=h;e&&ei&&(i=n),i!==h&&(t.width=i,u-=i+l*i,c--)}})),h=(u-s)/(c+(c-1)*l),h=Math.max(h,0);var d,f=0;i.each(r,(function(t,e){t.width||(t.width=h),d=t,f+=t.width*(1+l)})),d&&(f-=d.width*l);var p=-f/2;i.each(r,(function(t,i){n[e][i]=n[e][i]||{bandWidth:a,offset:p,width:t.width},p+=t.width*(1+l)}))})),n}function x(t,e,n){if(t&&e){var i=t[f(e)];return null!=i&&null!=n&&(i=i[d(n)]),i}}function _(t,e){var n=g(t,e),r=m(n),o={},a={};i.each(n,(function(t){var e=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),l=d(t),u=r[f(i)][l],c=u.offset,h=u.width,p=n.getOtherAxis(i),g=t.get("barMinHeight")||0;o[l]=o[l]||[],a[l]=a[l]||[],e.setLayout({bandWidth:u.bandWidth,offset:c,size:h});for(var v=e.mapDimension(p.dim),m=e.mapDimension(i.dim),y=s(e,v),x=p.isHorizontal(),_=M(i,p,y),b=0,w=e.count();b=0?"p":"n",L=_;if(y&&(o[l][D]||(o[l][D]={p:_,n:_}),L=o[l][D][k]),x){var P=n.dataToPoint([C,D]);S=L,A=P[1]+c,T=P[0]-_,I=h,Math.abs(T)c||(d=c),{progress:f}}function f(t,e){var c,f=t.count,p=new h(2*f),g=new h(2*f),v=new h(f),m=[],y=[],x=0,_=0;while(null!=(c=t.next()))y[u]=e.get(a,c),y[1-u]=e.get(s,c),m=n.dataToPoint(y,null,m),g[x]=l?i.x+i.width:m[0],p[x++]=m[0],g[x]=l?m[1]:i.y+i.height,p[x++]=m[1],v[_++]=c;e.setLayout({largePoints:p,largeDataIndices:v,largeBackgroundPoints:g,barWidth:d,valueAxisStart:M(r,o,!1),backgroundStart:l?i.x:i.y,valueAxisHorizontal:l})}}};function w(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function S(t){return t.pipelineContext&&t.pipelineContext.large}function M(t,e,n){return e.toGlobalCoord(e.dataToCoord("log"===e.type?1:0))}e.getLayoutOnAxis=p,e.prepareLayoutBarSeries=g,e.makeColumnLayout=m,e.retrieveColumnLayout=x,e.layout=_,e.largeLayout=b},"9d98":function(t,e,n){var i=n("63b6");i(i.S+i.F*!n("8e60"),"Object",{defineProperties:n("7e90")})},"9def":function(t,e,n){var i=n("4588"),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},"9e1e":function(t,e,n){t.exports=!n("79e5")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},"9e2e":function(t,e,n){var i=n("a73c"),r=n("9850"),o=n("82eb"),a=o.WILL_BE_RESTORED,s=new r,l=function(){};l.prototype={constructor:l,drawRectText:function(t,e){var n=this.style;e=n.textRect||e,this.__dirty&&i.normalizeTextStyle(n,!0);var r=n.text;if(null!=r&&(r+=""),i.needDrawText(r,n)){t.save();var o=this.transform;n.transformText?this.setTransform(t):o&&(s.copy(e),s.applyTransform(o),e=s),i.renderText(this,t,r,n,e,a),t.restore()}}};var u=l;t.exports=u},"9e47":function(t,e,n){var i=n("6d8b"),r=n("71ad"),o=n("6cb7"),a=n("f934"),s=a.getLayoutParams,l=a.mergeLayoutParam,u=n("8e43"),c=["value","category","time","log"];function h(t,e,n,a){i.each(c,(function(o){e.extend({type:t+"Axis."+o,mergeDefaultAndTheme:function(e,r){var a=this.layoutMode,u=a?s(e):{},c=r.getTheme();i.merge(e,c.get(o+"Axis")),i.merge(e,this.getDefaultOption()),e.type=n(t,e),a&&l(e,u,a)},optionUpdated:function(){var t=this.option;"category"===t.type&&(this.__ordinalMeta=u.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:i.mergeAll([{},r[o+"Axis"],a],!0)})})),o.registerSubTypeDefaulter(t+"Axis",i.curry(n,t))}t.exports=h},"9e87":function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("50e5");i.registerAction("dataZoom",(function(t,e){var n=o.createLinkedNodesFinder(r.bind(e.eachComponent,e,"dataZoom"),o.eachAxisDim,(function(t,e){return t.get(e.axisIndex)})),i=[];e.eachComponent({mainType:"dataZoom",query:t},(function(t,e){i.push.apply(i,n(t).nodes)})),r.each(i,(function(e,n){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))},"9f51":function(t,e,n){var i=n("857d"),r=i.normalizeRadian,o=2*Math.PI;function a(t,e,n,i,a,s,l,u,c){if(0===l)return!1;var h=l;u-=t,c-=e;var d=Math.sqrt(u*u+c*c);if(d-h>n||d+ha&&(a+=o);var p=Math.atan2(c,u);return p<0&&(p+=o),p>=i&&p<=a||p+o>=i&&p+o<=a}e.containStroke=a},"9f82":function(t,e,n){var i=n("ee1a"),r=i.isDimensionStacked,o=n("6d8b"),a=o.map;function s(t,e,n){var i,o=t.getBaseAxis(),s=t.getOtherAxis(o),u=l(s,n),c=o.dim,h=s.dim,d=e.mapDimension(h),f=e.mapDimension(c),p="x"===h||"radius"===h?1:0,g=a(t.dimensions,(function(t){return e.mapDimension(t)})),v=e.getCalculationInfo("stackResultDimension");return(i|=r(e,g[0]))&&(g[0]=v),(i|=r(e,g[1]))&&(g[1]=v),{dataDimsForPoint:g,valueStart:u,valueAxisDim:h,baseAxisDim:c,stacked:!!i,valueDim:d,baseDim:f,baseDataOffset:p,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function l(t,e){var n=0,i=t.scale.getExtent();return"start"===e?n=i[0]:"end"===e?n=i[1]:i[0]>0?n=i[0]:i[1]<0&&(n=i[1]),n}function u(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}e.prepareDataCoordInfo=s,e.getStackedOnPoint=u},"9fa3":function(t,e,n){var i=n("4ab1"),r=n("6d8b"),o=n("1687");function a(t,e){i.call(this,t,e,"clipPath","__clippath_in_use__")}r.inherits(a,i),a.prototype.update=function(t){var e=this.getSvgElement(t);e&&this.updateDom(e,t.__clipPaths,!1);var n=this.getTextSvgElement(t);n&&this.updateDom(n,t.__clipPaths,!0),this.markUsed(t)},a.prototype.updateDom=function(t,e,n){if(e&&e.length>0){var i,r,a=this.getDefs(!0),s=e[0],l=n?"_textDom":"_dom";s[l]?(r=s[l].getAttribute("id"),i=s[l],a.contains(i)||a.appendChild(i)):(r="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,i=this.createElement("clipPath"),i.setAttribute("id",r),a.appendChild(i),s[l]=i);var u=this.getSvgProxy(s);if(s.transform&&s.parent.invTransform&&!n){var c=Array.prototype.slice.call(s.transform);o.mul(s.transform,s.parent.invTransform,s.transform),u.brush(s),s.transform=c}else u.brush(s);var h=this.getSvgElement(s);i.innerHTML="",i.appendChild(h.cloneNode()),t.setAttribute("clip-path","url(#"+r+")"),e.length>1&&this.updateDom(i,e.slice(1),n)}else t&&t.setAttribute("clip-path","none")},a.prototype.markUsed=function(t){var e=this;t.__clipPaths&&r.each(t.__clipPaths,(function(t){t._dom&&i.prototype.markUsed.call(e,t._dom),t._textDom&&i.prototype.markUsed.call(e,t._textDom)}))};var s=a;t.exports=s},a016:function(t,e,n){var i=n("4f85"),r=n("e46b"),o=n("6d8b"),a=n("eda2"),s=a.encodeHTML,l=n("c4a3"),u=i.extend({type:"series.radar",dependencies:["radar"],init:function(t){u.superApply(this,"init",arguments),this.legendVisualProvider=new l(o.bind(this.getData,this),o.bind(this.getRawData,this))},getInitialData:function(t,e){return r(this,{generateCoord:"indicator_",generateCoordCount:1/0})},formatTooltip:function(t,e,n,i){var r=this.getData(),a=this.coordinateSystem,l=a.getIndicatorAxes(),u=this.getData().getName(t),c="html"===i?"
":"\n";return s(""===u?this.name:u)+c+o.map(l,(function(e,n){var i=r.get(r.mapDimension(e.dim),t);return s(e.name+" : "+i)})).join(c)},getTooltipPosition:function(t){if(null!=t)for(var e=this.getData(),n=this.coordinateSystem,i=e.getValues(o.map(n.dimensions,(function(t){return e.mapDimension(t)})),t,!0),r=0,a=i.length;r";e.style.display="none",n("32fc").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(r+"script"+a+"document.F=Object"+r+"/script"+a),t.close(),u=t.F;while(i--)delete u[l][o[i]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s[l]=i(t),n=new s,s[l]=null,n[a]=t):n=u(),void 0===e?n:r(n,e)}},a15a:function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("9850"),a=n("e86a"),s=a.calculateTextPosition,l=r.extendShape({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=e.width/2,o=e.height/2;t.moveTo(n,i-o),t.lineTo(n+r,i+o),t.lineTo(n-r,i+o),t.closePath()}}),u=r.extendShape({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=e.width/2,o=e.height/2;t.moveTo(n,i-o),t.lineTo(n+r,i),t.lineTo(n,i+o),t.lineTo(n-r,i),t.closePath()}}),c=r.extendShape({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var n=e.x,i=e.y,r=e.width/5*3,o=Math.max(r,e.height),a=r/2,s=a*a/(o-a),l=i-o+a+s,u=Math.asin(s/a),c=Math.cos(u)*a,h=Math.sin(u),d=Math.cos(u),f=.6*a,p=.7*a;t.moveTo(n-c,l+s),t.arc(n,l,a,Math.PI-u,2*Math.PI+u),t.bezierCurveTo(n+c-h*f,l+s+d*f,n,i-p,n,i),t.bezierCurveTo(n,i-p,n-c+h*f,l+s+d*f,n-c,l+s),t.closePath()}}),h=r.extendShape({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var n=e.height,i=e.width,r=e.x,o=e.y,a=i/3*2;t.moveTo(r,o),t.lineTo(r+a,o+n),t.lineTo(r,o+n/4*3),t.lineTo(r-a,o+n),t.lineTo(r,o),t.closePath()}}),d={line:r.Line,rect:r.Rect,roundRect:r.Rect,square:r.Rect,circle:r.Circle,diamond:u,pin:c,arrow:h,triangle:l},f={line:function(t,e,n,i,r){r.x1=t,r.y1=e+i/2,r.x2=t+n,r.y2=e+i/2},rect:function(t,e,n,i,r){r.x=t,r.y=e,r.width=n,r.height=i},roundRect:function(t,e,n,i,r){r.x=t,r.y=e,r.width=n,r.height=i,r.r=Math.min(n,i)/4},square:function(t,e,n,i,r){var o=Math.min(n,i);r.x=t,r.y=e,r.width=o,r.height=o},circle:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.r=Math.min(n,i)/2},diamond:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.width=n,r.height=i},pin:function(t,e,n,i,r){r.x=t+n/2,r.y=e+i/2,r.width=n,r.height=i},arrow:function(t,e,n,i,r){r.x=t+n/2,r.y=e+i/2,r.width=n,r.height=i},triangle:function(t,e,n,i,r){r.cx=t+n/2,r.cy=e+i/2,r.width=n,r.height=i}},p={};i.each(d,(function(t,e){p[e]=new t}));var g=r.extendShape({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},calculateTextPosition:function(t,e,n){var i=s(t,e,n),r=this.shape;return r&&"pin"===r.symbolType&&"inside"===e.textPosition&&(i.y=n.y+.4*n.height),i},buildPath:function(t,e,n){var i=e.symbolType;if("none"!==i){var r=p[i];r||(i="rect",r=p[i]),f[i](e.x,e.y,e.width,e.height,r.shape),r.buildPath(t,r.shape,n)}}});function v(t,e){if("image"!==this.type){var n=this.style,i=this.shape;i&&"line"===i.symbolType?n.stroke=t:this.__isEmptyBrush?(n.stroke=t,n.fill=e||"#fff"):(n.fill&&(n.fill=t),n.stroke&&(n.stroke=t)),this.dirty(!1)}}function m(t,e,n,i,a,s,l){var u,c=0===t.indexOf("empty");return c&&(t=t.substr(5,1).toLowerCase()+t.substr(6)),u=0===t.indexOf("image://")?r.makeImage(t.slice(8),new o(e,n,i,a),l?"center":"cover"):0===t.indexOf("path://")?r.makePath(t.slice(7),{},new o(e,n,i,a),l?"center":"cover"):new g({shape:{symbolType:t,x:e,y:n,width:i,height:a}}),u.__isEmptyBrush=c,u.setColor=v,u.setColor(s),u}e.createSymbol=m},a15e:function(t,e,n){"use strict";n.r(e);var i=n("41b2"),r=n.n(i),o=n("1098"),a=n.n(o),s=/%[sdj%]/g,l=function(){};function u(){for(var t=arguments.length,e=Array(t),n=0;n=o)return t;switch(t){case"%s":return String(e[i++]);case"%d":return Number(e[i++]);case"%j":try{return JSON.stringify(e[i++])}catch(n){return"[Circular]"}break;default:return t}})),l=e[i];i()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},S={integer:function(t){return S.number(t)&&parseInt(t,10)===t},float:function(t){return S.number(t)&&!S.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch(e){return!1}},date:function(t){return"function"===typeof t.getTime&&"function"===typeof t.getMonth&&"function"===typeof t.getYear},number:function(t){return!isNaN(t)&&"number"===typeof t},object:function(t){return"object"===("undefined"===typeof t?"undefined":a()(t))&&!S.array(t)},method:function(t){return"function"===typeof t},email:function(t){return"string"===typeof t&&!!t.match(w.email)&&t.length<255},url:function(t){return"string"===typeof t&&!!t.match(w.url)},hex:function(t){return"string"===typeof t&&!!t.match(w.hex)}};function M(t,e,n,i,r){if(t.required&&void 0===e)x(t,e,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;o.indexOf(s)>-1?S[s](e)||i.push(u(r.messages.types[s],t.fullField,t.type)):s&&("undefined"===typeof e?"undefined":a()(e))!==t.type&&i.push(u(r.messages.types[s],t.fullField,t.type))}}var A=M;function T(t,e,n,i,r){var o="number"===typeof t.len,a="number"===typeof t.min,s="number"===typeof t.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=e,h=null,d="number"===typeof e,f="string"===typeof e,p=Array.isArray(e);if(d?h="number":f?h="string":p&&(h="array"),!h)return!1;p&&(c=e.length),f&&(c=e.replace(l,"_").length),o?c!==t.len&&i.push(u(r.messages[h].len,t.fullField,t.len)):a&&!s&&ct.max?i.push(u(r.messages[h].max,t.fullField,t.max)):a&&s&&(ct.max)&&i.push(u(r.messages[h].range,t.fullField,t.min,t.max))}var I=T,C="enum";function D(t,e,n,i,r){t[C]=Array.isArray(t[C])?t[C]:[],-1===t[C].indexOf(e)&&i.push(u(r.messages[C],t.fullField,t[C].join(", ")))}var k=D;function L(t,e,n,i,r){if(t.pattern)if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(e)||i.push(u(r.messages.pattern.mismatch,t.fullField,e,t.pattern));else if("string"===typeof t.pattern){var o=new RegExp(t.pattern);o.test(e)||i.push(u(r.messages.pattern.mismatch,t.fullField,e,t.pattern))}}var P=L,O={required:x,whitespace:b,type:A,range:I,enum:k,pattern:P};function E(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e,"string")&&!t.required)return n();O.required(t,e,i,o,r,"string"),h(e,"string")||(O.type(t,e,i,o,r),O.range(t,e,i,o,r),O.pattern(t,e,i,o,r),!0===t.whitespace&&O.whitespace(t,e,i,o,r))}n(o)}var R=E;function N(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&O.type(t,e,i,o,r)}n(o)}var z=N;function B(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&(O.type(t,e,i,o,r),O.range(t,e,i,o,r))}n(o)}var V=B;function F(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&O.type(t,e,i,o,r)}n(o)}var H=F;function G(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),h(e)||O.type(t,e,i,o,r)}n(o)}var j=G;function W(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&(O.type(t,e,i,o,r),O.range(t,e,i,o,r))}n(o)}var U=W;function q(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&(O.type(t,e,i,o,r),O.range(t,e,i,o,r))}n(o)}var $=q;function Z(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e,"array")&&!t.required)return n();O.required(t,e,i,o,r,"array"),h(e,"array")||(O.type(t,e,i,o,r),O.range(t,e,i,o,r))}n(o)}var Y=Z;function X(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),void 0!==e&&O.type(t,e,i,o,r)}n(o)}var K=X,J="enum";function Q(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();O.required(t,e,i,o,r),e&&O[J](t,e,i,o,r)}n(o)}var tt=Q;function et(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e,"string")&&!t.required)return n();O.required(t,e,i,o,r),h(e,"string")||O.pattern(t,e,i,o,r)}n(o)}var nt=et;function it(t,e,n,i,r){var o=[],a=t.required||!t.required&&i.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();if(O.required(t,e,i,o,r),!h(e)){var s=void 0;s="number"===typeof e?new Date(e):e,O.type(t,s,i,o,r),s&&O.range(t,s.getTime(),i,o,r)}}n(o)}var rt=it;function ot(t,e,n,i,r){var o=[],s=Array.isArray(e)?"array":"undefined"===typeof e?"undefined":a()(e);O.required(t,e,i,o,r,s),n(o)}var at=ot;function st(t,e,n,i,r){var o=t.type,a=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(h(e,o)&&!t.required)return n();O.required(t,e,i,a,r,o),h(e,o)||O.type(t,e,i,a,r)}n(a)}var lt=st,ut={string:R,method:z,number:V,boolean:H,regexp:j,integer:U,float:$,array:Y,object:K,enum:tt,pattern:nt,date:rt,url:lt,hex:lt,email:lt,required:at};function ct(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var ht=ct();function dt(t){this.rules=null,this._messages=ht,this.define(t)}dt.prototype={messages:function(t){return t&&(this._messages=m(ct(),t)),this._messages},define:function(t){if(!t)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof t?"undefined":a()(t))||Array.isArray(t))throw new Error("Rules must be an object");this.rules={};var e=void 0,n=void 0;for(e in t)t.hasOwnProperty(e)&&(n=t[e],this.rules[e]=Array.isArray(n)?n:[n])},validate:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments[2],o=t,s=n,c=i;if("function"===typeof s&&(c=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var h=this.messages();h===ht&&(h=ct()),m(h,s.messages),s.messages=h}else s.messages=this.messages();var d=void 0,f=void 0,p={},y=s.keys||Object.keys(this.rules);y.forEach((function(n){d=e.rules[n],f=o[n],d.forEach((function(i){var a=i;"function"===typeof a.transform&&(o===t&&(o=r()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:r()({},a),a.validator=e.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=e.getType(a),a.validator&&(p[n]=p[n]||[],p[n].push({rule:a,value:f,source:o,field:n}))}))}));var x={};g(p,s,(function(t,e){var n=t.rule,i=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(t,e){return r()({},e,{fullField:n.fullField+"."+t})}function c(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],c=a;if(Array.isArray(c)||(c=[c]),c.length&&l("async-validator:",c),c.length&&n.message&&(c=[].concat(n.message)),c=c.map(v(n)),s.first&&c.length)return x[n.field]=1,e(c);if(i){if(n.required&&!t.value)return c=n.message?[].concat(n.message).map(v(n)):s.error?[s.error(n,u(s.messages.required,n.field))]:[],e(c);var h={};if(n.defaultField)for(var d in t.value)t.value.hasOwnProperty(d)&&(h[d]=n.defaultField);for(var f in h=r()({},h,t.rule.fields),h)if(h.hasOwnProperty(f)){var p=Array.isArray(h[f])?h[f]:[h[f]];h[f]=p.map(o.bind(null,f))}var g=new dt(h);g.messages(s.messages),t.rule.options&&(t.rule.options.messages=s.messages,t.rule.options.error=s.error),g.validate(t.value,t.rule.options||s,(function(t){e(t&&t.length?c.concat(t):t)}))}else e(c)}i=i&&(n.required||!n.required&&t.value),n.field=t.field;var h=n.validator(n,t.value,c,t.source,s);h&&h.then&&h.then((function(){return c()}),(function(t){return c(t)}))}),(function(t){_(t)}))}else c&&c();function _(t){var e=void 0,n=void 0,i=[],r={};function o(t){Array.isArray(t)?i=i.concat.apply(i,t):i.push(t)}for(e=0;ex;x++)if(v=e?y(a(p=t[x])[0],p[1]):y(t[x]),v===u||v===c)return v}else for(g=m.call(t);!(p=g.next()).done;)if(v=r(g,y,p.value,e),v===u||v===c)return v};e.BREAK=u,e.RETURN=c},a25f:function(t,e,n){var i=n("7726"),r=i.navigator;t.exports=r&&r.userAgent||""},a38d:function(t,e,n){var i=n("2306"),r=n("392f"),o=n("9680"),a=n("68ab"),s=i.extendShape({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var n=e.segs,i=e.curveness;if(e.polyline)for(var r=0;r0){t.moveTo(n[r++],n[r++]);for(var a=1;a0){var h=(s+u)/2-(l-c)*i,d=(l+c)/2-(u-s)*i;t.quadraticCurveTo(h,d,u,c)}else t.lineTo(u,c)}},findDataIndex:function(t,e){var n=this.shape,i=n.segs,r=n.curveness;if(n.polyline)for(var s=0,l=0;l0)for(var c=i[l++],h=i[l++],d=1;d0){var g=(c+f)/2-(h-p)*r,v=(h+p)/2-(f-c)*r;if(a.containStroke(c,h,g,v,f,p))return s}else if(o.containStroke(c,h,f,p))return s;s++}return-1}});function l(){this.group=new i.Group}var u=l.prototype;u.isPersistent=function(){return!this._incremental},u.updateData=function(t){this.group.removeAll();var e=new s({rectHover:!0,cursor:"default"});e.setShape({segs:t.getLayout("linesPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},u.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>5e5?(this._incremental||(this._incremental=new r({silent:!0})),this.group.add(this._incremental)):this._incremental=null},u.incrementalUpdate=function(t,e){var n=new s;n.setShape({segs:e.getLayout("linesPoints")}),this._setCommon(n,e,!!this._incremental),this._incremental?this._incremental.addDisplayable(n,!0):(n.rectHover=!0,n.cursor="default",n.__startIndex=t.start,this.group.add(n))},u.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},u._setCommon=function(t,e,n){var i=e.hostModel;t.setShape({polyline:i.get("polyline"),curveness:i.get("lineStyle.curveness")}),t.useStyle(i.getModel("lineStyle").getLineStyle()),t.style.strokeNoScale=!0;var r=e.getVisual("color");r&&t.setStyle("stroke",r),t.setStyle("fill"),n||(t.seriesIndex=i.seriesIndex,t.on("mousemove",(function(e){t.dataIndex=null;var n=t.findDataIndex(e.offsetX,e.offsetY);n>0&&(t.dataIndex=n+t.__startIndex)})))},u._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()};var c=l;t.exports=c},a3c3:function(t,e,n){var i=n("63b6");i(i.S+i.F,"Object",{assign:n("9306")})},a3de:function(t,e,n){"use strict";var i=!("undefined"===typeof window||!window.document||!window.document.createElement),r={canUseDOM:i,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:i&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:i&&!!window.screen,isInWorker:!i};t.exports=r},a481:function(t,e,n){"use strict";var i=n("cb7c"),r=n("4bf8"),o=n("9def"),a=n("4588"),s=n("0390"),l=n("5f1b"),u=Math.max,c=Math.min,h=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,f=/\$([$&`']|\d\d?)/g,p=function(t){return void 0===t?t:String(t)};n("214f")("replace",2,(function(t,e,n,g){return[function(i,r){var o=t(this),a=void 0==i?void 0:i[e];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},function(t,e){var r=g(n,t,this,e);if(r.done)return r.value;var h=i(t),d=String(this),f="function"===typeof e;f||(e=String(e));var m=h.global;if(m){var y=h.unicode;h.lastIndex=0}var x=[];while(1){var _=l(h,d);if(null===_)break;if(x.push(_),!m)break;var b=String(_[0]);""===b&&(h.lastIndex=s(d,o(h.lastIndex),y))}for(var w="",S=0,M=0;M=S&&(w+=d.slice(S,T)+L,S=T+A.length)}return w+d.slice(S)}];function v(t,e,i,o,a,s){var l=i+t.length,u=o.length,c=f;return void 0!==a&&(a=r(a),c=d),n.call(s,c,(function(n,r){var s;switch(r.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,i);case"'":return e.slice(l);case"<":s=a[r.slice(1,-1)];break;default:var c=+r;if(0===c)return n;if(c>u){var d=h(c/10);return 0===d?n:d<=u?void 0===o[d-1]?r.charAt(1):o[d-1]+r.charAt(1):n}s=o[c-1]}return void 0===s?"":s}))}}))},a4b1:function(t,e,n){var i=n("3eba");n("00ba"),n("4d62");var r=n("98e7"),o=n("24b9"),a=n("d3f47");i.registerVisual(r("funnel")),i.registerLayout(o),i.registerProcessor(a("funnel"))},a4bb:function(t,e,n){t.exports=n("8aae")},a4fe:function(t,e,n){var i=n("3eba"),r="\0_ec_interaction_mutex";function o(t,e,n){var i=l(t);i[e]=n}function a(t,e,n){var i=l(t),r=i[e];r===n&&(i[e]=null)}function s(t,e){return!!l(t)[e]}function l(t){return t[r]||(t[r]={})}i.registerAction({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},(function(){})),e.take=o,e.release=a,e.isTaken=s},a5b8:function(t,e,n){"use strict";var i=n("d8e8");function r(t){var e,n;this.promise=new t((function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i})),this.resolve=i(e),this.reject=i(n)}t.exports.f=function(t){return new r(t)}},a5d8:function(t,e,n){},a666:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2306"),a=n("0c41"),s="__seriesMapHighDown",l="__seriesMapCallKey",u=i.extendChartView({type:"map",render:function(t,e,n,i){if(!i||"mapToggleSelect"!==i.type||i.from!==this.uid){var r=this.group;if(r.removeAll(),!t.getHostGeoModel()){if(i&&"geoRoam"===i.type&&"series"===i.componentType&&i.seriesId===t.id){o=this._mapDraw;o&&r.add(o.group)}else if(t.needsDrawMap){var o=this._mapDraw||new a(n,!0);r.add(o.group),o.draw(t,e,n,this,i),this._mapDraw=o}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,n)}}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,n){var i=t.originalData,a=this.group;i.each(i.mapDimension("value"),(function(e,n){if(!isNaN(e)){var u=i.getItemLayout(n);if(u&&u.point){var d=u.point,f=u.offset,p=new o.Circle({style:{fill:t.getData().getVisual("color")},shape:{cx:d[0]+9*f,cy:d[1],r:3},silent:!0,z2:8+(f?0:o.Z2_EMPHASIS_LIFT+1)});if(!f){var g=t.mainSeries.getData(),v=i.getName(n),m=g.indexOfName(v),y=i.getItemModel(n),x=y.getModel("label"),_=y.getModel("emphasis.label"),b=g.getItemGraphicEl(m),w=r.retrieve2(t.getFormattedLabel(m,"normal"),v),S=r.retrieve2(t.getFormattedLabel(m,"emphasis"),w),M=b[s],A=Math.random();if(!M){M=b[s]={};var T=r.curry(c,!0),I=r.curry(c,!1);b.on("mouseover",T).on("mouseout",I).on("emphasis",T).on("normal",I)}b[l]=A,r.extend(M,{recordVersion:A,circle:p,labelModel:x,hoverLabelModel:_,emphasisText:S,normalText:w}),h(M,!1)}a.add(p)}}}))}});function c(t){var e=this[s];e&&e.recordVersion===this[l]&&h(e,t)}function h(t,e){var n=t.circle,i=t.labelModel,r=t.hoverLabelModel,a=t.emphasisText,s=t.normalText;e?(n.style.extendFrom(o.setTextStyle({},r,{text:r.get("show")?a:null},{isRectText:!0,useInsideStyle:!1},!0)),n.__mapOriginalZ2=n.z2,n.z2+=o.Z2_EMPHASIS_LIFT):(o.setTextStyle(n.style,i,{text:i.get("show")?s:null,textPosition:i.getShallow("position")||"bottom"},{isRectText:!0,useInsideStyle:!1}),n.dirty(!1),null!=n.__mapOriginalZ2&&(n.z2=n.__mapOriginalZ2,n.__mapOriginalZ2=null))}t.exports=u},a73c:function(t,e,n){var i=n("6d8b"),r=i.retrieve2,o=i.retrieve3,a=i.each,s=i.normalizeCssArray,l=i.isString,u=i.isObject,c=n("e86a"),h=n("5693"),d=n("5e76"),f=n("7d6d"),p=n("82eb"),g=p.ContextCachedBy,v=p.WILL_BE_RESTORED,m=c.DEFAULT_FONT,y={left:1,right:1,center:1},x={top:1,bottom:1,middle:1},_=[["textShadowBlur","shadowBlur",0],["textShadowOffsetX","shadowOffsetX",0],["textShadowOffsetY","shadowOffsetY",0],["textShadowColor","shadowColor","transparent"]],b={},w={};function S(t){return M(t),a(t.rich,M),t}function M(t){if(t){t.font=c.makeFont(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||y[e]?e:"left";var n=t.textVerticalAlign||t.textBaseline;"center"===n&&(n="middle"),t.textVerticalAlign=null==n||x[n]?n:"top";var i=t.textPadding;i&&(t.textPadding=s(t.textPadding))}}function A(t,e,n,i,r,o){i.rich?I(t,e,n,i,r,o):T(t,e,n,i,r,o)}function T(t,e,n,i,r,o){"use strict";var a,s=L(i),l=!1,u=e.__attrCachedBy===g.PLAIN_TEXT;o!==v?(o&&(a=o.style,l=!s&&u&&a),e.__attrCachedBy=s?g.NONE:g.PLAIN_TEXT):u&&(e.__attrCachedBy=g.NONE);var h=i.font||m;l&&h===(a.font||m)||(e.font=h);var d=t.__computedFont;t.__styleFont!==h&&(t.__styleFont=h,d=t.__computedFont=e.font);var p=i.textPadding,y=i.textLineHeight,x=t.__textCotentBlock;x&&!t.__dirtyText||(x=t.__textCotentBlock=c.parsePlainText(n,d,p,y,i.truncate));var b=x.outerHeight,S=x.lines,M=x.lineHeight,A=E(w,t,i,r),T=A.baseX,I=A.baseY,C=A.textAlign||"left",k=A.textVerticalAlign;D(e,i,r,T,I);var O=c.adjustTextY(I,b,k),R=T,B=O;if(s||p){var F=c.getWidth(n,d),H=F;p&&(H+=p[1]+p[3]);var G=c.adjustTextX(T,H,C);s&&P(t,e,i,G,O,H,b),p&&(R=V(T,C,p),B+=p[0])}e.textAlign=C,e.textBaseline="middle",e.globalAlpha=i.opacity||1;for(var j=0;j<_.length;j++){var W=_[j],U=W[0],q=W[1],$=i[U];l&&$===a[U]||(e[q]=f(e,q,$||W[2]))}B+=M/2;var Z=i.textStrokeWidth,Y=l?a.textStrokeWidth:null,X=!l||Z!==Y,K=!l||X||i.textStroke!==a.textStroke,J=N(i.textStroke,Z),Q=z(i.textFill);if(J&&(X&&(e.lineWidth=Z),K&&(e.strokeStyle=J)),Q&&(l&&i.textFill===a.textFill||(e.fillStyle=Q)),1===S.length)J&&e.strokeText(S[0],R,B),Q&&e.fillText(S[0],R,B);else for(j=0;j=0&&(b=M[N],"right"===b.textAlign))k(t,e,b,i,T,y,R,"right"),I-=b.width,R-=b.width,N--;O+=(o-(O-m)-(x-R)-I)/2;while(C<=N)b=M[C],k(t,e,b,i,T,y,O+b.width/2,"center"),O+=b.width,C++;y+=T}}function D(t,e,n,i,r){if(n&&e.textRotation){var o=e.textOrigin;"center"===o?(i=n.width/2+n.x,r=n.height/2+n.y):o&&(i=o[0]+n.x,r=o[1]+n.y),t.translate(i,r),t.rotate(-e.textRotation),t.translate(-i,-r)}}function k(t,e,n,i,a,s,l,u){var c=i.rich[n.styleName]||{};c.text=n.text;var h=n.textVerticalAlign,d=s+a/2;"top"===h?d=s+n.height/2:"bottom"===h&&(d=s+a-n.height/2),!n.isLineHolder&&L(c)&&P(t,e,c,"right"===u?l-n.width:"center"===u?l-n.width/2:l,d-n.height/2,n.width,n.height);var f=n.textPadding;f&&(l=V(l,u,f),d-=n.height/2-f[2]-n.textHeight/2),R(e,"shadowBlur",o(c.textShadowBlur,i.textShadowBlur,0)),R(e,"shadowColor",c.textShadowColor||i.textShadowColor||"transparent"),R(e,"shadowOffsetX",o(c.textShadowOffsetX,i.textShadowOffsetX,0)),R(e,"shadowOffsetY",o(c.textShadowOffsetY,i.textShadowOffsetY,0)),R(e,"textAlign",u),R(e,"textBaseline","middle"),R(e,"font",n.font||m);var p=N(c.textStroke||i.textStroke,v),g=z(c.textFill||i.textFill),v=r(c.textStrokeWidth,i.textStrokeWidth);p&&(R(e,"lineWidth",v),R(e,"strokeStyle",p),e.strokeText(n.text,l,d)),g&&(R(e,"fillStyle",g),e.fillText(n.text,l,d))}function L(t){return!!(t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor)}function P(t,e,n,i,r,o,a){var s=n.textBackgroundColor,c=n.textBorderWidth,f=n.textBorderColor,p=l(s);if(R(e,"shadowBlur",n.textBoxShadowBlur||0),R(e,"shadowColor",n.textBoxShadowColor||"transparent"),R(e,"shadowOffsetX",n.textBoxShadowOffsetX||0),R(e,"shadowOffsetY",n.textBoxShadowOffsetY||0),p||c&&f){e.beginPath();var g=n.textBorderRadius;g?h.buildPath(e,{x:i,y:r,width:o,height:a,r:g}):e.rect(i,r,o,a),e.closePath()}if(p)if(R(e,"fillStyle",s),null!=n.fillOpacity){var v=e.globalAlpha;e.globalAlpha=n.fillOpacity*n.opacity,e.fill(),e.globalAlpha=v}else e.fill();else if(u(s)){var m=s.image;m=d.createOrUpdateImage(m,null,t,O,s),m&&d.isImageReady(m)&&e.drawImage(m,i,r,o,a)}if(c&&f)if(R(e,"lineWidth",c),R(e,"strokeStyle",f),null!=n.strokeOpacity){v=e.globalAlpha;e.globalAlpha=n.strokeOpacity*n.opacity,e.stroke(),e.globalAlpha=v}else e.stroke()}function O(t,e){e.image=t}function E(t,e,n,i){var r=n.x||0,o=n.y||0,a=n.textAlign,s=n.textVerticalAlign;if(i){var l=n.textPosition;if(l instanceof Array)r=i.x+B(l[0],i.width),o=i.y+B(l[1],i.height);else{var u=e&&e.calculateTextPosition?e.calculateTextPosition(b,n,i):c.calculateTextPosition(b,n,i);r=u.x,o=u.y,a=a||u.textAlign,s=s||u.textVerticalAlign}var h=n.textOffset;h&&(r+=h[0],o+=h[1])}return t=t||{},t.baseX=r,t.baseY=o,t.textAlign=a,t.textVerticalAlign=s,t}function R(t,e,n){return t[e]=f(t,e,n),t[e]}function N(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function z(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function B(t,e){return"string"===typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function V(t,e,n){return"right"===e?t-n[1]:"center"===e?t+n[3]/2-n[1]/2:t+n[3]}function F(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}e.normalizeTextStyle=S,e.renderText=A,e.getBoxPosition=E,e.getStroke=N,e.getFill=z,e.parsePercent=B,e.needDrawText=F},a745:function(t,e,n){t.exports=n("f410")},a753:function(t,e,n){var i=n("1f0e"),r=n("2306"),o=n("e887"),a=n("3842"),s=a.parsePercent,l=a.round,u=a.linearMap;function c(t,e){var n=t.get("center"),i=e.getWidth(),r=e.getHeight(),o=Math.min(i,r),a=s(n[0],e.getWidth()),l=s(n[1],e.getHeight()),u=s(t.get("radius"),o/2);return{cx:a,cy:l,r:u}}function h(t,e){return e&&("string"===typeof e?t=e.replace("{value}",null!=t?t:""):"function"===typeof e&&(t=e(t))),t}var d=2*Math.PI,f=o.extend({type:"gauge",render:function(t,e,n){this.group.removeAll();var i=t.get("axisLine.lineStyle.color"),r=c(t,n);this._renderMain(t,e,n,i,r)},dispose:function(){},_renderMain:function(t,e,n,i,o){for(var a=this.group,s=t.getModel("axisLine"),l=s.getModel("lineStyle"),u=t.get("clockwise"),c=-t.get("startAngle")/180*Math.PI,h=-t.get("endAngle")/180*Math.PI,f=(h-c)%d,p=c,g=l.get("width"),v=s.get("show"),m=0;v&&m=t&&(0===e?0:i[e-1][0]).4?"bottom":"middle",textAlign:L<-.4?"left":L>.4?"right":"center"},{autoColor:N}),silent:!0}))}if(x.get("show")&&k!==b){for(var z=0;z<=w;z++){L=Math.cos(A),P=Math.sin(A);var B=new r.Line({shape:{x1:L*g+f,y1:P*g+p,x2:L*(g-M)+f,y2:P*(g-M)+p},silent:!0,style:D});"auto"===D.stroke&&B.setStyle({stroke:i((k+z/w)/b)}),d.add(B),A+=I}A-=I}else A+=T}},_renderPointer:function(t,e,n,o,a,l,c,h){var d=this.group,f=this._data;if(t.get("pointer.show")){var p=[+t.get("min"),+t.get("max")],g=[l,c],v=t.getData(),m=v.mapDimension("value");v.diff(f).add((function(e){var n=new i({shape:{angle:l}});r.initProps(n,{shape:{angle:u(v.get(m,e),p,g,!0)}},t),d.add(n),v.setItemGraphicEl(e,n)})).update((function(e,n){var i=f.getItemGraphicEl(n);r.updateProps(i,{shape:{angle:u(v.get(m,e),p,g,!0)}},t),d.add(i),v.setItemGraphicEl(e,i)})).remove((function(t){var e=f.getItemGraphicEl(t);d.remove(e)})).execute(),v.eachItemGraphicEl((function(t,e){var n=v.getItemModel(e),i=n.getModel("pointer");t.setShape({x:a.cx,y:a.cy,width:s(i.get("width"),a.r),r:s(i.get("length"),a.r)}),t.useStyle(n.getModel("itemStyle").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",o(u(v.get(m,e),p,[0,1],!0))),r.setHoverStyle(t,n.getModel("emphasis.itemStyle").getItemStyle())})),this._data=v}else f&&f.eachItemGraphicEl((function(t){d.remove(t)}))},_renderTitle:function(t,e,n,i,o){var a=t.getData(),l=a.mapDimension("value"),c=t.getModel("title");if(c.get("show")){var h=c.get("offsetCenter"),d=o.cx+s(h[0],o.r),f=o.cy+s(h[1],o.r),p=+t.get("min"),g=+t.get("max"),v=t.getData().get(l,0),m=i(u(v,[p,g],[0,1],!0));this.group.add(new r.Text({silent:!0,style:r.setTextStyle({},c,{x:d,y:f,text:a.getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:m,forceRich:!0})}))}},_renderDetail:function(t,e,n,i,o){var a=t.getModel("detail"),l=+t.get("min"),c=+t.get("max");if(a.get("show")){var d=a.get("offsetCenter"),f=o.cx+s(d[0],o.r),p=o.cy+s(d[1],o.r),g=s(a.get("width"),o.r),v=s(a.get("height"),o.r),m=t.getData(),y=m.get(m.mapDimension("value"),0),x=i(u(y,[l,c],[0,1],!0));this.group.add(new r.Text({silent:!0,style:r.setTextStyle({},a,{x:f,y:p,text:h(y,a.get("formatter")),textWidth:isNaN(g)?null:g,textHeight:isNaN(v)?null:v,textAlign:"center",textVerticalAlign:"middle"},{autoColor:x,forceRich:!0})}))}}}),p=f;t.exports=p},a78e:function(t,e,n){var i,r; -/*! - * JavaScript Cookie v2.2.0 - * https://github.com/js-cookie/js-cookie - * - * Copyright 2006, 2015 Klaus Hartl & Fagner Brack - * Released under the MIT license - */(function(o){var a=!1;if(i=o,r="function"===typeof i?i.call(e,n,e,t):i,void 0===r||(t.exports=r),a=!0,t.exports=o(),a=!0,!a){var s=window.Cookies,l=window.Cookies=o();l.noConflict=function(){return window.Cookies=s,l}}})((function(){function t(){for(var t=0,e={};t1){if(o=t({path:"/"},i.defaults,o),"number"===typeof o.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*o.expires),o.expires=s}o.expires=o.expires?o.expires.toUTCString():"";try{a=JSON.stringify(r),/^[\{\[]/.test(a)&&(r=a)}catch(v){}r=n.write?n.write(r,e):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape);var l="";for(var u in o)o[u]&&(l+="; "+u,!0!==o[u]&&(l+="="+o[u]));return document.cookie=e+"="+r+l}e||(a={});for(var c=document.cookie?document.cookie.split("; "):[],h=/(%[0-9A-Z]{2})+/g,d=0;d=2){var P=T[0][0],O=T[1][0],E=T[0][1]*e.opacity,R=T[1][1]*e.opacity;t.type=r,t.method="none",t.focus="100%",t.angle=a,t.color=P,t.color2=O,t.colors=C.join(","),t.opacity=R,t.opacity2=E}"radial"===r&&(t.focusposition=s.join(","))}else B(t,i,e.opacity)},H=function(t,e){e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof v||B(t,e.stroke,e.opacity)},G=function(t,e,n,i){var r="fill"===e,o=t.getElementsByTagName(e)[0];null!=n[e]&&"none"!==n[e]&&(r||!r&&n.lineWidth)?(t[r?"filled":"stroked"]="true",n[e]instanceof v&&R(t,o),o||(o=m.createNode(e)),r?F(o,n,i):H(o,n),E(t,o)):(t[r?"filled":"stroked"]="false",R(t,o))},j=[[],[],[]],W=function(t,e){var n,i,r,a,s,l,u=y.M,c=y.C,h=y.L,d=y.A,f=y.Q,p=[],g=t.data,v=t.len();for(a=0;a.01?G&&(W+=270/I):Math.abs(U-z)<1e-4?G&&WN?T-=270/I:T+=270/I:G&&Uz?M+=270/I:M-=270/I),p.push(q,x(((N-B)*O+L)*I-C),A,x(((z-V)*E+P)*I-C),A,x(((N+B)*O+L)*I-C),A,x(((z+V)*E+P)*I-C),A,x((W*O+L)*I-C),A,x((U*E+P)*I-C),A,x((M*O+L)*I-C),A,x((T*E+P)*I-C)),s=M,l=T;break;case y.R:var $=j[0],Z=j[1];$[0]=g[a++],$[1]=g[a++],Z[0]=$[0]+g[a++],Z[1]=$[1]+g[a++],e&&(o($,$,e),o(Z,Z,e)),$[0]=x($[0]*I-C),Z[0]=x(Z[0]*I-C),$[1]=x($[1]*I-C),Z[1]=x(Z[1]*I-C),p.push(" m ",$[0],A,$[1]," l ",Z[0],A,$[1]," l ",Z[0],A,Z[1]," l ",$[0],A,Z[1]);break;case y.Z:p.push(" x ")}if(n>0){p.push(i);for(var Y=0;YX&&(Y=0,Z={});var n,i=K.style;try{i.font=t,n=i.fontFamily.split(",")[0]}catch(r){}e={style:i.fontStyle||$,variant:i.fontVariant||$,weight:i.fontWeight||$,size:0|parseFloat(i.fontSize||12),family:n||"Microsoft YaHei"},Z[t]=e,Y++}return e};l.$override("measureText",(function(t,e){var n=m.doc;q||(q=n.createElement("div"),q.style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",m.doc.body.appendChild(q));try{q.style.font=e}catch(i){}return q.innerHTML="",q.appendChild(n.createTextNode(t)),{width:q.offsetWidth}}));for(var Q=new a,tt=function(t,e,n,i){var r=this.style;this.__dirty&&u.normalizeTextStyle(r,!0);var a=r.text;if(null!=a&&(a+=""),a){if(r.rich){var s=l.parseRichText(a,r);a=[];for(var c=0;cf?f=g:(p.lastTickCount=o,p.lastAutoInterval=f),f}},i.inherits(u,o);var c=u;t.exports=c},aa01:function(t,e,n){var i=n("6d8b"),r=n("4f85"),o=n("06c7"),a=n("4319"),s=n("55ac"),l=s.wrapTreePathInfo,u=r.extend({type:"series.sunburst",_viewRoot:null,getInitialData:function(t,e){var n={name:t.name,children:t.data};c(n);var r=i.map(t.levels||[],(function(t){return new a(t,this,e)}),this),s=o.createTree(n,this,l);function l(t){t.wrapMethod("getItemModel",(function(t,e){var n=s.getNodeByDataIndex(e),i=r[n.depth];return i&&(t.parentModel=i),t}))}return s.data},optionUpdated:function(){this.resetViewRoot()},getDataParams:function(t){var e=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=l(n,this),e},defaultOption:{zlevel:0,z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,percentPrecision:2,stillShowZeroSum:!0,highlightPolicy:"descendant",nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},highlight:{itemStyle:{opacity:1}},downplay:{itemStyle:{opacity:.5},label:{opacity:.6}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicOut",data:[],levels:[],sort:"desc"},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)}});function c(t){var e=0;i.each(t.children,(function(t){c(t);var n=t.value;i.isArray(n)&&(n=n[0]),e+=n}));var n=t.value;i.isArray(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),i.isArray(t.value)?t.value[0]=n:t.value=n}t.exports=u},aa3e:function(t,e,n){var i=n("6d8b");function r(t,e){return e=e||[0,0],i.map(["x","y"],(function(n,i){var r=this.getAxis(n),o=e[i],a=t[i]/2;return"category"===r.type?r.getBandWidth():Math.abs(r.dataToCoord(o-a)-r.dataToCoord(o+a))}),this)}function o(t){var e=t.grid.getRect();return{coordSys:{type:"cartesian2d",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(e){return t.dataToPoint(e)},size:i.bind(r,t)}}}t.exports=o},aa77:function(t,e,n){var i=n("5ca1"),r=n("be13"),o=n("79e5"),a=n("fdef"),s="["+a+"]",l="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),h=function(t,e,n){var r={},s=o((function(){return!!a[t]()||l[t]()!=l})),u=r[t]=s?e(d):a[t];n&&(r[n]=u),i(i.P+i.F*s,"String",r)},d=h.trim=function(t,e){return t=String(r(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};t.exports=h},aadf:function(t,e,n){var i=n("3eba"),r=n("6d8b");n("5aa9"),n("d6d9"),n("3329");var o=n("9d57"),a=o.layout,s=n("7f96");n("01ed"),i.registerLayout(r.curry(a,"pictorialBar")),i.registerVisual(s("pictorialBar","roundRect"))},aae3:function(t,e,n){var i=n("d3f4"),r=n("2d95"),o=n("2b4c")("match");t.exports=function(t){var e;return i(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==r(t))}},ab05:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2b8c"),a=n("5f14"),s=i.PRIORITY.VISUAL.COMPONENT;function l(t,e,n,i){for(var r=e.targetVisuals[i],o=a.prepareVisualTypes(r),s={color:t.getData().getVisual("color")},l=0,u=o.length;l1e4||!this._symbolDraw.isPersistent())return{update:!0};var r=a().reset(t);r.progress&&r.progress({start:0,end:i.count()},i),this._symbolDraw.updateLayout(i)},_getClipShape:function(t){var e=t.coordinateSystem,n=e&&e.getArea&&e.getArea();return t.get("clip",!0)?n:null},_updateSymbolDraw:function(t,e){var n=this._symbolDraw,i=e.pipelineContext,a=i.large;return n&&a===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=a?new o:new r,this._isLargeDraw=a,this.group.removeAll()),this.group.add(n.group),n},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},dispose:function(){}})},ac0f:function(t,e,n){var i=n("cbe5"),r=n("401b"),o=n("4a3f"),a=o.quadraticSubdivide,s=o.cubicSubdivide,l=o.quadraticAt,u=o.cubicAt,c=o.quadraticDerivativeAt,h=o.cubicDerivativeAt,d=[];function f(t,e,n){var i=t.cpx2,r=t.cpy2;return null===i||null===r?[(n?h:u)(t.x1,t.cpx1,t.cpx2,t.x2,e),(n?h:u)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(n?c:l)(t.x1,t.cpx1,t.x2,e),(n?c:l)(t.y1,t.cpy1,t.y2,e)]}var p=i.extend({type:"bezier-curve",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n=e.x1,i=e.y1,r=e.x2,o=e.y2,l=e.cpx1,u=e.cpy1,c=e.cpx2,h=e.cpy2,f=e.percent;0!==f&&(t.moveTo(n,i),null==c||null==h?(f<1&&(a(n,l,r,f,d),l=d[1],r=d[2],a(i,u,o,f,d),u=d[1],o=d[2]),t.quadraticCurveTo(l,u,r,o)):(f<1&&(s(n,l,c,r,f,d),l=d[1],c=d[2],r=d[3],s(i,u,h,o,f,d),u=d[1],h=d[2],o=d[3]),t.bezierCurveTo(l,u,c,h,r,o)))},pointAt:function(t){return f(this.shape,t,!1)},tangentAt:function(t){var e=f(this.shape,t,!0);return r.normalize(e,e)}});t.exports=p},ac6a:function(t,e,n){for(var i=n("cadf"),r=n("0d58"),o=n("2aba"),a=n("7726"),s=n("32e9"),l=n("84f2"),u=n("2b4c"),c=u("iterator"),h=u("toStringTag"),d=l.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},p=r(f),g=0;g=0&&(this.delFromStorage(t),this._roots.splice(a,1),t instanceof o&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:s};var u=l;t.exports=u},b006:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("fab2"),a=n("fc82"),s=n("f4a2"),l=n("2306"),u=["axisLine","axisTickLabel","axisName"],c=i.extendComponentView({type:"parallelAxis",init:function(t,e){c.superApply(this,"init",arguments),(this._brushController=new a(e.getZr())).on("brush",r.bind(this._onBrush,this))},render:function(t,e,n,i){if(!h(t,e,i)){this.axisModel=t,this.api=n,this.group.removeAll();var a=this._axisGroup;if(this._axisGroup=new l.Group,this.group.add(this._axisGroup),t.get("show")){var s=f(t,e),c=s.coordinateSystem,d=t.getAreaSelectStyle(),p=d.width,g=t.axis.dim,v=c.getAxisLayout(g),m=r.extend({strokeContainThreshold:p},v),y=new o(t,m);r.each(u,y.add,y),this._axisGroup.add(y.getGroup()),this._refreshBrushController(m,d,t,s,p,n);var x=i&&!1===i.animation?null:t;l.groupTransition(a,this._axisGroup,x)}}},_refreshBrushController:function(t,e,n,i,r,o){var a=n.axis.getExtent(),u=a[1]-a[0],c=Math.min(30,.1*Math.abs(u)),h=l.BoundingRect.create({x:a[0],y:-r/2,width:u,height:r});h.x-=c,h.width+=2*c,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,position:t.position}).setPanels([{panelId:"pl",clipPath:s.makeRectPanelClipPath(h),isTargetByCursor:s.makeRectIsTargetByCursor(h,o,i),getLinearBrushOtherExtent:s.makeLinearBrushOtherExtent(h,0)}]).enableBrush({brushType:"lineX",brushStyle:e,removeOnClick:!0}).updateCovers(d(n))},_onBrush:function(t,e){var n=this.axisModel,i=n.axis,o=r.map(t,(function(t){return[i.coordToData(t.range[0],!0),i.coordToData(t.range[1],!0)]}));(!n.option.realtime===e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:n.id,intervals:o})},dispose:function(){this._brushController.dispose()}});function h(t,e,n){return n&&"axisAreaSelect"===n.type&&e.findComponents({mainType:"parallelAxis",query:n})[0]===t}function d(t){var e=t.axis;return r.map(t.activeIntervals,(function(t){return{brushType:"lineX",panelId:"pl",range:[e.dataToCoord(t[0],!0),e.dataToCoord(t[1],!0)]}}))}function f(t,e){return e.getComponent("parallel",t.get("parallelIndex"))}var p=c;t.exports=p},b0af:function(t,e,n){var i=n("2306"),r=n("3842"),o=r.round;function a(t,e,n){var r=t.getArea(),o=t.getBaseAxis().isHorizontal(),a=r.x,s=r.y,l=r.width,u=r.height,c=n.get("lineStyle.width")||2;a-=c/2,s-=c/2,l+=c,u+=c,a=Math.floor(a),l=Math.round(l);var h=new i.Rect({shape:{x:a,y:s,width:l,height:u}});return e&&(h.shape[o?"width":"height"]=0,i.initProps(h,{shape:{width:l,height:u}},n)),h}function s(t,e,n){var r=t.getArea(),a=new i.Sector({shape:{cx:o(t.cx,1),cy:o(t.cy,1),r0:o(r.r0,1),r:o(r.r,1),startAngle:r.startAngle,endAngle:r.endAngle,clockwise:r.clockwise}});return e&&(a.shape.endAngle=r.startAngle,i.initProps(a,{shape:{endAngle:r.endAngle}},n)),a}function l(t,e,n){return t?"polar"===t.type?s(t,e,n):"cartesian2d"===t.type?a(t,e,n):null:null}e.createGridClipPath=a,e.createPolarClipPath=s,e.createClipPath=l},b0c5:function(t,e,n){"use strict";var i=n("520a");n("5ca1")({target:"RegExp",proto:!0,forced:i!==/./.exec},{exec:i})},b0dc:function(t,e,n){var i=n("e4ae");t.exports=function(t,e,n,r){try{return r?e(i(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&i(o.call(t)),a}}},b11c:function(t,e,n){n("8ec5"),n("db9e"),n("4e9f"),n("d3a0"),n("767c"),n("7c4d"),n("df70")},b12f:function(t,e,n){var i=n("e1fc"),r=n("8918"),o=n("625e"),a=function(){this.group=new i,this.uid=r.getUID("viewComponent")};a.prototype={constructor:a,init:function(t,e){},render:function(t,e,n,i){},dispose:function(){},filterForExposedEvent:null};var s=a.prototype;s.updateView=s.updateLayout=s.updateVisual=function(t,e,n,i){},o.enableClassExtend(a),o.enableClassManagement(a,{registerWhenExtend:!0});var l=a;t.exports=l},b16f:function(t,e,n){var i=n("4ab1"),r=n("6d8b"),o=n("4942"),a=n("41ef");function s(t,e){i.call(this,t,e,["linearGradient","radialGradient"],"__gradient_in_use__")}r.inherits(s,i),s.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var n=this;r.each(["fill","stroke"],(function(i){if(e.style[i]&&("linear"===e.style[i].type||"radial"===e.style[i].type)){var r,o=e.style[i],a=n.getDefs(!0);o._dom?(r=o._dom,a.contains(o._dom)||n.addDom(r)):r=n.add(o),n.markUsed(e);var s=r.getAttribute("id");t.setAttribute(i,"url(#"+s+")")}}))}},s.prototype.add=function(t){var e;if("linear"===t.type)e=this.createElement("linearGradient");else{if("radial"!==t.type)return o("Illegal gradient type."),null;e=this.createElement("radialGradient")}return t.id=t.id||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-gradient-"+t.id),this.updateDom(t,e),this.addDom(e),e},s.prototype.update=function(t){var e=this;i.prototype.update.call(this,t,(function(){var n=t.type,i=t._dom.tagName;"linear"===n&&"linearGradient"===i||"radial"===n&&"radialGradient"===i?e.updateDom(t,t._dom):(e.removeDom(t),e.add(t))}))},s.prototype.updateDom=function(t,e){if("linear"===t.type)e.setAttribute("x1",t.x),e.setAttribute("y1",t.y),e.setAttribute("x2",t.x2),e.setAttribute("y2",t.y2);else{if("radial"!==t.type)return void o("Illegal gradient type.");e.setAttribute("cx",t.x),e.setAttribute("cy",t.y),e.setAttribute("r",t.r)}t.global?e.setAttribute("gradientUnits","userSpaceOnUse"):e.setAttribute("gradientUnits","objectBoundingBox"),e.innerHTML="";for(var n=t.colorStops,i=0,r=n.length;i-1){var u=a.parse(l)[3],c=a.toHex(l);s.setAttribute("stop-color","#"+c),s.setAttribute("stop-opacity",u)}else s.setAttribute("stop-color",n[i].color);e.appendChild(s)}t._dom=e},s.prototype.markUsed=function(t){if(t.style){var e=t.style.fill;e&&e._dom&&i.prototype.markUsed.call(this,e._dom),e=t.style.stroke,e&&e._dom&&i.prototype.markUsed.call(this,e._dom)}};var l=s;t.exports=l},b1d4:function(t,e,n){var i=n("862d");function r(t,e){return e=e||{},i(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,encodeDefaulter:e.encodeDefaulter,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})}t.exports=r},b336:function(t,e,n){var i=n("6d8b"),r=i.each;function o(t){var e=t&&t.visualMap;i.isArray(e)||(e=e?[e]:[]),r(e,(function(t){if(t){a(t,"splitList")&&!a(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&i.isArray(e)&&r(e,(function(t){i.isObject(t)&&(a(t,"start")&&!a(t,"min")&&(t.min=t.start),a(t,"end")&&!a(t,"max")&&(t.max=t.end))}))}}))}function a(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}t.exports=o},b369:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2306"),a=n("80f0"),s=n("55ac"),l=n("f610"),u=n("4a01"),c=n("9850"),h=n("1687"),d=n("e6cd"),f=n("282b"),p=n("eda2"),g=p.windowOpen,v=r.bind,m=o.Group,y=o.Rect,x=r.each,_=3,b=["label"],w=["emphasis","label"],S=["upperLabel"],M=["emphasis","upperLabel"],A=10,T=1,I=2,C=f([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),D=function(t){var e=C(t);return e.stroke=e.fill=e.lineWidth=null,e},k=i.extendChartView({type:"treemap",init:function(t,e){this._containerGroup,this._storage=L(),this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,n,i){var o=e.findComponents({mainType:"series",subType:"treemap",query:i});if(!(r.indexOf(o,t)<0)){this.seriesModel=t,this.api=n,this.ecModel=e;var a=["treemapZoomToNode","treemapRootToNode"],l=s.retrieveTargetInfo(i,a,t),u=i&&i.type,c=t.layoutInfo,h=!this._oldTree,d=this._storage,f="treemapRootToNode"===u&&l&&d?{rootNodeGroup:d.nodeGroup[l.node.getRawIndex()],direction:i.direction}:null,p=this._giveContainerGroup(c),g=this._doRender(p,t,f);h||u&&"treemapZoomToNode"!==u&&"treemapRootToNode"!==u?g.renderFinally():this._doAnimation(p,g,t,f),this._resetController(n),this._renderBreadcrumb(t,n,l)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new m,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,n){var i=e.getData().tree,o=this._oldTree,s=L(),l=L(),u=this._storage,c=[],h=r.curry(P,e,l,u,n,s,c);f(i.root?[i.root]:[],o&&o.root?[o.root]:[],t,i===o||!o,0);var d=p(u);return this._oldTree=i,this._storage=l,{lastsForAnimation:s,willDeleteEls:d,renderFinally:g};function f(t,e,n,i,o){function s(t){return t.getId()}function l(r,a){var s=null!=r?t[r]:null,l=null!=a?e[a]:null,u=h(s,l,n,o);u&&f(s&&s.viewChildren||[],l&&l.viewChildren||[],u,i,o+1)}i?(e=t,x(t,(function(t,e){!t.isRemoved()&&l(e,e)}))):new a(e,t,s,s).add(l).update(l).remove(r.curry(l,null)).execute()}function p(t){var e=L();return t&&x(t,(function(t,n){var i=e[n];x(t,(function(t){t&&(i.push(t),t.__tmWillDelete=1)}))})),e}function g(){x(d,(function(t){x(t,(function(t){t.parent&&t.parent.remove(t)}))})),x(c,(function(t){t.invisible=!0,t.dirty()}))}},_doAnimation:function(t,e,n,i){if(n.get("animation")){var o=n.get("animationDurationUpdate"),a=n.get("animationEasing"),s=d.createWrap();x(e.willDeleteEls,(function(t,e){x(t,(function(t,n){if(!t.invisible){var r,l=t.parent;if(i&&"drillDown"===i.direction)r=l===i.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,c=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,c=l.__tmNodeHeight/2),r="nodeGroup"===e?{position:[u,c],style:{opacity:0}}:{shape:{x:u,y:c,width:0,height:0},style:{opacity:0}}}r&&s.add(t,r,o,a)}}))})),x(this._storage,(function(t,n){x(t,(function(t,i){var l=e.lastsForAnimation[n][i],u={};l&&("nodeGroup"===n?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=r.extend({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,a))}))}),this),this._state="animating",s.done(v((function(){this._state="ready",e.renderFinally()}),this)).start()}},_resetController:function(t){var e=this._controller;e||(e=this._controller=new u(t.getZr()),e.enable(this.seriesModel.get("roam")),e.on("pan",v(this._onPan,this)),e.on("zoom",v(this._onZoom,this)));var n=new c(0,0,t.getWidth(),t.getHeight());e.setPointerChecker((function(t,e,i){return n.contain(e,i)}))},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t){if("animating"!==this._state&&(Math.abs(t.dx)>_||Math.abs(t.dy)>_)){var e=this.seriesModel.getData().tree.root;if(!e)return;var n=e.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},_onZoom:function(t){var e=t.originX,n=t.originY;if("animating"!==this._state){var i=this.seriesModel.getData().tree.root;if(!i)return;var r=i.getLayout();if(!r)return;var o=new c(r.x,r.y,r.width,r.height),a=this.seriesModel.layoutInfo;e-=a.x,n-=a.y;var s=h.create();h.translate(s,s,[-e,-n]),h.scale(s,s,[t.scale,t.scale]),h.translate(s,s,[e,n]),o.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:o.x,y:o.y,width:o.width,height:o.height}})}},_initEvents:function(t){t.on("click",(function(t){if("ready"===this._state){var e=this.seriesModel.get("nodeClick",!0);if(e){var n=this.findTarget(t.offsetX,t.offsetY);if(n){var i=n.node;if(i.getLayout().isLeafRoot)this._rootToNode(n);else if("zoomToNode"===e)this._zoomToNode(n);else if("link"===e){var r=i.hostTree.data.getItemModel(i.dataIndex),o=r.get("link",!0),a=r.get("target",!0)||"blank";o&&g(o,a)}}}}}),this)},_renderBreadcrumb:function(t,e,n){function i(e){"animating"!==this._state&&(s.aboveViewRoot(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))}n||(n=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2),n||(n={node:t.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new l(this.group))).render(t,e,n.node,v(i,this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=L(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var n,i=this.seriesModel.getViewRoot();return i.eachNode({attr:"viewChildren",order:"preorder"},(function(i){var r=this._storage.background[i.getRawIndex()];if(r){var o=r.transformCoordToLocal(t,e),a=r.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:i,offsetX:o[0],offsetY:o[1]}}}),this),n}});function L(){return{nodeGroup:[],background:[],content:[]}}function P(t,e,n,i,a,s,l,u,c,h){if(l){var d=l.getLayout(),f=t.getData();if(f.setItemGraphicEl(l.dataIndex,null),d&&d.isInView){var p=d.width,g=d.height,v=d.borderWidth,x=d.invisible,_=l.getRawIndex(),A=u&&u.getRawIndex(),k=l.viewChildren,L=d.upperHeight,P=k&&k.length,E=l.getModel("itemStyle"),R=l.getModel("emphasis.itemStyle"),N=U("nodeGroup",m);if(N){if(c.add(N),N.attr("position",[d.x||0,d.y||0]),N.__tmNodeWidth=p,N.__tmNodeHeight=g,d.isAboveViewRoot)return N;var z=l.getModel(),B=U("background",y,h,T);if(B&&F(N,B,P&&d.upperLabelHeight),P)o.isHighDownDispatcher(N)&&o.setAsHighDownDispatcher(N,!1),B&&(o.setAsHighDownDispatcher(B,!0),f.setItemGraphicEl(l.dataIndex,B));else{var V=U("content",y,h,I);V&&H(N,V),B&&o.isHighDownDispatcher(B)&&o.setAsHighDownDispatcher(B,!1),o.setAsHighDownDispatcher(N,!0),f.setItemGraphicEl(l.dataIndex,N)}return N}}}function F(e,n,i){if(n.dataIndex=l.dataIndex,n.seriesIndex=t.seriesIndex,n.setShape({x:0,y:0,width:p,height:g}),x)G(n);else{n.invisible=!1;var r=l.getVisual("borderColor",!0),a=R.get("borderColor"),s=D(E);s.fill=r;var u=C(R);if(u.fill=a,i){var c=p-2*v;j(s,u,r,c,L,{x:v,y:0,width:c,height:L})}else s.text=u.text=null;n.setStyle(s),o.setElementHoverStyle(n,u)}e.add(n)}function H(e,n){n.dataIndex=l.dataIndex,n.seriesIndex=t.seriesIndex;var i=Math.max(p-2*v,0),r=Math.max(g-2*v,0);if(n.culling=!0,n.setShape({x:v,y:v,width:i,height:r}),x)G(n);else{n.invisible=!1;var a=l.getVisual("color",!0),s=D(E);s.fill=a;var u=C(R);j(s,u,a,i,r),n.setStyle(s),o.setElementHoverStyle(n,u)}e.add(n)}function G(t){!t.invisible&&s.push(t)}function j(e,n,i,a,s,u){var c=z.get("name"),h=z.getModel(u?S:b),f=z.getModel(u?M:w),p=h.getShallow("show");o.setLabelStyle(e,n,h,f,{defaultText:p?c:null,autoColor:i,isRectText:!0,labelFetcher:t,labelDataIndex:l.dataIndex,labelProp:u?"upperLabel":"label"}),W(e,u,d),W(n,u,d),u&&(e.textRect=r.clone(u)),e.truncate=p&&h.get("ellipsis")?{outerWidth:a,outerHeight:s,minChar:2}:null}function W(e,n,i){var r=e.text;if(!n&&i.isLeafRoot&&null!=r){var o=t.get("drillDownIcon",!0);e.text=o?o+" "+r:r}}function U(t,i,r,o){var s=null!=A&&n[t][A],l=a[t];return s?(n[t][A]=null,q(l,s,t)):x||(s=new i({z:O(r,o)}),s.__tmDepth=r,s.__tmStorageName=t,$(l,s,t)),e[t][_]=s}function q(t,e,n){var i=t[_]={};i.old="nodeGroup"===n?e.position.slice():r.extend({},e.shape)}function $(t,e,n){var r=t[_]={},o=l.parentNode;if(o&&(!i||"drillDown"===i.direction)){var s=0,u=0,c=a.background[o.getRawIndex()];!i&&c&&c.old&&(s=c.old.width,u=c.old.height),r.old="nodeGroup"===n?[0,u]:{x:s,y:u,width:0,height:0}}r.fadein="nodeGroup"!==n}}function O(t,e){var n=t*A+e;return(n-1)/n}t.exports=k},b39a:function(t,e,n){var i=n("d3f4");t.exports=function(t,e){if(!i(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},b419:function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("4319"),a=n("6679"),s=n("fab2"),l=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function u(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var i=t.coordToPoint([e[0],n]),r=t.coordToPoint([e[1],n]);return{x1:i[0],y1:i[1],x2:r[0],y2:r[1]}}function c(t){var e=t.getRadiusAxis();return e.inverse?0:1}function h(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coord-n.coord)-360)<1e-4&&t.pop()}var d=a.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,r=n.polar,o=r.getRadiusAxis().getExtent(),a=n.getTicksCoords(),s=n.getMinorTicksCoords(),u=i.map(n.getViewLabels(),(function(t){t=i.clone(t);return t.coord=n.dataToCoord(t.tickValue),t}));h(u),h(a),i.each(l,(function(e){!t.get(e+".show")||n.scale.isBlank()&&"axisLine"!==e||this["_"+e](t,r,a,s,o,u)}),this)}},_axisLine:function(t,e,n,i,o){var a,s=t.getModel("axisLine.lineStyle"),l=c(e),u=l?0:1;a=0===o[u]?new r.Circle({shape:{cx:e.cx,cy:e.cy,r:o[l]},style:s.getLineStyle(),z2:1,silent:!0}):new r.Ring({shape:{cx:e.cx,cy:e.cy,r:o[l],r0:o[u]},style:s.getLineStyle(),z2:1,silent:!0}),a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,n,o,a){var s=t.getModel("axisTick"),l=(s.get("inside")?-1:1)*s.get("length"),h=a[c(e)],d=i.map(n,(function(t){return new r.Line({shape:u(e,[h,h+l],t.coord)})}));this.group.add(r.mergePath(d,{style:i.defaults(s.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_minorTick:function(t,e,n,o,a){if(o.length){for(var s=t.getModel("axisTick"),l=t.getModel("minorTick"),h=(s.get("inside")?-1:1)*l.get("length"),d=a[c(e)],f=[],p=0;pm?"left":"right",_=Math.abs(v[1]-y)/g<.3?"middle":v[1]>y?"top":"bottom";h&&h[u]&&h[u].textStyle&&(a=new o(h[u].textStyle,d,d.ecModel));var b=new r.Text({silent:s.isLabelSilent(t)});this.group.add(b),r.setTextStyle(b.style,a,{x:v[0],y:v[1],textFill:a.getTextColor()||t.get("axisLine.lineStyle.color"),text:n.formattedLabel,textAlign:x,textVerticalAlign:_}),p&&(b.eventData=s.makeAxisEventDataBase(t),b.eventData.targetType="axisLabel",b.eventData.value=n.rawLabel)}),this)},_splitLine:function(t,e,n,o,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),c=l.get("color"),h=0;c=c instanceof Array?c:[c];for(var d=[],f=0;f0?r(i(t),9007199254740991):0}},b50d:function(t,e,n){"use strict";var i=n("c532"),r=n("467f"),o=n("7aac"),a=n("30b5"),s=n("83b9"),l=n("c345"),u=n("3934"),c=n("2d83"),h=n("2444"),d=n("7a77");t.exports=function(t){return new Promise((function(e,n){var f,p=t.data,g=t.headers,v=t.responseType;function m(){t.cancelToken&&t.cancelToken.unsubscribe(f),t.signal&&t.signal.removeEventListener("abort",f)}i.isFormData(p)&&delete g["Content-Type"];var y=new XMLHttpRequest;if(t.auth){var x=t.auth.username||"",_=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";g.Authorization="Basic "+btoa(x+":"+_)}var b=s(t.baseURL,t.url);function w(){if(y){var i="getAllResponseHeaders"in y?l(y.getAllResponseHeaders()):null,o=v&&"text"!==v&&"json"!==v?y.response:y.responseText,a={data:o,status:y.status,statusText:y.statusText,headers:i,config:t,request:y};r((function(t){e(t),m()}),(function(t){n(t),m()}),a),y=null}}if(y.open(t.method.toUpperCase(),a(b,t.params,t.paramsSerializer),!0),y.timeout=t.timeout,"onloadend"in y?y.onloadend=w:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(w)},y.onabort=function(){y&&(n(c("Request aborted",t,"ECONNABORTED",y)),y=null)},y.onerror=function(){n(c("Network Error",t,null,y)),y=null},y.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",i=t.transitional||h.transitional;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(c(e,t,i.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",y)),y=null},i.isStandardBrowserEnv()){var S=(t.withCredentials||u(b))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;S&&(g[t.xsrfHeaderName]=S)}"setRequestHeader"in y&&i.forEach(g,(function(t,e){"undefined"===typeof p&&"content-type"===e.toLowerCase()?delete g[e]:y.setRequestHeader(e,t)})),i.isUndefined(t.withCredentials)||(y.withCredentials=!!t.withCredentials),v&&"json"!==v&&(y.responseType=t.responseType),"function"===typeof t.onDownloadProgress&&y.addEventListener("progress",t.onDownloadProgress),"function"===typeof t.onUploadProgress&&y.upload&&y.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(f=function(t){y&&(n(!t||t&&t.type?new d("canceled"):t),y.abort(),y=null)},t.cancelToken&&t.cancelToken.subscribe(f),t.signal&&(t.signal.aborted?f():t.signal.addEventListener("abort",f))),p||(p=null),y.send(p)}))}},b5c7:function(t,e,n){var i=n("282b"),r=i([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),o={getBarItemStyle:function(t){var e=r(this,t);if(this.getBorderLineDash){var n=this.getBorderLineDash();n&&(e.lineDash=n)}return e}};t.exports=o},b719:function(t,e,n){var i=n("697e7");e.zrender=i;var r=n("1687");e.matrix=r;var o=n("401b");e.vector=o;var a=n("6d8b"),s=n("41ef");e.color=s;var l=n("2306"),u=n("3842");e.number=u;var c=n("eda2");e.format=c;var h=n("88b3");h.throttle;e.throttle=h.throttle;var d=n("1548");e.helper=d;var f=n("bda7");e.parseGeoJSON=f;var p=n("6179");e.List=p;var g=n("4319");e.Model=g;var v=n("84ce");e.Axis=v;var m=n("22d1");e.env=m;var y=f,x={};a.each(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],(function(t){x[t]=a[t]}));var _={};a.each(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","registerShape","getShapeClass","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],(function(t){_[t]=l[t]})),e.parseGeoJson=y,e.util=x,e.graphic=_},b809:function(t,e,n){var i=n("6d8b"),r=n("29a8"),o=n("2b17"),a=o.retrieveRawValue;function s(t,e){var n=e.getModel("aria");if(n.get("show"))if(n.get("description"))t.setAttribute("aria-label",n.get("description"));else{var o=0;e.eachSeries((function(t,e){++o}),this);var s,l=n.get("data.maxCount")||10,u=n.get("series.maxCount")||10,c=Math.min(o,u);if(!(o<1)){var h=v();s=h?p(g("general.withTitle"),{title:h}):g("general.withoutTitle");var d=[],f=o>1?"series.multiple.prefix":"series.single.prefix";s+=p(g(f),{seriesCount:o}),e.eachSeries((function(t,e){if(e1?"multiple":"single")+".";n=g(i?r+"withName":r+"withoutName"),n=p(n,{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:m(t.subType)});var s=t.getData();window.data=s,s.count()>l?n+=p(g("data.partialData"),{displayCnt:l}):n+=g("data.allData");for(var u=[],h=0;hl+a)break;if(t[o].y+=i,o>e&&o+1t[o].y+t[o].height)return void h(o,i/2)}h(n-1,i/2)}function h(e,n){for(var i=e;i>=0;i--){if(t[i].y-n0&&t[i].y>t[i-1].y+t[i-1].height)break}}function d(t,e,n,i,r,o){for(var a=e?Number.MAX_VALUE:0,s=0,l=t.length;s=a&&(d=a-10),!e&&d<=a&&(d=a+10),t[s].x=n+d*o,a=d}}t.sort((function(t,e){return t.y-e.y}));for(var f,p=0,g=t.length,v=[],m=[],y=0;y=n?m.push(t[y]):v.push(t[y]);d(v,!1,e,n,i,r),d(m,!0,e,n,i,r)}function l(t,e,n,r,o,a,l,c){for(var h=[],d=[],f=Number.MAX_VALUE,p=-Number.MAX_VALUE,g=0;g0?"right":"left":k>0?"left":"right"}var G=u.get("rotate");P="number"===typeof G?G*(Math.PI/180):G?k<0?-D+Math.PI:-D:0,p=!!P,a.label={x:A,y:T,position:v,height:E.height,len:S,len2:M,linePoints:I,textAlign:C,verticalAlign:"middle",rotation:P,inside:R,labelDistance:m,labelAlignTo:y,labelMargin:x,bleedMargin:_,textRect:E,text:O,font:b},R||f.push(a.label)}})),!p&&t.get("avoidLabelOverlap")&&l(f,c,h,e,n,r,s,u)}t.exports=c},bc13:function(t,e,n){var i=n("e53d"),r=i.navigator;t.exports=r&&r.userAgent||""},bc3a:function(t,e,n){t.exports=n("cee4")},bc5f:function(t,e,n){var i=n("6cb7");i.registerSubTypeDefaulter("visualMap",(function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"}))},bcaa:function(t,e,n){var i=n("cb7c"),r=n("d3f4"),o=n("a5b8");t.exports=function(t,e){if(i(t),r(e)&&e.constructor===t)return e;var n=o.f(t),a=n.resolve;return a(e),n.promise}},bcaa1:function(t,e,n){var i=n("4ab1"),r=n("6d8b");function o(t,e){i.call(this,t,e,["filter"],"__filter_in_use__","_shadowDom")}function a(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY||t.textShadowBlur||t.textShadowOffsetX||t.textShadowOffsetY)}r.inherits(o,i),o.prototype.addWithoutUpdate=function(t,e){if(e&&a(e.style)){var n;if(e._shadowDom){n=e._shadowDom;var i=this.getDefs(!0);i.contains(e._shadowDom)||this.addDom(n)}else n=this.add(e);this.markUsed(e);var r=n.getAttribute("id");t.style.filter="url(#"+r+")"}},o.prototype.add=function(t){var e=this.createElement("filter");return t._shadowDomId=t._shadowDomId||this.nextId++,e.setAttribute("id","zr"+this._zrId+"-shadow-"+t._shadowDomId),this.updateDom(t,e),this.addDom(e),e},o.prototype.update=function(t,e){var n=e.style;if(a(n)){var r=this;i.prototype.update.call(this,e,(function(){r.updateDom(e,e._shadowDom)}))}else this.remove(t,e)},o.prototype.remove=function(t,e){null!=e._shadowDomId&&(this.removeDom(t),t.style.filter="")},o.prototype.updateDom=function(t,e){var n=e.getElementsByTagName("feDropShadow");n=0===n.length?this.createElement("feDropShadow"):n[0];var i,r,o,a,s=t.style,l=t.scale&&t.scale[0]||1,u=t.scale&&t.scale[1]||1;if(s.shadowBlur||s.shadowOffsetX||s.shadowOffsetY)i=s.shadowOffsetX||0,r=s.shadowOffsetY||0,o=s.shadowBlur,a=s.shadowColor;else{if(!s.textShadowBlur)return void this.removeDom(e,s);i=s.textShadowOffsetX||0,r=s.textShadowOffsetY||0,o=s.textShadowBlur,a=s.textShadowColor}n.setAttribute("dx",i/l),n.setAttribute("dy",r/u),n.setAttribute("flood-color",a);var c=o/2/l,h=o/2/u,d=c+" "+h;n.setAttribute("stdDeviation",d),e.setAttribute("x","-100%"),e.setAttribute("y","-100%"),e.setAttribute("width",Math.ceil(o/2*200)+"%"),e.setAttribute("height",Math.ceil(o/2*200)+"%"),e.appendChild(n),t._shadowDom=e},o.prototype.markUsed=function(t){t._shadowDom&&i.prototype.markUsed.call(this,t._shadowDom)};var s=o;t.exports=s},bcbe:function(t,e,n){var i=n("6d8b"),r=n("fab2"),o=n("2306"),a=n("edb9"),s=n("6679"),l=n("58df"),u=l.rectCoordAxisBuildSplitArea,c=l.rectCoordAxisHandleRemove,h=["axisLine","axisTickLabel","axisName"],d=["splitArea","splitLine"],f=s.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(t,e,n,s){var l=this.group;l.removeAll();var u=this._axisGroup;this._axisGroup=new o.Group;var c=a.layout(t),p=new r(t,c);i.each(h,p.add,p),l.add(this._axisGroup),l.add(p.getGroup()),i.each(d,(function(e){t.get(e+".show")&&this["_"+e](t)}),this),o.groupTransition(u,this._axisGroup,t),f.superCall(this,"render",t,e,n,s)},remove:function(){c(this)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var n=t.getModel("splitLine"),i=n.getModel("lineStyle"),r=i.get("width"),a=i.get("color");a=a instanceof Array?a:[a];for(var s=t.coordinateSystem.getRect(),l=e.isHorizontal(),u=[],c=0,h=e.getTicksCoords({tickModel:n}),d=[],f=[],p=0;p-1&&(y=h[M],h=h.slice(0,M))}h&&(a.push(h),h="",p=!1);var A=""!==y&&void 0!==x&&x!==y,T="+"===S||"*"===S,I="?"===S||"*"===S,C=y||d,D=b||w;a.push({name:_||s++,prefix:y,delimiter:C,optional:I,repeat:T,partial:A,pattern:D?u(D):"[^"+l(C)+"]+?"})}}return(h||c-1;else{var m=v.repeat?"(?:"+v.pattern+")(?:"+l(v.delimiter)+"(?:"+v.pattern+"))*":v.pattern;e&&e.push(v),v.optional?v.partial?f+=l(v.prefix)+"("+m+")?":f+="(?:"+l(v.prefix)+"("+m+"))?":f+=l(v.prefix)+"("+m+")"}}return s?(o||(f+="(?:"+u+")?"),f+="$"===d?"$":"(?="+d+")"):(o||(f+="(?:"+u+"(?="+d+"))?"),p||(f+="(?="+u+"|"+d+")")),new RegExp(f,c(r))}function g(t,e,n){return t instanceof RegExp?h(t,e):Array.isArray(t)?d(t,e,n):f(t,e,n)}},bd6b:function(t,e,n){var i=n("06ad"),r=n("4942"),o=n("6d8b"),a=o.isString,s=o.isFunction,l=o.isObject,u=o.isArrayLike,c=o.indexOf,h=function(){this.animators=[]};function d(t,e,n,i,r,o,l,u){a(i)?(o=r,r=i,i=0):s(r)?(o=r,r="linear",i=0):s(i)?(o=i,i=0):s(n)?(o=n,n=500):n||(n=500),t.stopAnimation(),f(t,"",t,e,n,i,u);var c=t.animators.slice(),h=c.length;function d(){h--,h||o&&o()}h||o&&o();for(var p=0;p0&&t.animate(e,!1).when(null==r?500:r,s).delay(o||0)}function p(t,e,n,i){if(e){var r={};r[e]={},r[e][n]=i,t.attr(r)}else t.attr(n,i)}h.prototype={constructor:h,animate:function(t,e){var n,o=!1,a=this,s=this.__zr;if(t){var l=t.split("."),u=a;o="shape"===l[0];for(var h=0,d=l.length;h=0)&&t(o,i,r)}))}var p=f.prototype;function g(t){return t[0]>t[1]&&t.reverse(),t}function v(t,e){return a.parseFinder(t,e,{includeMainTypes:d})}p.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=_[t.brushType](0,n,e);t.__rangeOffset={offset:w[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}}))},p.matchOutputRanges=function(t,e,n){l(t,(function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&r.each(i.coordSyses,(function(i){var r=_[t.brushType](1,i,t.range);n(t,r.values,i,e)}))}),this)},p.setInputRanges=function(t,e){l(t,(function(t){var n=this.findTargetInfo(t,e);if(t.range=t.range||[],n&&!0!==n){t.panelId=n.panelId;var i=_[t.brushType](0,n.coordSys,t.coordRange),r=t.__rangeOffset;t.range=r?w[t.brushType](i.values,r.offset,M(i.xyMinMax,r.xyMinMax)):i.values}}),this)},p.makePanelOpts=function(t,e){return r.map(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e&&e(n),clipPath:s.makeRectPanelClipPath(i),isTargetByCursor:s.makeRectIsTargetByCursor(i,t,n.coordSysModel),getLinearBrushOtherExtent:s.makeLinearBrushOtherExtent(i)}}))},p.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&u(i.coordSyses,e.coordinateSystem)>=0},p.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=v(e,t),r=0;r=0||u(i,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:x.grid,xAxisDeclared:s[t.id],yAxisDeclared:c[t.id]})})))},geo:function(t,e){l(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:x.geo})}))}},y=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],x={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(o.getTransform(t)),e}},_={lineX:c(b,0),lineY:c(b,1),rect:function(t,e,n){var i=e[h[t]]([n[0][0],n[1][0]]),r=e[h[t]]([n[0][1],n[1][1]]),o=[g([i[0],r[0]]),g([i[1],r[1]])];return{values:o,xyMinMax:o}},polygon:function(t,e,n){var i=[[1/0,-1/0],[1/0,-1/0]],o=r.map(n,(function(n){var r=e[h[t]](n);return i[0][0]=Math.min(i[0][0],r[0]),i[1][0]=Math.min(i[1][0],r[1]),i[0][1]=Math.max(i[0][1],r[0]),i[1][1]=Math.max(i[1][1],r[1]),r}));return{values:o,xyMinMax:i}}};function b(t,e,n,i){var o=n.getAxis(["x","y"][t]),a=g(r.map([0,1],(function(t){return e?o.coordToData(o.toLocalCoord(i[t])):o.toGlobalCoord(o.dataToCoord(i[t]))}))),s=[];return s[t]=a,s[1-t]=[NaN,NaN],{values:a,xyMinMax:s}}var w={lineX:c(S,0),lineY:c(S,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return r.map(t,(function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]}))}};function S(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function M(t,e){var n=A(t),i=A(e),r=[n[0]/i[0],n[1]/i[1]];return isNaN(r[0])&&(r[0]=1),isNaN(r[1])&&(r[1]=1),r}function A(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var T=f;t.exports=T},bda7:function(t,e,n){var i=n("6d8b"),r=n("f279");function o(t){if(!t.UTF8Encoding)return t;var e=t.UTF8Scale;null==e&&(e=1024);for(var n=t.features,i=0;i>1^-(1&s),l=l>>1^-(1&l),s+=r,l+=o,r=s,o=l,i.push([s/n,l/n])}return i}function s(t,e){return o(t),i.map(i.filter(t.features,(function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0})),(function(t){var n=t.properties,o=t.geometry,a=o.coordinates,s=[];"Polygon"===o.type&&s.push({type:"polygon",exterior:a[0],interiors:a.slice(1)}),"MultiPolygon"===o.type&&i.each(a,(function(t){t[0]&&s.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})}));var l=new r(n[e||"name"],s,n.cp);return l.properties=n,l}))}t.exports=s},bdc0:function(t,e,n){var i=n("3eba");n("d2a5"),i.registerAction({type:"dragNode",event:"dragnode",update:"update"},(function(t,e){e.eachComponent({mainType:"series",subType:"sankey",query:t},(function(e){e.setNodePosition(t.dataIndex,[t.localX,t.localY])}))}))},be13:function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},bf0b:function(t,e,n){var i=n("355d"),r=n("aebd"),o=n("36c3"),a=n("1bc3"),s=n("07e3"),l=n("794b"),u=Object.getOwnPropertyDescriptor;e.f=n("8e60")?u:function(t,e){if(t=o(t),e=a(e,!0),l)try{return u(t,e)}catch(n){}if(s(t,e))return r(!i.f.call(t,e),t[e])}},bf90:function(t,e,n){var i=n("36c3"),r=n("bf0b").f;n("ce7e")("getOwnPropertyDescriptor",(function(){return function(t,e){return r(i(t),e)}}))},bf9b:function(t,e,n){var i=n("3eba"),r=n("d81e"),o=r.updateCenterAndZoom;i.registerAction({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},(function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},(function(e){var n=t.dataIndex,i=e.getData().tree,r=i.getNodeByDataIndex(n);r.isExpand=!r.isExpand}))})),i.registerAction({type:"treeRoam",event:"treeRoam",update:"none"},(function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},(function(e){var n=e.coordinateSystem,i=o(n,t);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)}))}))},c037:function(t,e,n){var i=n("3eba"),r=n("6d8b");n("f7c6"),n("1ab3");var o=n("7782"),a=n("98e7"),s=n("292e"),l=n("d3f47");o("pie",[{type:"pieToggleSelect",event:"pieselectchanged",method:"toggleSelected"},{type:"pieSelect",event:"pieselected",method:"select"},{type:"pieUnSelect",event:"pieunselected",method:"unSelect"}]),i.registerVisual(a("pie")),i.registerLayout(r.curry(s,"pie")),i.registerProcessor(l("pie"))},c098:function(t,e,n){t.exports=n("d4af")},c207:function(t,e){},c26b:function(t,e,n){"use strict";var i=n("86cc").f,r=n("2aeb"),o=n("dcbc"),a=n("9b43"),s=n("f605"),l=n("4a59"),u=n("01f9"),c=n("d53b"),h=n("7a56"),d=n("9e1e"),f=n("67ab").fastKey,p=n("b39a"),g=d?"_s":"size",v=function(t,e){var n,i=f(e);if("F"!==i)return t._i[i];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,u){var c=t((function(t,i){s(t,c,e,"_i"),t._t=e,t._i=r(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=i&&l(i,n,t[u],t)}));return o(c.prototype,{clear:function(){for(var t=p(this,e),n=t._i,i=t._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];t._f=t._l=void 0,t[g]=0},delete:function(t){var n=p(this,e),i=v(n,t);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[g]--}return!!i},forEach:function(t){p(this,e);var n,i=a(t,arguments.length>1?arguments[1]:void 0,3);while(n=n?n.n:this._f){i(n.v,n.k,this);while(n&&n.r)n=n.p}},has:function(t){return!!v(p(this,e),t)}}),d&&i(c.prototype,"size",{get:function(){return p(this,e)[g]}}),c},def:function(t,e,n){var i,r,o=v(t,e);return o?o.v=n:(t._l=o={i:r=f(e,!0),k:e,v:n,p:i=t._l,n:void 0,r:!1},t._f||(t._f=o),i&&(i.n=o),t[g]++,"F"!==r&&(t._i[r]=o)),t},getEntry:v,setStrong:function(t,e,n){u(t,e,(function(t,n){this._t=p(t,e),this._k=n,this._l=void 0}),(function(){var t=this,e=t._k,n=t._l;while(n&&n.r)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?c(0,"keys"==e?n.k:"values"==e?n.v:[n.k,n.v]):(t._t=void 0,c(1))}),n?"entries":"values",!n,!0),h(e)}}},c2be:function(t,e,n){var i=n("2306"),r=i.extendShape,o=r({type:"sausage",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},buildPath:function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,c=e.clockwise,h=Math.cos(l),d=Math.sin(l),f=Math.cos(u),p=Math.sin(u),g=c?u-l<2*Math.PI:l-u<2*Math.PI;g&&(t.moveTo(h*r+n,d*r+i),t.arc(h*s+n,d*s+i,a,-Math.PI+l,l,!c)),t.arc(n,i,o,l,u,!c),t.moveTo(f*o+n,p*o+i),t.arc(f*s+n,p*s+i,a,u-2*Math.PI,u-Math.PI,!c),0!==r&&(t.arc(n,i,r,u,l,c),t.moveTo(h*r+n,p*r+i)),t.closePath()}});t.exports=o},c2dd:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("fc82"),a=n("10cc"),s=a.layoutCovers,l=i.extendComponentView({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new o(e.getZr())).on("brush",r.bind(this._onBrush,this)).mount()},render:function(t){return this.model=t,u.apply(this,arguments)},updateTransform:function(t,e){return s(e),u.apply(this,arguments)},updateView:u,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:r.clone(t),$from:n}),e.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:n,areas:r.clone(t),$from:n})}});function u(t,e,n,i){(!i||i.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}t.exports=l},c345:function(t,e,n){"use strict";var i=n("c532"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,o,a={};return t?(i.forEach(t.split("\n"),(function(t){if(o=t.indexOf(":"),e=i.trim(t.substr(0,o)).toLowerCase(),n=i.trim(t.substr(o+1)),e){if(a[e]&&r.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},c366:function(t,e,n){var i=n("6821"),r=n("9def"),o=n("77f1");t.exports=function(t){return function(e,n,a){var s,l=i(e),u=r(l.length),c=o(a,u);if(t&&n!=n){while(u>c)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}}},c367:function(t,e,n){"use strict";var i=n("8436"),r=n("50ed"),o=n("481b"),a=n("36c3");t.exports=n("30f1")(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):r(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},c3a1:function(t,e,n){var i=n("e6f3"),r=n("1691");t.exports=Object.keys||function(t){return i(t,r)}},c401:function(t,e,n){"use strict";var i=n("c532"),r=n("2444");t.exports=function(t,e,n){var o=this||r;return i.forEach(n,(function(n){t=n.call(o,t,e)})),t}},c4a3:function(t,e){function n(t,e){this.getAllNames=function(){var t=e();return t.mapArray(t.getName)},this.containName=function(t){var n=e();return n.indexOfName(t)>=0},this.indexOfName=function(e){var n=t();return n.indexOfName(e)},this.getItemVisual=function(e,n){var i=t();return i.getItemVisual(e,n)}}var i=n;t.exports=i},c515:function(t,e,n){n("849b"),n("8459"),n("b006")},c526:function(t,e){var n={axisPointer:1,tooltip:1,brush:1};function i(t,e,i){var r=e.getComponentByElement(t.topTarget),o=r&&r.coordinateSystem;return r&&r!==i&&!n[r.mainType]&&o&&o.model!==i}e.onIrrelevantElement=i},c532:function(t,e,n){"use strict";var i=n("1d2b"),r=Object.prototype.toString;function o(t){return"[object Array]"===r.call(t)}function a(t){return"undefined"===typeof t}function s(t){return null!==t&&!a(t)&&null!==t.constructor&&!a(t.constructor)&&"function"===typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function l(t){return"[object ArrayBuffer]"===r.call(t)}function u(t){return"undefined"!==typeof FormData&&t instanceof FormData}function c(t){var e;return e="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer,e}function h(t){return"string"===typeof t}function d(t){return"number"===typeof t}function f(t){return null!==t&&"object"===typeof t}function p(t){if("[object Object]"!==r.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function g(t){return"[object Date]"===r.call(t)}function v(t){return"[object File]"===r.call(t)}function m(t){return"[object Blob]"===r.call(t)}function y(t){return"[object Function]"===r.call(t)}function x(t){return f(t)&&y(t.pipe)}function _(t){return"undefined"!==typeof URLSearchParams&&t instanceof URLSearchParams}function b(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function w(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function S(t,e){if(null!==t&&"undefined"!==typeof t)if("object"!==typeof t&&(t=[t]),o(t))for(var n=0,i=t.length;n2){e=y?e.trim():d(e,3);var n,i,r,o=e.charCodeAt(0);if(43===o||45===o){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+e}for(var a,l=e.slice(2),u=0,c=l.length;ur)return NaN;return parseInt(l,i)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof p&&(m?l((function(){v.valueOf.call(n)})):o(n)!=f)?a(new g(x(e)),n,p):x(e)};for(var _,b=n("9e1e")?u(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;b.length>w;w++)r(g,_=b[w])&&!r(p,_)&&h(p,_,c(g,_));p.prototype=v,v.constructor=p,n("2aba")(i,f,p)}},c62c:function(t,e,n){var i=n("6d8b"),r=n("6cb7"),o=n("9e47"),a=n("2023"),s=r.extend({type:"singleAxis",layoutMode:"box",axis:null,coordinateSystem:null,getCoordSysModel:function(){return this}}),l={left:"5%",top:"5%",right:"5%",bottom:"5%",type:"value",position:"bottom",orient:"horizontal",axisLine:{show:!0,lineStyle:{width:1,type:"solid"}},tooltip:{show:!0},axisTick:{show:!0,length:6,lineStyle:{width:1}},axisLabel:{show:!0,interval:"auto"},splitLine:{show:!0,lineStyle:{type:"dashed",opacity:.2}}};function u(t,e){return e.type||(e.data?"category":"value")}i.merge(s.prototype,a),o("single",s,u,l);var c=s;t.exports=c},c69a:function(t,e,n){t.exports=!n("9e1e")&&!n("79e5")((function(){return 7!=Object.defineProperty(n("230e")("div"),"a",{get:function(){return 7}}).a}))},c775:function(t,e,n){var i=n("2b17"),r=i.retrieveRawValue;function o(t,e){var n=t.mapDimension("defaultedLabel",!0),i=n.length;if(1===i)return r(t,e,n[0]);if(i){for(var o=[],a=0;a=0;s--){var l=2*s,u=i[l]-o/2,c=i[l+1]-a/2;if(t>=u&&e>=c&&t<=u+o&&e<=c+a)return s}return-1}});function u(){this.group=new i.Group}var c=u.prototype;c.isPersistent=function(){return!this._incremental},c.updateData=function(t,e){this.group.removeAll();var n=new l({rectHover:!0,cursor:"default"});n.setShape({points:t.getLayout("symbolPoints")}),this._setCommon(n,t,!1,e),this.group.add(n),this._incremental=null},c.updateLayout=function(t){if(!this._incremental){var e=t.getLayout("symbolPoints");this.group.eachChild((function(t){if(null!=t.startIndex){var n=2*(t.endIndex-t.startIndex),i=4*t.startIndex*2;e=new Float32Array(e.buffer,i,n)}t.setShape("points",e)}))}},c.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>2e6?(this._incremental||(this._incremental=new a({silent:!0})),this.group.add(this._incremental)):this._incremental=null},c.incrementalUpdate=function(t,e,n){var i;this._incremental?(i=new l,this._incremental.addDisplayable(i,!0)):(i=new l({rectHover:!0,cursor:"default",startIndex:t.start,endIndex:t.end}),i.incremental=!0,this.group.add(i)),i.setShape({points:e.getLayout("symbolPoints")}),this._setCommon(i,e,!!this._incremental,n)},c._setCommon=function(t,e,n,i){var r=e.hostModel;i=i||{};var a=e.getVisual("symbolSize");t.setShape("size",a instanceof Array?a:[a,a]),t.softClipShape=i.clipShape||null,t.symbolProxy=o(e.getVisual("symbol"),0,0,0,0),t.setColor=t.symbolProxy.setColor;var l=t.shape.size[0]=0&&(t.dataIndex=n+(t.startIndex||0))})))},c.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},c._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()};var h=u;t.exports=h},ca29:function(t,e,n){var i=n("6d9a"),r=i.eachAfter,o=i.eachBefore,a=n("22da"),s=a.init,l=a.firstWalk,u=a.secondWalk,c=a.separation,h=a.radialCoordinate,d=a.getViewRect;function f(t,e){t.eachSeriesByType("tree",(function(t){p(t,e)}))}function p(t,e){var n=d(t,e);t.layoutInfo=n;var i=t.get("layout"),a=0,f=0,p=null;"radial"===i?(a=2*Math.PI,f=Math.min(n.height,n.width)/2,p=c((function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth}))):(a=n.width,f=n.height,p=c());var g=t.getData().tree.root,v=g.children[0];if(v){s(g),r(v,l,p),g.hierNode.modifier=-v.hierNode.prelim,o(v,u);var m=v,y=v,x=v;o(v,(function(t){var e=t.getLayout().x;ey.getLayout().x&&(y=t),t.depth>x.depth&&(x=t)}));var _=m===y?1:p(m,y)/2,b=_-m.getLayout().x,w=0,S=0,M=0,A=0;if("radial"===i)w=a/(y.getLayout().x+_+b),S=f/(x.depth-1||1),o(v,(function(t){M=(t.getLayout().x+b)*w,A=(t.depth-1)*S;var e=h(M,A);t.setLayout({x:e.x,y:e.y,rawX:M,rawY:A},!0)}));else{var T=t.getOrient();"RL"===T||"LR"===T?(S=f/(y.getLayout().x+_+b),w=a/(x.depth-1||1),o(v,(function(t){A=(t.getLayout().x+b)*S,M="LR"===T?(t.depth-1)*w:a-(t.depth-1)*w,t.setLayout({x:M,y:A},!0)}))):"TB"!==T&&"BT"!==T||(w=a/(y.getLayout().x+_+b),S=f/(x.depth-1||1),o(v,(function(t){M=(t.getLayout().x+b)*w,A="TB"===T?(t.depth-1)*S:f-(t.depth-1)*S,t.setLayout({x:M,y:A},!0)})))}}}t.exports=f},ca5a:function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},ca98:function(t,e,n){var i=n("6d8b"),r=n("e0d3"),o=n("6cb7"),a=i.each,s=i.clone,l=i.map,u=i.merge,c=/^(min|max)?(.+)$/;function h(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function d(t,e,n){var r,o,s=[],l=[],u=t.timeline;if(t.baseOption&&(o=t.baseOption),(u||t.options)&&(o=o||{},s=(t.options||[]).slice()),t.media){o=o||{};var c=t.media;a(c,(function(t){t&&t.option&&(t.query?l.push(t):r||(r=t))}))}return o||(o=t),o.timeline||(o.timeline=u),a([o].concat(s).concat(i.map(l,(function(t){return t.option}))),(function(t){a(e,(function(e){e(t,n)}))})),{baseOption:o,timelineOptions:s,mediaDefault:r,mediaList:l}}function f(t,e,n){var r={width:e,height:n,aspectratio:e/n},o=!0;return i.each(t,(function(t,e){var n=e.match(c);if(n&&n[1]&&n[2]){var i=n[1],a=n[2].toLowerCase();p(r[a],t,i)||(o=!1)}})),o}function p(t,e,n){return"min"===n?t>=e:"max"===n?t<=e:t===e}function g(t,e){return t.join(",")===e.join(",")}function v(t,e){e=e||{},a(e,(function(e,n){if(null!=e){var i=t[n];if(o.hasClass(n)){e=r.normalizeToArray(e),i=r.normalizeToArray(i);var a=r.mappingToExists(i,e);t[n]=l(a,(function(t){return t.option&&t.exist?u(t.exist,t.option,!0):t.exist||t.option}))}else t[n]=u(i,e,!0)}}))}h.prototype={constructor:h,setOption:function(t,e){t&&i.each(r.normalizeToArray(t.series),(function(t){t&&t.data&&i.isTypedArray(t.data)&&i.setAsPrimitive(t.data)})),t=s(t);var n=this._optionBackup,o=d.call(this,t,e,!n);this._newBaseOption=o.baseOption,n?(v(n.baseOption,o.baseOption),o.timelineOptions.length&&(n.timelineOptions=o.timelineOptions),o.mediaList.length&&(n.mediaList=o.mediaList),o.mediaDefault&&(n.mediaDefault=o.mediaDefault)):this._optionBackup=o},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=l(e.timelineOptions,s),this._mediaList=l(e.mediaList,s),this._mediaDefault=s(e.mediaDefault),this._currentMediaIndices=[],s(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,n=this._timelineOptions;if(n.length){var i=t.getComponent("timeline");i&&(e=s(n[i.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),n=this._api.getHeight(),i=this._mediaList,r=this._mediaDefault,o=[],a=[];if(!i.length&&!r)return a;for(var u=0,c=i.length;u=t.length?(this._t=void 0,r(1)):r(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},cb11:function(t,e,n){var i=n("cbe5"),r=n("9cf9"),o=r.subPixelOptimizeLine,a={},s=i.extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var n,i,r,s;this.subPixelOptimize?(o(a,e,this.style),n=a.x1,i=a.y1,r=a.x2,s=a.y2):(n=e.x1,i=e.y1,r=e.x2,s=e.y2);var l=e.percent;0!==l&&(t.moveTo(n,i),l<1&&(r=n*(1-l)+r*l,s=i*(1-l)+s*l),t.lineTo(r,s))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}});t.exports=s},cb69:function(t,e,n){var i=n("3301"),r=n("4f85"),o=r.extend({type:"series.scatter",dependencies:["grid","polar","geo","singleAxis","calendar"],getInitialData:function(t,e){return i(this.getSource(),this,{useEncodeDefaulter:!0})},brushSelector:"point",getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},clip:!0}});t.exports=o},cb6d:function(t,e){function n(){this.on("mousedown",this._dragStart,this),this.on("mousemove",this._drag,this),this.on("mouseup",this._dragEnd,this)}function i(t,e){return{target:t,topTarget:e&&e.topTarget}}n.prototype={constructor:n,_dragStart:function(t){var e=t.target;while(e&&!e.draggable)e=e.parent;e&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(i(e,t),"dragstart",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var n=t.offsetX,r=t.offsetY,o=n-this._x,a=r-this._y;this._x=n,this._y=r,e.drift(o,a,t),this.dispatchToElement(i(e,t),"drag",t.event);var s=this.findHover(n,r,e).target,l=this._dropTarget;this._dropTarget=s,e!==s&&(l&&s!==l&&this.dispatchToElement(i(l,t),"dragleave",t.event),s&&s!==l&&this.dispatchToElement(i(s,t),"dragenter",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(i(e,t),"dragend",t.event),this._dropTarget&&this.dispatchToElement(i(this._dropTarget,t),"drop",t.event),this._draggingTarget=null,this._dropTarget=null}};var r=n;t.exports=r},cb73:function(t,e,n){var i=n("3842"),r=i.parsePercent,o=n("6d8b"),a=Math.PI/180;function s(t,e,n,i){e.eachSeriesByType(t,(function(t){var e=t.get("center"),i=t.get("radius");o.isArray(i)||(i=[0,i]),o.isArray(e)||(e=[e,e]);var s=n.getWidth(),u=n.getHeight(),c=Math.min(s,u),h=r(e[0],s),d=r(e[1],u),f=r(i[0],c/2),p=r(i[1],c/2),g=-t.get("startAngle")*a,v=t.get("minAngle")*a,m=t.getData().tree.root,y=t.getViewRoot(),x=y.depth,_=t.get("sort");null!=_&&l(y,_);var b=0;o.each(y.children,(function(t){!isNaN(t.getValue())&&b++}));var w=y.getValue(),S=Math.PI/(w||b)*2,M=y.depth>0,A=y.height-(M?-1:1),T=(p-f)/(A||1),I=t.get("clockwise"),C=t.get("stillShowZeroSum"),D=I?1:-1,k=function(t,e){if(t){var n=e;if(t!==m){var i=t.getValue(),a=0===w&&C?S:i*S;a1e-10&&(r.width+=a/s,r.height+=a/s,r.x-=a/s/2,r.y-=a/s/2)}return r}return t},contain:function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path.data;if(r.hasStroke()){var s=r.lineWidth,l=r.strokeNoScale?this.getLineScale():1;if(l>1e-10&&(r.hasFill()||(s=Math.max(s,this.strokeContainThreshold)),a.containStroke(o,s/l,t,e)))return!0}if(r.hasFill())return a.contain(o,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):i.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var n=this.shape;if(n){if(r.isObject(t))for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);else n[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&u(t[0]-1)>1e-10&&u(t[3]-1)>1e-10?Math.sqrt(u(t[0]*t[3]-t[2]*t[1])):1}},h.extend=function(t){var e=function(e){h.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var n=t.shape;if(n){this.shape=this.shape||{};var i=this.shape;for(var r in n)!i.hasOwnProperty(r)&&n.hasOwnProperty(r)&&(i[r]=n[r])}t.init&&t.init.call(this,e)};for(var n in r.inherits(e,h),t)"style"!==n&&"shape"!==n&&(e.prototype[n]=t[n]);return e},r.inherits(h,i);var d=h;t.exports=d},cbe9:function(t,e,n){var i=n("6d8b"),r=n("9850"),o=n("cf7e");function a(t){o.call(this,t)}a.prototype={constructor:a,type:"cartesian2d",dimensions:["x","y"],getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},containPoint:function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},containData:function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},dataToPoint:function(t,e,n){var i=this.getAxis("x"),r=this.getAxis("y");return n=n||[],n[0]=i.toGlobalCoord(i.dataToCoord(t[0])),n[1]=r.toGlobalCoord(r.dataToCoord(t[1])),n},clampData:function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(t[0]),s=i.parse(t[1]);return e=e||[],e[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},pointToData:function(t,e){var n=this.getAxis("x"),i=this.getAxis("y");return e=e||[],e[0]=n.coordToData(n.toLocalCoord(t[0])),e[1]=i.coordToData(i.toLocalCoord(t[1])),e},getOtherAxis:function(t){return this.getAxis("x"===t.dim?"y":"x")},getArea:function(){var t=this.getAxis("x").getGlobalExtent(),e=this.getAxis("y").getGlobalExtent(),n=Math.min(t[0],t[1]),i=Math.min(e[0],e[1]),o=Math.max(t[0],t[1])-n,a=Math.max(e[0],e[1])-i,s=new r(n,i,o,a);return s}},i.inherits(a,o);var s=a;t.exports=s},cc39:function(t,e,n){var i=n("6d8b"),r=n("3842"),o=n("50e5"),a=n("ef6a"),s=i.each,l=r.asc,u=function(t,e,n,i){this._dimName=t,this._axisIndex=e,this._valueWindow,this._percentWindow,this._dataExtent,this._minMaxSpan,this.ecModel=i,this._dataZoomModel=n};function c(t,e,n){var i=[1/0,-1/0];return s(n,(function(t){var n=t.getData();n&&s(n.mapDimension(e,!0),(function(t){var e=n.getApproximateExtent(t);e[0]i[1]&&(i[1]=e[1])}))})),i[1]0?0:NaN);var a=n.getMax(!0);return null!=a&&"dataMax"!==a&&"function"!==typeof a?e[1]=a:r&&(e[1]=o>0?o-1:NaN),n.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function d(t,e){var n=t.getAxisModel(),i=t._percentWindow,o=t._valueWindow;if(i){var a=r.getPixelPrecision(o,[0,500]);a=Math.min(a,20);var s=e||0===i[0]&&100===i[1];n.setRange(s?null:+o[0].toFixed(a),s?null:+o[1].toFixed(a))}}function f(t){var e=t._minMaxSpan={},n=t._dataZoomModel,i=t._dataExtent;s(["min","max"],(function(o){var a=n.get(o+"Span"),s=n.get(o+"ValueSpan");null!=s&&(s=t.getAxisModel().axis.scale.parse(s)),null!=s?a=r.linearMap(i[0]+s,i,[0,100],!0):null!=a&&(s=r.linearMap(a,[0,100],i,!0)-i[0]),e[o+"Span"]=a,e[o+"ValueSpan"]=s}))}u.prototype={constructor:u,hostedBy:function(t){return this._dataZoomModel===t},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var t=[],e=this.ecModel;return e.eachSeries((function(n){if(o.isCoordSupported(n.get("coordinateSystem"))){var i=this._dimName,r=e.queryComponents({mainType:i+"Axis",index:n.get(i+"AxisIndex"),id:n.get(i+"AxisId")})[0];this._axisIndex===(r&&r.componentIndex)&&t.push(n)}}),this),t},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},getOtherAxisModel:function(){var t,e,n,i=this._dimName,r=this.ecModel,o=this.getAxisModel(),a="x"===i||"y"===i;return a?(e="gridIndex",t="x"===i?"y":"x"):(e="polarIndex",t="angle"===i?"radius":"angle"),r.eachComponent(t+"Axis",(function(t){(t.get(e)||0)===(o.get(e)||0)&&(n=t)})),n},getMinMaxSpan:function(){return i.clone(this._minMaxSpan)},calculateDataWindow:function(t){var e,n=this._dataExtent,i=this.getAxisModel(),o=i.axis.scale,u=this._dataZoomModel.getRangePropMode(),c=[0,100],h=[],d=[];s(["start","end"],(function(i,a){var s=t[i],l=t[i+"Value"];"percent"===u[a]?(null==s&&(s=c[a]),l=o.parse(r.linearMap(s,c,n))):(e=!0,l=null==l?n[a]:o.parse(l),s=r.linearMap(l,n,c)),d[a]=l,h[a]=s})),l(d),l(h);var f=this._minMaxSpan;function p(t,e,n,i,s){var l=s?"Span":"ValueSpan";a(0,t,n,"all",f["min"+l],f["max"+l]);for(var u=0;u<2;u++)e[u]=r.linearMap(t[u],n,i,!0),s&&(e[u]=o.parse(e[u]))}return e?p(d,h,n,c,!1):p(h,d,c,n,!0),{valueWindow:d,percentWindow:h}},reset:function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=c(this,this._dimName,e),f(this);var n=this.calculateDataWindow(t.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,d(this)}},restore:function(t){t===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,d(this,!0))},filterData:function(t,e){if(t===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._valueWindow;"none"!==r&&s(i,(function(t){var e=t.getData(),i=e.mapDimension(n,!0);i.length&&("weakFilter"===r?e.filterSelf((function(t){for(var n,r,a,s=0;so[1];if(u&&!c&&!h)return!0;u&&(a=!0),c&&(n=!0),h&&(r=!0)}return a&&n&&r})):s(i,(function(n){if("empty"===r)t.setData(e=e.map(n,(function(t){return a(t)?t:NaN})));else{var i={};i[n]=o,e.selectRange(i)}})),s(i,(function(t){e.setApproximateExtent(o,t)})))}))}function a(t){return t>=o[0]&&t<=o[1]}}};var p=u;t.exports=p},ccb9:function(t,e,n){e.f=n("5168")},cccd:function(t,e,n){var i=n("e0d3"),r=i.makeInner;function o(){var t=r();return function(e){var n=t(e),i=e.pipelineContext,r=n.large,o=n.progressiveRender,a=n.large=i&&i.large,s=n.progressiveRender=i&&i.progressiveRender;return!!(r^a||o^s)&&"reset"}}t.exports=o},cd12:function(t,e,n){n("01ed"),n("4a9d"),n("cb8f")},cd1c:function(t,e,n){var i=n("e853");t.exports=function(t,e){return new(i(t))(e)}},cd33:function(t,e,n){var i=n("6d8b"),r=n("4319"),o=i.each,a=i.curry;function s(t,e){var n={axesInfo:{},seriesInvolved:!1,coordSysAxesInfo:{},coordSysMap:{}};return l(n,t,e),n.seriesInvolved&&c(n,t),n}function l(t,e,n){var i=e.getComponent("tooltip"),r=e.getComponent("axisPointer"),s=r.get("link",!0)||[],l=[];o(n.getCoordinateSystems(),(function(n){if(n.axisPointerEnabled){var c=m(n.model),d=t.coordSysAxesInfo[c]={};t.coordSysMap[c]=n;var f=n.model,p=f.getModel("tooltip",i);if(o(n.getAxes(),a(_,!1,null)),n.getTooltipAxes&&i&&p.get("show")){var g="axis"===p.get("trigger"),y="cross"===p.get("axisPointer.type"),x=n.getTooltipAxes(p.get("axisPointer.axis"));(g||y)&&o(x.baseAxes,a(_,!y||"cross",g)),y&&o(x.otherAxes,a(_,"cross",!1))}}function _(i,o,a){var c=a.model.getModel("axisPointer",r),f=c.get("show");if(f&&("auto"!==f||i||v(c))){null==o&&(o=c.get("triggerTooltip")),c=i?u(a,p,r,e,i,o):c;var g=c.get("snap"),y=m(a.model),x=o||g||"category"===a.type,_=t.axesInfo[y]={key:y,axis:a,coordSys:n,axisPointerModel:c,triggerTooltip:o,involveSeries:x,snap:g,useHandle:v(c),seriesModels:[]};d[y]=_,t.seriesInvolved|=x;var b=h(s,a);if(null!=b){var w=l[b]||(l[b]={axesInfo:{}});w.axesInfo[y]=_,w.mapper=s[b].mapper,_.linkGroup=w}}}}))}function u(t,e,n,a,s,l){var u=e.getModel("axisPointer"),c={};o(["type","snap","lineStyle","shadowStyle","label","animation","animationDurationUpdate","animationEasingUpdate","z"],(function(t){c[t]=i.clone(u.get(t))})),c.snap="category"!==t.type&&!!l,"cross"===u.get("type")&&(c.type="line");var h=c.label||(c.label={});if(null==h.show&&(h.show=!1),"cross"===s){var d=u.get("label.show");if(h.show=null==d||d,!l){var f=c.lineStyle=u.get("crossStyle");f&&i.defaults(h,f.textStyle)}}return t.model.getModel("axisPointer",new r(c,n,a))}function c(t,e){e.eachSeries((function(e){var n=e.coordinateSystem,i=e.get("tooltip.trigger",!0),r=e.get("tooltip.show",!0);n&&"none"!==i&&!1!==i&&"item"!==i&&!1!==r&&!1!==e.get("axisPointer.show",!0)&&o(t.coordSysAxesInfo[m(n.model)],(function(t){var i=t.axis;n.getAxis(i.dim)===i&&(t.seriesModels.push(e),null==t.seriesDataCount&&(t.seriesDataCount=0),t.seriesDataCount+=e.getData().count())}))}),this)}function h(t,e){for(var n=e.model,i=e.dim,r=0;r=0||t===e}function f(t){var e=p(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=v(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),a0){var C=a(x)?l:u;x>0&&(x=x*T+M),b[w++]=C[I],b[w++]=C[I+1],b[w++]=C[I+2],b[w++]=C[I+3]*x*256}else w+=4}return d.putImageData(_,0,0),h},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=i.createCanvas()),e=this.pointSize+this.blurSize,n=2*e;t.width=n,t.height=n;var r=t.getContext("2d");return r.clearRect(0,0,n,n),r.shadowOffsetX=n,r.shadowBlur=this.blurSize,r.shadowColor="#000",r.beginPath(),r.arc(-e,e,this.pointSize,0,2*Math.PI,!0),r.closePath(),r.fill(),t},_getGradient:function(t,e,n){for(var i=this._gradientPixels,r=i[n]||(i[n]=new Uint8ClampedArray(1024)),o=[0,0,0,0],a=0,s=0;s<256;s++)e[n](s/255,!0,o),r[a++]=o[0],r[a++]=o[1],r[a++]=o[2],r[a++]=o[3];return r}};var a=o;t.exports=a},cdaa:function(t,e,n){var i=n("607d"),r=i.addEventListener,o=i.removeEventListener,a=i.normalizeEvent,s=i.getNativeEvent,l=n("6d8b"),u=n("1fab"),c=n("22d1"),h=300,d=c.domSupported,f=function(){var t=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],n={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},i=l.map(t,(function(t){var e=t.replace("mouse","pointer");return n.hasOwnProperty(e)?e:t}));return{mouse:t,touch:e,pointer:i}}(),p={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]};function g(t){return"mousewheel"===t&&c.browser.firefox?"DOMMouseScroll":t}function v(t){var e=t.pointerType;return"pen"===e||"touch"===e}function m(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}function y(t){t&&(t.zrByTouch=!0)}function x(t,e){return a(t.dom,new b(t,e),!0)}function _(t,e){var n=e,i=!1;while(n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot))n=n.parentNode;return i}function b(t,e){this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY}var w=b.prototype;w.stopPropagation=w.stopImmediatePropagation=w.preventDefault=l.noop;var S={mousedown:function(t){t=a(this.dom,t),this._mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=a(this.dom,t);var e=this._mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||D(this,!0),this.trigger("mousemove",t)},mouseup:function(t){t=a(this.dom,t),D(this,!1),this.trigger("mouseup",t)},mouseout:function(t){t=a(this.dom,t),this._pointerCapturing&&(t.zrEventControl="no_globalout");var e=t.toElement||t.relatedTarget;t.zrIsToLocalDOM=_(this,e),this.trigger("mouseout",t)},touchstart:function(t){t=a(this.dom,t),y(t),this._lastTouchMoment=new Date,this.handler.processGesture(t,"start"),S.mousemove.call(this,t),S.mousedown.call(this,t)},touchmove:function(t){t=a(this.dom,t),y(t),this.handler.processGesture(t,"change"),S.mousemove.call(this,t)},touchend:function(t){t=a(this.dom,t),y(t),this.handler.processGesture(t,"end"),S.mouseup.call(this,t),+new Date-this._lastTouchMomentl)i(s,n=e[l++])&&(~o(u,n)||u.push(n));return u}},ce7e:function(t,e,n){var i=n("63b6"),r=n("584a"),o=n("294c");t.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],a={};a[t]=e(n),i(i.S+i.F*o((function(){n(1)})),"Object",a)}},cee1:function(t,e,n){var i=n("6d8b");function r(t){var e={};t.eachSeriesByType("map",(function(n){var r=n.getMapType();if(!n.getHostGeoModel()&&!e[r]){var o={};i.each(n.seriesGroup,(function(e){var n=e.coordinateSystem,i=e.originalData;e.get("showLegendSymbol")&&t.getComponent("legend")&&i.each(i.mapDimension("value"),(function(t,e){var r=i.getName(e),a=n.getRegion(r);if(a&&!isNaN(t)){var s=o[r]||0,l=n.dataToPoint(a.center);o[r]=s+1,i.setItemLayout(e,{point:l,offset:s})}}))}));var a=n.getData();a.each((function(t){var e=a.getName(t),n=a.getItemLayout(t)||{};n.showLabel=!o[e],a.setItemLayout(t,n)})),e[r]=!0}}))}t.exports=r},cee4:function(t,e,n){"use strict";var i=n("c532"),r=n("1d2b"),o=n("0a06"),a=n("4a7b"),s=n("2444");function l(t){var e=new o(t),n=r(o.prototype.request,e);return i.extend(n,o.prototype,e),i.extend(n,e),n.create=function(e){return l(a(t,e))},n}var u=l(s);u.Axios=o,u.Cancel=n("7a77"),u.CancelToken=n("8df4"),u.isCancel=n("2e67"),u.VERSION=n("5cce").version,u.all=function(t){return Promise.all(t)},u.spread=n("0df6"),u.isAxiosError=n("5f02"),t.exports=u,t.exports.default=u},cf7e:function(t,e,n){var i=n("6d8b");function r(t){return this._axes[t]}var o=function(t){this._axes={},this._dimList=[],this.name=t||""};o.prototype={constructor:o,type:"cartesian",getAxis:function(t){return this._axes[t]},getAxes:function(){return i.map(this._dimList,r,this)},getAxesByScale:function(t){return t=t.toLowerCase(),i.filter(this.getAxes(),(function(e){return e.scale.type===t}))},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,"dataToCoord")},coordToData:function(t){return this._dataCoordConvert(t,"coordToData")},_dataCoordConvert:function(t,e){for(var n=this._dimList,i=t instanceof Array?[]:{},r=0;r=0&&(a[o[l].depth]=new s(o[l],this,e));if(i&&n){var u=r(i,n,this,!0,c);return u.data}function c(t,e){t.wrapMethod("getItemModel",(function(t,e){return t.customizeGetParent((function(t){var n=this.parentModel,i=n.getData().getItemLayout(e).depth,r=n.levelModels[i];return r||this.parentModel})),t})),e.wrapMethod("getItemModel",(function(t,e){return t.customizeGetParent((function(t){var n=this.parentModel,i=n.getGraph().getEdgeByIndex(e),r=i.node1.getLayout().depth,o=n.levelModels[r];return o||this.parentModel})),t}))}},setNodePosition:function(t,e){var n=this.option.data[t];n.localX=e[0],n.localY=e[1]},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},formatTooltip:function(t,e,n){if("edge"===n){var i=this.getDataParams(t,n),r=i.data,o=r.source+" -- "+r.target;return i.value&&(o+=" : "+i.value),a(o)}if("node"===n){var s=this.getGraph().getNodeByIndex(t),l=s.getLayout().value,c=this.getDataParams(t,n).data.name;if(l)o=c+" : "+l;return a(o)}return u.superCall(this,"formatTooltip",t,e)},optionUpdated:function(){var t=this.option;!0===t.focusNodeAdjacency&&(t.focusNodeAdjacency="allEdges")},getDataParams:function(t,e){var n=u.superCall(this,"getDataParams",t,e);if(null==n.value&&"node"===e){var i=this.getGraph().getNodeByIndex(t),r=i.getLayout().value;n.value=r}return n},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",layout:null,left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,focusNodeAdjacency:!1,layoutIterations:32,label:{show:!0,position:"right",color:"#000",fontSize:12},levels:[],nodeAlign:"justify",itemStyle:{borderWidth:1,borderColor:"#333"},lineStyle:{color:"#314656",opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},animationEasing:"linear",animationDuration:1e3}})),c=u;t.exports=c},d070:function(t,e,n){var i=n("3eba"),r=n("6d8b");function o(t,e){e.update="updateView",i.registerAction(e,(function(e,n){var i={};return n.eachComponent({mainType:"geo",query:e},(function(n){n[t](e.name);var o=n.coordinateSystem;r.each(o.regions,(function(t){i[t.name]=n.isSelected(t.name)||!1}))})),{selected:i,name:e.name}}))}n("1f1a"),n("eeea"),n("7661"),n("49e8"),o("toggleSelected",{type:"geoToggleSelect",event:"geoselectchanged"}),o("select",{type:"geoSelect",event:"geoselected"}),o("unSelect",{type:"geoUnSelect",event:"geounselected"})},d090:function(t,e,n){var i=n("6d8b"),r=n("f934"),o=n("3842"),a=n("2039"),s=864e5;function l(t,e,n){this._model=t}function u(t,e,n,i){var r=n.calendarModel,o=n.seriesModel,a=r?r.coordinateSystem:o?o.coordinateSystem:null;return a===this?a[t](i):null}l.prototype={constructor:l,type:"calendar",dimensions:["time","value"],getDimensionsInfo:function(){return[{name:"time",type:"time"},"value"]},getRangeInfo:function(){return this._rangeInfo},getModel:function(){return this._model},getRect:function(){return this._rect},getCellWidth:function(){return this._sw},getCellHeight:function(){return this._sh},getOrient:function(){return this._orient},getFirstDayOfWeek:function(){return this._firstDayOfWeek},getDateInfo:function(t){t=o.parseDate(t);var e=t.getFullYear(),n=t.getMonth()+1;n=n<10?"0"+n:n;var i=t.getDate();i=i<10?"0"+i:i;var r=t.getDay();return r=Math.abs((r+7-this.getFirstDayOfWeek())%7),{y:e,m:n,d:i,day:r,time:t.getTime(),formatedDate:e+"-"+n+"-"+i,date:t}},getNextNDay:function(t,e){return e=e||0,0===e||(t=new Date(this.getDateInfo(t).time),t.setDate(t.getDate()+e)),this.getDateInfo(t)},update:function(t,e){this._firstDayOfWeek=+this._model.getModel("dayLabel").get("firstDay"),this._orient=this._model.get("orient"),this._lineWidth=this._model.getModel("itemStyle").getItemStyle().lineWidth||0,this._rangeInfo=this._getRangeInfo(this._initRangeOption());var n=this._rangeInfo.weeks||1,o=["width","height"],a=this._model.get("cellSize").slice(),s=this._model.getBoxLayoutParams(),l="horizontal"===this._orient?[n,7]:[7,n];i.each([0,1],(function(t){h(a,t)&&(s[o[t]]=a[t]*l[t])}));var u={width:e.getWidth(),height:e.getHeight()},c=this._rect=r.getLayoutRect(s,u);function h(t,e){return null!=t[e]&&"auto"!==t[e]}i.each([0,1],(function(t){h(a,t)||(a[t]=c[o[t]]/l[t])})),this._sw=a[0],this._sh=a[1]},dataToPoint:function(t,e){i.isArray(t)&&(t=t[0]),null==e&&(e=!0);var n=this.getDateInfo(t),r=this._rangeInfo,o=n.formatedDate;if(e&&!(n.time>=r.start.time&&n.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])],t[0].time>t[1].time&&(e=!0,t.reverse());var n=Math.floor(t[1].time/s)-Math.floor(t[0].time/s)+1,i=new Date(t[0].time),r=i.getDate(),o=t[1].date.getDate();i.setDate(r+n-1);var a=i.getDate();if(a!==o){var l=i.getTime()-t[1].time>0?1:-1;while((a=i.getDate())!==o&&(i.getTime()-t[1].time)*l>0)n-=l,i.setDate(a-l)}var u=Math.floor((n+t[0].day+6)/7),c=e?1-u:u-1;return e&&t.reverse(),{range:[t[0].formatedDate,t[1].formatedDate],start:t[0],end:t[1],allDay:n,weeks:u,nthWeek:c,fweek:t[0].day,lweek:t[1].day}},_getDateByWeeksAndDay:function(t,e,n){var i=this._getRangeInfo(n);if(t>i.weeks||0===t&&ei.lweek)return!1;var r=7*(t-1)-i.fweek+e,o=new Date(i.start.time);return o.setDate(i.start.d+r),this.getDateInfo(o)}},l.dimensions=l.prototype.dimensions,l.getDimensionsInfo=l.prototype.getDimensionsInfo,l.create=function(t,e){var n=[];return t.eachComponent("calendar",(function(i){var r=new l(i,t,e);n.push(r),i.coordinateSystem=r})),t.eachSeries((function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=n[t.get("calendarIndex")||0])})),n},a.register("calendar",l);var c=l;t.exports=c},d15d:function(t,e,n){var i=n("6d8b"),r=i.createHashMap,o=i.each;function a(t){var e=r();t.eachSeries((function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),e.each(s)}function s(t){o(t,(function(e,n){var i=[],r=[NaN,NaN],o=[e.stackResultDimension,e.stackedOverDimension],a=e.data,s=e.isStackedByIndex,l=a.map(o,(function(o,l,u){var c,h,d=a.get(e.stackedDimension,u);if(isNaN(d))return r;s?h=a.getRawIndex(u):c=a.get(e.stackedByDimension,u);for(var f=NaN,p=n-1;p>=0;p--){var g=t[p];if(s||(h=g.data.rawIndexOf(g.stackedByDimension,c)),h>=0){var v=g.data.getByRawIndex(g.stackResultDimension,h);if(d>=0&&v>0||d<=0&&v<0){d+=v,f=v;break}}}return i[0]=d,i[1]=f,i}));a.hostModel.setData(l),e.data=l}))}t.exports=a},d28f:function(t,e,n){var i=n("3eba");n("84d5"),n("4650"),n("5e97");var r=n("903c"),o=n("6cb7");i.registerProcessor(i.PRIORITY.PROCESSOR.SERIES_FILTER,r),o.registerSubTypeDefaulter("legend",(function(){return"plain"}))},d2a5:function(t,e,n){var i=n("3eba");i.registerAction({type:"focusNodeAdjacency",event:"focusNodeAdjacency",update:"series:focusNodeAdjacency"},(function(){})),i.registerAction({type:"unfocusNodeAdjacency",event:"unfocusNodeAdjacency",update:"series:unfocusNodeAdjacency"},(function(){}))},d2c8:function(t,e,n){var i=n("aae3"),r=n("be13");t.exports=function(t,e,n){if(i(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(r(t))}},d2cf:function(t,e,n){var i=n("6d8b"),r=n("401b"),o=n("cb6d"),a=n("1fab"),s=n("607d"),l=n("0b44"),u="silent";function c(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:h}}function h(){s.stop(this.event)}function d(){}d.prototype.dispose=function(){};var f=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],p=function(t,e,n,i){a.call(this),this.storage=t,this.painter=e,this.painterRoot=i,n=n||new d,this.proxy=null,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,this._gestureMgr,o.call(this),this.setHandlerProxy(n)};function g(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){var i,r=t;while(r){if(r.clipPath&&!r.clipPath.contain(e,n))return!1;r.silent&&(i=!0),r=r.parent}return!i||u}return!1}function v(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}p.prototype={constructor:p,setHandlerProxy:function(t){this.proxy&&this.proxy.dispose(),t&&(i.each(f,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},mousemove:function(t){var e=t.zrX,n=t.zrY,i=v(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(r=this.findHover(r.x,r.y),o=r.target);var a=this._hovered=i?{x:e,y:n}:this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,n=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&!n&&this.trigger("globalout",{type:"globalout",event:t})},resize:function(t){this._hovered={}},dispatch:function(t,e){var n=this[t];n&&n.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,n){t=t||{};var i=t.target;if(!i||!i.silent){var r="on"+e,o=c(e,t,n);while(i)if(i[r]&&(o.cancelBubble=i[r].call(i,o)),i.trigger(e,o),i=i.parent,o.cancelBubble)break;o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer((function(t){"function"===typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},findHover:function(t,e,n){for(var i=this.storage.getDisplayList(),r={x:t,y:e},o=i.length-1;o>=0;o--){var a;if(i[o]!==n&&!i[o].ignore&&(a=g(i[o],t,e))&&(!r.topTarget&&(r.topTarget=i[o]),a!==u)){r.target=i[o];break}}return r},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new l);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r,this.dispatchToElement({target:i.target},r,i.event)}}},i.each(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){p.prototype[t]=function(e){var n,i,o=e.zrX,a=e.zrY,s=v(this,o,a);if("mouseup"===t&&s||(n=this.findHover(o,a),i=n.target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||r.dist(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}})),i.mixin(p,a),i.mixin(p,o);var m=p;t.exports=m},d2d5:function(t,e,n){n("1654"),n("549b"),t.exports=n("584a").Array.from},d357:function(t,e,n){var i=n("6d8b"),r=i.each,o=n("1c5f"),a=o.simpleLayout,s=o.simpleLayoutEdge;function l(t,e){t.eachSeriesByType("graph",(function(t){var e=t.get("layout"),n=t.coordinateSystem;if(n&&"view"!==n.type){var i=t.getData(),o=[];r(n.dimensions,(function(t){o=o.concat(i.mapDimension(t,!0))}));for(var l=0;l=0&&r.each(t,(function(t){i.setIconStatus(t,"normal")}))})),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},c),"stack"===n){var f=u.series&&u.series[0]&&u.series[0].stack===l;a=f?r.merge({stack:s.title.tiled},s.title):r.clone(s.title)}e.dispatchAction({type:"changeMagicType",currentType:n,newOption:u,newTitle:a,featureName:"magicType"})}},i.registerAction({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)})),a.register("magicType",u);var f=u;t.exports=f},d3a4:function(t,e,n){var i,r=n("22d1"),o="urn:schemas-microsoft-com:vml",a="undefined"===typeof window?null:window,s=!1,l=a&&a.document;function u(t){return i(t)}if(l&&!r.canvasSupported)try{!l.namespaces.zrvml&&l.namespaces.add("zrvml",o),i=function(t){return l.createElement("')}}catch(h){i=function(t){return l.createElement("<"+t+' xmlns="'+o+'" class="zrvml">')}}function c(){if(!s&&l){s=!0;var t=l.styleSheets;t.length<31?l.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}e.doc=l,e.createNode=u,e.initVML=c},d3f4:function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},d3f47:function(t,e){function n(t){return{seriesType:t,reset:function(t,e){var n=e.findComponents({mainType:"legend"});if(n&&n.length){var i=t.getData();i.filterSelf((function(t){for(var e=i.getName(t),r=0;r=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},remove:function(t,e){r.unregister(e.getZr(),"axisPointer"),o.superApply(this._model,"remove",arguments)},dispose:function(t,e){r.unregister("axisPointer",e),o.superApply(this._model,"dispose",arguments)}}),a=o;t.exports=a},d4c6:function(t,e,n){var i=n("cbe5"),r=i.extend({type:"compound",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,n=0;n=r||v<0)break;if(f(y)){if(p){v+=o;continue}break}if(v===n)t[o>0?"moveTo":"lineTo"](y[0],y[1]);else if(l>0){var x=e[g],_="y"===c?1:0,b=(y[_]-x[_])*l;u(h,x),h[_]=x[_]+b,u(d,y),d[_]=y[_]-b,t.bezierCurveTo(h[0],h[1],d[0],d[1],y[0],y[1])}else t.lineTo(y[0],y[1]);g=v,v+=o}return m}function v(t,e,n,i,o,p,g,v,m,y,x){for(var _=0,b=n,w=0;w=o||b<0)break;if(f(S)){if(x){b+=p;continue}break}if(b===n)t[p>0?"moveTo":"lineTo"](S[0],S[1]),u(h,S);else if(m>0){var M=b+p,A=e[M];if(x)while(A&&f(e[M]))M+=p,A=e[M];var T=.5,I=e[_];A=e[M];if(!A||f(A))u(d,S);else{var C,D;if(f(A)&&!x&&(A=S),r.sub(c,A,I),"x"===y||"y"===y){var k="x"===y?0:1;C=Math.abs(S[k]-I[k]),D=Math.abs(S[k]-A[k])}else C=r.dist(S,I),D=r.dist(S,A);T=D/(D+C),l(d,S,c,-m*(1-T))}a(h,h,v),s(h,h,g),a(d,d,v),s(d,d,g),t.bezierCurveTo(h[0],h[1],d[0],d[1],S[0],S[1]),l(h,S,c,m*T)}else t.lineTo(S[0],S[1]);_=b,b+=p}return w}function m(t,e){var n=[1/0,1/0],i=[-1/0,-1/0];if(e)for(var r=0;ri[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1])}return{min:e?n:i,max:e?i:n}}var y=i.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:o(i.prototype.brush),buildPath:function(t,e){var n=e.points,i=0,r=n.length,o=m(n,e.smoothConstraint);if(e.connectNulls){for(;r>0;r--)if(!f(n[r-1]))break;for(;i0;o--)if(!f(n[o-1]))break;for(;r=this._maxSize&&a>0){var l=n.head;n.remove(l),delete i[l.key],o=l.value,this._lastRemovedEntry=l}s?s.value=e:s=new r(e),s.key=t,n.insertEntry(s),i[t]=s}return o},a.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},a.clear=function(){this._list.clear(),this._map={}};var s=o;t.exports=s},d53b:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},d5b7:function(t,e,n){var i=n("de00"),r=n("1fab"),o=n("0cde"),a=n("bd6b"),s=n("6d8b"),l=function(t){o.call(this,t),r.call(this,t),a.call(this,t),this.id=t.id||i()};l.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,isGroup:!1,drift:function(t,e){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0;break}var n=this.transform;n||(n=this.transform=[1,0,0,1,0,0]),n[4]+=t,n[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(t,e){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var n=this[t];n||(n=this[t]=[]),n[0]=e[0],n[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"===typeof t)this.attrKV(t,e);else if(s.isObject(t))for(var n in t)t.hasOwnProperty(n)&&this.attrKV(n,t[n]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var n=0;ne&&u>i&&u>o&&u>s||u1&&y(),d=c.cubicAt(e,i,o,s,m[0]),g>1&&(f=c.cubicAt(e,i,o,s,m[1]))),2===g?_e&&s>i&&s>o||s=0&&u<=1){for(var h=0,d=c.quadraticAt(e,i,o,u),f=0;fn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);v[0]=-l,v[1]=l;var c=Math.abs(i-r);if(c<1e-4)return 0;if(c%f<1e-4){i=0,r=f;var h=o?1:-1;return a>=v[0]+t&&a<=v[1]+t?h:0}if(o){l=i;i=u(r),r=u(l)}else i=u(i),r=u(r);i>r&&(r+=f);for(var d=0,p=0;p<2;p++){var g=v[p];if(g+t>a){var m=Math.atan2(s,g);h=o?1:-1;m<0&&(m=f+m),(m>=i&&m<=r||m+f>=i&&m+f<=r)&&(m>Math.PI/2&&m<1.5*Math.PI&&(h=-h),d+=h)}}return d}function w(t,e,n,i,l){for(var u=0,c=0,f=0,p=0,v=0,m=0;m1&&(n||(u+=h(c,f,p,v,i,l))),1===m&&(c=t[m],f=t[m+1],p=c,v=f),y){case d.M:p=t[m++],v=t[m++],c=p,f=v;break;case d.L:if(n){if(r.containStroke(c,f,t[m],t[m+1],e,i,l))return!0}else u+=h(c,f,t[m],t[m+1],i,l)||0;c=t[m++],f=t[m++];break;case d.C:if(n){if(o.containStroke(c,f,t[m++],t[m++],t[m++],t[m++],t[m],t[m+1],e,i,l))return!0}else u+=x(c,f,t[m++],t[m++],t[m++],t[m++],t[m],t[m+1],i,l)||0;c=t[m++],f=t[m++];break;case d.Q:if(n){if(a.containStroke(c,f,t[m++],t[m++],t[m],t[m+1],e,i,l))return!0}else u+=_(c,f,t[m++],t[m++],t[m],t[m+1],i,l)||0;c=t[m++],f=t[m++];break;case d.A:var w=t[m++],S=t[m++],M=t[m++],A=t[m++],T=t[m++],I=t[m++];m+=1;var C=1-t[m++],D=Math.cos(T)*M+w,k=Math.sin(T)*A+S;m>1?u+=h(c,f,D,k,i,l):(p=D,v=k);var L=(i-w)*A/M+w;if(n){if(s.containStroke(w,S,A,T,T+I,C,e,L,l))return!0}else u+=b(w,S,A,T,T+I,C,L,l);c=Math.cos(T+I)*M+w,f=Math.sin(T+I)*A+S;break;case d.R:p=c=t[m++],v=f=t[m++];var P=t[m++],O=t[m++];D=p+P,k=v+O;if(n){if(r.containStroke(p,v,D,v,e,i,l)||r.containStroke(D,v,D,k,e,i,l)||r.containStroke(D,k,p,k,e,i,l)||r.containStroke(p,k,p,v,e,i,l))return!0}else u+=h(D,v,D,k,i,l),u+=h(p,k,p,v,i,l);break;case d.Z:if(n){if(r.containStroke(c,f,p,v,e,i,l))return!0}else u+=h(c,f,p,v,i,l);c=p,f=v;break}}return n||g(f,v)||(u+=h(c,f,p,v,i,l)||0),0!==u}function S(t,e,n){return w(t,0,!1,e,n)}function M(t,e,n,i){return w(t,e,!0,n,i)}e.contain=S,e.containStroke=M},d847:function(t,e,n){t.exports=n("5bba")},d864:function(t,e,n){var i=n("79aa");t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},d8d6:function(t,e,n){n("1654"),n("6c1c"),t.exports=n("ccb9").f("iterator")},d8e8:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},d925:function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},d9d0:function(t,e,n){var i=n("6d8b"),r=n("1687"),o=n("f934"),a=n("697e"),s=n("0f55"),l=n("2306"),u=n("3842"),c=n("ef6a"),h=i.each,d=Math.min,f=Math.max,p=Math.floor,g=Math.ceil,v=u.round,m=Math.PI;function y(t,e,n){this._axesMap=i.createHashMap(),this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,n)}function x(t,e){return d(f(t,e[0]),e[1])}function _(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*t,axisNameAvailableWidth:n,axisLabelShow:!0}}function b(t,e){var n,i,r=e.layoutLength,o=e.axisExpandWidth,a=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,c=!1;return t=n&&o<=n+e.axisLength&&a>=i&&a<=i+e.layoutLength},getModel:function(){return this._model},_updateAxesFromSeries:function(t,e){e.eachSeries((function(n){if(t.contains(n,e)){var i=n.getData();h(this.dimensions,(function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(i,i.mapDimension(t)),a.niceScaleExtent(e.scale,e.model)}),this)}}),this)},resize:function(t,e){this._rect=o.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},getRect:function(){return this._rect},_makeLayoutInfo:function(){var t,e=this._model,n=this._rect,i=["x","y"],r=["width","height"],o=e.get("layout"),a="horizontal"===o?0:1,s=n[r[a]],l=[0,s],u=this.dimensions.length,c=x(e.get("axisExpandWidth"),l),h=x(e.get("axisExpandCount")||0,[0,u]),d=e.get("axisExpandable")&&u>3&&u>h&&h>1&&c>0&&s>0,f=e.get("axisExpandWindow");if(f)t=x(f[1]-f[0],l),f[1]=f[0]+t;else{t=x(c*(h-1),l);var m=e.get("axisExpandCenter")||p(u/2);f=[c*m-t/2],f[1]=f[0]+t}var y=(s-t)/(u-h);y<3&&(y=0);var _=[p(v(f[0]/c,1))+1,g(v(f[1]/c,1))-1],b=y/c*f[0];return{layout:o,pixelDimIndex:a,layoutBase:n[i[a]],layoutLength:s,axisBase:n[i[1-a]],axisLength:n[r[1-a]],axisExpandable:d,axisExpandWidth:c,axisCollapseWidth:y,axisExpandWindow:f,axisCount:u,winInnerIndices:_,axisExpandWindow0Pos:b}},_layoutAxes:function(){var t=this._rect,e=this._axesMap,n=this.dimensions,i=this._makeLayoutInfo(),o=i.layout;e.each((function(t){var e=[0,i.axisLength],n=t.inverse?1:0;t.setExtent(e[n],e[1-n])})),h(n,(function(e,n){var a=(i.axisExpandable?b:_)(n,i),s={horizontal:{x:a.position,y:i.axisLength},vertical:{x:0,y:a.position}},l={horizontal:m/2,vertical:0},u=[s[o].x+t.x,s[o].y+t.y],c=l[o],h=r.create();r.rotate(h,h,c),r.translate(h,h,u),this._axesLayout[e]={position:u,rotation:c,transform:h,axisNameAvailableWidth:a.axisNameAvailableWidth,axisLabelShow:a.axisLabelShow,nameTruncateMaxWidth:a.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}}),this)},getAxis:function(t){return this._axesMap.get(t)},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},eachActiveState:function(t,e,n,r){null==n&&(n=0),null==r&&(r=t.count());var o=this._axesMap,a=this.dimensions,s=[],l=[];i.each(a,(function(e){s.push(t.mapDimension(e)),l.push(o.get(e).model)}));for(var u=this.hasAxisBrushed(),c=n;cr*(1-h[0])?(l="jump",a=s-r*(1-h[2])):(a=s-r*h[1])>=0&&(a=s-r*(1-h[1]))<=0&&(a=0),a*=e.axisExpandWidth/u,a?c(a,i,o,"all"):l="none";else{r=i[1]-i[0];var g=o[1]*s/r;i=[f(0,g-r/2)],i[1]=d(o[1],i[0]+r),i[0]=i[1]-r}return{axisExpandWindow:i,behavior:l}}};var w=y;t.exports=w},d9f1:function(t,e,n){var i=n("6d8b"),r=n("6cb7"),o=n("9e47"),a=n("2023"),s=r.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});i.merge(s.prototype,a);var l={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};function u(t,e){return e.type||(e.data?"category":"value")}o("angle",s,u,l.angle),o("radius",s,u,l.radius)},d9f6:function(t,e,n){var i=n("e4ae"),r=n("794b"),o=n("1bc3"),a=Object.defineProperty;e.f=n("8e60")?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return a(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},d9fc:function(t,e,n){var i=n("cbe5"),r=i.extend({type:"circle",shape:{cx:0,cy:0,r:0},buildPath:function(t,e,n){n&&t.moveTo(e.cx+e.r,e.cy),t.arc(e.cx,e.cy,e.r,0,2*Math.PI,!0)}});t.exports=r},dae1:function(t,e,n){var i=n("3eba");n("928d"),n("b369"),n("4411");var r=n("90c2"),o=n("9ca8");i.registerVisual(r),i.registerLayout(o)},db0e:function(t,e,n){var i=n("3eba");n("a8c6"),n("8344"),i.registerPreprocessor((function(t){t.markPoint=t.markPoint||{}}))},db2a:function(t,e,n){"use strict";function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nn.getHeight()&&(i.textPosition="top",l=!0);var u=l?-5-r.height:f+8;a+r.width/2>n.getWidth()?(i.textPosition=["100%",u],i.textAlign="right"):a-r.width/2<0&&(i.textPosition=[0,u],i.textAlign="left")}}))}function m(r,o){var s,u=v[r],c=v[o],h=p[u],f=new l(h,t,t.ecModel);if(i&&null!=i.newTitle&&i.featureName===u&&(h.title=i.newTitle),u&&!c){if(d(u))s={model:f,onclick:f.option.onclick,featureName:u};else{var m=a.get(u);if(!m)return;s=new m(f,e,n)}g[u]=s}else{if(s=g[c],!s)return;s.model=f,s.ecModel=e,s.api=n}u||!c?f.get("show")&&!s.unusable?(y(f,s,u),f.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&i[t].trigger(e)},s.render&&s.render(f,e,n,i)):s.remove&&s.remove(e,n):s.dispose&&s.dispose(e,n)}function y(i,o,a){var l=i.getModel("iconStyle"),u=i.getModel("emphasis.iconStyle"),c=o.getIcons?o.getIcons():i.get("icon"),d=i.get("title")||{};if("string"===typeof c){var p=c,g=d;c={},d={},c[a]=p,d[a]=g}var v=i.iconPaths={};r.each(c,(function(a,c){var p=s.createIcon(a,{},{x:-f/2,y:-f/2,width:f,height:f});p.setStyle(l.getItemStyle()),p.hoverStyle=u.getItemStyle(),p.setStyle({text:d[c],textAlign:u.get("textAlign"),textBorderRadius:u.get("textBorderRadius"),textPadding:u.get("textPadding"),textFill:null});var g=t.getModel("tooltip");g&&g.get("show")&&p.attr("tooltip",r.extend({content:d[c],formatter:g.get("formatter",!0)||function(){return d[c]},formatterParams:{componentType:"toolbox",name:c,title:d[c],$vars:["name","title"]},position:g.get("position",!0)||"bottom"},g.option)),s.setHoverStyle(p),t.get("showTitle")&&(p.__title=d[c],p.on("mouseover",(function(){var e=u.getItemStyle(),n="vertical"===t.get("orient")?null==t.get("right")?"right":"left":null==t.get("bottom")?"bottom":"top";p.setStyle({textFill:u.get("textFill")||e.fill||e.stroke||"#000",textBackgroundColor:u.get("textBackgroundColor"),textPosition:u.get("textPosition")||n})})).on("mouseout",(function(){p.setStyle({textFill:null,textBackgroundColor:null})}))),p.trigger(i.get("iconStatus."+c)||"normal"),h.add(p),p.on("click",r.bind(o.onclick,o,e,n,c)),v[c]=p}))}},updateView:function(t,e,n,i){r.each(this._features,(function(t){t.updateView&&t.updateView(t.model,e,n,i)}))},remove:function(t,e){r.each(this._features,(function(n){n.remove&&n.remove(t,e)})),this.group.removeAll()},dispose:function(t,e){r.each(this._features,(function(n){n.dispose&&n.dispose(t,e)}))}});function d(t){return 0===t.indexOf("my")}t.exports=h},dbdb:function(t,e,n){var i=n("584a"),r=n("e53d"),o="__core-js_shared__",a=r[o]||(r[o]={});(t.exports=function(t,e){return a[t]||(a[t]=void 0!==e?e:{})})("versions",[]).push({version:i.version,mode:n("b8e3")?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},dc20:function(t,e,n){var i=n("8727"),r=i.createElement,o=n("6d8b"),a=n("4942"),s=n("cbe5"),l=n("0da8"),u=n("76a5"),c=n("0c12"),h=n("b16f"),d=n("9fa3"),f=n("bcaa1"),p=n("3f8e"),g=p.path,v=p.image,m=p.text;function y(t){return parseInt(t,10)}function x(t){return t instanceof s?g:t instanceof l?v:t instanceof u?m:g}function _(t,e){return e&&t&&e.parentNode!==t}function b(t,e,n){if(_(t,e)&&n){var i=n.nextSibling;i?t.insertBefore(e,i):t.appendChild(e)}}function w(t,e){if(_(t,e)){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)}}function S(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)}function M(t){return t.__textSvgEl}function A(t){return t.__svgEl}var T=function(t,e,n,i){this.root=t,this.storage=e,this._opts=n=o.extend({},n||{});var a=r("svg");a.setAttribute("xmlns","http://www.w3.org/2000/svg"),a.setAttribute("version","1.1"),a.setAttribute("baseProfile","full"),a.style.cssText="user-select:none;position:absolute;left:0;top:0;";var s=r("g");a.appendChild(s);var l=r("g");a.appendChild(l),this.gradientManager=new h(i,l),this.clipPathManager=new d(i,l),this.shadowManager=new f(i,l);var u=document.createElement("div");u.style.cssText="overflow:hidden;position:relative",this._svgDom=a,this._svgRoot=l,this._backgroundRoot=s,this._viewport=u,t.appendChild(u),u.appendChild(a),this.resize(n.width,n.height),this._visibleList=[]};function I(t){return function(){a('In SVG mode painter not support method "'+t+'"')}}T.prototype={constructor:T,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getSvgDom:function(){return this._svgDom},getSvgRoot:function(){return this._svgRoot},getViewportRootOffset:function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},refresh:function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},setBackgroundColor:function(t){this._backgroundRoot&&this._backgroundNode&&this._backgroundRoot.removeChild(this._backgroundNode);var e=r("rect");e.setAttribute("width",this.getWidth()),e.setAttribute("height",this.getHeight()),e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("id",0),e.style.fill=t,this._backgroundRoot.appendChild(e),this._backgroundNode=e},_paintList:function(t){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused(),this.shadowManager.markAllUnused();var e,n=this._svgRoot,i=this._visibleList,r=t.length,o=[];for(e=0;e=0;--i)if(e[i]===t)return!0;return!1}),n}return null}return n[0]},resize:function(t,e){var n=this._viewport;n.style.display="none";var i=this._opts;if(null!=t&&(i.width=t),null!=e&&(i.height=e),t=this._getSize(0),e=this._getSize(1),n.style.display="",this._width!==t||this._height!==e){this._width=t,this._height=e;var r=n.style;r.width=t+"px",r.height=e+"px";var o=this._svgDom;o.setAttribute("width",t),o.setAttribute("height",e)}this._backgroundNode&&(this._backgroundNode.setAttribute("width",t),this._backgroundNode.setAttribute("height",e))},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,n=["width","height"][t],i=["clientWidth","clientHeight"][t],r=["paddingLeft","paddingTop"][t],o=["paddingRight","paddingBottom"][t];if(null!=e[n]&&"auto"!==e[n])return parseFloat(e[n]);var a=this.root,s=document.defaultView.getComputedStyle(a);return(a[i]||y(s[n])||y(a.style[n]))-(y(s[r])||0)-(y(s[o])||0)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._backgroundRoot=this._svgDom=this._backgroundNode=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},toDataURL:function(){this.refresh();var t=encodeURIComponent(this._svgDom.outerHTML.replace(/>\n\r<"));return"data:image/svg+xml;charset=UTF-8,"+t}},o.each(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","pathToImage"],(function(t){T.prototype[t]=I(t)}));var C=T;t.exports=C},dc2f:function(t,e){var n=function(t,e){this.image=t,this.repeat=e,this.type="pattern"};n.prototype.getCanvasPattern=function(t){return t.createPattern(this.image,this.repeat||"repeat")};var i=n;t.exports=i},dcb3:function(t,e,n){var i=n("6d8b"),r=n("625e"),o=n("2306"),a=n("cd33"),s=n("607d"),l=n("88b3"),u=n("e0d3"),c=u.makeInner,h=c(),d=i.clone,f=i.bind;function p(){}function g(t,e,n,i){v(h(n).lastProp,i)||(h(n).lastProp=i,e?o.updateProps(n,i,t):(n.stopAnimation(),n.attr(i)))}function v(t,e){if(i.isObject(t)&&i.isObject(e)){var n=!0;return i.each(e,(function(e,i){n=n&&v(t[i],e)})),!!n}return t===e}function m(t,e){t[e.get("label.show")?"show":"hide"]()}function y(t){return{position:t.position.slice(),rotation:t.rotation||0}}function x(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse((function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)}))}p.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,n,r){var a=e.get("value"),s=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=n,r||this._lastValue!==a||this._lastStatus!==s){this._lastValue=a,this._lastStatus=s;var l=this._group,u=this._handle;if(!s||"hide"===s)return l&&l.hide(),void(u&&u.hide());l&&l.show(),u&&u.show();var c={};this.makeElOption(c,a,t,e,n);var h=c.graphicKey;h!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=h;var d=this._moveAnimation=this.determineAnimation(t,e);if(l){var f=i.curry(g,e,d);this.updatePointerEl(l,c,f,e),this.updateLabelEl(l,c,f,e)}else l=this._group=new o.Group,this.createPointerEl(l,c,t,e),this.createLabelEl(l,c,t,e),n.getZr().add(l);x(l,e,!0),this._renderHandle(a)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var n=e.get("animation"),i=t.axis,r="category"===i.type,o=e.get("snap");if(!o&&!r)return!1;if("auto"===n||null==n){var s=this.animationThreshold;if(r&&i.getBandWidth()>s)return!0;if(o){var l=a.getAxisInfo(t).seriesDataCount,u=i.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return!0===n},makeElOption:function(t,e,n,i,r){},createPointerEl:function(t,e,n,i){var r=e.pointer;if(r){var a=h(t).pointerEl=new o[r.type](d(e.pointer));t.add(a)}},createLabelEl:function(t,e,n,i){if(e.label){var r=h(t).labelEl=new o.Rect(d(e.label));t.add(r),m(r,i)}},updatePointerEl:function(t,e,n){var i=h(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,n,i){var r=h(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{shape:e.label.shape,position:e.label.position}),m(r,i))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,r=this._api.getZr(),a=this._handle,u=n.getModel("handle"),c=n.get("status");if(!u.get("show")||!c||"hide"===c)return a&&r.remove(a),void(this._handle=null);this._handle||(e=!0,a=this._handle=o.createIcon(u.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){s.stop(t.event)},onmousedown:f(this._onHandleDragMove,this,0,0),drift:f(this._onHandleDragMove,this),ondragend:f(this._onHandleDragEnd,this)}),r.add(a)),x(a,n,!1);var h=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];a.setStyle(u.getItemStyle(null,h));var d=u.get("size");i.isArray(d)||(d=[d,d]),a.attr("scale",[d[0]/2,d[1]/2]),l.createOrUpdate(this,"_doDispatchAxisPointer",u.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},_moveHandleToValue:function(t,e){g(this._axisPointerModel,!e&&this._moveAnimation,this._handle,y(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(y(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(y(i)),h(n).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){var t=this._handle;if(t){var e=this._payloadInfo,n=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:e.cursorPoint[0],y:e.cursorPoint[1],tooltipOption:e.tooltipOption,axesInfo:[{axisDim:n.axis.dim,axisIndex:n.componentIndex}]})}},_onHandleDragEnd:function(t){this._dragging=!1;var e=this._handle;if(e){var n=this._axisPointerModel.get("value");this._moveHandleToValue(n),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}}},p.prototype.constructor=p,r.enableClassExtend(p);var _=p;t.exports=_},dcbc:function(t,e,n){var i=n("2aba");t.exports=function(t,e,n){for(var r in e)i(t,r,e[r],n);return t}},dcea:function(t,e,n){var i=n("6d8b"),r=n("e887"),o=n("2306"),a=n("cbe5"),s=["itemStyle"],l=["emphasis","itemStyle"],u=r.extend({type:"boxplot",render:function(t,e,n){var i=t.getData(),r=this.group,o=this._data;this._data||r.removeAll();var a="horizontal"===t.get("layout")?1:0;i.diff(o).add((function(t){if(i.hasValue(t)){var e=i.getItemLayout(t),n=h(e,i,t,a,!0);i.setItemGraphicEl(t,n),r.add(n)}})).update((function(t,e){var n=o.getItemGraphicEl(e);if(i.hasValue(t)){var s=i.getItemLayout(t);n?d(s,n,i,t):n=h(s,i,t,a),r.add(n),i.setItemGraphicEl(t,n)}else r.remove(n)})).remove((function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)})).execute(),this._data=i},remove:function(t){var e=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl((function(t){t&&e.remove(t)}))},dispose:i.noop}),c=a.extend({type:"boxplotBoxPath",shape:{},buildPath:function(t,e){var n=e.points,i=0;for(t.moveTo(n[i][0],n[i][1]),i++;i<4;i++)t.lineTo(n[i][0],n[i][1]);for(t.closePath();i=0;n--)s.asc(e[n])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var n=e[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var i=0,r=e.length;i=0;i--){var r=t[i];"."===r?t.splice(i,1):".."===r?(t.splice(i,1),n++):n&&(t.splice(i,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function i(t){"string"!==typeof t&&(t+="");var e,n=0,i=-1,r=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!r){n=e+1;break}}else-1===i&&(r=!1,i=e+1);return-1===i?"":t.slice(n,i)}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],i=0;i=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,i="/"===a.charAt(0))}return e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"),(i?"/":"")+e||"."},e.normalize=function(t){var i=e.isAbsolute(t),a="/"===o(t,-1);return t=n(r(t.split("/"),(function(t){return!!t})),!i).join("/"),t||i||(t="."),t&&a&&(t+="/"),(i?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function i(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var r=i(t.split("/")),o=i(n.split("/")),a=Math.min(r.length,o.length),s=a,l=0;l=1;--o)if(e=t.charCodeAt(o),47===e){if(!r){i=o;break}}else r=!1;return-1===i?n?"/":".":n&&1===i?"/":t.slice(0,i)},e.basename=function(t,e){var n=i(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,i=-1,r=!0,o=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===i&&(r=!1,i=a+1),46===s?-1===e?e=a:1!==o&&(o=1):-1!==e&&(o=-1);else if(!r){n=a+1;break}}return-1===e||-1===i||0===o||1===o&&e===i-1&&e===n+1?"":t.slice(e,i)};var o="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("4362"))},e017:function(t,e,n){(function(e){(function(e,n){t.exports=n()})(0,(function(){"use strict";var t=function(t){var e=t.id,n=t.viewBox,i=t.content;this.id=e,this.viewBox=n,this.content=i};t.prototype.stringify=function(){return this.content},t.prototype.toString=function(){return this.stringify()},t.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach((function(e){return delete t[e]}))};var n=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n};"undefined"!==typeof window?window:"undefined"!==typeof e||"undefined"!==typeof self&&self;function i(t,e){return e={exports:{}},t(e,e.exports),e.exports}var r=i((function(t,e){(function(e,n){t.exports=n()})(0,(function(){function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(t){return Array.isArray(t)?[]:{}}function n(n,i){var r=i&&!0===i.clone;return r&&t(n)?o(e(n),n,i):n}function i(e,i,r){var a=e.slice();return i.forEach((function(i,s){"undefined"===typeof a[s]?a[s]=n(i,r):t(i)?a[s]=o(e[s],i,r):-1===e.indexOf(i)&&a.push(n(i,r))})),a}function r(e,i,r){var a={};return t(e)&&Object.keys(e).forEach((function(t){a[t]=n(e[t],r)})),Object.keys(i).forEach((function(s){t(i[s])&&e[s]?a[s]=o(e[s],i[s],r):a[s]=n(i[s],r)})),a}function o(t,e,o){var a=Array.isArray(e),s=o||{arrayMerge:i},l=s.arrayMerge||i;return a?Array.isArray(t)?l(t,e,o):n(e,o):r(t,e,o)}return o.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return o(t,n,e)}))},o}))})),o=i((function(t,e){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};e.default=n,t.exports=e.default})),a=function(t){return Object.keys(t).map((function(e){var n=t[e].toString().replace(/"/g,""");return e+'="'+n+'"'})).join(" ")},s=o.svg,l=o.xlink,u={};u[s.name]=s.uri,u[l.name]=l.uri;var c=function(t,e){void 0===t&&(t="");var n=r(u,e||{}),i=a(n);return""+t+""},h=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var i={isMounted:{}};return i.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"===typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return n(c(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,i),e}(t);return h}))}).call(this,n("c8ba"))},e057:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=n("2306"),a=n("c775"),s=a.getDefaultLabel,l=n("3301"),u=n("9d57"),c=u.getLayoutOnAxis,h=n("80f0"),d=n("4f85"),f=n("4319"),p=n("e887"),g=n("b0af"),v=g.createClipPath,m=n("aa3e"),y=n("00d8"),x=n("307b"),_=n("eaeb"),b=n("471e"),w=o.CACHED_LABEL_STYLE_PROPERTIES,S=["itemStyle"],M=["emphasis","itemStyle"],A=["label"],T=["emphasis","label"],I="e\0\0",C={cartesian2d:m,geo:y,singleAxis:x,polar:_,calendar:b};function D(t){var e,n=t.type;if("path"===n){var i=t.shape,r=null!=i.width&&null!=i.height?{x:i.x||0,y:i.y||0,width:i.width,height:i.height}:null,a=j(i);e=o.makePath(a,null,r,i.layout||"center"),e.__customPathData=a}else if("image"===n)e=new o.Image({}),e.__customImagePath=t.style.image;else if("text"===n)e=new o.Text({}),e.__customText=t.style.text;else if("group"===n)e=new o.Group;else{if("compoundPath"===n)throw new Error('"compoundPath" is not supported yet.');var s=o.getShapeClass(n);e=new s}return e.__customGraphicType=n,e.name=t.name,e}function k(t,e,n,i,a,s,l){var u={},c=n.style||{};if(n.shape&&(u.shape=r.clone(n.shape)),n.position&&(u.position=n.position.slice()),n.scale&&(u.scale=n.scale.slice()),n.origin&&(u.origin=n.origin.slice()),n.rotation&&(u.rotation=n.rotation),"image"===t.type&&n.style){var h=u.style={};r.each(["x","y","width","height"],(function(e){L(e,h,c,t.style,s)}))}if("text"===t.type&&n.style){h=u.style={};r.each(["x","y"],(function(e){L(e,h,c,t.style,s)})),!c.hasOwnProperty("textFill")&&c.fill&&(c.textFill=c.fill),!c.hasOwnProperty("textStroke")&&c.stroke&&(c.textStroke=c.stroke)}if("group"!==t.type&&(t.useStyle(c),s)){t.style.opacity=0;var d=c.opacity;null==d&&(d=1),o.initProps(t,{style:{opacity:d}},i,e)}s?t.attr(u):o.updateProps(t,u,i,e),n.hasOwnProperty("z2")&&t.attr("z2",n.z2||0),n.hasOwnProperty("silent")&&t.attr("silent",n.silent),n.hasOwnProperty("invisible")&&t.attr("invisible",n.invisible),n.hasOwnProperty("ignore")&&t.attr("ignore",n.ignore),n.hasOwnProperty("info")&&t.attr("info",n.info);var f=n.styleEmphasis;o.setElementHoverStyle(t,f),l&&o.setAsHighDownDispatcher(t,!1!==f)}function L(t,e,n,i,r){null==n[t]||r||(e[t]=n[t],n[t]=i[t])}function P(t,e,n,i){var a=t.get("renderItem"),l=t.coordinateSystem,u={};l&&(u=l.prepareCustoms?l.prepareCustoms():C[l.type](l));var h,d,f,p,g,v=r.defaults({getWidth:i.getWidth,getHeight:i.getHeight,getZr:i.getZr,getDevicePixelRatio:i.getDevicePixelRatio,value:_,style:b,styleEmphasis:w,visual:I,barLayout:D,currentSeriesIndices:k,font:L},u.api||{}),m={context:{},seriesId:t.id,seriesName:t.name,seriesIndex:t.seriesIndex,coordSys:u.coordSys,dataInsideLength:e.count(),encode:O(t.getData())},y=!0;return function(t,n){return h=t,y=!0,a&&a(r.defaults({dataIndexInside:t,dataIndex:e.getRawIndex(t),actionType:n?n.type:null},m),v)};function x(t){null==t&&(t=h),y&&(d=e.getItemModel(t),f=d.getModel(A),p=d.getModel(T),g=e.getItemVisual(t,"color"),y=!1)}function _(t,n){return null==n&&(n=h),e.get(e.getDimension(t||0),n)}function b(n,i){null==i&&(i=h),x(i);var a=d.getModel(S).getItemStyle();null!=g&&(a.fill=g);var l=e.getItemVisual(i,"opacity");null!=l&&(a.opacity=l);var u=n?F(n,f):f;return o.setTextStyle(a,u,null,{autoColor:g,isRectText:!0}),a.text=u.getShallow("show")?r.retrieve2(t.getFormattedLabel(i,"normal"),s(e,i)):null,n&&H(a,n),a}function w(n,i){null==i&&(i=h),x(i);var a=d.getModel(M).getItemStyle(),l=n?F(n,p):p;return o.setTextStyle(a,l,null,{isRectText:!0},!0),a.text=l.getShallow("show")?r.retrieve3(t.getFormattedLabel(i,"emphasis"),t.getFormattedLabel(i,"normal"),s(e,i)):null,n&&H(a,n),a}function I(t,n){return null==n&&(n=h),e.getItemVisual(n,t)}function D(t){if(l.getBaseAxis){var e=l.getBaseAxis();return c(r.defaults({axis:e},t),i)}}function k(){return n.getCurrentSeriesIndices()}function L(t){return o.getFont(t,n)}}function O(t){var e={};return r.each(t.dimensions,(function(n,i){var r=t.getDimensionInfo(n);if(!r.isExtraCoord){var o=r.coordDim,a=e[o]=e[o]||[];a[r.coordDimIndex]=i}})),e}function E(t,e,n,i,r,o){return t=R(t,e,n,i,r,o,!0),t&&o.setItemGraphicEl(e,t),t}function R(t,e,n,i,r,o,a){var s=!n;n=n||{};var l=n.type,u=n.shape,c=n.style;if(t&&(s||null!=l&&l!==t.__customGraphicType||"path"===l&&W(u)&&j(u)!==t.__customPathData||"image"===l&&U(c,"image")&&c.image!==t.__customImagePath||"text"===l&&U(u,"text")&&c.text!==t.__customText)&&(r.remove(t),t=null),!s){var h=!t;return!t&&(t=D(n)),k(t,e,n,i,o,h,a),"group"===l&&N(t,e,n,i,o),r.add(t),t}}function N(t,e,n,i,r){var o=n.children,a=o?o.length:0,s=n.$mergeChildren,l="byName"===s||n.diffChildrenByName,u=!1===s;if(a||l||u)if(l)z({oldChildren:t.children()||[],newChildren:o||[],dataIndex:e,animatableModel:i,group:t,data:r});else{u&&t.removeAll();for(var c=0;c40&&(u=Math.max(1,Math.floor(s/40)));for(var c=a[0],d=t.dataToCoord(c+1)-t.dataToCoord(c),f=Math.abs(d*Math.cos(i)),p=Math.abs(d*Math.sin(i)),g=0,v=0;c<=a[1];c+=u){var m=0,y=0,x=r.getBoundingRect(n(c),e.font,"center","top");m=1.3*x.width,y=1.3*x.height,g=Math.max(g,m,7),v=Math.max(v,y,7)}var _=g/f,b=v/p;isNaN(_)&&(_=1/0),isNaN(b)&&(b=1/0);var w=Math.max(0,Math.floor(Math.min(_,b))),M=h(t.model),A=t.getExtent(),T=M.lastAutoInterval,I=M.lastTickCount;return null!=T&&null!=I&&Math.abs(T-w)<=1&&Math.abs(I-s)<=1&&T>w&&M.axisExtend0===A[0]&&M.axisExtend1===A[1]?w=T:(M.lastTickCount=s,M.lastAutoInterval=w,M.axisExtend0=A[0],M.axisExtend1=A[1]),w}function S(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function M(t,e,n){var i=l(t),r=t.scale,o=r.getExtent(),a=t.getLabelModel(),s=[],u=Math.max((e||0)+1,1),h=o[0],d=r.count();0!==h&&u>1&&d/u>2&&(h=Math.round(Math.ceil(h/u)*u));var f=c(t),p=a.get("showMinLabel")||f,g=a.get("showMaxLabel")||f;p&&h!==o[0]&&m(o[0]);for(var v=h;v<=o[1];v+=u)m(v);function m(t){s.push(n?t:{formattedLabel:i(t),rawLabel:r.getLabel(t),tickValue:t})}return g&&v-u!==o[1]&&m(o[1]),s}function A(t,e,n){var r=t.scale,o=l(t),a=[];return i.each(r.getTicks(),(function(t){var i=r.getLabel(t);e(t,i)&&a.push(n?t:{formattedLabel:o(t),rawLabel:i,tickValue:t})})),a}e.createAxisLabels=d,e.createAxisTicks=f,e.calculateCategoryInterval=w},e0b8:function(t,e,n){"use strict";var i=n("7726"),r=n("5ca1"),o=n("2aba"),a=n("dcbc"),s=n("67ab"),l=n("4a59"),u=n("f605"),c=n("d3f4"),h=n("79e5"),d=n("5cc5"),f=n("7f20"),p=n("5dbc");t.exports=function(t,e,n,g,v,m){var y=i[t],x=y,_=v?"set":"add",b=x&&x.prototype,w={},S=function(t){var e=b[t];o(b,t,"delete"==t||"has"==t?function(t){return!(m&&!c(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof x&&(m||b.forEach&&!h((function(){(new x).entries().next()})))){var M=new x,A=M[_](m?{}:-0,1)!=M,T=h((function(){M.has(1)})),I=d((function(t){new x(t)})),C=!m&&h((function(){var t=new x,e=5;while(e--)t[_](e,e);return!t.has(-0)}));I||(x=e((function(e,n){u(e,x,t);var i=p(new y,e,x);return void 0!=n&&l(n,v,i[_],i),i})),x.prototype=b,b.constructor=x),(T||C)&&(S("delete"),S("has"),v&&S("get")),(C||A)&&S(_),m&&b.clear&&delete b.clear}else x=g.getConstructor(e,t,v,_),a(x.prototype,n),s.NEED=!0;return f(x,t),w[t]=x,r(r.G+r.W+r.F*(x!=y),w),m||g.setStrong(x,t,v),x}},e0d3:function(t,e,n){var i=n("6d8b"),r=n("22d1"),o=i.each,a=i.isObject,s=i.isArray,l="series\0";function u(t){return t instanceof Array?t:null==t?[]:[t]}function c(t,e,n){if(t){t[e]=t[e]||{},t.emphasis=t.emphasis||{},t.emphasis[e]=t.emphasis[e]||{};for(var i=0,r=n.length;i=n.length&&n.push({option:t})}})),n}function g(t){var e=i.createHashMap();o(t,(function(t,n){var i=t.exist;i&&e.set(i.id,t)})),o(t,(function(t,n){var r=t.option;i.assert(!r||null==r.id||!e.get(r.id)||e.get(r.id)===t,"id duplicates: "+(r&&r.id)),r&&null!=r.id&&e.set(r.id,t),!t.keyInfo&&(t.keyInfo={})})),o(t,(function(t,n){var i=t.exist,r=t.option,o=t.keyInfo;if(a(r)){if(o.name=null!=r.name?r.name+"":i?i.name:l+n,i)o.id=i.id;else if(null!=r.id)o.id=r.id+"";else{var s=0;do{o.id="\0"+o.name+"\0"+s++}while(e.get(o.id))}e.set(o.id,t)}}))}function v(t){var e=t.name;return!(!e||!e.indexOf(l))}function m(t){return a(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function y(t,e){var n={},i={};return r(t||[],n),r(e||[],i,n),[o(n),o(i)];function r(t,e,n){for(var i=0,r=t.length;i=e[0]&&t<=e[1]},r.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},r.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},r.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},r.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},r.prototype.isBlank=function(){return this._isBlank},r.prototype.setBlank=function(t){this._isBlank=t},r.prototype.getLabel=null,i.enableClassExtend(r),i.enableClassManagement(r,{registerWhenExtend:!0});var o=r;t.exports=o},e11e:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},e1fc:function(t,e,n){var i=n("6d8b"),r=n("d5b7"),o=n("9850"),a=function(t){for(var e in t=t||{},r.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};a.prototype={constructor:a,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,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,n=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof a&&t.addChildrenToStorage(e)),n&&n.refresh()},remove:function(t){var e=this.__zr,n=this.__storage,r=this._children,o=i.indexOf(r,t);return o<0||(r.splice(o,1),t.parent=null,n&&(n.delFromStorage(t),t instanceof a&&t.delChildrenFromStorage(n)),e&&e.refresh()),this},removeAll:function(){var t,e,n=this._children,i=this.__storage;for(e=0;e1e-4)return p[0]=t-n,p[1]=e-r,g[0]=t+n,void(g[1]=e+r);if(c[0]=l(o)*n+t,c[1]=s(o)*r+e,h[0]=l(a)*n+t,h[1]=s(a)*r+e,v(p,c,h),m(g,c,h),o%=u,o<0&&(o+=u),a%=u,a<0&&(a+=u),o>a&&!f?a+=u:oo&&(d[0]=l(_)*n+t,d[1]=s(_)*r+e,v(p,d,p),m(g,d,g))}e.fromPoints=f,e.fromLine=p,e.fromCubic=m,e.fromQuadratic=y,e.fromArc=x},e265:function(t,e,n){t.exports=n("ed33")},e468:function(t,e,n){var i=n("e46b"),r=n("6d8b"),o=n("2f45"),a=o.getDimensionTypeByAxis,s=n("0f99"),l=s.makeSeriesEncodeForAxisCoordSys,u={_baseAxisDim:null,getInitialData:function(t,e){var n,o,s=e.getComponent("xAxis",this.get("xAxisIndex")),u=e.getComponent("yAxis",this.get("yAxisIndex")),c=s.get("type"),h=u.get("type");"category"===c?(t.layout="horizontal",n=s.getOrdinalMeta(),o=!0):"category"===h?(t.layout="vertical",n=u.getOrdinalMeta(),o=!0):t.layout=t.layout||"horizontal";var d=["x","y"],f="horizontal"===t.layout?0:1,p=this._baseAxisDim=d[f],g=d[1-f],v=[s,u],m=v[f].get("type"),y=v[1-f].get("type"),x=t.data;if(x&&o){var _=[];r.each(x,(function(t,e){var n;t.value&&r.isArray(t.value)?(n=t.value.slice(),t.value.unshift(e)):r.isArray(t)?(n=t.slice(),t.unshift(e)):n=t,_.push(n)})),t.data=_}var b=this.defaultValueDimensions,w=[{name:p,type:a(m),ordinalMeta:n,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:g,type:a(y),dimsDef:b.slice()}];return i(this,{coordDimensions:w,dimensionsCount:b.length+1,encodeDefaulter:r.curry(l,w,this)})},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}};e.seriesModelMixin=u},e46b:function(t,e,n){var i=n("b1d4"),r=n("6179"),o=n("6d8b"),a=o.extend,s=o.isArray;function l(t,e,n){e=s(e)&&{coordDimensions:e}||a({},e);var o=t.getSource(),l=i(o,e),u=new r(l,t);return u.initData(o,n),u}t.exports=l},e47b:function(t,e,n){var i=n("e0d3"),r=i.makeInner,o=i.normalizeToArray,a=r();function s(t,e){for(var n=t.length,i=0;ie)return t[i];return t[n-1]}var l={clearColorPalette:function(){a(this).colorIdx=0,a(this).colorNameMap={}},getColorFromPalette:function(t,e,n){e=e||this;var i=a(e),r=i.colorIdx||0,l=i.colorNameMap=i.colorNameMap||{};if(l.hasOwnProperty(t))return l[t];var u=o(this.get("color",!0)),c=this.get("colorLayer",!0),h=null!=n&&c?s(c,n):u;if(h=h||u,h&&h.length){var d=h[r];return t&&(l[t]=d),i.colorIdx=(r+1)%h.length,d}}};t.exports=l},e4ae:function(t,e,n){var i=n("f772");t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},e4d1:function(t,e,n){n("6932"),n("3a56"),n("7dcf"),n("3790"),n("2325"),n("2c17"),n("9e87")},e53d:function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},e630:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var i=n("774e"),r=n.n(i),o=n("db2a");function a(t,e){if(t){if("string"===typeof t)return Object(o["a"])(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?r()(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(o["a"])(t,e):void 0}}},e683:function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},e6cd:function(t,e,n){var i=n("6d8b");function r(){var t,e=[],n={};return{add:function(t,r,o,a,s){return i.isString(a)&&(s=a,a=0),!n[t.id]&&(n[t.id]=1,e.push({el:t,target:r,time:o,delay:a,easing:s}),!0)},done:function(e){return t=e,this},start:function(){for(var i=e.length,r=0,o=e.length;rl)i(s,n=e[l++])&&(~o(u,n)||u.push(n));return u}},e7aa:function(t,e,n){var i=n("2306"),r=n("c775"),o=r.getDefaultLabel;function a(t,e,n,r,a,l,u){var c=n.getModel("label"),h=n.getModel("emphasis.label");i.setLabelStyle(t,e,c,h,{labelFetcher:a,labelDataIndex:l,defaultText:o(a.getData(),l),isRectText:!0,autoColor:r}),s(t),s(e)}function s(t,e){"outside"===t.textPosition&&(t.textPosition=e)}e.setLabel=a},e7d2:function(t,e,n){var i=n("4a3f");function r(t,e,n,r,o,a,s,l,u,c,h){if(0===u)return!1;var d=u;if(h>e+d&&h>r+d&&h>a+d&&h>l+d||ht+d&&c>n+d&&c>o+d&&c>s+d||cf&&(d=0,h={}),d++,h[n]=r,r}function x(t,e,n,i,r,o,a,s){return a?b(t,e,n,i,r,o,a,s):_(t,e,n,i,r,o,s)}function _(t,e,n,r,o,a,s){var l=P(t,e,o,a,s),u=y(t,e);o&&(u+=o[1]+o[3]);var c=l.outerHeight,h=w(0,u,n),d=S(0,c,r),f=new i(h,d,u,c);return f.lineHeight=l.lineHeight,f}function b(t,e,n,r,o,a,s,l){var u=O(t,{rich:s,truncate:l,font:e,textAlign:n,textPadding:o,textLineHeight:a}),c=u.outerWidth,h=u.outerHeight,d=w(0,c,n),f=S(0,h,r);return new i(d,f,c,h)}function w(t,e,n){return"right"===n?t-=e:"center"===n&&(t-=e/2),t}function S(t,e,n){return"middle"===n?t-=e/2:"bottom"===n&&(t-=e),t}function M(t,e,n){var i=e.textPosition,r=e.textDistance,o=n.x,a=n.y;r=r||0;var s=n.height,l=n.width,u=s/2,c="left",h="top";switch(i){case"left":o-=r,a+=u,c="right",h="middle";break;case"right":o+=r+l,a+=u,h="middle";break;case"top":o+=l/2,a-=r,c="center",h="bottom";break;case"bottom":o+=l/2,a+=s+r,c="center";break;case"inside":o+=l/2,a+=u,c="center",h="middle";break;case"insideLeft":o+=r,a+=u,h="middle";break;case"insideRight":o+=l-r,a+=u,c="right",h="middle";break;case"insideTop":o+=l/2,a+=r,c="center";break;case"insideBottom":o+=l/2,a+=s-r,c="center",h="bottom";break;case"insideTopLeft":o+=r,a+=r;break;case"insideTopRight":o+=l-r,a+=r,c="right";break;case"insideBottomLeft":o+=r,a+=s-r,h="bottom";break;case"insideBottomRight":o+=l-r,a+=s-r,c="right",h="bottom";break}return t=t||{},t.x=o,t.y=a,t.textAlign=c,t.textVerticalAlign=h,t}function A(t,e,n){var i={textPosition:t,textDistance:n};return M({},i,e)}function T(t,e,n,i,r){if(!e)return"";var o=(t+"").split("\n");r=I(e,n,i,r);for(var a=0,s=o.length;a=o;u++)a-=o;var c=y(n,e);return c>a&&(n="",c=0),a=t-c,i.ellipsis=n,i.ellipsisWidth=c,i.contentWidth=a,i.containerWidth=t,i}function C(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=y(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?D(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;t=t.substr(0,s),o=y(t,i)}return""===t&&(t=e.placeholder),t}function D(t,e,n,i){for(var r=0,o=0,a=t.length;oh)t="",a=[];else if(null!=d)for(var f=I(d-(n?n[1]+n[3]:0),e,r.ellipsis,{minChar:r.minChar,placeholder:r.placeholder}),p=0,g=a.length;po&&E(n,t.substring(o,a)),E(n,i[2],i[1]),o=p.lastIndex}om)return{lines:[],width:0,height:0};M.textWidth=y(M.text,C);var L=A.textWidth,P=null==L||"auto"===L;if("string"===typeof L&&"%"===L.charAt(L.length-1))M.percentWidth=L,d.push(M),L=0;else{if(P){L=M.textWidth;var O=A.textBackgroundColor,R=O&&O.image;R&&(R=r.findExistImage(R),r.isImageReady(R)&&(L=Math.max(L,R.width*D/R.height)))}var N=I?I[1]+I[3]:0;L+=N;var z=null!=v?v-w:null;null!=z&&z"],r.isArray(t)&&(t=t.slice(),i=!0),o=e?t:i?[c(t[0]),c(t[1])]:c(t),r.isString(u)?u.replace("{value}",i?o[0]:o).replace("{value2}",i?o[1]:o):r.isFunction(u)?i?u(t[0],t[1]):u(t):i?t[0]===l[0]?n[0]+" "+o[1]:t[1]===l[1]?n[1]+" "+o[0]:o[0]+" - "+o[1]:o;function c(t){return t===l[0]?"min":t===l[1]?"max":(+t).toFixed(Math.min(s,20))}},resetExtent:function(){var t=this.option,e=g([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,n=t.dimensions;if(null!=e||n.length){if(null!=e)return t.getDimension(e);for(var i=t.dimensions,r=i.length-1;r>=0;r--){var o=i[r],a=t.getDimensionInfo(o);if(!a.isCalculationCoord)return o}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){var t=this.ecModel,e=this.option,n={inRange:e.inRange,outOfRange:e.outOfRange},i=e.target||(e.target={}),o=e.controller||(e.controller={});r.merge(i,n),r.merge(o,n);var l=this.isCategory();function u(n){f(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")},p(this.stateList,(function(t){var e=n[t];if(r.isString(e)){var i=a.get(e,"active",l);i?(n[t]={},n[t][e]=i):delete n[t]}}),this)}function c(t,e,n){var i=t[e],r=t[n];i&&!r&&(r=t[n]={},p(i,(function(t,e){if(s.isValidType(e)){var n=a.get(e,"inactive",l);null!=n&&(r[e]=n,"color"!==e||r.hasOwnProperty("opacity")||r.hasOwnProperty("colorAlpha")||(r.opacity=[0,0]))}})))}function g(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,i=this.get("inactiveColor");p(this.stateList,(function(o){var a=this.itemSize,s=t[o];s||(s=t[o]={color:l?i:[i]}),null==s.symbol&&(s.symbol=e&&r.clone(e)||(l?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=n&&r.clone(n)||(l?a[0]:[a[0],a[0]])),s.symbol=h(s.symbol,(function(t){return"none"===t||"square"===t?"roundRect":t}));var u=s.symbolSize;if(null!=u){var c=-1/0;d(u,(function(t){t>c&&(c=t)})),s.symbolSize=h(u,(function(t){return v(t,[0,c],[0,a[0]],!0)}))}}),this)}u.call(this,i),u.call(this,o),c.call(this,i,"inRange","outOfRange"),g.call(this,o)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:m,getValueState:m,getVisualMeta:m}),x=y;t.exports=x},eaeb:function(t,e,n){var i=n("6d8b");function r(t,e){return i.map(["Radius","Angle"],(function(n,i){var r=this["get"+n+"Axis"](),o=e[i],a=t[i]/2,s="dataTo"+n,l="category"===r.type?r.getBandWidth():Math.abs(r[s](o-a)-r[s](o+a));return"Angle"===n&&(l=l*Math.PI/180),l}),this)}function o(t){var e=t.getRadiusAxis(),n=t.getAngleAxis(),o=e.getExtent();return o[0]>o[1]&&o.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:o[1],r0:o[0]},api:{coord:i.bind((function(i){var r=e.dataToRadius(i[0]),o=n.dataToAngle(i[1]),a=t.coordToPoint([r,o]);return a.push(r,o*Math.PI/180),a})),size:i.bind(r,t)}}}t.exports=o},eb6b:function(t,e,n){var i=n("6d8b"),r=n("e0d3"),o=r.makeInner,a=n("cd33"),s=n("133d"),l=i.each,u=i.curry,c=o();function h(t,e,n){var r=t.currTrigger,o=[t.x,t.y],a=t,c=t.dispatchAction||i.bind(n.dispatchAction,n),h=e.getComponent("axisPointer").coordSysAxesInfo;if(h){b(o)&&(o=s({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var f=b(o),w=a.axesInfo,S=h.axesInfo,M="leave"===r||b(o),A={},T={},I={list:[],map:{}},C={showPointer:u(p,T),showTooltip:u(g,I)};l(h.coordSysMap,(function(t,e){var n=f||t.containPoint(o);l(h.coordSysAxesInfo[e],(function(t,e){var i=t.axis,r=x(w,t);if(!M&&n&&(!w||r)){var a=r&&r.value;null!=a||f||(a=i.pointToData(o)),null!=a&&d(t,a,C,!1,A)}}))}));var D={};return l(S,(function(t,e){var n=t.linkGroup;n&&!T[e]&&l(n.axesInfo,(function(e,i){var r=T[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,_(e),_(t)))),D[t.key]=o}}))})),l(D,(function(t,e){d(S[e],t,C,!0,A)})),v(T,S,A),m(I,o,t,c),y(S,c,n),A}}function d(t,e,n,r,o){var a=t.axis;if(!a.scale.isBlank()&&a.containData(e))if(t.involveSeries){var s=f(e,t),l=s.payloadBatch,u=s.snapToValue;l[0]&&null==o.seriesIndex&&i.extend(o,l[0]),!r&&t.snap&&a.containData(u)&&null!=u&&(e=u),n.showPointer(t,e,l,o),n.showTooltip(t,s,u)}else n.showPointer(t,e)}function f(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return l(e.seriesModels,(function(e,u){var c,h,d=e.getData().mapDimension(i,!0);if(e.getAxisTooltipData){var f=e.getAxisTooltipData(d,t,n);h=f.dataIndices,c=f.nestestValue}else{if(h=e.getData().indicesOfNearest(d[0],t,"category"===n.type?.5:null),!h.length)return;c=e.getData().get(d[0],h[0])}if(null!=c&&isFinite(c)){var p=t-c,g=Math.abs(p);g<=a&&((g=0&&s<0)&&(a=g,s=p,r=c,o.length=0),l(h,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:r}}function p(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function g(t,e,n,i){var r=n.payloadBatch,o=e.axis,s=o.model,l=e.axisPointerModel;if(e.triggerTooltip&&r.length){var u=e.coordSys.model,c=a.makeKey(u),h=t.map[c];h||(h=t.map[c]={coordSysId:u.id,coordSysIndex:u.componentIndex,coordSysType:u.type,coordSysMainType:u.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:o.dim,axisIndex:s.componentIndex,axisType:s.type,axisId:s.id,value:i,valueLabelOpt:{precision:l.get("label.precision"),formatter:l.get("label.formatter")},seriesDataIndices:r.slice()})}}function v(t,e,n){var i=n.axesInfo=[];l(e,(function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})}))}function m(t,e,n,i){if(!b(e)&&t.list.length){var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}else i({type:"hideTip"})}function y(t,e,n){var r=n.getZr(),o="axisPointerLastHighlights",a=c(r)[o]||{},s=c(r)[o]={};l(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&l(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;s[e]=t}))}));var u=[],h=[];i.each(a,(function(t,e){!s[e]&&h.push(t)})),i.each(s,(function(t,e){!a[e]&&u.push(t)})),h.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,batch:h}),u.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,batch:u})}function x(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}function _(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function b(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}t.exports=h},ebd6:function(t,e,n){var i=n("cb7c"),r=n("d8e8"),o=n("2b4c")("species");t.exports=function(t,e){var n,a=i(t).constructor;return void 0===a||void 0==(n=i(a)[o])?e:r(n)}},ebf9:function(t,e,n){var i=n("3eba");i.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))},ebfd:function(t,e,n){var i=n("62a0")("meta"),r=n("f772"),o=n("07e3"),a=n("d9f6").f,s=0,l=Object.isExtensible||function(){return!0},u=!n("294c")((function(){return l(Object.preventExtensions({}))})),c=function(t){a(t,i,{value:{i:"O"+ ++s,w:{}}})},h=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!l(t))return"F";if(!e)return"E";c(t)}return t[i].i},d=function(t,e){if(!o(t,i)){if(!l(t))return!0;if(!e)return!1;c(t)}return t[i].w},f=function(t){return u&&p.NEED&&l(t)&&!o(t,i)&&c(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:h,getWeak:d,onFreeze:f}},ec02:function(t,e,n){var i=n("6d8b"),r=n("84ce"),o=function(t,e,n,i,o){r.call(this,t,e,n),this.type=i||"value",this.position=o||"bottom"};o.prototype={constructor:o,index:0,getAxesOnZeroOf:null,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getGlobalExtent:function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[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},i.inherits(o,r);var a=o;t.exports=a},ec34:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("6d8b")),o=r.createHashMap,a=r.isString,s=r.isArray,l=r.each,u=(r.assert,n("3041")),c=u.parseXML,h=o(),d={registerMap:function(t,e,n){var i;return s(e)?i=e:e.svg?i=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(n=e.specialAreas,e=e.geoJson),i=[{type:"geoJSON",source:e,specialAreas:n}]),l(i,(function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON");var n=f[e];n(t)})),h.set(t,i)},retrieveMap:function(t){return h.get(t)}},f={geoJSON:function(t){var e=t.source;t.geoJSON=a(e)?"undefined"!==typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=c(t.source)}};t.exports=d},ec6f:function(t,e,n){var i=n("6d8b"),r=i.createHashMap,o=i.isTypedArray,a=n("625e"),s=a.enableClassCheck,l=n("93d0"),u=l.SOURCE_FORMAT_ORIGINAL,c=l.SERIES_LAYOUT_BY_COLUMN,h=l.SOURCE_FORMAT_UNKNOWN,d=l.SOURCE_FORMAT_TYPED_ARRAY,f=l.SOURCE_FORMAT_KEYED_COLUMNS;function p(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===f?{}:[]),this.sourceFormat=t.sourceFormat||h,this.seriesLayoutBy=t.seriesLayoutBy||c,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&r(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}p.seriesDataToSource=function(t){return new p({data:t,sourceFormat:o(t)?d:u,fromDataset:!1})},s(p);var g=p;t.exports=g},ecf8:function(t,e,n){var i=n("6d8b"),r=n("3842"),o=r.parsePercent,a=i.each;function s(t){var e=l(t);a(e,(function(t){var e=t.seriesModels;e.length&&(u(t),a(e,(function(e,n){c(e,t.boxOffsetList[n],t.boxWidthList[n])})))}))}function l(t){var e=[],n=[];return t.eachSeriesByType("boxplot",(function(t){var r=t.getBaseAxis(),o=i.indexOf(n,r);o<0&&(o=n.length,n[o]=r,e[o]={axis:r,seriesModels:[]}),e[o].seriesModels.push(t)})),e}function u(t){var e,n,r=t.axis,s=t.seriesModels,l=s.length,u=t.boxWidthList=[],c=t.boxOffsetList=[],h=[];if("category"===r.type)n=r.getBandWidth();else{var d=0;a(s,(function(t){d=Math.max(d,t.getData().count())})),e=r.getExtent(),Math.abs(e[1]-e[0])}a(s,(function(t){var e=t.get("boxWidth");i.isArray(e)||(e=[e,e]),h.push([o(e[0],n)||0,o(e[1],n)||0])}));var f=.8*n-2,p=f/l*.3,g=(f-p*(l-1))/l,v=g/2-f/2;a(s,(function(t,e){c.push(v),v+=p+g,u.push(Math.min(Math.max(g,h[e][0]),h[e][1]))}))}function c(t,e,n){var i=t.coordinateSystem,r=t.getData(),o=n/2,a="horizontal"===t.get("layout")?0:1,s=1-a,l=["x","y"],u=r.mapDimension(l[a]),c=r.mapDimension(l[s],!0);if(!(null==u||c.length<5))for(var h=0;h=0&&n.splice(i,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,n=0;n15)break}}a.__drawIndex=m,a.__drawIndex0&&t>i[0]){for(s=0;st)break;o=n[i[s]]}if(i.splice(s+1,0,t),n[t]=e,!e.virtual)if(o){var u=o.dom;u.nextSibling?l.insertBefore(e.dom,u.nextSibling):l.appendChild(e.dom)}else l.firstChild?l.insertBefore(e.dom,l.firstChild):l.appendChild(e.dom)}else a("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var n,i,r=this._zlevelList;for(i=0;i0?g:0),this._needsManuallyCompositing),l.__builtin__||a("ZLevel "+u+" has been used by unkown layer "+l.id),l!==o&&(l.__used=!0,l.__startIndex!==n&&(l.__dirty=!0),l.__startIndex=n,l.incremental?l.__drawIndex=-1:l.__drawIndex=n,e(n),o=l),i.__dirty&&(l.__dirty=!0,l.incremental&&l.__drawIndex<0&&(l.__drawIndex=n))}e(n),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var n=this._layerConfig;n[t]?o.merge(n[t],e,!0):n[t]=e;for(var i=0;i1?"."+t[1]:""))}function s(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var l=i.normalizeCssArray,u=/([&<>"'])/g,c={"&":"&","<":"<",">":">",'"':""","'":"'"};function h(t){return null==t?"":(t+"").replace(u,(function(t,e){return c[e]}))}var d=["a","b","c","d","e","f","g"],f=function(t,e){return"{"+t+(null==e?"":e)+"}"};function p(t,e,n){i.isArray(e)||(e=[e]);var r=e.length;if(!r)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:n}}:""}function m(t,e){return t+="","0000".substr(0,e-t.length)+t}function y(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=o.parseDate(e),r=n?"UTC":"",a=i["get"+r+"FullYear"](),s=i["get"+r+"Month"]()+1,l=i["get"+r+"Date"](),u=i["get"+r+"Hours"](),c=i["get"+r+"Minutes"](),h=i["get"+r+"Seconds"](),d=i["get"+r+"Milliseconds"]();return t=t.replace("MM",m(s,2)).replace("M",s).replace("yyyy",a).replace("yy",a%100).replace("dd",m(l,2)).replace("d",l).replace("hh",m(u,2)).replace("h",u).replace("mm",m(c,2)).replace("m",c).replace("ss",m(h,2)).replace("s",h).replace("SSS",m(d,3)),t}function x(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}var _=r.truncateText;function b(t){return r.getBoundingRect(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)}function w(t,e,n,i,o,a,s,l){return r.getBoundingRect(t,e,n,i,o,l,a,s)}function S(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location=t}else window.open(t,e)}e.addCommas=a,e.toCamelCase=s,e.normalizeCssArray=l,e.encodeHTML=h,e.formatTpl=p,e.formatTplSimple=g,e.getTooltipMarker=v,e.formatTime=y,e.capitalFirst=x,e.truncateText=_,e.getTextBoundingRect=b,e.getTextRect=w,e.windowOpen=S},edaf:function(t,e,n){var i=n("6d8b"),r=n("6cb7"),o=n("6179"),a=n("e0d3"),s=r.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,n){this._data,this._names,this.mergeDefaultAndTheme(t,n),this._initData()},mergeOption:function(t){s.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:(t>=e&&(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||[],n=t.axisType,r=this._names=[];if("category"===n){var s=[];i.each(e,(function(t,e){var n,o=a.getDataItemValue(t);i.isObject(t)?(n=i.clone(t),n.value=e):n=e,s.push(n),i.isString(o)||null!=o&&!isNaN(o)||(o=""),r.push(o+"")})),e=s}var l={category:"ordinal",time:"time"}[n]||"number",u=this._data=new o([{name:"value",type:l}],this);u.initData(e,r)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}}),l=s;t.exports=l},edb9:function(t,e,n){var i=n("6d8b");function r(t,e){e=e||{};var n=t.coordinateSystem,r=t.axis,o={},a=r.position,s=r.orient,l=n.getRect(),u=[l.x,l.x+l.width,l.y,l.y+l.height],c={horizontal:{top:u[2],bottom:u[3]},vertical:{left:u[0],right:u[1]}};o.position=["vertical"===s?c.vertical[a]:u[0],"horizontal"===s?c.horizontal[a]:u[3]];var h={horizontal:0,vertical:1};o.rotation=Math.PI/2*h[s];var d={top:-1,bottom:1,right:1,left:-1};o.labelDirection=o.tickDirection=o.nameDirection=d[a],t.get("axisTick.inside")&&(o.tickDirection=-o.tickDirection),i.retrieve(e.labelInside,t.get("axisLabel.inside"))&&(o.labelDirection=-o.labelDirection);var f=e.rotate;return null==f&&(f=t.get("axisLabel.rotate")),o.labelRotation="top"===a?-f:f,o.z2=1,o}e.layout=r},ee1a:function(t,e,n){var i=n("6d8b"),r=i.each,o=i.isString;function a(t,e,n){n=n||{};var i,a,s,l,u=n.byIndex,c=n.stackedCoordDimension,h=!(!t||!t.get("stack"));if(r(e,(function(t,n){o(t)&&(e[n]=t={name:t}),h&&!t.isExtraCoord&&(u||i||!t.ordinalMeta||(i=t),a||"ordinal"===t.type||"time"===t.type||c&&c!==t.coordDim||(a=t))})),!a||u||i||(u=!0),a){s="__\0ecstackresult",l="__\0ecstackedover",i&&(i.createInvertedIndices=!0);var d=a.coordDim,f=a.type,p=0;r(e,(function(t){t.coordDim===d&&p++})),e.push({name:s,coordDim:d,coordDimIndex:p,type:f,isExtraCoord:!0,isCalculationCoord:!0}),p++,e.push({name:l,coordDim:l,coordDimIndex:p,type:f,isExtraCoord:!0,isCalculationCoord:!0})}return{stackedDimension:a&&a.name,stackedByDimension:i&&i.name,isStackedByIndex:u,stackedOverDimension:l,stackResultDimension:s}}function s(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function l(t,e){return s(t,e)?t.getCalculationInfo("stackResultDimension"):e}e.enableDataStack=a,e.isDimensionStacked=s,e.getStackedDimension=l},ee66:function(t,e,n){var i=n("3eba"),r=n("6d8b"),o=n("2306"),a=n("eda2"),s=n("3842"),l={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},u={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]},c=i.extendComponentView({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,n){var i=this.group;i.removeAll();var r=t.coordinateSystem,o=r.getRangeInfo(),a=r.getOrient();this._renderDayRect(t,o,i),this._renderLines(t,o,a,i),this._renderYearText(t,o,a,i),this._renderMonthText(t,a,i),this._renderWeekText(t,o,a,i)},_renderDayRect:function(t,e,n){for(var i=t.coordinateSystem,r=t.getModel("itemStyle").getItemStyle(),a=i.getCellWidth(),s=i.getCellHeight(),l=e.start.time;l<=e.end.time;l=i.getNextNDay(l,1).time){var u=i.dataToRect([l],!1).tl,c=new o.Rect({shape:{x:u[0],y:u[1],width:a,height:s},cursor:"default",style:r});n.add(c)}},_renderLines:function(t,e,n,i){var r=this,o=t.coordinateSystem,a=t.getModel("splitLine.lineStyle").getLineStyle(),s=t.get("splitLine.show"),l=a.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,c=0;u.time<=e.end.time;c++){d(u.formatedDate),0===c&&(u=o.getDateInfo(e.start.y+"-"+e.start.m));var h=u.date;h.setMonth(h.getMonth()+1),u=o.getDateInfo(h)}function d(e){r._firstDayOfMonth.push(o.getDateInfo(e)),r._firstDayPoints.push(o.dataToRect([e],!1).tl);var l=r._getLinePointsOfOneWeek(t,e,n);r._tlpoints.push(l[0]),r._blpoints.push(l[l.length-1]),s&&r._drawSplitline(l,a,i)}d(o.getNextNDay(e.end.time,1).formatedDate),s&&this._drawSplitline(r._getEdgesPoints(r._tlpoints,l,n),a,i),s&&this._drawSplitline(r._getEdgesPoints(r._blpoints,l,n),a,i)},_getEdgesPoints:function(t,e,n){var i=[t[0].slice(),t[t.length-1].slice()],r="horizontal"===n?0:1;return i[0][r]=i[0][r]-e/2,i[1][r]=i[1][r]+e/2,i},_drawSplitline:function(t,e,n){var i=new o.Polyline({z2:20,shape:{points:t},style:e});n.add(i)},_getLinePointsOfOneWeek:function(t,e,n){var i=t.coordinateSystem;e=i.getDateInfo(e);for(var r=[],o=0;o<7;o++){var a=i.getNextNDay(e.time,o),s=i.dataToRect([a.time],!1);r[2*a.day]=s.tl,r[2*a.day+1]=s["horizontal"===n?"bl":"tr"]}return r},_formatterLabel:function(t,e){return"string"===typeof t&&t?a.formatTplSimple(t,e):"function"===typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,n,i,r){e=e.slice();var o=["center","bottom"];"bottom"===i?(e[1]+=r,o=["center","top"]):"left"===i?e[0]-=r:"right"===i?(e[0]+=r,o=["center","top"]):e[1]-=r;var a=0;return"left"!==i&&"right"!==i||(a=Math.PI/2),{rotation:a,position:e,style:{textAlign:o[0],textVerticalAlign:o[1]}}},_renderYearText:function(t,e,n,i){var r=t.getModel("yearLabel");if(r.get("show")){var a=r.get("margin"),s=r.get("position");s||(s="horizontal"!==n?"top":"left");var l=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],u=(l[0][0]+l[1][0])/2,c=(l[0][1]+l[1][1])/2,h="horizontal"===n?0:1,d={top:[u,l[h][1]],bottom:[u,l[1-h][1]],left:[l[1-h][0],c],right:[l[h][0],c]},f=e.start.y;+e.end.y>+e.start.y&&(f=f+"-"+e.end.y);var p=r.get("formatter"),g={start:e.start.y,end:e.end.y,nameMap:f},v=this._formatterLabel(p,g),m=new o.Text({z2:30});o.setTextStyle(m.style,r,{text:v}),m.attr(this._yearTextPositionControl(m,d[s],n,s,a)),i.add(m)}},_monthTextPositionControl:function(t,e,n,i,r){var o="left",a="top",s=t[0],l=t[1];return"horizontal"===n?(l+=r,e&&(o="center"),"start"===i&&(a="bottom")):(s+=r,e&&(a="middle"),"start"===i&&(o="right")),{x:s,y:l,textAlign:o,textVerticalAlign:a}},_renderMonthText:function(t,e,n){var i=t.getModel("monthLabel");if(i.get("show")){var a=i.get("nameMap"),s=i.get("margin"),u=i.get("position"),c=i.get("align"),h=[this._tlpoints,this._blpoints];r.isString(a)&&(a=l[a.toUpperCase()]||[]);var d="start"===u?0:1,f="horizontal"===e?0:1;s="start"===u?-s:s;for(var p="center"===c,g=0;gh)n=l(i,e=u[h++]),void 0!==n&&s(c,e,n);return c}})},ee84:function(t,e,n){var i=n("20c8"),r=n("401b"),o=r.applyTransform,a=i.CMD,s=[[],[],[]],l=Math.sqrt,u=Math.atan2;function c(t,e){var n,i,r,c,h,d=t.data,f=a.M,p=a.C,g=a.L,v=a.R,m=a.A,y=a.Q;for(r=0,c=0;r1?(g.width=c,g.height=c/f):(g.height=c,g.width=c*f),g.y=u[1]-g.height/2,g.x=u[0]-g.width/2}else o=t.getBoxLayoutParams(),o.aspect=f,g=s.getLayoutRect(o,{width:h,height:d});this.setViewRect(g.x,g.y,g.width,g.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function d(t,e){o.each(e.get("geoCoord"),(function(e,n){t.addGeoCoord(n,e)}))}var f={dimensions:a.prototype.dimensions,create:function(t,e){var n=[];t.eachComponent("geo",(function(t,i){var r=t.get("map"),o=t.get("aspectScale"),s=!0,l=c.retrieveMap(r);l&&l[0]&&"svg"===l[0].type?(null==o&&(o=1),s=!1):null==o&&(o=.75);var u=new a(r+i,r,t.get("nameMap"),s);u.aspectScale=o,u.zoomLimit=t.get("scaleLimit"),n.push(u),d(u,t),t.coordinateSystem=u,u.model=t,u.resize=h,u.resize(t,e)})),t.eachSeries((function(t){var e=t.get("coordinateSystem");if("geo"===e){var i=t.get("geoIndex")||0;t.coordinateSystem=n[i]}}));var i={};return t.eachSeriesByType("map",(function(t){if(!t.getHostGeoModel()){var e=t.getMapType();i[e]=i[e]||[],i[e].push(t)}})),o.each(i,(function(t,i){var r=o.map(t,(function(t){return t.get("nameMap")})),s=new a(i,i,o.mergeAll(r));s.zoomLimit=o.retrieve.apply(null,o.map(t,(function(t){return t.get("scaleLimit")}))),n.push(s),s.resize=h,s.aspectScale=t[0].get("aspectScale"),s.resize(t[0],e),o.each(t,(function(t){t.coordinateSystem=s,d(s,t)}))})),n},getFilledRegions:function(t,e,n){for(var i=(t||[]).slice(),r=o.createHashMap(),a=0;as&&(e[1-o]=e[o]+f.sign*s),e}function i(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function r(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}t.exports=n},ef97:function(t,e,n){var i=n("3eba");n("217b"),n("f17f");var r=n("7f96"),o=n("87c3"),a=n("fdde");n("01ed"),i.registerVisual(r("line","circle","line")),i.registerLayout(o("line")),i.registerProcessor(i.PRIORITY.PROCESSOR.STATISTIC,a("line"))},ef97a:function(t,e,n){var i=n("3eba");n("2163"),n("6cd8"),n("bf9b");var r=n("7f96"),o=n("ca29");i.registerVisual(r("tree","circle")),i.registerLayout(o)},f123:function(t,e,n){var i=n("9f82"),r=i.prepareDataCoordInfo,o=i.getStackedOnPoint;function a(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}function s(t,e,n,i,s,l,u,c){for(var h=a(t,e),d=[],f=[],p=[],g=[],v=[],m=[],y=[],x=r(s,e,u),_=r(l,t,c),b=0;b=0;a--){var s=n[a].dimension,l=t.dimensions[s],u=t.getDimensionInfo(l);if(i=u&&u.coordDim,"x"===i||"y"===i){o=n[a];break}}if(o){var h=e.getAxis(i),d=r.map(o.stops,(function(t){return{coord:h.toGlobalCoord(h.dataToCoord(t.value)),color:t.color}})),f=d.length,p=o.outerColors.slice();f&&d[0].coord>d[f-1].coord&&(d.reverse(),p.reverse());var g=10,v=d[0].coord-g,m=d[f-1].coord+g,y=m-v;if(y<.001)return"transparent";r.each(d,(function(t){t.offset=(t.coord-v)/y})),d.push({offset:f?d[f-1].offset:.5,color:p[1]||"transparent"}),d.unshift({offset:f?d[0].offset:.5,color:p[0]||"transparent"});var x=new c.LinearGradient(0,0,0,0,d,!0);return x[i]=v,x[i+"2"]=m,x}}}function C(t,e,n){var i=t.get("showAllSymbol"),o="auto"===i;if(!i||o){var a=n.getAxesByScale("ordinal")[0];if(a&&(!o||!D(a,e))){var s=e.mapDimension(a.dim),l={};return r.each(a.getViewLabels(),(function(t){l[t.tickValue]=1})),function(t){return!l.hasOwnProperty(e.get(s,t))}}}}function D(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}function k(t,e,n){if("cartesian2d"===t.type){var i=t.getBaseAxis().isHorizontal(),r=_(t,e,n);if(!n.get("clip",!0)){var o=r.shape,a=Math.max(o.width,o.height);i?(o.y-=a,o.height+=2*a):(o.x-=a,o.width+=2*a)}return r}return b(t,e,n)}var L=g.extend({type:"line",init:function(){var t=new c.Group,e=new s;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,n){var i=t.coordinateSystem,o=this.group,a=t.getData(),s=t.getModel("lineStyle"),l=t.getModel("areaStyle"),u=a.mapArray(a.getItemLayout),c="polar"===i.type,h=this._coordSys,d=this._symbolDraw,f=this._polyline,p=this._polygon,g=this._lineGroup,v=t.get("animation"),y=!l.isEmpty(),x=l.get("origin"),_=m(i,a,x),b=A(i,a,_),S=t.get("showSymbol"),D=S&&!c&&C(t,a,i),L=this._data;L&&L.eachItemGraphicEl((function(t,e){t.__temp&&(o.remove(t),L.setItemGraphicEl(e,null))})),S||d.remove(),o.add(g);var P,O=!c&&t.get("step");i&&i.getArea&&t.get("clip",!0)&&(P=i.getArea(),null!=P.width?(P.x-=.1,P.y-=.1,P.width+=.2,P.height+=.2):P.r0&&(P.r0-=.5,P.r1+=.5)),this._clipShapeForSymbol=P,f&&h.type===i.type&&O===this._step?(y&&!p?p=this._newPolygon(u,b,i,v):p&&!y&&(g.remove(p),p=this._polygon=null),g.setClipPath(k(i,!1,t)),S&&d.updateData(a,{isIgnore:D,clipShape:P}),a.eachItemGraphicEl((function(t){t.stopAnimation(!0)})),w(this._stackedOnPoints,b)&&w(this._points,u)||(v?this._updateAnimation(a,b,i,n,O,x):(O&&(u=T(u,i,O),b=T(b,i,O)),f.setShape({points:u}),p&&p.setShape({points:u,stackedOnPoints:b})))):(S&&d.updateData(a,{isIgnore:D,clipShape:P}),O&&(u=T(u,i,O),b=T(b,i,O)),f=this._newPolyline(u,i,v),y&&(p=this._newPolygon(u,b,i,v)),g.setClipPath(k(i,!0,t)));var E=I(a,i)||a.getVisual("color");f.useStyle(r.defaults(s.getLineStyle(),{fill:"none",stroke:E,lineJoin:"bevel"}));var R=t.get("smooth");if(R=M(t.get("smooth")),f.setShape({smooth:R,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),p){var N=a.getCalculationInfo("stackedOnSeries"),z=0;p.useStyle(r.defaults(l.getAreaStyle(),{fill:E,opacity:.7,lineJoin:"bevel"})),N&&(z=M(N.get("smooth"))),p.setShape({smooth:R,stackedOnSmooth:z,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=a,this._coordSys=i,this._stackedOnPoints=b,this._points=u,this._step=O,this._valueOrigin=x},dispose:function(){},highlight:function(t,e,n,i){var r=t.getData(),o=h.queryDataIndex(r,i);if(!(o instanceof Array)&&null!=o&&o>=0){var a=r.getItemGraphicEl(o);if(!a){var s=r.getItemLayout(o);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;a=new l(r,o),a.position=s,a.setZ(t.get("zlevel"),t.get("z")),a.ignore=isNaN(s[0])||isNaN(s[1]),a.__temp=!0,r.setItemGraphicEl(o,a),a.stopSymbolAnimation(!0),this.group.add(a)}a.highlight()}else g.prototype.highlight.call(this,t,e,n,i)},downplay:function(t,e,n,i){var r=t.getData(),o=h.queryDataIndex(r,i);if(null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else g.prototype.downplay.call(this,t,e,n,i)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new f({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new p({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(n),this._polygon=n,n},_updateAnimation:function(t,e,n,i,r,o){var a=this._polyline,s=this._polygon,l=t.hostModel,h=u(this._data,t,this._stackedOnPoints,e,this._coordSys,n,this._valueOrigin,o),d=h.current,f=h.stackedOnCurrent,p=h.next,g=h.stackedOnNext;if(r&&(d=T(h.current,n,r),f=T(h.stackedOnCurrent,n,r),p=T(h.next,n,r),g=T(h.stackedOnNext,n,r)),S(d,p)>3e3||s&&S(f,g)>3e3)return a.setShape({points:p}),void(s&&s.setShape({points:p,stackedOnPoints:g}));a.shape.__points=h.current,a.shape.points=d,c.updateProps(a,{shape:{points:p}},l),s&&(s.setShape({points:d,stackedOnPoints:f}),c.updateProps(s,{shape:{points:p,stackedOnPoints:g}},l));for(var v=[],m=h.status,y=0;ys)return;var r=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==r.behavior&&this._dispatchExpand({axisExpandWindow:r.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&u(this,"mousemove")){var e=this._model,n=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),i=n.behavior;"jump"===i&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===i?null:{axisExpandWindow:n.axisExpandWindow,animation:"jump"===i&&null})}}};function u(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("axisExpandTriggerOn")===e}i.registerPreprocessor(a)},f31f:function(t,e,n){var i=n("4e08"),r=(i.__DEV__,n("3eba")),o=n("6d8b"),a=n("2b8c"),s=n("4319"),l=["#ddd"],u=r.extendComponentModel({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 n=this.option;!e&&a.replaceVisualOption(n,t,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:l},i.hasOwnProperty("liftZ")||(i.liftZ=5)},setAreas:function(t){t&&(this.areas=o.map(t,(function(t){return c(this.option,t)}),this))},setBrushOption:function(t){this.brushOption=c(this.option,t),this.brushType=this.brushOption.brushType}});function c(t,e){return o.merge({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new s(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}var h=u;t.exports=h},f410:function(t,e,n){n("1af6"),t.exports=n("584a").Array.isArray},f47d:function(t,e,n){var i=n("6d8b"),r=(i.assert,i.isArray),o=n("4e08");o.__DEV__;function a(t){return new s(t)}function s(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0,this.context}var l=s.prototype;l.perform=function(t){var e,n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var o=this.context;o.data=o.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!i&&(e=this._plan(this.context));var a,s=f(this._modBy),l=this._modDataCount||0,u=f(t&&t.modBy),d=t&&t.modDataCount||0;function f(t){return!(t>=1)&&(t=1),t}s===u&&l===d||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,a=h(this,i)),this._modBy=u,this._modDataCount=d;var p=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var g=this._dueIndex,v=Math.min(null!=p?this._dueIndex+p:1/0,this._dueEnd);if(!i&&(a||g1&&i>0?s:a}};return o;function a(){return e=t?null:o1?arguments[1]:void 0,e.length)),i=String(t);return s?s.call(e,i,n):e.slice(n,n+i.length)===i}})},f5df:function(t,e,n){},f5e6:function(t,e,n){n("1ccf"),n("b419")},f605:function(t,e){t.exports=function(t,e,n,i){if(!(t instanceof e)||void 0!==i&&i in t)throw TypeError(n+": incorrect invocation!");return t}},f610:function(t,e,n){var i=n("2306"),r=n("f934"),o=n("6d8b"),a=n("55ac"),s=a.wrapTreePathInfo,l=8,u=8,c=5;function h(t){this.group=new i.Group,t.add(this.group)}function d(t,e,n,i,r,o){var a=[[r?t:t-c,e],[t+n,e],[t+n,e+i],[r?t:t-c,e+i]];return!o&&a.splice(2,0,[t+n+c,e+i/2]),!r&&a.push([t,e+i/2]),a}function f(t,e,n){t.eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:n&&n.dataIndex,name:n&&n.name},treePathInfo:n&&s(n,e)}}h.prototype={constructor:h,render:function(t,e,n,i){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&n){var s=o.getModel("itemStyle"),l=s.getModel("textStyle"),u={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(n,u,l),this._renderContent(t,u,s,l,i),r.positionElement(a,u.pos,u.box)}},_prepare:function(t,e,n){for(var i=t;i;i=i.parentNode){var r=i.getModel().get("name"),o=n.getTextRect(r),a=Math.max(o.width+2*l,e.emptyItemWidth);e.totalWidth+=a+u,e.renderList.push({node:i,text:r,width:a})}},_renderContent:function(t,e,n,a,s){for(var l=0,c=e.emptyItemWidth,h=t.get("breadcrumb.height"),p=r.getAvailableSize(e.pos,e.box),g=e.totalWidth,v=e.renderList,m=v.length-1;m>=0;m--){var y=v[m],x=y.node,_=y.width,b=y.text;g>p.width&&(g-=_-c,_=c,b=null);var w=new i.Polygon({shape:{points:d(l,0,_,h,m===v.length-1,0===m)},style:o.defaults(n.getItemStyle(),{lineJoin:"bevel",text:b,textFill:a.getTextColor(),textFont:a.getFont()}),z:10,onclick:o.curry(s,x)});this.group.add(w),f(w,t,x),l+=_+u}},remove:function(){this.group.removeAll()}};var p=h;t.exports=p},f6b4:function(t,e,n){"use strict";var i=n("c532");function r(){this.handlers=[]}r.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=r},f6ed:function(t,e,n){var i=n("6d8b");function r(t,e){var n={};return i.each(t,(function(t){t.each(t.mapDimension("value"),(function(e,i){var r="ec-"+t.getName(i);n[r]=n[r]||[],isNaN(e)||n[r].push(e)}))})),t[0].map(t[0].mapDimension("value"),(function(i,r){for(var o,a="ec-"+t[0].getName(r),s=0,l=1/0,u=-1/0,c=n[a].length,h=0;hi||l.newline?(o=0,c=v,a+=s+n,s=f.height):s=Math.max(s,f.height)}else{var m=f.height+(g?-g.y+f.y:0);h=a+m,h>r||l.newline?(o+=s+n,a=0,h=m,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=o,d[1]=a,"horizontal"===t?o=c+n:a=h+n)}))}var d=h,f=i.curry(h,"vertical"),p=i.curry(h,"horizontal");function g(t,e,n){var i=e.width,r=e.height,o=a(t.x,i),l=a(t.y,r),u=a(t.x2,i),c=a(t.y2,r);return(isNaN(o)||isNaN(parseFloat(t.x)))&&(o=0),(isNaN(u)||isNaN(parseFloat(t.x2)))&&(u=i),(isNaN(l)||isNaN(parseFloat(t.y)))&&(l=0),(isNaN(c)||isNaN(parseFloat(t.y2)))&&(c=r),n=s.normalizeCssArray(n||0),{width:Math.max(u-o-n[1]-n[3],0),height:Math.max(c-l-n[0]-n[2],0)}}function v(t,e,n){n=s.normalizeCssArray(n||0);var i=e.width,o=e.height,l=a(t.left,i),u=a(t.top,o),c=a(t.right,i),h=a(t.bottom,o),d=a(t.width,i),f=a(t.height,o),p=n[2]+n[0],g=n[1]+n[3],v=t.aspect;switch(isNaN(d)&&(d=i-c-g-l),isNaN(f)&&(f=o-h-p-u),null!=v&&(isNaN(d)&&isNaN(f)&&(v>i/o?d=.8*i:f=.8*o),isNaN(d)&&(d=v*f),isNaN(f)&&(f=d/v)),isNaN(l)&&(l=i-c-d-g),isNaN(u)&&(u=o-h-f-p),t.left||t.right){case"center":l=i/2-d/2-n[3];break;case"right":l=i-d-g;break}switch(t.top||t.bottom){case"middle":case"center":u=o/2-f/2-n[0];break;case"bottom":u=o-f-p;break}l=l||0,u=u||0,isNaN(d)&&(d=i-g-l-(c||0)),isNaN(f)&&(f=o-p-u-(h||0));var m=new r(l+n[3],u+n[0],d,f);return m.margin=n,m}function m(t,e,n,o,a){var s=!a||!a.hv||a.hv[0],l=!a||!a.hv||a.hv[1],u=a&&a.boundingMode||"all";if(s||l){var c;if("raw"===u)c="group"===t.type?new r(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(c=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();c=c.clone(),c.applyTransform(h)}e=v(i.defaults({width:c.width,height:c.height},e),n,o);var d=t.position,f=s?e.x-c.x:0,p=l?e.y-c.y:0;t.attr("position","raw"===u?[f,p]:[d[0]+f,d[1]+p])}}function y(t,e){return null!=t[c[e][0]]||null!=t[c[e][1]]&&null!=t[c[e][2]]}function x(t,e,n){!i.isObject(n)&&(n={});var r=n.ignoreSize;!i.isArray(r)&&(r=[r,r]);var o=s(c[0],0),a=s(c[1],1);function s(n,i){var o={},a=0,s={},c=0,d=2;if(l(n,(function(e){s[e]=t[e]})),l(n,(function(t){u(e,t)&&(o[t]=s[t]=e[t]),h(o,t)&&a++,h(s,t)&&c++})),r[i])return h(e,n[1])?s[n[2]]=null:h(e,n[2])&&(s[n[1]]=null),s;if(c!==d&&a){if(a>=d)return o;for(var f=0;ff[1]?-1:1,g=["start"===s?f[0]-p*d:"end"===s?f[1]+p*d:(f[0]+f[1])/2,L(s)?t.labelOffset+c*d:0],v=e.get("nameRotate");null!=v&&(v=v*b/180),L(s)?i=A(t.rotation,null!=v?v:t.rotation,c):(i=T(t,s,v||0,f),o=t.axisNameAvailableWidth,null!=o&&(o=Math.abs(o/Math.sin(i.rotation)),!isFinite(o)&&(o=null)));var m=h.getFont(),y=e.get("nameTruncate",!0)||{},x=y.ellipsis,_=r(t.nameTruncateMaxWidth,y.maxWidth,o),w=null!=x&&null!=_?l.truncateText(n,_,m,x,{minChar:2,placeholder:y.placeholder}):n,S=e.get("tooltip",!0),C=e.mainType,D={componentType:C,name:n,$vars:["name"]};D[C+"Index"]=e.componentIndex;var k=new u.Text({anid:"name",__fullText:n,__truncatedText:w,position:g,rotation:i.rotation,silent:I(e),z2:1,tooltip:S&&S.show?a({content:n,formatter:function(){return n},formatterParams:D},S):null});u.setTextStyle(k.style,h,{text:w,textFont:m,textFill:h.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:h.get("align")||i.textAlign,textVerticalAlign:h.get("verticalAlign")||i.textVerticalAlign}),e.get("triggerEvent")&&(k.eventData=M(e),k.eventData.targetType="axisName",k.eventData.name=n),this._dumbGroup.add(k),k.updateTransform(),this.group.add(k),k.decomposeTransform()}}},M=w.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},A=w.innerTextLayout=function(t,e,n){var i,r,o=f(e-t);return d(o)?(r=n>0?"top":"bottom",i="center"):d(o-b)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}};function T(t,e,n,i){var r,o,a=f(n-t.rotation),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;return d(a-b/2)?(o=l?"bottom":"top",r="center"):d(a-1.5*b)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*b&&a>b/2?l?"left":"right":l?"right":"left"),{rotation:a,textAlign:r,textVerticalAlign:o}}var I=w.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)};function C(t,e,n){if(!_(t.axis)){var i=t.get("axisLabel.showMinLabel"),r=t.get("axisLabel.showMaxLabel");e=e||[],n=n||[];var o=e[0],a=e[1],s=e[e.length-1],l=e[e.length-2],u=n[0],c=n[1],h=n[n.length-1],d=n[n.length-2];!1===i?(D(o),D(u)):k(o,a)&&(i?(D(a),D(c)):(D(o),D(u))),!1===r?(D(s),D(h)):k(l,s)&&(r?(D(l),D(d)):(D(s),D(h)))}}function D(t){t&&(t.ignore=!0)}function k(t,e,n){var i=t&&t.getBoundingRect().clone(),r=e&&e.getBoundingRect().clone();if(i&&r){var o=v.identity([]);return v.rotate(o,o,-t.rotation),i.applyTransform(v.mul([],o,t.getLocalTransform())),r.applyTransform(v.mul([],o,e.getLocalTransform())),i.intersect(r)}}function L(t){return"middle"===t||"center"===t}function P(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;lv}function V(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function F(t,e,n,i){var r=new a.Group;return r.add(new a.Rect({name:"main",style:W(n),silent:!0,draggable:!0,cursor:"move",drift:u(t,e,r,"nswe"),ondragend:u(z,e,{isEnd:!0})})),c(i,(function(n){r.add(new a.Rect({name:n,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:u(t,e,r,n),ondragend:u(z,e,{isEnd:!0})}))})),r}function H(t,e,n,i){var r=i.brushStyle.lineWidth||0,o=f(r,m),a=n[0][0],s=n[1][0],l=a-r/2,u=s-r/2,c=n[0][1],h=n[1][1],d=c-o+r/2,p=h-o+r/2,g=c-a,v=h-s,y=g+r,x=v+r;j(t,e,"main",a,s,g,v),i.transformable&&(j(t,e,"w",l,u,o,x),j(t,e,"e",d,u,o,x),j(t,e,"n",l,u,y,o),j(t,e,"s",l,p,y,o),j(t,e,"nw",l,u,o,o),j(t,e,"ne",d,u,o,o),j(t,e,"sw",l,p,o,o),j(t,e,"se",d,p,o,o))}function G(t,e){var n=e.__brushOption,i=n.transformable,r=e.childAt(0);r.useStyle(W(n)),r.attr({silent:!i,cursor:i?"move":"default"}),c(["w","e","n","s","se","sw","ne","nw"],(function(n){var r=e.childOfName(n),o=$(t,n);r&&r.attr({silent:!i,invisible:!i,cursor:i?_[o]+"-resize":null})}))}function j(t,e,n,i,r,o,a){var s=e.childOfName(n);s&&s.setShape(J(K(t,e,[[i,r],[i+o,r+a]])))}function W(t){return r.defaults({strokeNoScale:!0},t.brushStyle)}function U(t,e,n,i){var r=[d(t,n),d(e,i)],o=[f(t,n),f(e,i)];return[[r[0],o[0]],[r[1],o[1]]]}function q(t){return a.getTransform(t.group)}function $(t,e){if(e.length>1){e=e.split("");var n=[$(t,e[0]),$(t,e[1])];return("e"===n[0]||"w"===n[0])&&n.reverse(),n.join("")}var i={w:"left",e:"right",n:"top",s:"bottom"},r={left:"w",right:"e",top:"n",bottom:"s"};n=a.transformDirection(i[e],q(t));return r[n]}function Z(t,e,n,i,r,o,a,s){var l=i.__brushOption,u=t(l.range),h=X(n,o,a);c(r.split(""),(function(t){var e=x[t];u[e[0]][e[1]]+=h[e[0]]})),l.range=e(U(u[0][0],u[1][0],u[0][1],u[1][1])),P(n,i),z(n,{isEnd:!1})}function Y(t,e,n,i,r){var o=e.__brushOption.range,a=X(t,n,i);c(o,(function(t){t[0]+=a[0],t[1]+=a[1]})),P(t,e),z(t,{isEnd:!1})}function X(t,e,n){var i=t.group,r=i.transformCoordToLocal(e,n),o=i.transformCoordToLocal(0,0);return[r[0]-o[0],r[1]-o[1]]}function K(t,e,n){var i=R(t,e);return i&&!0!==i?i.clipPath(n,t._transform):r.clone(n)}function J(t){var e=d(t[0][0],t[1][0]),n=d(t[0][1],t[1][1]),i=f(t[0][0],t[1][0]),r=f(t[0][1],t[1][1]);return{x:e,y:n,width:i-e,height:r-n}}function Q(t,e,n){if(t._brushType&&!at(t,e)){var i=t._zr,r=t._covers,o=E(t,e,n);if(!t._dragging)for(var a=0;ai.getWidth()||n<0||n>i.getHeight()}var st={lineX:lt(0),lineY:lt(1),rect:{createCover:function(t,e){return F(u(Z,(function(t){return t}),(function(t){return t})),t,e,["w","e","n","s","se","sw","ne","nw"])},getCreatingRange:function(t){var e=V(t);return U(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(t,e,n,i){H(t,e,n,i)},updateCommon:G,contain:et},polygon:{createCover:function(t,e){var n=new a.Group;return n.add(new a.Polyline({name:"main",style:W(e),silent:!0})),n},getCreatingRange:function(t){return t},endCreating:function(t,e){e.remove(e.childAt(0)),e.add(new a.Polygon({name:"main",draggable:!0,drift:u(Y,t,e),ondragend:u(z,t,{isEnd:!0})}))},updateCoverShape:function(t,e,n,i){e.childAt(0).setShape({points:K(t,e,n)})},updateCommon:G,contain:et}};function lt(t){return{createCover:function(e,n){return F(u(Z,(function(e){var n=[e,[0,100]];return t&&n.reverse(),n}),(function(e){return e[t]})),e,n,[["w","e"],["n","s"]][t])},getCreatingRange:function(e){var n=V(e),i=d(n[0][t],n[1][t]),r=f(n[0][t],n[1][t]);return[i,r]},updateCoverShape:function(e,n,i,r){var o,a=R(e,n);if(!0!==a&&a.getLinearBrushOtherExtent)o=a.getLinearBrushOtherExtent(t,e._transform);else{var s=e._zr;o=[0,[s.getWidth(),s.getHeight()][1-t]]}var l=[i,o];t&&l.reverse(),H(e,n,l,r)},updateCommon:G,contain:et}}var ut=S;t.exports=ut},fd27:function(t,e,n){var i=n("9273"),r=n("a991"),o=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new i,this._angleAxis=new r,this._radiusAxis.polar=this._angleAxis.polar=this};o.prototype={type:"polar",axisPointerEnabled:!0,constructor:o,dimensions:["radius","angle"],model:null,containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxes:function(){return[this._radiusAxis,this._angleAxis]},getAxesByScale:function(t){var e=[],n=this._angleAxis,i=this._radiusAxis;return n.scale.type===t&&e.push(n),i.scale.type===t&&e.push(i),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},getTooltipAxes:function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var n=this.pointToCoord(t);return[this._radiusAxis.radiusToData(n[0],e),this._angleAxis.angleToData(n[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,n=t[1]-this.cy,i=this.getAngleAxis(),r=i.getExtent(),o=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);i.inverse?o=a-360:a=o+360;var s=Math.sqrt(e*e+n*n);e/=s,n/=s;var l=Math.atan2(-n,e)/Math.PI*180,u=la)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],n=t[1]/180*Math.PI,i=Math.cos(n)*e+this.cx,r=-Math.sin(n)*e+this.cy;return[i,r]},getArea:function(){var t=this.getAngleAxis(),e=this.getRadiusAxis(),n=e.getExtent().slice();n[0]>n[1]&&n.reverse();var i=t.getExtent(),r=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:n[0],r:n[1],startAngle:-i[0]*r,endAngle:-i[1]*r,clockwise:t.inverse,contain:function(t,e){var n=t-this.cx,i=e-this.cy,r=n*n+i*i,o=this.r,a=this.r0;return r<=o*o&&r>=a*a}}}};var a=o;t.exports=a},fd63:function(t,e,n){var i=n("42e5"),r=n("6d8b"),o=r.isFunction,a={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),r=(t.visualColorAccessPath||"itemStyle.color").split("."),a=t.get(r),s=!o(a)||a instanceof i?null:a;a&&!s||(a=t.getColorFromPalette(t.name,null,e.getSeriesCount())),n.setVisual("color",a);var l=(t.visualBorderColorAccessPath||"itemStyle.borderColor").split("."),u=t.get(l);if(n.setVisual("borderColor",u),!e.isSeriesFiltered(t)){s&&n.each((function(e){n.setItemVisual(e,"color",s(t.getDataParams(e)))}));var c=function(t,e){var n=t.getItemModel(e),i=n.get(r,!0),o=n.get(l,!0);null!=i&&t.setItemVisual(e,"color",i),null!=o&&t.setItemVisual(e,"borderColor",o)};return{dataEach:n.hasItemOption?c:null}}}};t.exports=a},fdde:function(t,e){var n={average:function(t){for(var e=0,n=0,i=0;ie&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n1)"string"===typeof a?l=n[a]:"function"===typeof a&&(l=a),l&&t.setData(o.downSample(o.mapDimension(c.dim),1/f,l,i))}}}}t.exports=r},fde4:function(t,e,n){n("bf90");var i=n("584a").Object;t.exports=function(t,e){return i.getOwnPropertyDescriptor(t,e)}},fdef:function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},fe21:function(t,e,n){var i=n("e86a"),r=n("2306"),o=["textStyle","color"],a={getTextColor:function(t){var e=this.ecModel;return this.getShallow("color")||(!t&&e?e.get(o):null)},getFont:function(){return r.getFont({fontStyle:this.getShallow("fontStyle"),fontWeight:this.getShallow("fontWeight"),fontSize:this.getShallow("fontSize"),fontFamily:this.getShallow("fontFamily")},this.ecModel)},getTextRect:function(t){return i.getBoundingRect(t,this.getFont(),this.getShallow("align"),this.getShallow("verticalAlign")||this.getShallow("baseline"),this.getShallow("padding"),this.getShallow("lineHeight"),this.getShallow("rich"),this.getShallow("truncateText"))}};t.exports=a},febc:function(t,e,n){var i=n("6d8b"),r=n("4f85"),o=n("e468"),a=o.seriesModelMixin,s=r.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}});i.mixin(s,a,!0);var l=s;t.exports=l},fecb:function(t,e,n){var i=n("6d8b"),r=n("2145"),o=n("29a8"),a=o.toolbox.brush;function s(t,e,n){this.model=t,this.ecModel=e,this.api=n,this._brushType,this._brushMode}s.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:i.clone(a.title)};var l=s.prototype;l.render=l.updateView=function(t,e,n){var r,o,a;e.eachComponent({mainType:"brush"},(function(t){r=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length})),this._brushType=r,this._brushMode=o,i.each(t.get("type",!0),(function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===r)?"emphasis":"normal")}))},l.getIcons=function(){var t=this.model,e=t.get("icon",!0),n={};return i.each(t.get("type",!0),(function(t){e[t]&&(n[t]=e[t])})),n},l.onclick=function(t,e,n){var i=this._brushType,r=this._brushMode;"clear"===n?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===n?i:i!==n&&n,brushMode:"keep"===n?"multiple"===r?"single":"multiple":r}})},r.register("brush",s);var u=s;t.exports=u},ff2e:function(t,e,n){var i=n("6d8b"),r=n("2306"),o=n("e86a"),a=n("eda2"),s=n("1687"),l=n("697e"),u=n("fab2");function c(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle(),e.fill=null):"shadow"===n&&(e=i.getAreaStyle(),e.stroke=null),e}function h(t,e,n,i,r){var s=n.get("value"),l=f(s,e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get("label.precision"),formatter:n.get("label.formatter")}),u=n.getModel("label"),c=a.normalizeCssArray(u.get("padding")||0),h=u.getFont(),p=o.getBoundingRect(l,h),g=r.position,v=p.width+c[1]+c[3],m=p.height+c[0]+c[2],y=r.align;"right"===y&&(g[0]-=v),"center"===y&&(g[0]-=v/2);var x=r.verticalAlign;"bottom"===x&&(g[1]-=m),"middle"===x&&(g[1]-=m/2),d(g,v,m,i);var _=u.get("backgroundColor");_&&"auto"!==_||(_=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:v,height:m,r:u.get("borderRadius")},position:g.slice(),style:{text:l,textFont:h,textFill:u.getTextColor(),textPosition:"inside",textPadding:c,fill:_,stroke:u.get("borderColor")||"transparent",lineWidth:u.get("borderWidth")||0,shadowBlur:u.get("shadowBlur"),shadowColor:u.get("shadowColor"),shadowOffsetX:u.get("shadowOffsetX"),shadowOffsetY:u.get("shadowOffsetY")},z2:10}}function d(t,e,n,i){var r=i.getWidth(),o=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function f(t,e,n,r,o){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:o.precision}),s=o.formatter;if(s){var u={value:l.getAxisRawValue(e,t),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};i.each(r,(function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&u.seriesData.push(r)})),i.isString(s)?a=s.replace("{value}",a):i.isFunction(s)&&(a=s(u))}return a}function p(t,e,n){var i=s.create();return s.rotate(i,i,n.rotation),s.translate(i,i,n.position),r.applyTransform([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function g(t,e,n,i,r,o){var a=u.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get("label.margin"),h(e,i,r,o,{position:p(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function v(t,e,n){return n=n||0,{x1:t[n],y1:t[1-n],x2:e[n],y2:e[1-n]}}function m(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}}function y(t,e,n,i,r,o){return{cx:t,cy:e,r0:n,r:i,startAngle:r,endAngle:o,clockwise:!0}}e.buildElStyle=c,e.buildLabelElOption=h,e.getValueLabel=f,e.getTransformedPosition=p,e.buildCartesianSingleLabelElOption=g,e.makeLineShape=v,e.makeRectShape=m,e.makeSectorShape=y}}]); \ No newline at end of file diff --git a/hippo4j-console/src/main/resources/static/static/js/chunk-libs.8958004b.js b/hippo4j-console/src/main/resources/static/static/js/chunk-libs.8958004b.js new file mode 100644 index 00000000..4d224d1c --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-libs.8958004b.js @@ -0,0 +1,91 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-libs"],{"00e7":function(t,e,n){(function(){Number.isInteger=Number.isInteger||function(t){return"number"===typeof t&&isFinite(t)&&Math.floor(t)===t};var e=n("06b1"),r={install:function(t){t.prototype.$cookie=this,t.cookie=this},set:function(t,n,r){var i=r;return Number.isInteger(r)&&(i={expires:r}),e.set(t,n,i)},get:function(t){return e.get(t)},delete:function(t,e){var n={expires:-1};void 0!==e&&(n=Object.assign(e,n)),this.set(t,"",n)}};t.exports=r})()},"014b":function(t,e,n){"use strict";var r=n("e53d"),i=n("07e3"),o=n("8e60"),a=n("63b6"),s=n("9138"),l=n("ebfd").KEY,u=n("294c"),c=n("dbdb"),h=n("45f2"),p=n("62a0"),f=n("5168"),d=n("ccb9"),g=n("6718"),v=n("47ee"),y=n("9003"),m=n("e4ae"),b=n("f772"),x=n("241e"),_=n("36c3"),w=n("1bc3"),S=n("aebd"),O=n("a159"),M=n("0395"),A=n("bf0b"),C=n("9aa9"),I=n("d9f6"),T=n("c3a1"),k=A.f,D=I.f,L=M.f,j=r.Symbol,P=r.JSON,E=P&&P.stringify,R="prototype",N=f("_hidden"),z=f("toPrimitive"),B={}.propertyIsEnumerable,V=c("symbol-registry"),F=c("symbols"),H=c("op-symbols"),G=Object[R],W="function"==typeof j&&!!C.f,U=r.QObject,Y=!U||!U[R]||!U[R].findChild,q=o&&u((function(){return 7!=O(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=k(G,e);r&&delete G[e],D(t,e,n),r&&t!==G&&D(G,e,r)}:D,X=function(t){var e=F[t]=O(j[R]);return e._k=t,e},$=W&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},Z=function(t,e,n){return t===G&&Z(H,e,n),m(t),e=w(e,!0),m(n),i(F,e)?(n.enumerable?(i(t,N)&&t[N][e]&&(t[N][e]=!1),n=O(n,{enumerable:S(0,!1)})):(i(t,N)||D(t,N,S(1,{})),t[N][e]=!0),q(t,e,n)):D(t,e,n)},K=function(t,e){m(t);var n,r=v(e=_(e)),i=0,o=r.length;while(o>i)Z(t,n=r[i++],e[n]);return t},J=function(t,e){return void 0===e?O(t):K(O(t),e)},Q=function(t){var e=B.call(this,t=w(t,!0));return!(this===G&&i(F,t)&&!i(H,t))&&(!(e||!i(this,t)||!i(F,t)||i(this,N)&&this[N][t])||e)},tt=function(t,e){if(t=_(t),e=w(e,!0),t!==G||!i(F,e)||i(H,e)){var n=k(t,e);return!n||!i(F,e)||i(t,N)&&t[N][e]||(n.enumerable=!0),n}},et=function(t){var e,n=L(_(t)),r=[],o=0;while(n.length>o)i(F,e=n[o++])||e==N||e==l||r.push(e);return r},nt=function(t){var e,n=t===G,r=L(n?H:_(t)),o=[],a=0;while(r.length>a)!i(F,e=r[a++])||n&&!i(G,e)||o.push(F[e]);return o};W||(j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===G&&e.call(H,n),i(this,N)&&i(this[N],t)&&(this[N][t]=!1),q(this,t,S(1,n))};return o&&Y&&q(G,t,{configurable:!0,set:e}),X(t)},s(j[R],"toString",(function(){return this._k})),A.f=tt,I.f=Z,n("6abf").f=M.f=et,n("355d").f=Q,C.f=nt,o&&!n("b8e3")&&s(G,"propertyIsEnumerable",Q,!0),d.f=function(t){return X(f(t))}),a(a.G+a.W+a.F*!W,{Symbol:j});for(var rt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;rt.length>it;)f(rt[it++]);for(var ot=T(f.store),at=0;ot.length>at;)g(ot[at++]);a(a.S+a.F*!W,"Symbol",{for:function(t){return i(V,t+="")?V[t]:V[t]=j(t)},keyFor:function(t){if(!$(t))throw TypeError(t+" is not a symbol!");for(var e in V)if(V[e]===t)return e},useSetter:function(){Y=!0},useSimple:function(){Y=!1}}),a(a.S+a.F*!W,"Object",{create:J,defineProperty:Z,defineProperties:K,getOwnPropertyDescriptor:tt,getOwnPropertyNames:et,getOwnPropertySymbols:nt});var st=u((function(){C.f(1)}));a(a.S+a.F*st,"Object",{getOwnPropertySymbols:function(t){return C.f(x(t))}}),P&&a(a.S+a.F*(!W||u((function(){var t=j();return"[null]"!=E([t])||"{}"!=E({a:t})||"{}"!=E(Object(t))}))),"JSON",{stringify:function(t){var e,n,r=[t],i=1;while(arguments.length>i)r.push(arguments[i++]);if(n=e=r[1],(b(e)||void 0!==t)&&!$(t))return y(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!$(e))return e}),r[1]=e,E.apply(P,r)}}),j[R][z]||n("35e8")(j[R],z,j[R].valueOf),h(j,"Symbol"),h(Math,"Math",!0),h(r.JSON,"JSON",!0)},"01f9":function(t,e,n){"use strict";var r=n("2d00"),i=n("5ca1"),o=n("2aba"),a=n("32e9"),s=n("84f2"),l=n("41a0"),u=n("7f20"),c=n("38fd"),h=n("2b4c")("iterator"),p=!([].keys&&"next"in[].keys()),f="@@iterator",d="keys",g="values",v=function(){return this};t.exports=function(t,e,n,y,m,b,x){l(n,e,y);var _,w,S,O=function(t){if(!p&&t in I)return I[t];switch(t){case d:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this,t)}},M=e+" Iterator",A=m==g,C=!1,I=t.prototype,T=I[h]||I[f]||m&&I[m],k=T||O(m),D=m?A?O("entries"):k:void 0,L="Array"==e&&I.entries||T;if(L&&(S=c(L.call(new t)),S!==Object.prototype&&S.next&&(u(S,M,!0),r||"function"==typeof S[h]||a(S,h,v))),A&&T&&T.name!==g&&(C=!0,k=function(){return T.call(this)}),r&&!x||!p&&!C&&I[h]||a(I,h,k),s[e]=k,s[M]=v,m)if(_={values:A?k:O(g),keys:b?k:O(d),entries:D},x)for(w in _)w in I||o(I,w,_[w]);else i(i.P+i.F*(p||C),e,_);return _}},"0293":function(t,e,n){var r=n("241e"),i=n("53e2");n("ce7e")("getPrototypeOf",(function(){return function(t){return i(r(t))}}))},"02f4":function(t,e,n){var r=n("4588"),i=n("be13");t.exports=function(t){return function(e,n){var o,a,s=String(i(e)),l=r(n),u=s.length;return l<0||l>=u?t?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?t?s.charAt(l):o:t?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"0390":function(t,e,n){"use strict";var r=n("02f4")(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},"0395":function(t,e,n){var r=n("36c3"),i=n("6abf").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return i(t)}catch(e){return a.slice()}};t.exports.f=function(t){return a&&"[object Window]"==o.call(t)?s(t):i(r(t))}},"061b":function(t,e,n){t.exports=n("fa99")},"06b1":function(t,e,n){var r,i; +/*! + * tiny-cookie - A tiny cookie manipulation plugin + * https://github.com/Alex1990/tiny-cookie + * Under the MIT license | (c) Alex Chao + */!function(o,a){r=a,i="function"===typeof r?r.call(e,n,e,t):r,void 0===i||(t.exports=i)}(0,(function(){"use strict";function t(e,n,r){if(void 0===n)return t.get(e);null===n?t.remove(e):t.set(e,n,r)}function e(t){return t.replace(/[.*+?^$|[\](){}\\-]/g,"\\$&")}function n(t){var e="";for(var n in t)if(t.hasOwnProperty(n)){if("expires"===n){var i=t[n];"object"!==typeof i&&(i+="number"===typeof i?"D":"",i=r(i)),t[n]=i.toUTCString()}if("secure"===n){t[n]&&(e+=";"+n);continue}e+=";"+n+"="+t[n]}return t.hasOwnProperty("path")||(e+=";path=/"),e}function r(t){var e=new Date,n=t.charAt(t.length-1),r=parseInt(t,10);switch(n){case"Y":e.setFullYear(e.getFullYear()+r);break;case"M":e.setMonth(e.getMonth()+r);break;case"D":e.setDate(e.getDate()+r);break;case"h":e.setHours(e.getHours()+r);break;case"m":e.setMinutes(e.getMinutes()+r);break;case"s":e.setSeconds(e.getSeconds()+r);break;default:e=new Date(t)}return e}return t.enabled=function(){var e,n="__test_key";return document.cookie=n+"=1",e=!!document.cookie,e&&t.remove(n),e},t.get=function(t,n){if("string"!==typeof t||!t)return null;t="(?:^|; )"+e(t)+"(?:=([^;]*?))?(?:;|$)";var r=new RegExp(t),i=r.exec(document.cookie);return null!==i?n?i[1]:decodeURIComponent(i[1]):null},t.getRaw=function(e){return t.get(e,!0)},t.set=function(t,e,r,i){!0!==r&&(i=r,r=!1),i=n(i||{});var o=t+"="+(r?e:encodeURIComponent(e))+i;document.cookie=o},t.setRaw=function(e,n,r){t.set(e,n,!0,r)},t.remove=function(e){t.set(e,"a",{expires:new Date})},t}))},"07e3":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},"097d":function(t,e,n){"use strict";var r=n("5ca1"),i=n("8378"),o=n("7726"),a=n("ebd6"),s=n("bcaa");r(r.P+r.R,"Promise",{finally:function(t){var e=a(this,i.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}})},"0a06":function(t,e,n){"use strict";var r=n("c532"),i=n("30b5"),o=n("f6b4"),a=n("5270"),s=n("4a7b"),l=n("83b9"),u=n("848b"),c=u.validators;function h(t){this.defaults=t,this.interceptors={request:new o,response:new o}}h.prototype.request=function(t,e){"string"===typeof t?(e=e||{},e.url=t):e=t||{},e=s(this.defaults,e),e.method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&u.assertOptions(n,{silentJSONParsing:c.transitional(c.boolean),forcedJSONParsing:c.transitional(c.boolean),clarifyTimeoutError:c.transitional(c.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"===typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var o,l=[];if(this.interceptors.response.forEach((function(t){l.push(t.fulfilled,t.rejected)})),!i){var h=[a,void 0];Array.prototype.unshift.apply(h,r),h=h.concat(l),o=Promise.resolve(e);while(h.length)o=o.then(h.shift(),h.shift());return o}var p=e;while(r.length){var f=r.shift(),d=r.shift();try{p=f(p)}catch(g){d(g);break}}try{o=a(p)}catch(g){return Promise.reject(g)}while(l.length)o=o.then(l.shift(),l.shift());return o},h.prototype.getUri=function(t){t=s(this.defaults,t);var e=l(t.baseURL,t.url);return i(e,t.params,t.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(t){h.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,i){return this.request(s(i||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}h.prototype[t]=e(),h.prototype[t+"Form"]=e(!0)})),t.exports=h},"0a49":function(t,e,n){var r=n("9b43"),i=n("626a"),o=n("4bf8"),a=n("9def"),s=n("cd1c");t.exports=function(t,e){var n=1==t,l=2==t,u=3==t,c=4==t,h=6==t,p=5==t||h,f=e||s;return function(e,s,d){for(var g,v,y=o(e),m=i(y),b=r(s,d,3),x=a(m.length),_=0,w=n?f(e,x):l?f(e,0):void 0;x>_;_++)if((p||_ in m)&&(g=m[_],v=b(g,_,y),t))if(n)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return _;case 2:w.push(g)}else if(c)return!1;return h?-1:u||c?c:w}}},"0bfb":function(t,e,n){"use strict";var r=n("cb7c");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"0d58":function(t,e,n){var r=n("ce10"),i=n("e11e");t.exports=Object.keys||function(t){return r(t,i)}},"0df6":function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},"0e15":function(t,e,n){var r=n("597f");t.exports=function(t,e,n){return void 0===n?r(t,e,!1):r(t,n,!1!==e)}},"0fc9":function(t,e,n){var r=n("3a38"),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},1098:function(t,e,n){"use strict";e.__esModule=!0;var r=n("17ed"),i=l(r),o=n("f893"),a=l(o),s="function"===typeof a.default&&"symbol"===typeof i.default?function(t){return typeof t}:function(t){return t&&"function"===typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};function l(t){return t&&t.__esModule?t:{default:t}}e.default="function"===typeof a.default&&"symbol"===s(i.default)?function(t){return"undefined"===typeof t?"undefined":s(t)}:function(t){return t&&"function"===typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":"undefined"===typeof t?"undefined":s(t)}},1169:function(t,e,n){var r=n("2d95");t.exports=Array.isArray||function(t){return"Array"==r(t)}},1173:function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},"11e9":function(t,e,n){var r=n("52a7"),i=n("4630"),o=n("6821"),a=n("6a99"),s=n("69a8"),l=n("c69a"),u=Object.getOwnPropertyDescriptor;e.f=n("9e1e")?u:function(t,e){if(t=o(t),e=a(e,!0),l)try{return u(t,e)}catch(n){}if(s(t,e))return i(!r.f.call(t,e),t[e])}},1495:function(t,e,n){var r=n("86cc"),i=n("cb7c"),o=n("0d58");t.exports=n("9e1e")?Object.defineProperties:function(t,e){i(t);var n,a=o(e),s=a.length,l=0;while(s>l)r.f(t,n=a[l++],e[n]);return t}},1654:function(t,e,n){"use strict";var r=n("71c1")(!0);n("30f1")(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},1691:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"17ed":function(t,e,n){t.exports={default:n("d8d6"),__esModule:!0}},1991:function(t,e,n){var r,i,o,a=n("9b43"),s=n("31f4"),l=n("fab2"),u=n("230e"),c=n("7726"),h=c.process,p=c.setImmediate,f=c.clearImmediate,d=c.MessageChannel,g=c.Dispatch,v=0,y={},m="onreadystatechange",b=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},x=function(t){b.call(t.data)};p&&f||(p=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return y[++v]=function(){s("function"==typeof t?t:Function(t),e)},r(v),v},f=function(t){delete y[t]},"process"==n("2d95")(h)?r=function(t){h.nextTick(a(b,t,1))}:g&&g.now?r=function(t){g.now(a(b,t,1))}:d?(i=new d,o=i.port2,i.port1.onmessage=x,r=a(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(r=function(t){c.postMessage(t+"","*")},c.addEventListener("message",x,!1)):r=m in u("script")?function(t){l.appendChild(u("script"))[m]=function(){l.removeChild(this),b.call(t)}}:function(t){setTimeout(a(b,t,1),0)}),t.exports={set:p,clear:f}},"1af6":function(t,e,n){var r=n("63b6");r(r.S,"Array",{isArray:n("9003")})},"1bc3":function(t,e,n){var r=n("f772");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},"1c4c":function(t,e,n){"use strict";var r=n("9b43"),i=n("5ca1"),o=n("4bf8"),a=n("1fa8"),s=n("33a4"),l=n("9def"),u=n("f1ae"),c=n("27ee");i(i.S+i.F*!n("5cc5")((function(t){Array.from(t)})),"Array",{from:function(t){var e,n,i,h,p=o(t),f="function"==typeof this?this:Array,d=arguments.length,g=d>1?arguments[1]:void 0,v=void 0!==g,y=0,m=c(p);if(v&&(g=r(g,d>2?arguments[2]:void 0,2)),void 0==m||f==Array&&s(m))for(e=l(p.length),n=new f(e);e>y;y++)u(n,y,v?g(p[y],y):p[y]);else for(h=m.call(p),n=new f;!(i=h.next()).done;y++)u(n,y,v?a(h,g,[i.value,y],!0):i.value);return n.length=y,n}})},"1d2b":function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");-1===n&&(n=e);var r=n===e?0:4-n%4;return[n,r]}function c(t){var e=u(t),n=e[0],r=e[1];return 3*(n+r)/4-r}function h(t,e,n){return 3*(e+n)/4-n}function p(t){var e,n,r=u(t),a=r[0],s=r[1],l=new o(h(t,a,s)),c=0,p=s>0?a-4:a;for(n=0;n>16&255,l[c++]=e>>8&255,l[c++]=255&e;return 2===s&&(e=i[t.charCodeAt(n)]<<2|i[t.charCodeAt(n+1)]>>4,l[c++]=255&e),1===s&&(e=i[t.charCodeAt(n)]<<10|i[t.charCodeAt(n+1)]<<4|i[t.charCodeAt(n+2)]>>2,l[c++]=e>>8&255,l[c++]=255&e),l}function f(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function d(t,e,n){for(var r,i=[],o=e;ol?l:s+a));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},"20d6":function(t,e,n){"use strict";var r=n("5ca1"),i=n("0a49")(6),o="findIndex",a=!0;o in[]&&Array(1)[o]((function(){a=!1})),r(r.P+r.F*a,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n("9c6c")(o)},"20fd":function(t,e,n){"use strict";var r=n("d9f6"),i=n("aebd");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},"214f":function(t,e,n){"use strict";n("b0c5");var r=n("2aba"),i=n("32e9"),o=n("79e5"),a=n("be13"),s=n("2b4c"),l=n("520a"),u=s("species"),c=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$
")})),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var p=s(t),f=!o((function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})),d=f?!o((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[u]=function(){return n}),n[p](""),!e})):void 0;if(!f||!d||"replace"===t&&!c||"split"===t&&!h){var g=/./[p],v=n(a,p,""[t],(function(t,e,n,r,i){return e.exec===l?f&&!i?{done:!0,value:g.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),y=v[0],m=v[1];r(String.prototype,t,y),i(RegExp.prototype,p,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},"21a1":function(t,e,n){(function(e){(function(e,n){t.exports=n()})(0,(function(){"use strict";"undefined"!==typeof window?window:"undefined"!==typeof e||"undefined"!==typeof self&&self;function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}var n=t((function(t,e){(function(e,n){t.exports=n()})(0,(function(){function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(t){return Array.isArray(t)?[]:{}}function n(n,r){var i=r&&!0===r.clone;return i&&t(n)?o(e(n),n,r):n}function r(e,r,i){var a=e.slice();return r.forEach((function(r,s){"undefined"===typeof a[s]?a[s]=n(r,i):t(r)?a[s]=o(e[s],r,i):-1===e.indexOf(r)&&a.push(n(r,i))})),a}function i(e,r,i){var a={};return t(e)&&Object.keys(e).forEach((function(t){a[t]=n(e[t],i)})),Object.keys(r).forEach((function(s){t(r[s])&&e[s]?a[s]=o(e[s],r[s],i):a[s]=n(r[s],i)})),a}function o(t,e,o){var a=Array.isArray(e),s=o||{arrayMerge:r},l=s.arrayMerge||r;return a?Array.isArray(t)?l(t,e,o):n(e,o):i(t,e,o)}return o.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return o(t,n,e)}))},o}))}));function r(t){return t=t||Object.create(null),{on:function(e,n){(t[e]||(t[e]=[])).push(n)},off:function(e,n){t[e]&&t[e].splice(t[e].indexOf(n)>>>0,1)},emit:function(e,n){(t[e]||[]).map((function(t){t(n)})),(t["*"]||[]).map((function(t){t(e,n)}))}}}var i=t((function(t,e){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};e.default=n,t.exports=e.default})),o=function(t){return Object.keys(t).map((function(e){var n=t[e].toString().replace(/"/g,""");return e+'="'+n+'"'})).join(" ")},a=i.svg,s=i.xlink,l={};l[a.name]=a.uri,l[s.name]=s.uri;var u,c=function(t,e){void 0===t&&(t="");var r=n(l,e||{}),i=o(r);return""+t+""},h=i.svg,p=i.xlink,f={attrs:(u={style:["position: absolute","width: 0","height: 0"].join("; ")},u[h.name]=h.uri,u[p.name]=p.uri,u)},d=function(t){this.config=n(f,t||{}),this.symbols=[]};d.prototype.add=function(t){var e=this,n=e.symbols,r=this.find(t.id);return r?(n[n.indexOf(r)]=t,!1):(n.push(t),!0)},d.prototype.remove=function(t){var e=this,n=e.symbols,r=this.find(t);return!!r&&(n.splice(n.indexOf(r),1),r.destroy(),!0)},d.prototype.find=function(t){return this.symbols.filter((function(e){return e.id===t}))[0]||null},d.prototype.has=function(t){return null!==this.find(t)},d.prototype.stringify=function(){var t=this.config,e=t.attrs,n=this.symbols.map((function(t){return t.stringify()})).join("");return c(n,e)},d.prototype.toString=function(){return this.stringify()},d.prototype.destroy=function(){this.symbols.forEach((function(t){return t.destroy()}))};var g=function(t){var e=t.id,n=t.viewBox,r=t.content;this.id=e,this.viewBox=n,this.content=r};g.prototype.stringify=function(){return this.content},g.prototype.toString=function(){return this.stringify()},g.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach((function(e){return delete t[e]}))};var v=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n},y=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"===typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return v(c(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(g),m={autoConfigure:!0,mountTo:"body",syncUrlsWithBaseTag:!1,listenLocationChangeEvent:!0,locationChangeEvent:"locationChange",locationChangeAngularEmitter:!1,usagesToUpdate:"use[*|href]",moveGradientsOutsideSymbol:!1},b=function(t){return Array.prototype.slice.call(t,0)},x=navigator.userAgent,_={isChrome:/chrome/i.test(x),isFirefox:/firefox/i.test(x),isIE:/msie/i.test(x)||/trident/i.test(x),isEdge:/edge/i.test(x)},w=function(t,e){var n=document.createEvent("CustomEvent");n.initCustomEvent(t,!1,!1,e),window.dispatchEvent(n)},S=function(t){var e=[];return b(t.querySelectorAll("style")).forEach((function(t){t.textContent+="",e.push(t)})),e},O=function(t){return(t||window.location.href).split("#")[0]},M=function(t){angular.module("ng").run(["$rootScope",function(e){e.$on("$locationChangeSuccess",(function(e,n,r){w(t,{oldUrl:r,newUrl:n})}))}])},A="linearGradient, radialGradient, pattern",C=function(t,e){return void 0===e&&(e=A),b(t.querySelectorAll("symbol")).forEach((function(t){b(t.querySelectorAll(e)).forEach((function(e){t.parentNode.insertBefore(e,t)}))})),t};function I(t,e){var n=b(t).reduce((function(t,n){if(!n.attributes)return t;var r=b(n.attributes),i=e?r.filter(e):r;return t.concat(i)}),[]);return n}var T=i.xlink.uri,k="xlink:href",D=/[{}|\\\^\[\]`"<>]/g;function L(t){return t.replace(D,(function(t){return"%"+t[0].charCodeAt(0).toString(16).toUpperCase()}))}function j(t,e,n){return b(t).forEach((function(t){var r=t.getAttribute(k);if(r&&0===r.indexOf(e)){var i=r.replace(e,n);t.setAttributeNS(T,k,i)}})),t}var P,E=["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke","style"],R=E.map((function(t){return"["+t+"]"})).join(","),N=function(t,e,n,r){var i=L(n),o=L(r),a=t.querySelectorAll(R),s=I(a,(function(t){var e=t.localName,n=t.value;return-1!==E.indexOf(e)&&-1!==n.indexOf("url("+i)}));s.forEach((function(t){return t.value=t.value.replace(i,o)})),j(e,i,o)},z={MOUNT:"mount",SYMBOL_MOUNT:"symbol_mount"},B=function(t){function e(e){var i=this;void 0===e&&(e={}),t.call(this,n(m,e));var o=r();this._emitter=o,this.node=null;var a=this,s=a.config;if(s.autoConfigure&&this._autoConfigure(e),s.syncUrlsWithBaseTag){var l=document.getElementsByTagName("base")[0].getAttribute("href");o.on(z.MOUNT,(function(){return i.updateUrls("#",l)}))}var u=this._handleLocationChange.bind(this);this._handleLocationChange=u,s.listenLocationChangeEvent&&window.addEventListener(s.locationChangeEvent,u),s.locationChangeAngularEmitter&&M(s.locationChangeEvent),o.on(z.MOUNT,(function(t){s.moveGradientsOutsideSymbol&&C(t)})),o.on(z.SYMBOL_MOUNT,(function(t){s.moveGradientsOutsideSymbol&&C(t.parentNode),(_.isIE||_.isEdge)&&S(t)}))}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var i={isMounted:{}};return i.isMounted.get=function(){return!!this.node},e.prototype._autoConfigure=function(t){var e=this,n=e.config;"undefined"===typeof t.syncUrlsWithBaseTag&&(n.syncUrlsWithBaseTag="undefined"!==typeof document.getElementsByTagName("base")[0]),"undefined"===typeof t.locationChangeAngularEmitter&&(n.locationChangeAngularEmitter="angular"in window),"undefined"===typeof t.moveGradientsOutsideSymbol&&(n.moveGradientsOutsideSymbol=_.isFirefox)},e.prototype._handleLocationChange=function(t){var e=t.detail,n=e.oldUrl,r=e.newUrl;this.updateUrls(n,r)},e.prototype.add=function(e){var n=this,r=t.prototype.add.call(this,e);return this.isMounted&&r&&(e.mount(n.node),this._emitter.emit(z.SYMBOL_MOUNT,e.node)),r},e.prototype.attach=function(t){var e=this,n=this;if(n.isMounted)return n.node;var r="string"===typeof t?document.querySelector(t):t;return n.node=r,this.symbols.forEach((function(t){t.mount(n.node),e._emitter.emit(z.SYMBOL_MOUNT,t.node)})),b(r.querySelectorAll("symbol")).forEach((function(t){var e=y.createFromExistingNode(t);e.node=t,n.add(e)})),this._emitter.emit(z.MOUNT,r),r},e.prototype.destroy=function(){var t=this,e=t.config,n=t.symbols,r=t._emitter;n.forEach((function(t){return t.destroy()})),r.off("*"),window.removeEventListener(e.locationChangeEvent,this._handleLocationChange),this.isMounted&&this.unmount()},e.prototype.mount=function(t,e){void 0===t&&(t=this.config.mountTo),void 0===e&&(e=!1);var n=this;if(n.isMounted)return n.node;var r="string"===typeof t?document.querySelector(t):t,i=n.render();return this.node=i,e&&r.childNodes[0]?r.insertBefore(i,r.childNodes[0]):r.appendChild(i),this._emitter.emit(z.MOUNT,i),i},e.prototype.render=function(){return v(this.stringify())},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},e.prototype.updateUrls=function(t,e){if(!this.isMounted)return!1;var n=document.querySelectorAll(this.config.usagesToUpdate);return N(this.node,n,O(t)+"#",O(e)+"#"),!0},Object.defineProperties(e.prototype,i),e}(d),V=t((function(t){ +/*! + * domready (c) Dustin Diaz 2014 - License MIT + */ +!function(e,n){t.exports=n()}(0,(function(){var t,e=[],n=document,r=n.documentElement.doScroll,i="DOMContentLoaded",o=(r?/^loaded|^c/:/^loaded|^i|^c/).test(n.readyState);return o||n.addEventListener(i,t=function(){n.removeEventListener(i,t),o=1;while(t=e.shift())t()}),function(t){o?setTimeout(t,0):e.push(t)}}))})),F="__SVG_SPRITE_NODE__",H="__SVG_SPRITE__",G=!!window[H];G?P=window[H]:(P=new B({attrs:{id:F}}),window[H]=P);var W=function(){var t=document.getElementById(F);t?P.attach(t):P.mount(document.body,!0)};document.body?W():V(W);var U=P;return U}))}).call(this,n("c8ba"))},"22d1":function(t,e,n){"use strict";var r=function(){function t(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return t}(),i=function(){function t(){this.browser=new r,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow="undefined"!==typeof window}return t}(),o=new i;function a(t,e){var n=e.browser,r=t.match(/Firefox\/([\d.]+)/),i=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(t);r&&(n.firefox=!0,n.version=r[1]),i&&(n.ie=!0,n.version=i[1]),o&&(n.edge=!0,n.version=o[1],n.newEdge=+o[1].split(".")[0]>18),a&&(n.weChat=!0),e.svgSupported="undefined"!==typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!==typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}"object"===typeof wx&&"function"===typeof wx.getSystemInfoSync?(o.wxa=!0,o.touchEventsSupported=!0):"undefined"===typeof document&&"undefined"!==typeof self?o.worker=!0:"undefined"===typeof navigator?(o.node=!0,o.svgSupported=!0):a(navigator.userAgent,o),e["a"]=o},"230e":function(t,e,n){var r=n("d3f4"),i=n("7726").document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},"23c6":function(t,e,n){var r=n("2d95"),i=n("2b4c")("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=a(e=Object(t),i))?n:o?r(e):"Object"==(s=r(e))&&"function"==typeof e.callee?"Arguments":s}},"241e":function(t,e,n){var r=n("25eb");t.exports=function(t){return Object(r(t))}},"24c5":function(t,e,n){"use strict";var r,i,o,a,s=n("b8e3"),l=n("e53d"),u=n("d864"),c=n("40c3"),h=n("63b6"),p=n("f772"),f=n("79aa"),d=n("1173"),g=n("a22a"),v=n("f201"),y=n("4178").set,m=n("aba2")(),b=n("656e"),x=n("4439"),_=n("bc13"),w=n("cd78"),S="Promise",O=l.TypeError,M=l.process,A=M&&M.versions,C=A&&A.v8||"",I=l[S],T="process"==c(M),k=function(){},D=i=b.f,L=!!function(){try{var t=I.resolve(1),e=(t.constructor={})[n("5168")("species")]=function(t){t(k,k)};return(T||"function"==typeof PromiseRejectionEvent)&&t.then(k)instanceof e&&0!==C.indexOf("6.6")&&-1===_.indexOf("Chrome/66")}catch(r){}}(),j=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},P=function(t,e){if(!t._n){t._n=!0;var n=t._c;m((function(){var r=t._v,i=1==t._s,o=0,a=function(e){var n,o,a,s=i?e.ok:e.fail,l=e.resolve,u=e.reject,c=e.domain;try{s?(i||(2==t._h&&N(t),t._h=1),!0===s?n=r:(c&&c.enter(),n=s(r),c&&(c.exit(),a=!0)),n===e.promise?u(O("Promise-chain cycle")):(o=j(n))?o.call(n,l,u):l(n)):u(r)}catch(h){c&&!a&&c.exit(),u(h)}};while(n.length>o)a(n[o++]);t._c=[],t._n=!1,e&&!t._h&&E(t)}))}},E=function(t){y.call(l,(function(){var e,n,r,i=t._v,o=R(t);if(o&&(e=x((function(){T?M.emit("unhandledRejection",i,t):(n=l.onunhandledrejection)?n({promise:t,reason:i}):(r=l.console)&&r.error&&r.error("Unhandled promise rejection",i)})),t._h=T||R(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},R=function(t){return 1!==t._h&&0===(t._a||t._c).length},N=function(t){y.call(l,(function(){var e;T?M.emit("rejectionHandled",t):(e=l.onrejectionhandled)&&e({promise:t,reason:t._v})}))},z=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),P(e,!0))},B=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw O("Promise can't be resolved itself");(e=j(t))?m((function(){var r={_w:n,_d:!1};try{e.call(t,u(B,r,1),u(z,r,1))}catch(i){z.call(r,i)}})):(n._v=t,n._s=1,P(n,!1))}catch(r){z.call({_w:n,_d:!1},r)}}};L||(I=function(t){d(this,I,S,"_h"),f(t),r.call(this);try{t(u(B,this,1),u(z,this,1))}catch(e){z.call(this,e)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n("5c95")(I.prototype,{then:function(t,e){var n=D(v(this,I));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=T?M.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&P(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=u(B,t,1),this.reject=u(z,t,1)},b.f=D=function(t){return t===I||t===a?new o(t):i(t)}),h(h.G+h.W+h.F*!L,{Promise:I}),n("45f2")(I,S),n("4c95")(S),a=n("584a")[S],h(h.S+h.F*!L,S,{reject:function(t){var e=D(this),n=e.reject;return n(t),e.promise}}),h(h.S+h.F*(s||!L),S,{resolve:function(t){return w(s&&this===a?I:this,t)}}),h(h.S+h.F*!(L&&n("4ee1")((function(t){I.all(t)["catch"](k)}))),S,{all:function(t){var e=this,n=D(e),r=n.resolve,i=n.reject,o=x((function(){var n=[],o=0,a=1;g(t,!1,(function(t){var s=o++,l=!1;n.push(void 0),a++,e.resolve(t).then((function(t){l||(l=!0,n[s]=t,--a||r(n))}),i)})),--a||r(n)}));return o.e&&i(o.v),n.promise},race:function(t){var e=this,n=D(e),r=n.reject,i=x((function(){g(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},"25b0":function(t,e,n){n("1df8"),t.exports=n("584a").Object.setPrototypeOf},"25eb":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},2621:function(t,e){e.f=Object.getOwnPropertySymbols},"268f":function(t,e,n){t.exports=n("fde4")},"27ee":function(t,e,n){var r=n("23c6"),i=n("2b4c")("iterator"),o=n("84f2");t.exports=n("8378").getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[r(t)]}},2877:function(t,e,n){"use strict";function r(t,e,n,r,i,o,a,s){var l,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=l):i&&(l=s?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(t,e){return l.call(e),c(t,e)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:t,options:u}}n.d(e,"a",(function(){return r}))},"28a5":function(t,e,n){"use strict";var r=n("aae3"),i=n("cb7c"),o=n("ebd6"),a=n("0390"),s=n("9def"),l=n("5f1b"),u=n("520a"),c=n("79e5"),h=Math.min,p=[].push,f="split",d="length",g="lastIndex",v=4294967295,y=!c((function(){RegExp(v,"y")}));n("214f")("split",2,(function(t,e,n,c){var m;return m="c"=="abbc"[f](/(b)*/)[1]||4!="test"[f](/(?:)/,-1)[d]||2!="ab"[f](/(?:ab)*/)[d]||4!="."[f](/(.?)(.?)/)[d]||"."[f](/()()/)[d]>1||""[f](/.?/)[d]?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!r(t))return n.call(i,t,e);var o,a,s,l=[],c=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,f=void 0===e?v:e>>>0,y=new RegExp(t.source,c+"g");while(o=u.call(y,i)){if(a=y[g],a>h&&(l.push(i.slice(h,o.index)),o[d]>1&&o.index=f))break;y[g]===o.index&&y[g]++}return h===i[d]?!s&&y.test("")||l.push(""):l.push(i.slice(h)),l[d]>f?l.slice(0,f):l}:"0"[f](void 0,0)[d]?function(t,e){return void 0===t&&0===e?[]:n.call(this,t,e)}:n,[function(n,r){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i,r):m.call(String(i),n,r)},function(t,e){var r=c(m,t,this,e,m!==n);if(r.done)return r.value;var u=i(t),p=String(this),f=o(u,RegExp),d=u.unicode,g=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(y?"y":"g"),b=new f(y?u:"^(?:"+u.source+")",g),x=void 0===e?v:e>>>0;if(0===x)return[];if(0===p.length)return null===l(b,p)?[p]:[];var _=0,w=0,S=[];while(w";e.style.display="none",n("fab2").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+a+"document.F=Object"+i+"/script"+a),t.close(),u=t.F;while(r--)delete u[l][o[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s[l]=r(t),n=new s,s[l]=null,n[a]=t):n=u(),void 0===e?n:i(n,e)}},"2b0e":function(t,e,n){"use strict";n.r(e),function(t){ +/*! + * Vue.js v2.6.10 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ +var n=Object.freeze({});function r(t){return void 0===t||null===t}function i(t){return void 0!==t&&null!==t}function o(t){return!0===t}function a(t){return!1===t}function s(t){return"string"===typeof t||"number"===typeof t||"symbol"===typeof t||"boolean"===typeof t}function l(t){return null!==t&&"object"===typeof t}var u=Object.prototype.toString;function c(t){return"[object Object]"===u.call(t)}function h(t){return"[object RegExp]"===u.call(t)}function p(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return i(t)&&"function"===typeof t.then&&"function"===typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||c(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function x(t,e){return b.call(t,e)}function _(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var w=/-(\w)/g,S=_((function(t){return t.replace(w,(function(t,e){return e?e.toUpperCase():""}))})),O=_((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),M=/\B([A-Z])/g,A=_((function(t){return t.replace(M,"-$1").toLowerCase()}));function C(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function I(t,e){return t.bind(e)}var T=Function.prototype.bind?I:C;function k(t,e){e=e||0;var n=t.length-e,r=new Array(n);while(n--)r[n]=t[n+e];return r}function D(t,e){for(var n in e)t[n]=e[n];return t}function L(t){for(var e={},n=0;n0,nt=Q&&Q.indexOf("edge/")>0,rt=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===J),it=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/)),ot={}.watch,at=!1;if(Z)try{var st={};Object.defineProperty(st,"passive",{get:function(){at=!0}}),window.addEventListener("test-passive",null,st)}catch(Sa){}var lt=function(){return void 0===X&&(X=!Z&&!K&&"undefined"!==typeof t&&(t["process"]&&"server"===t["process"].env.VUE_ENV)),X},ut=Z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"===typeof t&&/native code/.test(t.toString())}var ht,pt="undefined"!==typeof Symbol&&ct(Symbol)&&"undefined"!==typeof Reflect&&ct(Reflect.ownKeys);ht="undefined"!==typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=j,dt=0,gt=function(){this.id=dt++,this.subs=[]};gt.prototype.addSub=function(t){this.subs.push(t)},gt.prototype.removeSub=function(t){m(this.subs,t)},gt.prototype.depend=function(){gt.target&>.target.addDep(this)},gt.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(o&&!x(i,"default"))a=!1;else if(""===a||a===A(t)){var l=te(String,i.type);(l<0||s0&&(a=Ce(a,(e||"")+"_"+n),Ae(a[0])&&Ae(u)&&(c[l]=wt(u.text+a[0].text),a.shift()),c.push.apply(c,a)):s(a)?Ae(u)?c[l]=wt(u.text+a):""!==a&&c.push(wt(a)):Ae(a)&&Ae(u)?c[l]=wt(u.text+a.text):(o(t._isVList)&&i(a.tag)&&r(a.key)&&i(e)&&(a.key="__vlist"+e+"_"+n+"__"),c.push(a)));return c}function Ie(t){var e=t.$options.provide;e&&(t._provided="function"===typeof e?e.call(t):e)}function Te(t){var e=ke(t.$options.inject,t);e&&(Tt(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),Tt(!0))}function ke(t,e){if(t){for(var n=Object.create(null),r=pt?Reflect.ownKeys(t):Object.keys(t),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==n&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var l in i={},t)t[l]&&"$"!==l[0]&&(i[l]=Pe(e,l,t[l]))}else i={};for(var u in e)u in i||(i[u]=Ee(e,u));return t&&Object.isExtensible(t)&&(t._normalized=i),U(i,"$stable",a),U(i,"$key",s),U(i,"$hasNormal",o),i}function Pe(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return t=t&&"object"===typeof t&&!Array.isArray(t)?[t]:Me(t),t&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function Ee(t,e){return function(){return t[e]}}function Re(t,e){var n,r,o,a,s;if(Array.isArray(t)||"string"===typeof t)for(n=new Array(t.length),r=0,o=t.length;r1?k(n):n;for(var r=k(arguments,1),i='event handler for "'+t+'"',o=0,a=n.length;odocument.createEvent("Event").timeStamp&&(Xn=function(){return $n.now()})}function Zn(){var t,e;for(qn=Xn(),Wn=!0,Vn.sort((function(t,e){return t.id-e.id})),Un=0;UnUn&&Vn[n].id>t.id)n--;Vn.splice(n+1,0,t)}else Vn.push(t);Gn||(Gn=!0,de(Zn))}}var er=0,nr=function(t,e,n,r,i){this.vm=t,i&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++er,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ht,this.newDepIds=new ht,this.expression="","function"===typeof e?this.getter=e:(this.getter=q(e),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()};nr.prototype.get=function(){var t;yt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(Sa){if(!this.user)throw Sa;ee(Sa,e,'getter for watcher "'+this.expression+'"')}finally{this.deep&&ve(t),mt(),this.cleanupDeps()}return t},nr.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},nr.prototype.cleanupDeps=function(){var t=this.deps.length;while(t--){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},nr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():tr(this)},nr.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(Sa){ee(Sa,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},nr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},nr.prototype.depend=function(){var t=this.deps.length;while(t--)this.deps[t].depend()},nr.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||m(this.vm._watchers,this);var t=this.deps.length;while(t--)this.deps[t].removeSub(this);this.active=!1}};var rr={enumerable:!0,configurable:!0,get:j,set:j};function ir(t,e,n){rr.get=function(){return this[e][n]},rr.set=function(t){this[e][n]=t},Object.defineProperty(t,n,rr)}function or(t){t._watchers=[];var e=t.$options;e.props&&ar(t,e.props),e.methods&&dr(t,e.methods),e.data?sr(t):jt(t._data={},!0),e.computed&&cr(t,e.computed),e.watch&&e.watch!==ot&&gr(t,e.watch)}function ar(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[],o=!t.$parent;o||Tt(!1);var a=function(o){i.push(o);var a=Zt(o,e,n,t);Pt(r,o,a),o in t||ir(t,"_props",o)};for(var s in e)a(s);Tt(!0)}function sr(t){var e=t.$options.data;e=t._data="function"===typeof e?lr(e,t):e||{},c(e)||(e={});var n=Object.keys(e),r=t.$options.props,i=(t.$options.methods,n.length);while(i--){var o=n[i];0,r&&x(r,o)||W(o)||ir(t,"_data",o)}jt(e,!0)}function lr(t,e){yt();try{return t.call(e,e)}catch(Sa){return ee(Sa,e,"data()"),{}}finally{mt()}}var ur={lazy:!0};function cr(t,e){var n=t._computedWatchers=Object.create(null),r=lt();for(var i in e){var o=e[i],a="function"===typeof o?o:o.get;0,r||(n[i]=new nr(t,a||j,j,ur)),i in t||hr(t,i,o)}}function hr(t,e,n){var r=!lt();"function"===typeof n?(rr.get=r?pr(e):fr(n),rr.set=j):(rr.get=n.get?r&&!1!==n.cache?pr(e):fr(n.get):j,rr.set=n.set||j),Object.defineProperty(t,e,rr)}function pr(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),gt.target&&e.depend(),e.value}}function fr(t){return function(){return t.call(this,this)}}function dr(t,e){t.$options.props;for(var n in e)t[n]="function"!==typeof e[n]?j:T(e[n],t)}function gr(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i-1)return this;var n=k(arguments,1);return n.unshift(this),"function"===typeof t.install?t.install.apply(t,n):"function"===typeof t&&t.apply(null,n),e.push(t),this}}function Mr(t){t.mixin=function(t){return this.options=Xt(this.options,t),this}}function Ar(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||n.options.name;var a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=Xt(n.options,t),a["super"]=n,a.options.props&&Cr(a),a.options.computed&&Ir(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,V.forEach((function(t){a[t]=n[t]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=D({},a.options),i[r]=a,a}}function Cr(t){var e=t.options.props;for(var n in e)ir(t.prototype,"_props",n)}function Ir(t){var e=t.options.computed;for(var n in e)hr(t.prototype,n,e[n])}function Tr(t){V.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&c(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"===typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}function kr(t){return t&&(t.Ctor.options.name||t.tag)}function Dr(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"===typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function Lr(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a=n[o];if(a){var s=kr(a.componentOptions);s&&!e(s)&&jr(n,o,r,i)}}}function jr(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,m(n,e)}br(Sr),yr(Sr),Tn(Sr),jn(Sr),mn(Sr);var Pr=[String,RegExp,Array],Er={name:"keep-alive",abstract:!0,props:{include:Pr,exclude:Pr,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)jr(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",(function(e){Lr(t,(function(t){return Dr(e,t)}))})),this.$watch("exclude",(function(e){Lr(t,(function(t){return!Dr(e,t)}))}))},render:function(){var t=this.$slots.default,e=Sn(t),n=e&&e.componentOptions;if(n){var r=kr(n),i=this,o=i.include,a=i.exclude;if(o&&(!r||!Dr(o,r))||a&&r&&Dr(a,r))return e;var s=this,l=s.cache,u=s.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;l[c]?(e.componentInstance=l[c].componentInstance,m(u,c),u.push(c)):(l[c]=e,u.push(c),this.max&&u.length>parseInt(this.max)&&jr(l,u[0],u,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}},Rr={KeepAlive:Er};function Nr(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:ft,extend:D,mergeOptions:Xt,defineReactive:Pt},t.set=Et,t.delete=Rt,t.nextTick=de,t.observable=function(t){return jt(t),t},t.options=Object.create(null),V.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,D(t.options.components,Rr),Or(t),Mr(t),Ar(t),Tr(t)}Nr(Sr),Object.defineProperty(Sr.prototype,"$isServer",{get:lt}),Object.defineProperty(Sr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Sr,"FunctionalRenderContext",{value:Ke}),Sr.version="2.6.10";var zr=v("style,class"),Br=v("input,textarea,option,select,progress"),Vr=function(t,e,n){return"value"===n&&Br(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Fr=v("contenteditable,draggable,spellcheck"),Hr=v("events,caret,typing,plaintext-only"),Gr=function(t,e){return Xr(e)||"false"===e?"false":"contenteditable"===t&&Hr(e)?e:"true"},Wr=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Ur="http://www.w3.org/1999/xlink",Yr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},qr=function(t){return Yr(t)?t.slice(6,t.length):""},Xr=function(t){return null==t||!1===t};function $r(t){var e=t.data,n=t,r=t;while(i(r.componentInstance))r=r.componentInstance._vnode,r&&r.data&&(e=Zr(r.data,e));while(i(n=n.parent))n&&n.data&&(e=Zr(e,n.data));return Kr(e.staticClass,e.class)}function Zr(t,e){return{staticClass:Jr(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function Kr(t,e){return i(t)||i(e)?Jr(t,Qr(e)):""}function Jr(t,e){return t?e?t+" "+e:t:e||""}function Qr(t){return Array.isArray(t)?ti(t):l(t)?ei(t):"string"===typeof t?t:""}function ti(t){for(var e,n="",r=0,o=t.length;r-1?si[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:si[t]=/HTMLUnknownElement/.test(e.toString())}var ui=v("text,number,password,search,email,tel,url");function ci(t){if("string"===typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}function hi(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function pi(t,e){return document.createElementNS(ni[t],e)}function fi(t){return document.createTextNode(t)}function di(t){return document.createComment(t)}function gi(t,e,n){t.insertBefore(e,n)}function vi(t,e){t.removeChild(e)}function yi(t,e){t.appendChild(e)}function mi(t){return t.parentNode}function bi(t){return t.nextSibling}function xi(t){return t.tagName}function _i(t,e){t.textContent=e}function wi(t,e){t.setAttribute(e,"")}var Si=Object.freeze({createElement:hi,createElementNS:pi,createTextNode:fi,createComment:di,insertBefore:gi,removeChild:vi,appendChild:yi,parentNode:mi,nextSibling:bi,tagName:xi,setTextContent:_i,setStyleScope:wi}),Oi={create:function(t,e){Mi(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Mi(t,!0),Mi(e))},destroy:function(t){Mi(t,!0)}};function Mi(t,e){var n=t.data.ref;if(i(n)){var r=t.context,o=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?m(a[n],o):a[n]===o&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])?a[n].indexOf(o)<0&&a[n].push(o):a[n]=[o]:a[n]=o}}var Ai=new bt("",{},[]),Ci=["create","activate","update","remove","destroy"];function Ii(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.isComment&&i(t.data)===i(e.data)&&Ti(t,e)||o(t.isAsyncPlaceholder)&&t.asyncFactory===e.asyncFactory&&r(e.asyncFactory.error))}function Ti(t,e){if("input"!==t.tag)return!0;var n,r=i(n=t.data)&&i(n=n.attrs)&&n.type,o=i(n=e.data)&&i(n=n.attrs)&&n.type;return r===o||ui(r)&&ui(o)}function ki(t,e,n){var r,o,a={};for(r=e;r<=n;++r)o=t[r].key,i(o)&&(a[o]=r);return a}function Di(t){var e,n,a={},l=t.modules,u=t.nodeOps;for(e=0;eg?(h=r(n[m+1])?null:n[m+1].elm,S(t,h,n,d,m,o)):d>m&&M(t,e,p,g)}function I(t,e,n,r){for(var o=n;o-1?Hi(t,e,n):Wr(e)?Xr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Fr(e)?t.setAttribute(e,Gr(e,n)):Yr(e)?Xr(n)?t.removeAttributeNS(Ur,qr(e)):t.setAttributeNS(Ur,e,n):Hi(t,e,n)}function Hi(t,e,n){if(Xr(n))t.removeAttribute(e);else{if(tt&&!et&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Gi={create:Vi,update:Vi};function Wi(t,e){var n=e.elm,o=e.data,a=t.data;if(!(r(o.staticClass)&&r(o.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=$r(e),l=n._transitionClasses;i(l)&&(s=Jr(s,Qr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ui,Yi={create:Wi,update:Wi},qi="__r",Xi="__c";function $i(t){if(i(t[qi])){var e=tt?"change":"input";t[e]=[].concat(t[qi],t[e]||[]),delete t[qi]}i(t[Xi])&&(t.change=[].concat(t[Xi],t.change||[]),delete t[Xi])}function Zi(t,e,n){var r=Ui;return function i(){var o=e.apply(null,arguments);null!==o&&Qi(t,i,n,r)}}var Ki=ae&&!(it&&Number(it[1])<=53);function Ji(t,e,n,r){if(Ki){var i=qn,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Ui.addEventListener(t,e,at?{capture:n,passive:r}:n)}function Qi(t,e,n,r){(r||Ui).removeEventListener(t,e._wrapper||e,n)}function to(t,e){if(!r(t.data.on)||!r(e.data.on)){var n=e.data.on||{},i=t.data.on||{};Ui=e.elm,$i(n),xe(n,i,Ji,Qi,Zi,e.context),Ui=void 0}}var eo,no={create:to,update:to};function ro(t,e){if(!r(t.data.domProps)||!r(e.data.domProps)){var n,o,a=e.elm,s=t.data.domProps||{},l=e.data.domProps||{};for(n in i(l.__ob__)&&(l=e.data.domProps=D({},l)),s)n in l||(a[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),o===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=o;var u=r(o)?"":String(o);io(a,u)&&(a.value=u)}else if("innerHTML"===n&&ii(a.tagName)&&r(a.innerHTML)){eo=eo||document.createElement("div"),eo.innerHTML=""+o+"";var c=eo.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(c.firstChild)a.appendChild(c.firstChild)}else if(o!==s[n])try{a[n]=o}catch(Sa){}}}}function io(t,e){return!t.composing&&("OPTION"===t.tagName||oo(t,e)||ao(t,e))}function oo(t,e){var n=!0;try{n=document.activeElement!==t}catch(Sa){}return n&&t.value!==e}function ao(t,e){var n=t.value,r=t._vModifiers;if(i(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}var so={create:ro,update:ro},lo=_((function(t){var e={},n=/;(?![^(]*\))/g,r=/:(.+)/;return t.split(n).forEach((function(t){if(t){var n=t.split(r);n.length>1&&(e[n[0].trim()]=n[1].trim())}})),e}));function uo(t){var e=co(t.style);return t.staticStyle?D(t.staticStyle,e):e}function co(t){return Array.isArray(t)?L(t):"string"===typeof t?lo(t):t}function ho(t,e){var n,r={};if(e){var i=t;while(i.componentInstance)i=i.componentInstance._vnode,i&&i.data&&(n=uo(i.data))&&D(r,n)}(n=uo(t.data))&&D(r,n);var o=t;while(o=o.parent)o.data&&(n=uo(o.data))&&D(r,n);return r}var po,fo=/^--/,go=/\s*!important$/,vo=function(t,e,n){if(fo.test(e))t.style.setProperty(e,n);else if(go.test(n))t.style.setProperty(A(e),n.replace(go,""),"important");else{var r=mo(e);if(Array.isArray(n))for(var i=0,o=n.length;i-1?e.split(_o).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function So(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(_o).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";while(n.indexOf(r)>=0)n=n.replace(r," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Oo(t){if(t){if("object"===typeof t){var e={};return!1!==t.css&&D(e,Mo(t.name||"v")),D(e,t),e}return"string"===typeof t?Mo(t):void 0}}var Mo=_((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),Ao=Z&&!et,Co="transition",Io="animation",To="transition",ko="transitionend",Do="animation",Lo="animationend";Ao&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(To="WebkitTransition",ko="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Do="WebkitAnimation",Lo="webkitAnimationEnd"));var jo=Z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Po(t){jo((function(){jo(t)}))}function Eo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),wo(t,e))}function Ro(t,e){t._transitionClasses&&m(t._transitionClasses,e),So(t,e)}function No(t,e,n){var r=Bo(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Co?ko:Lo,l=0,u=function(){t.removeEventListener(s,c),n()},c=function(e){e.target===t&&++l>=a&&u()};setTimeout((function(){l0&&(n=Co,c=a,h=o.length):e===Io?u>0&&(n=Io,c=u,h=l.length):(c=Math.max(a,u),n=c>0?a>u?Co:Io:null,h=n?n===Co?o.length:l.length:0);var p=n===Co&&zo.test(r[To+"Property"]);return{type:n,timeout:c,propCount:h,hasTransform:p}}function Vo(t,e){while(t.length1}function Yo(t,e){!0!==e.data.show&&Ho(e)}var qo=Z?{create:Yo,activate:Yo,remove:function(t,e){!0!==t.data.show?Go(t,e):e()}}:{},Xo=[Gi,Yi,no,so,xo,qo],$o=Xo.concat(Bi),Zo=Di({nodeOps:Si,modules:$o});et&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&ia(t,"input")}));var Ko={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?_e(n,"postpatch",(function(){Ko.componentUpdated(t,e,n)})):Jo(t,e,n.context),t._vOptions=[].map.call(t.options,ea)):("textarea"===n.tag||ui(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",na),t.addEventListener("compositionend",ra),t.addEventListener("change",ra),et&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Jo(t,e,n.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,ea);if(i.some((function(t,e){return!R(t,r[e])}))){var o=t.multiple?e.value.some((function(t){return ta(t,i)})):e.value!==e.oldValue&&ta(e.value,i);o&&ia(t,"change")}}}};function Jo(t,e,n){Qo(t,e,n),(tt||nt)&&setTimeout((function(){Qo(t,e,n)}),0)}function Qo(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,l=t.options.length;s-1,a.selected!==o&&(a.selected=o);else if(R(ea(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function ta(t,e){return e.every((function(e){return!R(e,t)}))}function ea(t){return"_value"in t?t._value:t.value}function na(t){t.target.composing=!0}function ra(t){t.target.composing&&(t.target.composing=!1,ia(t.target,"input"))}function ia(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function oa(t){return!t.componentInstance||t.data&&t.data.transition?t:oa(t.componentInstance._vnode)}var aa={bind:function(t,e,n){var r=e.value;n=oa(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,Ho(n,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value,i=e.oldValue;if(!r!==!i){n=oa(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,r?Ho(n,(function(){t.style.display=t.__vOriginalDisplay})):Go(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none"}},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},sa={model:Ko,show:aa},la={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ua(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?ua(Sn(e.children)):t}function ca(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[S(o)]=i[o];return e}function ha(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function pa(t){while(t=t.parent)if(t.data.transition)return!0}function fa(t,e){return e.key===t.key&&e.tag===t.tag}var da=function(t){return t.tag||wn(t)},ga=function(t){return"show"===t.name},va={name:"transition",props:la,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(da),n.length)){0;var r=this.mode;0;var i=n[0];if(pa(this.$vnode))return i;var o=ua(i);if(!o)return i;if(this._leaving)return ha(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var l=(o.data||(o.data={})).transition=ca(this),u=this._vnode,c=ua(u);if(o.data.directives&&o.data.directives.some(ga)&&(o.data.show=!0),c&&c.data&&!fa(o,c)&&!wn(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var h=c.data.transition=D({},l);if("out-in"===r)return this._leaving=!0,_e(h,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),ha(t,i);if("in-out"===r){if(wn(o))return u;var p,f=function(){p()};_e(l,"afterEnter",f),_e(l,"enterCancelled",f),_e(h,"delayLeave",(function(t){p=t}))}}return i}}},ya=D({tag:String,moveClass:String},la);delete ya.mode;var ma={props:ya,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var i=Dn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=ca(this),s=0;s=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,c=!0,h=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return c=t.done,t},e:function(t){h=!0,s=t},f:function(){try{c||null==n["return"]||n["return"]()}finally{if(h)throw s}}}}},"2d95":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"2e67":function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},"2f62":function(t,e,n){"use strict"; +/** + * vuex v3.1.0 + * (c) 2019 Evan You + * @license MIT + */ +function r(t){var e=Number(t.version.split(".")[0]);if(e>=2)t.mixin({beforeCreate:r});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[r].concat(t.init):r,n.call(this,t)}}function r(){var t=this.$options;t.store?this.$store="function"===typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}n.d(e,"c",(function(){return T})),n.d(e,"b",(function(){return D}));var i="undefined"!==typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function o(t){i&&(t._devtoolHook=i,i.emit("vuex:init",t),i.on("vuex:travel-to-state",(function(e){t.replaceState(e)})),t.subscribe((function(t,e){i.emit("vuex:mutation",t,e)})))}function a(t,e){Object.keys(t).forEach((function(n){return e(t[n],n)}))}function s(t){return null!==t&&"object"===typeof t}function l(t){return t&&"function"===typeof t.then}var u=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"===typeof n?n():n)||{}},c={namespaced:{configurable:!0}};c.namespaced.get=function(){return!!this._rawModule.namespaced},u.prototype.addChild=function(t,e){this._children[t]=e},u.prototype.removeChild=function(t){delete this._children[t]},u.prototype.getChild=function(t){return this._children[t]},u.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},u.prototype.forEachChild=function(t){a(this._children,t)},u.prototype.forEachGetter=function(t){this._rawModule.getters&&a(this._rawModule.getters,t)},u.prototype.forEachAction=function(t){this._rawModule.actions&&a(this._rawModule.actions,t)},u.prototype.forEachMutation=function(t){this._rawModule.mutations&&a(this._rawModule.mutations,t)},Object.defineProperties(u.prototype,c);var h=function(t){this.register([],t,!1)};function p(t,e,n){if(e.update(n),n.modules)for(var r in n.modules){if(!e.getChild(r))return void 0;p(t.concat(r),e.getChild(r),n.modules[r])}}h.prototype.get=function(t){return t.reduce((function(t,e){return t.getChild(e)}),this.root)},h.prototype.getNamespace=function(t){var e=this.root;return t.reduce((function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")}),"")},h.prototype.update=function(t){p([],this.root,t)},h.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=new u(e,n);if(0===t.length)this.root=i;else{var o=this.get(t.slice(0,-1));o.addChild(t[t.length-1],i)}e.modules&&a(e.modules,(function(e,i){r.register(t.concat(i),e,n)}))},h.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var f;var d=function(t){var e=this;void 0===t&&(t={}),!f&&"undefined"!==typeof window&&window.Vue&&I(window.Vue);var n=t.plugins;void 0===n&&(n=[]);var r=t.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new h(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new f;var i=this,a=this,s=a.dispatch,l=a.commit;this.dispatch=function(t,e){return s.call(i,t,e)},this.commit=function(t,e,n){return l.call(i,t,e,n)},this.strict=r;var u=this._modules.root.state;b(this,u,[],this._modules.root),m(this,u),n.forEach((function(t){return t(e)}));var c=void 0!==t.devtools?t.devtools:f.config.devtools;c&&o(this)},g={state:{configurable:!0}};function v(t,e){return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function y(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;b(t,n,[],t._modules.root,!0),m(t,n,e)}function m(t,e,n){var r=t._vm;t.getters={};var i=t._wrappedGetters,o={};a(i,(function(e,n){o[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})}));var s=f.config.silent;f.config.silent=!0,t._vm=new f({data:{$$state:e},computed:o}),f.config.silent=s,t.strict&&M(t),r&&(n&&t._withCommit((function(){r._data.$$state=null})),f.nextTick((function(){return r.$destroy()})))}function b(t,e,n,r,i){var o=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!o&&!i){var s=A(e,n.slice(0,-1)),l=n[n.length-1];t._withCommit((function(){f.set(s,l,r.state)}))}var u=r.context=x(t,a,n);r.forEachMutation((function(e,n){var r=a+n;w(t,r,e,u)})),r.forEachAction((function(e,n){var r=e.root?n:a+n,i=e.handler||e;S(t,r,i,u)})),r.forEachGetter((function(e,n){var r=a+n;O(t,r,e,u)})),r.forEachChild((function(r,o){b(t,e,n.concat(o),r,i)}))}function x(t,e,n){var r=""===e,i={dispatch:r?t.dispatch:function(n,r,i){var o=C(n,r,i),a=o.payload,s=o.options,l=o.type;return s&&s.root||(l=e+l),t.dispatch(l,a)},commit:r?t.commit:function(n,r,i){var o=C(n,r,i),a=o.payload,s=o.options,l=o.type;s&&s.root||(l=e+l),t.commit(l,a,s)}};return Object.defineProperties(i,{getters:{get:r?function(){return t.getters}:function(){return _(t,e)}},state:{get:function(){return A(t.state,n)}}}),i}function _(t,e){var n={},r=e.length;return Object.keys(t.getters).forEach((function(i){if(i.slice(0,r)===e){var o=i.slice(r);Object.defineProperty(n,o,{get:function(){return t.getters[i]},enumerable:!0})}})),n}function w(t,e,n,r){var i=t._mutations[e]||(t._mutations[e]=[]);i.push((function(e){n.call(t,r.state,e)}))}function S(t,e,n,r){var i=t._actions[e]||(t._actions[e]=[]);i.push((function(e,i){var o=n.call(t,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e,i);return l(o)||(o=Promise.resolve(o)),t._devtoolHook?o.catch((function(e){throw t._devtoolHook.emit("vuex:error",e),e})):o}))}function O(t,e,n,r){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)})}function M(t){t._vm.$watch((function(){return this._data.$$state}),(function(){0}),{deep:!0,sync:!0})}function A(t,e){return e.length?e.reduce((function(t,e){return t[e]}),t):t}function C(t,e,n){return s(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function I(t){f&&t===f||(f=t,r(f))}g.state.get=function(){return this._vm._data.$$state},g.state.set=function(t){0},d.prototype.commit=function(t,e,n){var r=this,i=C(t,e,n),o=i.type,a=i.payload,s=(i.options,{type:o,payload:a}),l=this._mutations[o];l&&(this._withCommit((function(){l.forEach((function(t){t(a)}))})),this._subscribers.forEach((function(t){return t(s,r.state)})))},d.prototype.dispatch=function(t,e){var n=this,r=C(t,e),i=r.type,o=r.payload,a={type:i,payload:o},s=this._actions[i];if(s){try{this._actionSubscribers.filter((function(t){return t.before})).forEach((function(t){return t.before(a,n.state)}))}catch(u){0}var l=s.length>1?Promise.all(s.map((function(t){return t(o)}))):s[0](o);return l.then((function(t){try{n._actionSubscribers.filter((function(t){return t.after})).forEach((function(t){return t.after(a,n.state)}))}catch(u){0}return t}))}},d.prototype.subscribe=function(t){return v(t,this._subscribers)},d.prototype.subscribeAction=function(t){var e="function"===typeof t?{before:t}:t;return v(e,this._actionSubscribers)},d.prototype.watch=function(t,e,n){var r=this;return this._watcherVM.$watch((function(){return t(r.state,r.getters)}),e,n)},d.prototype.replaceState=function(t){var e=this;this._withCommit((function(){e._vm._data.$$state=t}))},d.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"===typeof t&&(t=[t]),this._modules.register(t,e),b(this,this.state,t,this._modules.get(t),n.preserveState),m(this,this.state)},d.prototype.unregisterModule=function(t){var e=this;"string"===typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit((function(){var n=A(e.state,t.slice(0,-1));f.delete(n,t[t.length-1])})),y(this)},d.prototype.hotUpdate=function(t){this._modules.update(t),y(this,!0)},d.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(d.prototype,g);var T=E((function(t,e){var n={};return P(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=R(this.$store,"mapState",t);if(!r)return;e=r.context.state,n=r.context.getters}return"function"===typeof i?i.call(this,e,n):e[i]},n[r].vuex=!0})),n})),k=E((function(t,e){var n={};return P(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var r=this.$store.commit;if(t){var o=R(this.$store,"mapMutations",t);if(!o)return;r=o.context.commit}return"function"===typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}})),n})),D=E((function(t,e){var n={};return P(e).forEach((function(e){var r=e.key,i=e.val;i=t+i,n[r]=function(){if(!t||R(this.$store,"mapGetters",t))return this.$store.getters[i]},n[r].vuex=!0})),n})),L=E((function(t,e){var n={};return P(e).forEach((function(e){var r=e.key,i=e.val;n[r]=function(){var e=[],n=arguments.length;while(n--)e[n]=arguments[n];var r=this.$store.dispatch;if(t){var o=R(this.$store,"mapActions",t);if(!o)return;r=o.context.dispatch}return"function"===typeof i?i.apply(this,[r].concat(e)):r.apply(this.$store,[i].concat(e))}})),n})),j=function(t){return{mapState:T.bind(null,t),mapGetters:D.bind(null,t),mapMutations:k.bind(null,t),mapActions:L.bind(null,t)}};function P(t){return Array.isArray(t)?t.map((function(t){return{key:t,val:t}})):Object.keys(t).map((function(e){return{key:e,val:t[e]}}))}function E(t){return function(e,n){return"string"!==typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function R(t,e,n){var r=t._modulesNamespaceMap[n];return r}var N={Store:d,install:I,version:"3.1.0",mapState:T,mapMutations:k,mapGetters:D,mapActions:L,createNamespacedHelpers:j};e["a"]=N},"2fdb":function(t,e,n){"use strict";var r=n("5ca1"),i=n("d2c8"),o="includes";r(r.P+r.F*n("5147")(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},3024:function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},"30b5":function(t,e,n){"use strict";var r=n("c532");function i(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(r.isURLSearchParams(e))o=e.toString();else{var a=[];r.forEach(e,(function(t,e){null!==t&&"undefined"!==typeof t&&(r.isArray(t)?e+="[]":t=[t],r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),a.push(i(e)+"="+i(t))})))})),o=a.join("&")}if(o){var s=t.indexOf("#");-1!==s&&(t=t.slice(0,s)),t+=(-1===t.indexOf("?")?"?":"&")+o}return t}},"30f1":function(t,e,n){"use strict";var r=n("b8e3"),i=n("63b6"),o=n("9138"),a=n("35e8"),s=n("481b"),l=n("8f60"),u=n("45f2"),c=n("53e2"),h=n("5168")("iterator"),p=!([].keys&&"next"in[].keys()),f="@@iterator",d="keys",g="values",v=function(){return this};t.exports=function(t,e,n,y,m,b,x){l(n,e,y);var _,w,S,O=function(t){if(!p&&t in I)return I[t];switch(t){case d:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this,t)}},M=e+" Iterator",A=m==g,C=!1,I=t.prototype,T=I[h]||I[f]||m&&I[m],k=T||O(m),D=m?A?O("entries"):k:void 0,L="Array"==e&&I.entries||T;if(L&&(S=c(L.call(new t)),S!==Object.prototype&&S.next&&(u(S,M,!0),r||"function"==typeof S[h]||a(S,h,v))),A&&T&&T.name!==g&&(C=!0,k=function(){return T.call(this)}),r&&!x||!p&&!C&&I[h]||a(I,h,k),s[e]=k,s[M]=v,m)if(_={values:A?k:O(g),keys:b?k:O(d),entries:D},x)for(w in _)w in I||o(I,w,_[w]);else i(i.P+i.F*(p||C),e,_);return _}},"313e":function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"create",(function(){return y})),n.d(r,"copy",(function(){return m})),n.d(r,"clone",(function(){return b})),n.d(r,"set",(function(){return x})),n.d(r,"add",(function(){return _})),n.d(r,"scaleAndAdd",(function(){return w})),n.d(r,"sub",(function(){return S})),n.d(r,"len",(function(){return O})),n.d(r,"length",(function(){return M})),n.d(r,"lenSquare",(function(){return A})),n.d(r,"lengthSquare",(function(){return C})),n.d(r,"mul",(function(){return I})),n.d(r,"div",(function(){return T})),n.d(r,"dot",(function(){return k})),n.d(r,"scale",(function(){return D})),n.d(r,"normalize",(function(){return L})),n.d(r,"distance",(function(){return j})),n.d(r,"dist",(function(){return P})),n.d(r,"distanceSquare",(function(){return E})),n.d(r,"distSquare",(function(){return R})),n.d(r,"negate",(function(){return N})),n.d(r,"lerp",(function(){return z})),n.d(r,"applyTransform",(function(){return B})),n.d(r,"min",(function(){return V})),n.d(r,"max",(function(){return F}));var i={};n.r(i),n.d(i,"create",(function(){return In})),n.d(i,"identity",(function(){return Tn})),n.d(i,"copy",(function(){return kn})),n.d(i,"mul",(function(){return Dn})),n.d(i,"translate",(function(){return Ln})),n.d(i,"rotate",(function(){return jn})),n.d(i,"scale",(function(){return Pn})),n.d(i,"invert",(function(){return En})),n.d(i,"clone",(function(){return Rn}));var o={};n.r(o),n.d(o,"init",(function(){return zr})),n.d(o,"dispose",(function(){return Br})),n.d(o,"disposeAll",(function(){return Vr})),n.d(o,"getInstance",(function(){return Fr})),n.d(o,"registerPainter",(function(){return Hr})),n.d(o,"version",(function(){return Gr}));var a={};n.r(a),n.d(a,"updateProps",(function(){return nu})),n.d(a,"initProps",(function(){return ru})),n.d(a,"removeElement",(function(){return ou})),n.d(a,"removeElementWithFadeOut",(function(){return su})),n.d(a,"isElementRemoved",(function(){return iu})),n.d(a,"extendShape",(function(){return Iv})),n.d(a,"extendPath",(function(){return kv})),n.d(a,"registerShape",(function(){return Dv})),n.d(a,"getShapeClass",(function(){return Lv})),n.d(a,"makePath",(function(){return jv})),n.d(a,"makeImage",(function(){return Pv})),n.d(a,"mergePath",(function(){return Rv})),n.d(a,"resizePath",(function(){return Nv})),n.d(a,"subPixelOptimizeLine",(function(){return zv})),n.d(a,"subPixelOptimizeRect",(function(){return Bv})),n.d(a,"subPixelOptimize",(function(){return Vv})),n.d(a,"getTransform",(function(){return Fv})),n.d(a,"applyTransform",(function(){return Hv})),n.d(a,"transformDirection",(function(){return Gv})),n.d(a,"groupTransition",(function(){return Yv})),n.d(a,"clipPointsByRect",(function(){return qv})),n.d(a,"clipRectByRect",(function(){return Xv})),n.d(a,"createIcon",(function(){return $v})),n.d(a,"linePolygonIntersect",(function(){return Zv})),n.d(a,"lineLineIntersect",(function(){return Kv})),n.d(a,"setTooltipConfig",(function(){return ty})),n.d(a,"traverseElements",(function(){return ny})),n.d(a,"Group",(function(){return Lr})),n.d(a,"Image",(function(){return us})),n.d(a,"Text",(function(){return Rs})),n.d(a,"Circle",(function(){return yg})),n.d(a,"Ellipse",(function(){return xg})),n.d(a,"Sector",(function(){return zg})),n.d(a,"Ring",(function(){return Fg})),n.d(a,"Polygon",(function(){return Yg})),n.d(a,"Polyline",(function(){return $g})),n.d(a,"Rect",(function(){return ms})),n.d(a,"Line",(function(){return Qg})),n.d(a,"BezierCurve",(function(){return iv})),n.d(a,"Arc",(function(){return sv})),n.d(a,"IncrementalDisplayable",(function(){return Ov})),n.d(a,"CompoundPath",(function(){return uv})),n.d(a,"LinearGradient",(function(){return fv})),n.d(a,"RadialGradient",(function(){return gv})),n.d(a,"BoundingRect",(function(){return or})),n.d(a,"OrientedBoundingRect",(function(){return _v})),n.d(a,"Point",(function(){return $n})),n.d(a,"Path",(function(){return es}));var s={};n.r(s),n.d(s,"createList",(function(){return NS})),n.d(s,"getLayoutRect",(function(){return ih})),n.d(s,"createDimensions",(function(){return q_})),n.d(s,"dataStack",(function(){return zS})),n.d(s,"createSymbol",(function(){return Om})),n.d(s,"createScale",(function(){return BS})),n.d(s,"mixinAxisModelCommonMethods",(function(){return VS})),n.d(s,"getECData",(function(){return Ns})),n.d(s,"enableHoverEmphasis",(function(){return Bl})),n.d(s,"createTextStyle",(function(){return FS}));var l={};n.r(l),n.d(l,"linearMap",(function(){return qr})),n.d(l,"round",(function(){return $r})),n.d(l,"asc",(function(){return Zr})),n.d(l,"getPrecision",(function(){return Kr})),n.d(l,"getPrecisionSafe",(function(){return Jr})),n.d(l,"getPixelPrecision",(function(){return Qr})),n.d(l,"getPercentWithPrecision",(function(){return ti})),n.d(l,"MAX_SAFE_INTEGER",(function(){return ni})),n.d(l,"remRadian",(function(){return ri})),n.d(l,"isRadianAroundZero",(function(){return ii})),n.d(l,"parseDate",(function(){return ai})),n.d(l,"quantity",(function(){return si})),n.d(l,"quantityExponent",(function(){return li})),n.d(l,"nice",(function(){return ui})),n.d(l,"quantile",(function(){return ci})),n.d(l,"reformIntervals",(function(){return hi})),n.d(l,"isNumeric",(function(){return fi})),n.d(l,"numericToNumber",(function(){return pi}));var u={};n.r(u),n.d(u,"parse",(function(){return ai})),n.d(u,"format",(function(){return yc}));var c={};n.r(c),n.d(c,"extendShape",(function(){return Iv})),n.d(c,"extendPath",(function(){return kv})),n.d(c,"makePath",(function(){return jv})),n.d(c,"makeImage",(function(){return Pv})),n.d(c,"mergePath",(function(){return Rv})),n.d(c,"resizePath",(function(){return Nv})),n.d(c,"createIcon",(function(){return $v})),n.d(c,"updateProps",(function(){return nu})),n.d(c,"initProps",(function(){return ru})),n.d(c,"getTransform",(function(){return Fv})),n.d(c,"clipPointsByRect",(function(){return qv})),n.d(c,"clipRectByRect",(function(){return Xv})),n.d(c,"registerShape",(function(){return Dv})),n.d(c,"getShapeClass",(function(){return Lv})),n.d(c,"Group",(function(){return Lr})),n.d(c,"Image",(function(){return us})),n.d(c,"Text",(function(){return Rs})),n.d(c,"Circle",(function(){return yg})),n.d(c,"Ellipse",(function(){return xg})),n.d(c,"Sector",(function(){return zg})),n.d(c,"Ring",(function(){return Fg})),n.d(c,"Polygon",(function(){return Yg})),n.d(c,"Polyline",(function(){return $g})),n.d(c,"Rect",(function(){return ms})),n.d(c,"Line",(function(){return Qg})),n.d(c,"BezierCurve",(function(){return iv})),n.d(c,"Arc",(function(){return sv})),n.d(c,"IncrementalDisplayable",(function(){return Ov})),n.d(c,"CompoundPath",(function(){return uv})),n.d(c,"LinearGradient",(function(){return fv})),n.d(c,"RadialGradient",(function(){return gv})),n.d(c,"BoundingRect",(function(){return or}));var h={};n.r(h),n.d(h,"addCommas",(function(){return Rc})),n.d(h,"toCamelCase",(function(){return Nc})),n.d(h,"normalizeCssArray",(function(){return zc})),n.d(h,"encodeHTML",(function(){return Fc})),n.d(h,"formatTpl",(function(){return Uc})),n.d(h,"getTooltipMarker",(function(){return qc})),n.d(h,"formatTime",(function(){return Xc})),n.d(h,"capitalFirst",(function(){return $c})),n.d(h,"truncateText",(function(){return Mo})),n.d(h,"getTextRect",(function(){return Ec}));var p={};n.r(p),n.d(p,"map",(function(){return v["map"]})),n.d(p,"each",(function(){return v["each"]})),n.d(p,"indexOf",(function(){return v["indexOf"]})),n.d(p,"inherits",(function(){return v["inherits"]})),n.d(p,"reduce",(function(){return v["reduce"]})),n.d(p,"filter",(function(){return v["filter"]})),n.d(p,"bind",(function(){return v["bind"]})),n.d(p,"curry",(function(){return v["curry"]})),n.d(p,"isArray",(function(){return v["isArray"]})),n.d(p,"isString",(function(){return v["isString"]})),n.d(p,"isObject",(function(){return v["isObject"]})),n.d(p,"isFunction",(function(){return v["isFunction"]})),n.d(p,"extend",(function(){return v["extend"]})),n.d(p,"defaults",(function(){return v["defaults"]})),n.d(p,"clone",(function(){return v["clone"]})),n.d(p,"merge",(function(){return v["merge"]})); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +var f=function(t,e){return f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},f(t,e)};function d(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}f(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}Object.create;Object.create;var g=n("22d1"),v=n("6d8b");function y(t,e){return null==t&&(t=0),null==e&&(e=0),[t,e]}function m(t,e){return t[0]=e[0],t[1]=e[1],t}function b(t){return[t[0],t[1]]}function x(t,e,n){return t[0]=e,t[1]=n,t}function _(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t}function w(t,e,n,r){return t[0]=e[0]+n[0]*r,t[1]=e[1]+n[1]*r,t}function S(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t}function O(t){return Math.sqrt(A(t))}var M=O;function A(t){return t[0]*t[0]+t[1]*t[1]}var C=A;function I(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t}function T(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t}function k(t,e){return t[0]*e[0]+t[1]*e[1]}function D(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t}function L(t,e){var n=O(e);return 0===n?(t[0]=0,t[1]=0):(t[0]=e[0]/n,t[1]=e[1]/n),t}function j(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1]))}var P=j;function E(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])}var R=E;function N(t,e){return t[0]=-e[0],t[1]=-e[1],t}function z(t,e,n,r){return t[0]=e[0]+r*(n[0]-e[0]),t[1]=e[1]+r*(n[1]-e[1]),t}function B(t,e,n){var r=e[0],i=e[1];return t[0]=n[0]*r+n[2]*i+n[4],t[1]=n[1]*r+n[3]*i+n[5],t}function V(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t}function F(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t}var H=function(){function t(t,e){this.target=t,this.topTarget=e&&e.topTarget}return t}(),G=function(){function t(t){this.handler=t,t.on("mousedown",this._dragStart,this),t.on("mousemove",this._drag,this),t.on("mouseup",this._dragEnd,this)}return t.prototype._dragStart=function(t){var e=t.target;while(e&&!e.draggable)e=e.parent||e.__hostTarget;e&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.handler.dispatchToElement(new H(e,t),"dragstart",t.event))},t.prototype._drag=function(t){var e=this._draggingTarget;if(e){var n=t.offsetX,r=t.offsetY,i=n-this._x,o=r-this._y;this._x=n,this._y=r,e.drift(i,o,t),this.handler.dispatchToElement(new H(e,t),"drag",t.event);var a=this.handler.findHover(n,r,e).target,s=this._dropTarget;this._dropTarget=a,e!==a&&(s&&a!==s&&this.handler.dispatchToElement(new H(s,t),"dragleave",t.event),a&&a!==s&&this.handler.dispatchToElement(new H(a,t),"dragenter",t.event))}},t.prototype._dragEnd=function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.handler.dispatchToElement(new H(e,t),"dragend",t.event),this._dropTarget&&this.handler.dispatchToElement(new H(this._dropTarget,t),"drop",t.event),this._draggingTarget=null,this._dropTarget=null},t}(),W=G,U=function(){function t(t){t&&(this._$eventProcessor=t)}return t.prototype.on=function(t,e,n,r){this._$handlers||(this._$handlers={});var i=this._$handlers;if("function"===typeof e&&(r=n,n=e,e=null),!n||!t)return this;var o=this._$eventProcessor;null!=e&&o&&o.normalizeQuery&&(e=o.normalizeQuery(e)),i[t]||(i[t]=[]);for(var a=0;a>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",r[l]+":0",i[u]+":0",r[1-l]+":auto",i[1-u]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}function et(t,e,n){for(var r=n?"invTrans":"trans",i=e[r],o=e.srcCoords,a=[],s=[],l=!0,u=0;u<4;u++){var c=t[u].getBoundingClientRect(),h=2*u,p=c.left,f=c.top;a.push(p,f),l=l&&o&&p===o[h]&&f===o[h+1],s.push(t[u].offsetLeft,t[u].offsetTop)}return l&&i?i:(e.srcCoords=a,e[r]=n?$(s,a):$(a,s))}function nt(t){return"CANVAS"===t.nodeName.toUpperCase()}var rt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,it=[],ot=g["a"].browser.firefox&&+g["a"].browser.version.split(".")[0]<39;function at(t,e,n,r){return n=n||{},r?st(t,e,n):ot&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):st(t,e,n),n}function st(t,e,n){if(g["a"].domSupported&&t.getBoundingClientRect){var r=e.clientX,i=e.clientY;if(nt(t)){var o=t.getBoundingClientRect();return n.zrX=r-o.left,void(n.zrY=i-o.top)}if(Q(it,t,r,i))return n.zrX=it[0],void(n.zrY=it[1])}n.zrX=n.zrY=0}function lt(t){return t||window.event}function ut(t,e,n){if(e=lt(e),null!=e.zrX)return e;var r=e.type,i=r&&r.indexOf("touch")>=0;if(i){var o="touchend"!==r?e.targetTouches[0]:e.changedTouches[0];o&&at(t,o,e,n)}else{at(t,e,e,n);var a=ct(e);e.zrDelta=a?a/120:-(e.detail||0)/3}var s=e.button;return null==e.which&&void 0!==s&&rt.test(e.type)&&(e.which=1&s?1:2&s?3:4&s?2:0),e}function ct(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,r=t.deltaY;if(null==n||null==r)return e;var i=0!==r?Math.abs(r):Math.abs(n),o=r>0?-1:r<0?1:n>0?-1:1;return 3*i*o}function ht(t,e,n,r){t.addEventListener(e,n,r)}function pt(t,e,n,r){t.removeEventListener(e,n,r)}var ft=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function dt(t){return 2===t.which||3===t.which}var gt=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var r=t.touches;if(r){for(var i={points:[],touches:[],target:e,event:t},o=0,a=r.length;o1&&r&&r.length>1){var o=vt(r)/vt(i);!isFinite(o)&&(o=1),e.pinchScale=o;var a=yt(r);return e.pinchX=a[0],e.pinchY=a[1],{type:"pinch",target:t[0].target,event:e}}}}},bt="silent";function xt(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:_t}}function _t(){ft(this.event)}var wt=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return d(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(Y),St=function(){function t(t,e){this.x=t,this.y=e}return t}(),Ot=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Mt=function(t){function e(e,n,r,i){var o=t.call(this)||this;return o._hovered=new St(0,0),o.storage=e,o.painter=n,o.painterRoot=i,r=r||new wt,o.proxy=null,o.setHandlerProxy(r),o._draggingMgr=new W(o),o}return d(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(v["each"](Ot,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,r=Ct(this,e,n),i=this._hovered,o=i.target;o&&!o.__zr&&(i=this.findHover(i.x,i.y),o=i.target);var a=this._hovered=r?new St(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(i,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new St(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){t=t||{};var r=t.target;if(!r||!r.silent){var i="on"+e,o=xt(e,t,n);while(r)if(r[i]&&(o.cancelBubble=!!r[i].call(r,o)),r.trigger(e,o),r=r.__hostTarget?r.__hostTarget:r.parent,o.cancelBubble)break;o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"===typeof t[i]&&t[i].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){for(var r=this.storage.getDisplayList(),i=new St(t,e),o=r.length-1;o>=0;o--){var a=void 0;if(r[o]!==n&&!r[o].ignore&&(a=At(r[o],t,e))&&(!i.topTarget&&(i.topTarget=r[o]),a!==bt)){i.target=r[o];break}}return i},e.prototype.processGesture=function(t,e){this._gestureMgr||(this._gestureMgr=new gt);var n=this._gestureMgr;"start"===e&&n.clear();var r=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),r){var i=r.type;t.gestureEvent=i;var o=new St;o.target=r.target,this.dispatchToElement(o,i,r.event)}},e}(Y);function At(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){var r=t,i=void 0,o=!1;while(r){if(r.ignoreClip&&(o=!0),!o){var a=r.getClipPath();if(a&&!a.contain(e,n))return!1;r.silent&&(i=!0)}var s=r.__hostTarget;r=s||r.parent}return!i||bt}return!1}function Ct(t,e,n){var r=t.painter;return e<0||e>r.getWidth()||n<0||n>r.getHeight()}v["each"](["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){Mt.prototype[t]=function(e){var n,r,i=e.zrX,o=e.zrY,a=Ct(this,i,o);if("mouseup"===t&&a||(n=this.findHover(i,o),r=n.target),"mousedown"===t)this._downEl=r,this._downPoint=[e.zrX,e.zrY],this._upEl=r;else if("mouseup"===t)this._upEl=r;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||P(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));var It=Mt,Tt=32,kt=7;function Dt(t){var e=0;while(t>=Tt)e|=1&t,t>>=1;return t+e}function Lt(t,e,n,r){var i=e+1;if(i===n)return 1;if(r(t[i++],t[e])<0){while(i=0)i++;return i-e}function jt(t,e,n){n--;while(e>>1,i(a,t[o])<0?l=o:s=o+1;var u=r-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:while(u>0)t[s+u]=t[s+u-1],u--}t[s]=a}}function Et(t,e,n,r,i,o){var a=0,s=0,l=1;if(o(t,e[n+i])>0){s=r-i;while(l0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=i,l+=i}else{s=i+1;while(ls&&(l=s);var u=a;a=i-l,l=i-u}a++;while(a>>1);o(t,e[n+c])>0?a=c+1:l=c}return l}function Rt(t,e,n,r,i,o){var a=0,s=0,l=1;if(o(t,e[n+i])<0){s=i+1;while(ls&&(l=s);var u=a;a=i-l,l=i-u}else{s=r-i;while(l=0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=i,l+=i}a++;while(a>>1);o(t,e[n+c])<0?l=c:a=c+1}return l}function Nt(t,e){var n,r,i=kt,o=0,a=0;o=t.length;var s=[];function l(t,e){n[a]=t,r[a]=e,a+=1}function u(){while(a>1){var t=a-2;if(t>=1&&r[t-1]<=r[t]+r[t+1]||t>=2&&r[t-2]<=r[t]+r[t-1])r[t-1]r[t+1])break;h(t)}}function c(){while(a>1){var t=a-2;t>0&&r[t-1]=kt||f>=kt);if(d)break;g<0&&(g=0),g+=2}if(i=g,i<1&&(i=1),1===r){for(l=0;l=0;l--)t[f+l]=t[p+l];if(0===r){y=!0;break}}if(t[h--]=s[c--],1===--a){y=!0;break}if(v=a-Et(t[u],s,0,a,a-1,e),0!==v){for(h-=v,c-=v,a-=v,f=h+1,p=c+1,l=0;l=kt||v>=kt);if(y)break;d<0&&(d=0),d+=2}if(i=d,i<1&&(i=1),1===a){for(h-=r,u-=r,f=h+1,p=u+1,l=r-1;l>=0;l--)t[f+l]=t[p+l];t[h]=s[c]}else{if(0===a)throw new Error;for(p=h-(a-1),l=0;l=0;l--)t[f+l]=t[p+l];t[h]=s[c]}else for(p=h-(a-1),l=0;ls&&(l=s),Pt(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),i-=o,n+=o}while(0!==i);a.forceMergeRuns()}}var Bt=1,Vt=2,Ft=4,Ht=!1;function Gt(){Ht||(Ht=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Wt(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var Ut,Yt=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Wt}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(Gt(),u.z=0),isNaN(u.z2)&&(Gt(),u.z2=0),isNaN(u.zlevel)&&(Gt(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var c=t.getDecalElement&&t.getDecalElement();c&&this._updateAndAddDisplayable(c,e,n);var h=t.getTextGuideLine();h&&this._updateAndAddDisplayable(h,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(r,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),qt=Yt;Ut=g["a"].hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)};var Xt=Ut,$t={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1,r=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=r/4):e=r*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/r))},elasticOut:function(t){var e,n=.1,r=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=r/4):e=r*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/r)+1)},elasticInOut:function(t){var e,n=.1,r=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=r/4):e=r*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/r)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/r)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-$t.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*$t.bounceIn(2*t):.5*$t.bounceOut(2*t-1)+.5}},Zt=$t,Kt=Math.pow,Jt=Math.sqrt,Qt=1e-8,te=1e-4,ee=Jt(3),ne=1/3,re=y(),ie=y(),oe=y();function ae(t){return t>-Qt&&tQt||t<-Qt}function le(t,e,n,r,i){var o=1-i;return o*o*(o*t+3*i*e)+i*i*(i*r+3*o*n)}function ue(t,e,n,r,i){var o=1-i;return 3*(((e-t)*o+2*(n-e)*i)*o+(r-n)*i*i)}function ce(t,e,n,r,i,o){var a=r+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-i,c=s*s-3*a*l,h=s*l-9*a*u,p=l*l-3*s*u,f=0;if(ae(c)&&ae(h))if(ae(s))o[0]=0;else{var d=-l/s;d>=0&&d<=1&&(o[f++]=d)}else{var g=h*h-4*c*p;if(ae(g)){var v=h/c,y=(d=-s/a+v,-v/2);d>=0&&d<=1&&(o[f++]=d),y>=0&&y<=1&&(o[f++]=y)}else if(g>0){var m=Jt(g),b=c*s+1.5*a*(-h+m),x=c*s+1.5*a*(-h-m);b=b<0?-Kt(-b,ne):Kt(b,ne),x=x<0?-Kt(-x,ne):Kt(x,ne);d=(-s-(b+x))/(3*a);d>=0&&d<=1&&(o[f++]=d)}else{var _=(2*c*s-3*a*h)/(2*Jt(c*c*c)),w=Math.acos(_)/3,S=Jt(c),O=Math.cos(w),M=(d=(-s-2*S*O)/(3*a),y=(-s+S*(O+ee*Math.sin(w)))/(3*a),(-s+S*(O-ee*Math.sin(w)))/(3*a));d>=0&&d<=1&&(o[f++]=d),y>=0&&y<=1&&(o[f++]=y),M>=0&&M<=1&&(o[f++]=M)}}return f}function he(t,e,n,r,i){var o=6*n-12*e+6*t,a=9*e+3*r-3*t-9*n,s=3*e-3*t,l=0;if(ae(a)){if(se(o)){var u=-s/o;u>=0&&u<=1&&(i[l++]=u)}}else{var c=o*o-4*a*s;if(ae(c))i[0]=-o/(2*a);else if(c>0){var h=Jt(c),p=(u=(-o+h)/(2*a),(-o-h)/(2*a));u>=0&&u<=1&&(i[l++]=u),p>=0&&p<=1&&(i[l++]=p)}}return l}function pe(t,e,n,r,i,o){var a=(e-t)*i+t,s=(n-e)*i+e,l=(r-n)*i+n,u=(s-a)*i+a,c=(l-s)*i+s,h=(c-u)*i+u;o[0]=t,o[1]=a,o[2]=u,o[3]=h,o[4]=h,o[5]=c,o[6]=l,o[7]=r}function fe(t,e,n,r,i,o,a,s,l,u,c){var h,p,f,d,g,v=.005,y=1/0;re[0]=l,re[1]=u;for(var m=0;m<1;m+=.05)ie[0]=le(t,n,i,a,m),ie[1]=le(e,r,o,s,m),d=R(re,ie),d=0&&d=0&&u<=1&&(i[l++]=u)}}else{var c=a*a-4*o*s;if(ae(c)){u=-a/(2*o);u>=0&&u<=1&&(i[l++]=u)}else if(c>0){var h=Jt(c),p=(u=(-a+h)/(2*o),(-a-h)/(2*o));u>=0&&u<=1&&(i[l++]=u),p>=0&&p<=1&&(i[l++]=p)}}return l}function me(t,e,n){var r=t+n-2*e;return 0===r?.5:(t-e)/r}function be(t,e,n,r,i){var o=(e-t)*r+t,a=(n-e)*r+e,s=(a-o)*r+o;i[0]=t,i[1]=o,i[2]=s,i[3]=s,i[4]=a,i[5]=n}function xe(t,e,n,r,i,o,a,s,l){var u,c=.005,h=1/0;re[0]=a,re[1]=s;for(var p=0;p<1;p+=.05){ie[0]=ge(t,n,i,p),ie[1]=ge(e,r,o,p);var f=R(re,ie);f=0&&f=1?1:ce(0,r,o,1,t,s)&&le(0,i,a,1,s[0])}}}var Oe=function(){function t(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||v["noop"],this.ondestroy=t.ondestroy||v["noop"],this.onrestart=t.onrestart||v["noop"],t.easing&&this.setEasing(t.easing)}return t.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),!this._paused){var n=this._life,r=t-this._startTime-this._pausedTime,i=r/n;i<0&&(i=0),i=Math.min(i,1);var o=this.easingFunc,a=o?o(i):i;if(this.onframe(a),1===i){if(!this.loop)return!0;var s=r%n;this._startTime=t-s,this._pausedTime=0,this.onrestart()}return!1}this._pausedTime+=e},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(t){this.easing=t,this.easingFunc=Object(v["isFunction"])(t)?t:Zt[t]||Se(t)},t}(),Me=Oe,Ae=n("41ef"),Ce=n("7a29"),Ie=Array.prototype.slice;function Te(t,e,n){return(e-t)*n+t}function ke(t,e,n,r){for(var i=e.length,o=0;or?e:t,o=Math.min(n,r),a=i[o-1]||{color:[0,0,0,0],offset:0},s=o;sa;if(s)r.length=a;else for(var l=o;l=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e,n){this._needsSort=!0;var r=this.keyframes,i=r.length,o=!1,a=Ue,s=e;if(Object(v["isArrayLike"])(e)){var l=ze(e);a=l,(1===l&&!Object(v["isNumber"])(e[0])||2===l&&!Object(v["isNumber"])(e[0][0]))&&(o=!0)}else if(Object(v["isNumber"])(e)&&!Object(v["eqNaN"])(e))a=Be;else if(Object(v["isString"])(e))if(isNaN(+e)){var u=Ae["parse"](e);u&&(s=u,a=He)}else a=Be;else if(Object(v["isGradientObject"])(e)){var c=Object(v["extend"])({},s);c.colorStops=Object(v["map"])(e.colorStops,(function(t){return{offset:t.offset,color:Ae["parse"](t.color)}})),Object(Ce["m"])(e)?a=Ge:Object(Ce["o"])(e)&&(a=We),s=c}0===i?this.valType=a:a===this.valType&&a!==Ue||(o=!0),this.discrete=this.discrete||o;var h={time:t,value:s,rawValue:e,percent:0};return n&&(h.easing=n,h.easingFunc=Object(v["isFunction"])(n)?n:Zt[n]||Se(n)),r.push(h),h},t.prototype.prepare=function(t,e){var n=this.keyframes;this._needsSort&&n.sort((function(t,e){return t.time-e.time}));for(var r=this.valType,i=n.length,o=n[i-1],a=this.discrete,s=qe(r),l=Ye(r),u=0;u=0;n--)if(l[n].percent<=e)break;n=f(n,u-2)}else{for(n=p;ne)break;n=f(n-1,u-2)}i=l[n+1],r=l[n]}if(r&&i){this._lastFr=n,this._lastFrP=e;var g=i.percent-r.percent,y=0===g?1:f((e-r.percent)/g,1);i.easingFunc&&(y=i.easingFunc(y));var m=o?this._additiveValue:h?Xe:t[c];if(!qe(s)&&!h||m||(m=this._additiveValue=[]),this.discrete)t[c]=y<1?r.rawValue:i.rawValue;else if(qe(s))s===Ve?ke(m,r[a],i[a],y):De(m,r[a],i[a],y);else if(Ye(s)){var b=r[a],x=i[a],_=s===Ge;t[c]={type:_?"linear":"radial",x:Te(b.x,x.x,y),y:Te(b.y,x.y,y),colorStops:Object(v["map"])(b.colorStops,(function(t,e){var n=x.colorStops[e];return{offset:Te(t.offset,n.offset,y),color:Ne(ke([],t.color,n.color,y))}})),global:x.global},_?(t[c].x2=Te(b.x2,x.x2,y),t[c].y2=Te(b.y2,x.y2,y)):t[c].r=Te(b.r,x.r,y)}else if(h)ke(m,r[a],i[a],y),o||(t[c]=Ne(m));else{var w=Te(r[a],i[a],y);o?this._additiveValue=w:t[c]=w}o&&this._addToTarget(t)}}},t.prototype._addToTarget=function(t){var e=this.valType,n=this.propName,r=this._additiveValue;e===Be?t[n]=t[n]+r:e===He?(Ae["parse"](t[n],Xe),Le(Xe,Xe,r,1),t[n]=Ne(Xe)):e===Ve?Le(t[n],t[n],r,1):e===Fe&&je(t[n],t[n],r,1)},t}(),Ze=function(){function t(t,e,n,r){this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=t,this._loop=e,e&&r?Object(v["logError"])("Can' use additive animation on looped animation."):(this._additiveAnimators=r,this._allowDiscrete=n)}return t.prototype.getMaxTime=function(){return this._maxTime},t.prototype.getDelay=function(){return this._delay},t.prototype.getLoop=function(){return this._loop},t.prototype.getTarget=function(){return this._target},t.prototype.changeTarget=function(t){this._target=t},t.prototype.when=function(t,e,n){return this.whenWithKeys(t,e,Object(v["keys"])(e),n)},t.prototype.whenWithKeys=function(t,e,n,r){for(var i=this._tracks,o=0;o0&&s.addKeyframe(0,Re(l),r),this._trackKeys.push(a)}s.addKeyframe(t,Re(e[a]),r)}return this._maxTime=Math.max(this._maxTime,t),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,n=0;n0)){this._started=1;for(var e=this,n=[],r=this._maxTime||0,i=0;i1){var a=o.pop();i.addKeyframe(a.time,t[r]),i.prepare(this._maxTime,i.getAdditiveTrack())}}}},t}(),Ke=Ze;function Je(){return(new Date).getTime()}var Qe=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n}return d(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._head=n,n?n.prev=e:this._tail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){var e=Je()-this._pausedTime,n=e-this._time,r=this._head;while(r){var i=r.next,o=r.step(e,n);o?(r.ondestroy(),this.removeClip(r),r=i):r=i}this._time=e,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;function e(){t._running&&(Xt(e),!t._paused&&t.update())}this._running=!0,Xt(e)},e.prototype.start=function(){this._running||(this._time=Je(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=Je(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=Je()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){var t=this._head;while(t){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._head=this._tail=null},e.prototype.isFinished=function(){return null==this._head},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new Ke(t,e.loop);return this.addAnimator(n),n},e}(Y),tn=Qe,en=300,nn=g["a"].domSupported,rn=function(){var t=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],n={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},r=v["map"](t,(function(t){var e=t.replace("mouse","pointer");return n.hasOwnProperty(e)?e:t}));return{mouse:t,touch:e,pointer:r}}(),on={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},an=!1;function sn(t){var e=t.pointerType;return"pen"===e||"touch"===e}function ln(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}function un(t){t&&(t.zrByTouch=!0)}function cn(t,e){return ut(t.dom,new pn(t,e),!0)}function hn(t,e){var n=e,r=!1;while(n&&9!==n.nodeType&&!(r=n.domBelongToZr||n!==e&&n===t.painterRoot))n=n.parentNode;return r}var pn=function(){function t(t,e){this.stopPropagation=v["noop"],this.stopImmediatePropagation=v["noop"],this.preventDefault=v["noop"],this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY}return t}(),fn={mousedown:function(t){t=ut(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=ut(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=ut(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){t=ut(this.dom,t);var e=t.toElement||t.relatedTarget;hn(this,e)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){an=!0,t=ut(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){an||(t=ut(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){t=ut(this.dom,t),un(t),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),fn.mousemove.call(this,t),fn.mousedown.call(this,t)},touchmove:function(t){t=ut(this.dom,t),un(t),this.handler.processGesture(t,"change"),fn.mousemove.call(this,t)},touchend:function(t){t=ut(this.dom,t),un(t),this.handler.processGesture(t,"end"),fn.mouseup.call(this,t),+new Date-+this.__lastTouchMomentzn||t<-zn}var Vn=[],Fn=[],Hn=In(),Gn=Math.abs,Wn=function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return Bn(this.rotation)||Bn(this.x)||Bn(this.y)||Bn(this.scaleX-1)||Bn(this.scaleY-1)||Bn(this.skewX)||Bn(this.skewY)},t.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),n=this.transform;e||t?(n=n||In(),e?this.getLocalTransform(n):Nn(n),t&&(e?Dn(n,t,n):kn(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)):n&&Nn(n)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(Vn);var n=Vn[0]<0?-1:1,r=Vn[1]<0?-1:1,i=((Vn[0]-n)*e+n)/Vn[0]||0,o=((Vn[1]-r)*e+r)/Vn[1]||0;t[0]*=i,t[1]*=i,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||In(),En(this.invTransform,t)},t.prototype.getComputedTransform=function(){var t=this,e=[];while(t)e.push(t),t=t.parent;while(t=e.pop())t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],r=Math.atan2(t[1],t[0]),i=Math.PI/2+r-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(i),e=Math.sqrt(e),this.skewX=i,this.skewY=0,this.rotation=-r,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(Dn(Fn,t.invTransform,e),e=Fn);var n=this.originX,r=this.originY;(n||r)&&(Hn[4]=n,Hn[5]=r,Dn(Fn,e,Hn),Fn[4]-=n,Fn[5]-=r,e=Fn),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],r=this.invTransform;return r&&B(n,n,r),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],r=this.transform;return r&&B(n,n,r),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&Gn(t[0]-1)>1e-10&&Gn(t[3]-1)>1e-10?Math.sqrt(Gn(t[0]*t[3]-t[2]*t[1])):1},t.prototype.copyTransform=function(t){Yn(this,t)},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,r=t.originY||0,i=t.scaleX,o=t.scaleY,a=t.anchorX,s=t.anchorY,l=t.rotation||0,u=t.x,c=t.y,h=t.skewX?Math.tan(t.skewX):0,p=t.skewY?Math.tan(-t.skewY):0;if(n||r||a||s){var f=n+a,d=r+s;e[4]=-f*i-h*d*o,e[5]=-d*o-p*f*i}else e[4]=e[5]=0;return e[0]=i,e[3]=o,e[1]=p*i,e[2]=h*o,l&&jn(e,e,l),e[4]+=n+u,e[5]+=r+c,e},t.initDefaultProps=function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0}(),t}(),Un=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function Yn(t,e){for(var n=0;nd&&(d=b,gd&&(d=x,y=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,r){if(r){if(r[1]<1e-5&&r[1]>-1e-5&&r[2]<1e-5&&r[2]>-1e-5){var i=r[0],o=r[3],a=r[4],s=r[5];return e.x=n.x*i+a,e.y=n.y*o+s,e.width=n.width*i,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}Jn.x=tr.x=n.x,Jn.y=er.y=n.y,Qn.x=er.x=n.x+n.width,Qn.y=tr.y=n.y+n.height,Jn.transform(r),er.transform(r),Qn.transform(r),tr.transform(r),e.x=Zn(Jn.x,Qn.x,tr.x,er.x),e.y=Zn(Jn.y,Qn.y,tr.y,er.y);var l=Kn(Jn.x,Qn.x,tr.x,er.x),u=Kn(Jn.y,Qn.y,tr.y,er.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),or=ir,ar=n("d51b"),sr=n("726e"),lr={};function ur(t,e){e=e||sr["a"];var n=lr[e];n||(n=lr[e]=new ar["a"](500));var r=n.get(t);return null==r&&(r=sr["d"].measureText(t,e).width,n.put(t,r)),r}function cr(t,e,n,r){var i=ur(t,e),o=dr(e),a=pr(0,i,n),s=fr(0,o,r),l=new or(a,s,i,o);return l}function hr(t,e,n,r){var i=((t||"")+"").split("\n"),o=i.length;if(1===o)return cr(i[0],e,n,r);for(var a=new or(0,0,0,0),s=0;s=0?parseFloat(t)/100*e:parseFloat(t):t}function vr(t,e,n){var r=e.position||"inside",i=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,c="left",h="top";if(r instanceof Array)l+=gr(r[0],n.width),u+=gr(r[1],n.height),c=null,h=null;else switch(r){case"left":l-=i,u+=s,c="right",h="middle";break;case"right":l+=i+a,u+=s,h="middle";break;case"top":l+=a/2,u-=i,c="center",h="bottom";break;case"bottom":l+=a/2,u+=o+i,c="center";break;case"inside":l+=a/2,u+=s,c="center",h="middle";break;case"insideLeft":l+=i,u+=s,h="middle";break;case"insideRight":l+=a-i,u+=s,c="right",h="middle";break;case"insideTop":l+=a/2,u+=i,c="center";break;case"insideBottom":l+=a/2,u+=o-i,c="center",h="bottom";break;case"insideTopLeft":l+=i,u+=i;break;case"insideTopRight":l+=a-i,u+=i,c="right";break;case"insideBottomLeft":l+=i,u+=o-i,h="bottom";break;case"insideBottomRight":l+=a-i,u+=o-i,c="right",h="bottom";break}return t=t||{},t.x=l,t.y=u,t.align=c,t.verticalAlign=h,t}var yr="__zr_normal__",mr=Un.concat(["ignore"]),br=Object(v["reduce"])(Un,(function(t,e){return t[e]=!0,t}),{ignore:!1}),xr={},_r=new or(0,0,0,0),wr=function(){function t(t){this.id=Object(v["guid"])(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0;break}var r=this.transform;r||(r=this.transform=[1,0,0,1,0,0]),r[4]+=t,r[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,r=n.local,i=e.innerTransformable,o=void 0,a=void 0,s=!1;i.parent=r?this:null;var l=!1;if(i.copyTransform(e),null!=n.position){var u=_r;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),r||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(xr,n,u):vr(xr,n,u),i.x=xr.x,i.y=xr.y,o=xr.align,a=xr.verticalAlign;var c=n.origin;if(c&&null!=n.rotation){var h=void 0,p=void 0;"center"===c?(h=.5*u.width,p=.5*u.height):(h=gr(c[0],u.width),p=gr(c[1],u.height)),l=!0,i.originX=-i.x+h+(r?0:u.x),i.originY=-i.y+p+(r?0:u.y)}}null!=n.rotation&&(i.rotation=n.rotation);var f=n.offset;f&&(i.x+=f[0],i.y+=f[1],l||(i.originX=-f[0],i.originY=-f[1]));var d=null==n.inside?"string"===typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),v=void 0,y=void 0,m=void 0;d&&this.canBeInsideText()?(v=n.insideFill,y=n.insideStroke,null!=v&&"auto"!==v||(v=this.getInsideTextFill()),null!=y&&"auto"!==y||(y=this.getInsideTextStroke(v),m=!0)):(v=n.outsideFill,y=n.outsideStroke,null!=v&&"auto"!==v||(v=this.getOutsideFill()),null!=y&&"auto"!==y||(y=this.getOutsideStroke(v),m=!0)),v=v||"#000",v===g.fill&&y===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=v,g.stroke=y,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),e.__dirty|=Bt,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?An:Mn},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"===typeof e&&Object(Ae["parse"])(e);n||(n=[255,255,255,1]);for(var r=n[3],i=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*r+(i?0:255)*(1-r);return n[3]=1,Object(Ae["stringify"])(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},Object(v["extend"])(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"===typeof t)this.attrKV(t,e);else if(Object(v["isObject"])(t))for(var n=t,r=Object(v["keys"])(n),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(yr,!1,t)},t.prototype.useState=function(t,e,n,r){var i=t===yr,o=this.hasState();if(o||!i){var a=this.currentStates,s=this.stateTransition;if(!(Object(v["indexOf"])(a,t)>=0)||!e&&1!==a.length){var l;if(this.stateProxy&&!i&&(l=this.stateProxy(t)),l||(l=this.states&&this.states[t]),l||i){i||this.saveCurrentToNormalState(l);var u=!!(l&&l.hoverLayer||r);u&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,l,this._normalState,e,!n&&!this.__inHover&&s&&s.duration>0,s);var c=this._textContent,h=this._textGuide;return c&&c.useState(t,e,n,u),h&&h.useState(t,e,n,u),i?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!u&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Bt),l}Object(v["logError"])("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var r=[],i=this.currentStates,o=t.length,a=o===i.length;if(a)for(var s=0;s0,f);var d=this._textContent,g=this._textGuide;d&&d.useStates(t,e,h),g&&g.useStates(t,e,h),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!h&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Bt)}else this.clearStates()},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var r=this.currentStates.slice(),i=Object(v["indexOf"])(r,t),o=Object(v["indexOf"])(r,e)>=0;i>=0?o?r.splice(i,1):r[i]=e:n&&!o&&r.push(e),this.useStates(r)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},r=0;r=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,r=n.length,i=[],o=0;o0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||i.force&&!a.length){var M=void 0,A=void 0,C=void 0;if(s){A={},p&&(M={});for(_=0;_=0&&(n.splice(r,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,e){var n=v["indexOf"](this._children,t);return n>=0&&this.replaceAt(e,n),this},e.prototype.replaceAt=function(t,e){var n=this._children,r=n[e];if(t&&t!==this&&t.parent!==this&&t!==r){n[e]=t,r.parent=null;var i=this.__zr;i&&r.removeSelfFromZr(i),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,r=v["indexOf"](n,t);return r<0||(n.splice(r,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},t.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},t.prototype.clearAnimation=function(){this.animation.clear()},t.prototype.getWidth=function(){return this.painter.getWidth()},t.prototype.getHeight=function(){return this.painter.getHeight()},t.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this.handler.off(t,e)},t.prototype.trigger=function(t,e){this.handler.trigger(t,e)},t.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;e0){if(t<=i)return a;if(t>=o)return s}else{if(t>=i)return a;if(t<=o)return s}else{if(t===i)return a;if(t===o)return s}return(t-i)/l*u+a}function Xr(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%";break}return v["isString"](t)?Yr(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function $r(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),Ur),t=(+t).toFixed(e),n?t:+t}function Zr(t){return t.sort((function(t,e){return t-e})),t}function Kr(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(Math.round(t*e)/e===t)return n;return Jr(t)}function Jr(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),r=n>0?+e.slice(n+1):0,i=n>0?n:e.length,o=e.indexOf("."),a=o<0?0:i-1-o;return Math.max(0,a-r)}function Qr(t,e){var n=Math.log,r=Math.LN10,i=Math.floor(n(t[1]-t[0])/r),o=Math.round(n(Math.abs(e[1]-e[0]))/r),a=Math.min(Math.max(-i+o,0),20);return isFinite(a)?a:20}function ti(t,e,n){if(!t[e])return 0;var r=v["reduce"](t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===r)return 0;var i=Math.pow(10,n),o=v["map"](t,(function(t){return(isNaN(t)?0:t)/r*i*100})),a=100*i,s=v["map"](o,(function(t){return Math.floor(t)})),l=v["reduce"](s,(function(t,e){return t+e}),0),u=v["map"](o,(function(t,e){return t-s[e]}));while(lc&&(c=u[p],h=p);++s[h],u[h]=0,++l}return s[e]/i}function ei(t,e){var n=Math.max(Kr(t),Kr(e)),r=t+e;return n>Ur?r:$r(r,n)}var ni=9007199254740991;function ri(t){var e=2*Math.PI;return(t%e+e)%e}function ii(t){return t>-Wr&&t=10&&e++,e}function ui(t,e){var n,r=li(t),i=Math.pow(10,r),o=t/i;return n=e?o<1.5?1:o<2.5?2:o<4?3:o<7?5:10:o<1?1:o<2?2:o<3?3:o<5?5:10,t=n*i,r>=-20?+t.toFixed(r<0?-r:0):t}function ci(t,e){var n=(t.length-1)*e+1,r=Math.floor(n),i=+t[r-1],o=n-r;return o?i+o*(t[r]-i):i}function hi(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,r=0;r=0||i&&v["indexOf"](i,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var vo=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],yo=go(vo),mo=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return yo(this,t,e)},t}(),bo=new ar["a"](50);function xo(t){if("string"===typeof t){var e=bo.get(t);return e&&e.image}return t}function _o(t,e,n,r,i){if(t){if("string"===typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=bo.get(t),a={hostEl:n,cb:r,cbPayload:i};return o?(e=o.image,!So(e)&&o.pending.push(a)):(e=sr["d"].loadImage(t,wo,wo),e.__zrImageSrc=t,bo.put(t,e.__cachedImgObj={image:e,pending:[a]})),e}return t}return e}function wo(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=ur(n,e);return u>s&&(n="",u=0),s=t-u,i.ellipsis=n,i.ellipsisWidth=u,i.contentWidth=s,i.containerWidth=t,i}function Co(t,e){var n=e.containerWidth,r=e.font,i=e.contentWidth;if(!n)return"";var o=ur(t,r);if(o<=n)return t;for(var a=0;;a++){if(o<=i||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?Io(t,i,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*i/o):0;t=t.substr(0,s),o=ur(t,r)}return""===t&&(t=e.placeholder),t}function Io(t,e,n,r){for(var i=0,o=0,a=t.length;of&&c){var d=Math.floor(f/l);n=n.slice(0,d)}if(t&&a&&null!=h)for(var g=Ao(h,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),y=0;yl&&Po(n,t.substring(l,u),e,s),Po(n,r[2],e,s,r[1]),l=Oo.lastIndex}lo){w>0?(b.tokens=b.tokens.slice(0,w),y(b,_,x),n.lines=n.lines.slice(0,m+1)):n.lines=n.lines.slice(0,m);break t}var T=O.width,k=null==T||"auto"===T;if("string"===typeof T&&"%"===T.charAt(T.length-1))S.percentWidth=T,c.push(S),S.contentWidth=ur(S.text,C);else{if(k){var D=O.backgroundColor,L=D&&D.image;L&&(L=xo(L),So(L)&&(S.width=Math.max(S.width,L.width*I/L.height)))}var j=d&&null!=i?i-_:null;null!=j&&j0&&d+r.accumWidth>r.width&&(o=e.split("\n"),h=!0),r.accumWidth=d}else{var g=zo(e,c,r.width,r.breakAll,r.accumWidth);r.accumWidth=g.accumWidth+f,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var v=0;v=33&&e<=383}var Ro=Object(v["reduce"])(",&?/;] ".split(""),(function(t,e){return t[e]=!0,t}),{});function No(t){return!Eo(t)||!!Ro[t]}function zo(t,e,n,r,i){for(var o=[],a=[],s="",l="",u=0,c=0,h=0;hn:i+c+f>n)?c?(s||l)&&(d?(s||(s=l,l="",u=0,c=u),o.push(s),a.push(c-u),l+=p,u+=f,s="",c=u):(l&&(s+=l,l="",u=0),o.push(s),a.push(c),s=p,c=f)):d?(o.push(l),a.push(u),l=p,u=f):(o.push(p),a.push(f)):(c+=f,d?(l+=p,u+=f):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,c+=u),o.push(s),a.push(c),s="",l="",u=0,c=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(c)),1===o.length&&(c+=i),{accumWidth:c,lines:o,linesWidths:a}}var Bo="__zr_style_"+Math.round(10*Math.random()),Vo={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Fo={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};Vo[Bo]=!0;var Ho=["z","z2","invisible"],Go=["invisible"],Wo=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype._init=function(e){for(var n=Object(v["keys"])(e),r=0;r1e-4)return s[0]=t-n,s[1]=e-r,l[0]=t+n,void(l[1]=e+r);if(ta[0]=Jo(i)*n+t,ta[1]=Ko(i)*r+e,ea[0]=Jo(o)*n+t,ea[1]=Ko(o)*r+e,u(s,ta,ea),c(l,ta,ea),i%=Qo,i<0&&(i+=Qo),o%=Qo,o<0&&(o+=Qo),i>o&&!a?o+=Qo:ii&&(na[0]=Jo(f)*n+t,na[1]=Ko(f)*r+e,u(s,na,s),c(l,na,l))}var ca={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},ha=[],pa=[],fa=[],da=[],ga=[],va=[],ya=Math.min,ma=Math.max,ba=Math.cos,xa=Math.sin,_a=Math.abs,wa=Math.PI,Sa=2*wa,Oa="undefined"!==typeof Float32Array,Ma=[];function Aa(t){var e=Math.round(t/wa*1e8)/1e8;return e%2*wa}function Ca(t,e){var n=Aa(t[0]);n<0&&(n+=Sa);var r=n-t[0],i=t[1];i+=r,!e&&i-n>=Sa?i=n+Sa:e&&n-i>=Sa?i=n-Sa:!e&&n>i?i=n+(Sa-Aa(n-i)):e&&n0&&(this._ux=_a(n/Sn/t)||0,this._uy=_a(n/Sn/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(ca.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=_a(t-this._xi),r=_a(e-this._yi),i=n>this._ux||r>this._uy;if(this.addData(ca.L,t,e),this._ctx&&i&&this._ctx.lineTo(t,e),i)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+r*r;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,r,i,o){return this._drawPendingPt(),this.addData(ca.C,t,e,n,r,i,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,r,i,o),this._xi=i,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,r){return this._drawPendingPt(),this.addData(ca.Q,t,e,n,r),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,r),this._xi=n,this._yi=r,this},t.prototype.arc=function(t,e,n,r,i,o){this._drawPendingPt(),Ma[0]=r,Ma[1]=i,Ca(Ma,o),r=Ma[0],i=Ma[1];var a=i-r;return this.addData(ca.A,t,e,n,n,r,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,r,i,o),this._xi=ba(i)*n+t,this._yi=xa(i)*n+e,this},t.prototype.arcTo=function(t,e,n,r,i){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,n,r,i),this},t.prototype.rect=function(t,e,n,r){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,n,r),this.addData(ca.R,t,e,n,r),this},t.prototype.closePath=function(){this._drawPendingPt(),this.addData(ca.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&t.closePath(),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.len=function(){return this._len},t.prototype.setData=function(t){var e=t.length;this.data&&this.data.length===e||!Oa||(this.data=new Float32Array(e));for(var n=0;nu.length&&(this._expandData(),u=this.data);for(var c=0;c0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){fa[0]=fa[1]=ga[0]=ga[1]=Number.MAX_VALUE,da[0]=da[1]=va[0]=va[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,r=0,i=0,o=0;for(t=0;tn||_a(m)>r||h===e-1)&&(d=Math.sqrt(y*y+m*m),i=g,o=v);break;case ca.C:var b=t[h++],x=t[h++],_=(g=t[h++],v=t[h++],t[h++]),w=t[h++];d=de(i,o,b,x,g,v,_,w,10),i=_,o=w;break;case ca.Q:b=t[h++],x=t[h++],g=t[h++],v=t[h++];d=_e(i,o,b,x,g,v,10),i=g,o=v;break;case ca.A:var S=t[h++],O=t[h++],M=t[h++],A=t[h++],C=t[h++],I=t[h++],T=I+C;h+=1;t[h++];f&&(a=ba(C)*M+S,s=xa(C)*A+O),d=ma(M,A)*ya(Sa,Math.abs(I)),i=ba(T)*M+S,o=xa(T)*A+O;break;case ca.R:a=i=t[h++],s=o=t[h++];var k=t[h++],D=t[h++];d=2*k+2*D;break;case ca.Z:y=a-i,m=s-o;d=Math.sqrt(y*y+m*m),i=a,o=s;break}d>=0&&(l[c++]=d,u+=d)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,r,i,o,a,s,l,u,c,h,p,f=this.data,d=this._ux,g=this._uy,v=this._len,y=e<1,m=0,b=0,x=0;if(!y||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=this._pathLen,c=e*u,c))t:for(var _=0;_0&&(t.lineTo(h,p),x=0),w){case ca.M:n=i=f[_++],r=o=f[_++],t.moveTo(i,o);break;case ca.L:a=f[_++],s=f[_++];var O=_a(a-i),M=_a(s-o);if(O>d||M>g){if(y){var A=l[b++];if(m+A>c){var C=(c-m)/A;t.lineTo(i*(1-C)+a*C,o*(1-C)+s*C);break t}m+=A}t.lineTo(a,s),i=a,o=s,x=0}else{var I=O*O+M*M;I>x&&(h=a,p=s,x=I)}break;case ca.C:var T=f[_++],k=f[_++],D=f[_++],L=f[_++],j=f[_++],P=f[_++];if(y){A=l[b++];if(m+A>c){C=(c-m)/A;pe(i,T,D,j,C,ha),pe(o,k,L,P,C,pa),t.bezierCurveTo(ha[1],pa[1],ha[2],pa[2],ha[3],pa[3]);break t}m+=A}t.bezierCurveTo(T,k,D,L,j,P),i=j,o=P;break;case ca.Q:T=f[_++],k=f[_++],D=f[_++],L=f[_++];if(y){A=l[b++];if(m+A>c){C=(c-m)/A;be(i,T,D,C,ha),be(o,k,L,C,pa),t.quadraticCurveTo(ha[1],pa[1],ha[2],pa[2]);break t}m+=A}t.quadraticCurveTo(T,k,D,L),i=D,o=L;break;case ca.A:var E=f[_++],R=f[_++],N=f[_++],z=f[_++],B=f[_++],V=f[_++],F=f[_++],H=!f[_++],G=N>z?N:z,W=_a(N-z)>.001,U=B+V,Y=!1;if(y){A=l[b++];m+A>c&&(U=B+V*(c-m)/A,Y=!0),m+=A}if(W&&t.ellipse?t.ellipse(E,R,N,z,F,B,U,H):t.arc(E,R,G,B,U,H),Y)break t;S&&(n=ba(B)*N+E,r=xa(B)*z+R),i=ba(U)*N+E,o=xa(U)*z+R;break;case ca.R:n=i=f[_],r=o=f[_+1],a=f[_++],s=f[_++];var q=f[_++],X=f[_++];if(y){A=l[b++];if(m+A>c){var $=c-m;t.moveTo(a,s),t.lineTo(a+ya($,q),s),$-=q,$>0&&t.lineTo(a+q,s+ya($,X)),$-=X,$>0&&t.lineTo(a+ma(q-$,0),s+X),$-=q,$>0&&t.lineTo(a,s+ma(X-$,0));break t}m+=A}t.rect(a,s,q,X);break;case ca.Z:if(y){A=l[b++];if(m+A>c){C=(c-m)/A;t.lineTo(i*(1-C)+n*C,o*(1-C)+r*C);break t}m+=A}t.closePath(),i=n,o=r}}},t.prototype.clone=function(){var e=new t,n=this.data;return e.data=n.slice?n.slice():Array.prototype.slice.call(n),e._len=this._len,e},t.CMD=ca,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0}(),t}(),Ta=Ia;function ka(t,e,n,r,i,o,a){if(0===i)return!1;var s=i,l=0,u=t;if(a>e+s&&a>r+s||at+s&&o>n+s||oe+h&&c>r+h&&c>o+h&&c>s+h||ct+h&&u>n+h&&u>i+h&&u>a+h||ue+u&&l>r+u&&l>o+u||lt+u&&s>n+u&&s>i+u||sn||c+ui&&(i+=Ea);var p=Math.atan2(l,s);return p<0&&(p+=Ea),p>=r&&p<=i||p+Ea>=r&&p+Ea<=i}function Na(t,e,n,r,i,o){if(o>e&&o>r||oi?s:0}var za=Ta.CMD,Ba=2*Math.PI,Va=1e-4;function Fa(t,e){return Math.abs(t-e)e&&u>r&&u>o&&u>s||u1&&Wa(),f=le(e,r,o,s,Ga[0]),p>1&&(d=le(e,r,o,s,Ga[1]))),2===p?ve&&s>r&&s>o||s=0&&u<=1){for(var c=0,h=ge(e,r,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);Ha[0]=-l,Ha[1]=l;var u=Math.abs(r-i);if(u<1e-4)return 0;if(u>=Ba-1e-4){r=0,i=Ba;var c=o?1:-1;return a>=Ha[0]+t&&a<=Ha[1]+t?c:0}if(r>i){var h=r;r=i,i=h}r<0&&(r+=Ba,i+=Ba);for(var p=0,f=0;f<2;f++){var d=Ha[f];if(d+t>a){var g=Math.atan2(s,d);c=o?1:-1;g<0&&(g=Ba+g),(g>=r&&g<=i||g+Ba>=r&&g+Ba<=i)&&(g>Math.PI/2&&g<1.5*Math.PI&&(c=-c),p+=c)}}return p}function Xa(t,e,n,r,i){for(var o,a,s=t.data,l=t.len(),u=0,c=0,h=0,p=0,f=0,d=0;d1&&(n||(u+=Na(c,h,p,f,r,i))),v&&(c=s[d],h=s[d+1],p=c,f=h),g){case za.M:p=s[d++],f=s[d++],c=p,h=f;break;case za.L:if(n){if(ka(c,h,s[d],s[d+1],e,r,i))return!0}else u+=Na(c,h,s[d],s[d+1],r,i)||0;c=s[d++],h=s[d++];break;case za.C:if(n){if(Da(c,h,s[d++],s[d++],s[d++],s[d++],s[d],s[d+1],e,r,i))return!0}else u+=Ua(c,h,s[d++],s[d++],s[d++],s[d++],s[d],s[d+1],r,i)||0;c=s[d++],h=s[d++];break;case za.Q:if(n){if(La(c,h,s[d++],s[d++],s[d],s[d+1],e,r,i))return!0}else u+=Ya(c,h,s[d++],s[d++],s[d],s[d+1],r,i)||0;c=s[d++],h=s[d++];break;case za.A:var y=s[d++],m=s[d++],b=s[d++],x=s[d++],_=s[d++],w=s[d++];d+=1;var S=!!(1-s[d++]);o=Math.cos(_)*b+y,a=Math.sin(_)*x+m,v?(p=o,f=a):u+=Na(c,h,o,a,r,i);var O=(r-y)*x/b+y;if(n){if(Ra(y,m,x,_,_+w,S,e,O,i))return!0}else u+=qa(y,m,x,_,_+w,S,O,i);c=Math.cos(_+w)*b+y,h=Math.sin(_+w)*x+m;break;case za.R:p=c=s[d++],f=h=s[d++];var M=s[d++],A=s[d++];if(o=p+M,a=f+A,n){if(ka(p,f,o,f,e,r,i)||ka(o,f,o,a,e,r,i)||ka(o,a,p,a,e,r,i)||ka(p,a,p,f,e,r,i))return!0}else u+=Na(o,f,o,a,r,i),u+=Na(p,a,p,f,r,i);break;case za.Z:if(n){if(ka(c,h,p,f,e,r,i))return!0}else u+=Na(c,h,p,f,r,i);c=p,h=f;break}}return n||Fa(h,f)||(u+=Na(c,h,p,f,r,i)||0),0!==u}function $a(t,e,n){return Xa(t,0,!1,e,n)}function Za(t,e,n,r){return Xa(t,e,!0,n,r)}var Ka=Object(v["defaults"])({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},Vo),Ja={style:Object(v["defaults"])({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Fo.style)},Qa=Un.concat(["invisible","culling","z","z2","zlevel","parent"]),ts=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var r=this.style;if(r.decal){var i=this._decalEl=this._decalEl||new e;i.buildPath===e.prototype.buildPath&&(i.buildPath=function(t){n.buildPath(t,n.shape)}),i.silent=!0;var o=i.style;for(var a in r)o[a]!==r[a]&&(o[a]=r[a]);o.fill=r.fill?r.decal:null,o.decal=null,o.shadowColor=null,r.strokeFirst&&(o.stroke=null);for(var s=0;s.5?Mn:e>.2?Cn:An}if(t)return An}return Mn},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(Object(v["isString"])(e)){var n=this.__zr,r=!(!n||!n.isDarkMode()),i=Object(Ae["lum"])(t,0)0))},e.prototype.hasFill=function(){var t=this.style,e=t.fill;return null!=e&&"none"!==e},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var r=!1;this.path||(r=!0,this.createPathProxy());var i=this.path;(r||this.__dirty&Ft)&&(i.beginPath(),this.buildPath(i,this.shape,!1),this.pathUpdated()),t=i.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),r=this.getBoundingRect(),i=this.style;if(t=n[0],e=n[1],r.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=i.lineWidth,s=i.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),Za(o,a/s,t,e)))return!0}if(this.hasFill())return $a(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=Ft,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"===typeof t?n[t]=e:Object(v["extend"])(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(this.__dirty&Ft)},e.prototype.createStyle=function(t){return Object(v["createObject"])(Ka,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=Object(v["extend"])({},this.shape))},e.prototype._applyStateObj=function(e,n,r,i,o,a){t.prototype._applyStateObj.call(this,e,n,r,i,o,a);var s,l=!(n&&i);if(n&&n.shape?o?i?s=n.shape:(s=Object(v["extend"])({},r.shape),Object(v["extend"])(s,n.shape)):(s=Object(v["extend"])({},i?this.shape:r.shape),Object(v["extend"])(s,n.shape)):l&&(s=r.shape),s)if(o){this.shape=Object(v["extend"])({},this.shape);for(var u={},c=Object(v["keys"])(s),h=0;h0},e.prototype.hasFill=function(){var t=this.style,e=t.fill;return null!=e&&"none"!==e},e.prototype.createStyle=function(t){return Object(v["createObject"])(ns,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=hr(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var r=t.lineWidth;n.x-=r/2,n.y-=r/2,n.width+=r,n.height+=r}this._rect=n}return this._rect},e.initDefaultProps=function(){var t=e.prototype;t.dirtyRectTolerance=10}(),e}(Xo);rs.prototype.type="tspan";var is=rs,os=Object(v["defaults"])({x:0,y:0},Vo),as={style:Object(v["defaults"])({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},Fo.style)};function ss(t){return!!(t&&"string"!==typeof t&&t.width&&t.height)}var ls=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.createStyle=function(t){return Object(v["createObject"])(os,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var r=ss(e.image)?e.image:this.__image;if(!r)return 0;var i="width"===t?"height":"width",o=e[i];return null==o?r[t]:r[t]/r[i]*o},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return as},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new or(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(Xo);ls.prototype.type="image";var us=ls;function cs(t,e){var n,r,i,o,a,s=e.x,l=e.y,u=e.width,c=e.height,h=e.r;u<0&&(s+=u,u=-u),c<0&&(l+=c,c=-c),"number"===typeof h?n=r=i=o=h:h instanceof Array?1===h.length?n=r=i=o=h[0]:2===h.length?(n=i=h[0],r=o=h[1]):3===h.length?(n=h[0],r=o=h[1],i=h[2]):(n=h[0],r=h[1],i=h[2],o=h[3]):n=r=i=o=0,n+r>u&&(a=n+r,n*=u/a,r*=u/a),i+o>u&&(a=i+o,i*=u/a,o*=u/a),r+i>c&&(a=r+i,r*=c/a,i*=c/a),n+o>c&&(a=n+o,n*=c/a,o*=c/a),t.moveTo(s+n,l),t.lineTo(s+u-r,l),0!==r&&t.arc(s+u-r,l+r,r,-Math.PI/2,0),t.lineTo(s+u,l+c-i),0!==i&&t.arc(s+u-i,l+c-i,i,0,Math.PI/2),t.lineTo(s+o,l+c),0!==o&&t.arc(s+o,l+c-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}var hs=Math.round;function ps(t,e,n){if(e){var r=e.x1,i=e.x2,o=e.y1,a=e.y2;t.x1=r,t.x2=i,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(hs(2*r)===hs(2*i)&&(t.x1=t.x2=ds(r,s,!0)),hs(2*o)===hs(2*a)&&(t.y1=t.y2=ds(o,s,!0)),t):t}}function fs(t,e,n){if(e){var r=e.x,i=e.y,o=e.width,a=e.height;t.x=r,t.y=i,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=ds(r,s,!0),t.y=ds(i,s,!0),t.width=Math.max(ds(r+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(ds(i+a,s,!1)-t.y,0===a?0:1),t):t}}function ds(t,e,n){if(!e)return t;var r=hs(2*t);return(r+hs(e))%2===0?r/2:(r+(n?1:-1))/2}var gs=function(){function t(){this.x=0,this.y=0,this.width=0,this.height=0}return t}(),vs={},ys=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.getDefaultShape=function(){return new gs},e.prototype.buildPath=function(t,e){var n,r,i,o;if(this.subPixelOptimize){var a=fs(vs,e,this.style);n=a.x,r=a.y,i=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,r=e.y,i=e.width,o=e.height;e.r?cs(t,e):t.rect(n,r,i,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(es);ys.prototype.type="rect";var ms=ys,bs={fill:"#000"},xs=2,_s={style:Object(v["defaults"])({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Fo.style)},ws=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=bs,n.attr(e),n}return d(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){t.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;e0,A=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),C=i.calculatedLineHeight,I=0;I=0&&(I=x[C],"right"===I.align))this._placeToken(I,t,w,g,A,"right",y),S-=I.width,A-=I.width,C--;M+=(r-(M-d)-(v-A)-S)/2;while(O<=C)I=x[O],this._placeToken(I,t,w,g,M+I.width/2,"center",y),M+=I.width,O++;g+=w}},e.prototype._placeToken=function(t,e,n,r,i,o,a){var s=e.rich[t.styleName]||{};s.text=t.text;var l=t.verticalAlign,u=r+n/2;"top"===l?u=r+t.height/2:"bottom"===l&&(u=r+n-t.height/2);var c=!t.isLineHolder&&Es(s);c&&this._renderBackground(s,e,"right"===o?i-t.width:"center"===o?i-t.width/2:i,u-t.height/2,t.width,t.height);var h=!!s.backgroundColor,p=t.textPadding;p&&(i=js(i,o,p),u-=t.height/2-p[0]-t.innerHeight/2);var f=this._getOrCreateChild(is),d=f.createStyle();f.useStyle(d);var g=this._defaultStyle,y=!1,m=0,b=Ls("fill"in s?s.fill:"fill"in e?e.fill:(y=!0,g.fill)),x=Ds("stroke"in s?s.stroke:"stroke"in e?e.stroke:h||a||g.autoStroke&&!y?null:(m=xs,g.stroke)),_=s.textShadowBlur>0||e.textShadowBlur>0;d.text=t.text,d.x=i,d.y=u,_&&(d.shadowBlur=s.textShadowBlur||e.textShadowBlur||0,d.shadowColor=s.textShadowColor||e.textShadowColor||"transparent",d.shadowOffsetX=s.textShadowOffsetX||e.textShadowOffsetX||0,d.shadowOffsetY=s.textShadowOffsetY||e.textShadowOffsetY||0),d.textAlign=o,d.textBaseline="middle",d.font=t.font||sr["a"],d.opacity=Object(v["retrieve3"])(s.opacity,e.opacity,1),Cs(d,s),x&&(d.lineWidth=Object(v["retrieve3"])(s.lineWidth,e.lineWidth,m),d.lineDash=Object(v["retrieve2"])(s.lineDash,e.lineDash),d.lineDashOffset=e.lineDashOffset||0,d.stroke=x),b&&(d.fill=b);var w=t.contentWidth,S=t.contentHeight;f.setBoundingRect(new or(pr(d.x,w,d.textAlign),fr(d.y,S,d.textBaseline),w,S))},e.prototype._renderBackground=function(t,e,n,r,i,o){var a,s,l=t.backgroundColor,u=t.borderWidth,c=t.borderColor,h=l&&l.image,p=l&&!h,f=t.borderRadius,d=this;if(p||t.lineHeight||u&&c){a=this._getOrCreateChild(ms),a.useStyle(a.createStyle()),a.style.fill=null;var g=a.shape;g.x=n,g.y=r,g.width=i,g.height=o,g.r=f,a.dirtyShape()}if(p){var y=a.style;y.fill=l||null,y.fillOpacity=Object(v["retrieve2"])(t.fillOpacity,1)}else if(h){s=this._getOrCreateChild(us),s.onload=function(){d.dirtyStyle()};var m=s.style;m.image=l.image,m.x=n,m.y=r,m.width=i,m.height=o}if(u&&c){y=a.style;y.lineWidth=u,y.stroke=c,y.strokeOpacity=Object(v["retrieve2"])(t.strokeOpacity,1),y.lineDash=t.borderDash,y.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(y.strokeFirst=!0,y.lineWidth*=2)}var b=(a||s).style;b.shadowBlur=t.shadowBlur||0,b.shadowColor=t.shadowColor||"transparent",b.shadowOffsetX=t.shadowOffsetX||0,b.shadowOffsetY=t.shadowOffsetY||0,b.opacity=Object(v["retrieve3"])(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";return Is(t)&&(e=[t.fontStyle,t.fontWeight,As(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),e&&Object(v["trim"])(e)||t.textFont||t.font},e}(Xo),Ss={left:!0,right:1,center:1},Os={top:1,bottom:1,middle:1},Ms=["fontStyle","fontWeight","fontSize","fontFamily"];function As(t){return"string"!==typeof t||-1===t.indexOf("px")&&-1===t.indexOf("rem")&&-1===t.indexOf("em")?isNaN(+t)?sr["c"]+"px":t+"px":t}function Cs(t,e){for(var n=0;n=0,o=!1;if(t instanceof es){var a=Fs(t),s=i&&a.selectFill||a.normalFill,l=i&&a.selectStroke||a.normalStroke;if(el(s)||el(l)){r=r||{};var u=r.style||{};"inherit"===u.fill?(o=!0,r=Object(v["extend"])({},r),u=Object(v["extend"])({},u),u.fill=s):!el(u.fill)&&el(s)?(o=!0,r=Object(v["extend"])({},r),u=Object(v["extend"])({},u),u.fill=rl(s)):!el(u.stroke)&&el(l)&&(o||(r=Object(v["extend"])({},r),u=Object(v["extend"])({},u)),u.stroke=rl(l)),r.style=u}}if(r&&null==r.z2){o||(r=Object(v["extend"])({},r));var c=t.z2EmphasisLift;r.z2=t.z2+(null!=c?c:Xs)}return r}function vl(t,e,n){if(n&&null==n.z2){n=Object(v["extend"])({},n);var r=t.z2SelectLift;n.z2=t.z2+(null!=r?r:$s)}return n}function yl(t,e,n){var r=Object(v["indexOf"])(t.currentStates,e)>=0,i=t.style.opacity,o=r?null:dl(t,["opacity"],e,{opacity:1});n=n||{};var a=n.style||{};return null==a.opacity&&(n=Object(v["extend"])({},n),a=Object(v["extend"])({opacity:r?i:.1*o.opacity},a),n.style=a),n}function ml(t,e){var n=this.states[t];if(this.style){if("emphasis"===t)return gl(this,t,e,n);if("blur"===t)return yl(this,t,n);if("select"===t)return vl(this,t,n)}return n}function bl(t){t.stateProxy=ml;var e=t.getTextContent(),n=t.getTextGuideLine();e&&(e.stateProxy=ml),n&&(n.stateProxy=ml)}function xl(t,e){!Il(t,e)&&!t.__highByOuter&&pl(t,ol)}function _l(t,e){!Il(t,e)&&!t.__highByOuter&&pl(t,al)}function wl(t,e){t.__highByOuter|=1<<(e||0),pl(t,ol)}function Sl(t,e){!(t.__highByOuter&=~(1<<(e||0)))&&pl(t,al)}function Ol(t){pl(t,sl)}function Ml(t){pl(t,ll)}function Al(t){pl(t,ul)}function Cl(t){pl(t,cl)}function Il(t,e){return t.__highDownSilentOnTouch&&e.zrByTouch}function Tl(t){var e=t.getModel(),n=[],r=[];e.eachComponent((function(e,i){var o=Hs(i),a="series"===e,s=a?t.getViewOfSeriesModel(i):t.getViewOfComponentModel(i);!a&&r.push(s),o.isBlured&&(s.group.traverse((function(t){ll(t)})),a&&n.push(i)),o.isBlured=!1})),Object(v["each"])(r,(function(t){t&&t.toggleBlurSeries&&t.toggleBlurSeries(n,!1,e)}))}function kl(t,e,n,r){var i=r.getModel();function o(t,e){for(var n=0;n0){var o={dataIndex:i,seriesIndex:t.seriesIndex};null!=r&&(o.dataType=r),e.push(o)}}))})),e}function Bl(t,e,n){Yl(t,!0),pl(t,bl),Hl(t,e,n)}function Vl(t){Yl(t,!1)}function Fl(t,e,n,r){r?Vl(t):Bl(t,e,n)}function Hl(t,e,n){var r=Ns(t);null!=e?(r.focus=e,r.blurScope=n):r.focus&&(r.focus=null)}var Gl=["emphasis","blur","select"],Wl={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function Ul(t,e,n,r){n=n||"itemStyle";for(var i=0;i0){var h=c.duration,p=c.delay,f=c.easing,d={duration:h,delay:p||0,easing:f,done:o,force:!!o||!!a,setToFinal:!u,scope:t,during:a};l?e.animateFrom(n,d):e.animateTo(n,d)}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function nu(t,e,n,r,i,o){eu("update",t,e,n,r,i,o)}function ru(t,e,n,r,i,o){eu("enter",t,e,n,r,i,o)}function iu(t){if(!t.__zr)return!0;for(var e=0;e=0&&n.push(t)})),n}t.topologicalTravel=function(t,e,r,i){if(t.length){var o=n(e),a=o.graph,s=o.noEntryList,l={};v["each"](t,(function(t){l[t]=!0}));while(s.length){var u=s.pop(),c=a[u],h=!!l[u];h&&(r.call(i,u,c.originalDeps.slice()),delete l[u]),v["each"](c.successor,h?f:p)}v["each"](l,(function(){var t="";throw new Error(t)}))}function p(t){a[t].entryCount--,0===a[t].entryCount&&s.push(t)}function f(t){l[t]=!0,p(t)}}}function Wu(t,e){return v["merge"](v["merge"]({},t,!0),e,!0)}var Uu={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},Yu={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},qu="ZH",Xu="EN",$u=Xu,Zu={},Ku={},Ju=g["a"].domSupported?function(){var t=(document.documentElement.lang||navigator.language||navigator.browserLanguage).toUpperCase();return t.indexOf(qu)>-1?qu:$u}():$u;function Qu(t,e){t=t.toUpperCase(),Ku[t]=new Bu(e),Zu[t]=e}function tc(t){if(Object(v["isString"])(t)){var e=Zu[t.toUpperCase()]||{};return t===qu||t===Xu?Object(v["clone"])(e):Object(v["merge"])(Object(v["clone"])(e),Object(v["clone"])(Zu[$u]),!1)}return Object(v["merge"])(Object(v["clone"])(t),Object(v["clone"])(Zu[$u]),!1)}function ec(t){return Ku[t]}function nc(){return Ku[$u]}Qu(Xu,Uu),Qu(qu,Yu);var rc=1e3,ic=60*rc,oc=60*ic,ac=24*oc,sc=365*ac,lc={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},uc="{yyyy}-{MM}-{dd}",cc={year:"{yyyy}",month:"{yyyy}-{MM}",day:uc,hour:uc+" "+lc.hour,minute:uc+" "+lc.minute,second:uc+" "+lc.second,millisecond:lc.none},hc=["year","month","day","hour","minute","second","millisecond"],pc=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function fc(t,e){return t+="","0000".substr(0,e-t.length)+t}function dc(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function gc(t){return t===dc(t)}function vc(t){switch(t){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function yc(t,e,n,r){var i=ai(t),o=i[_c(n)](),a=i[wc(n)]()+1,s=Math.floor((a-1)/3)+1,l=i[Sc(n)](),u=i["get"+(n?"UTC":"")+"Day"](),c=i[Oc(n)](),h=(c-1)%12+1,p=i[Mc(n)](),f=i[Ac(n)](),d=i[Cc(n)](),g=r instanceof Bu?r:ec(r||Ju)||nc(),v=g.getModel("time"),y=v.get("month"),m=v.get("monthAbbr"),b=v.get("dayOfWeek"),x=v.get("dayOfWeekAbbr");return(e||"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,o%100+"").replace(/{Q}/g,s+"").replace(/{MMMM}/g,y[a-1]).replace(/{MMM}/g,m[a-1]).replace(/{MM}/g,fc(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,fc(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,b[u]).replace(/{ee}/g,x[u]).replace(/{e}/g,u+"").replace(/{HH}/g,fc(c,2)).replace(/{H}/g,c+"").replace(/{hh}/g,fc(h+"",2)).replace(/{h}/g,h+"").replace(/{mm}/g,fc(p,2)).replace(/{m}/g,p+"").replace(/{ss}/g,fc(f,2)).replace(/{s}/g,f+"").replace(/{SSS}/g,fc(d,3)).replace(/{S}/g,d+"")}function mc(t,e,n,r,i){var o=null;if(v["isString"](n))o=n;else if(v["isFunction"](n))o=n(t.value,e,{level:t.level});else{var a=v["extend"]({},lc);if(t.level>0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(v["isArray"](o)){var h=null==t.level?0:t.level>=0?t.level:o.length+t.level;h=Math.min(h,o.length-1),o=o[h]}}return yc(new Date(t.value),o,i,r)}function bc(t,e){var n=ai(t),r=n[wc(e)]()+1,i=n[Sc(e)](),o=n[Oc(e)](),a=n[Mc(e)](),s=n[Ac(e)](),l=n[Cc(e)](),u=0===l,c=u&&0===s,h=c&&0===a,p=h&&0===o,f=p&&1===i,d=f&&1===r;return d?"year":f?"month":p?"day":h?"hour":c?"minute":u?"second":"millisecond"}function xc(t,e,n){var r=v["isNumber"](t)?ai(t):t;switch(e=e||bc(t,n),e){case"year":return r[_c(n)]();case"half-year":return r[wc(n)]()>=6?1:0;case"quarter":return Math.floor((r[wc(n)]()+1)/4);case"month":return r[wc(n)]();case"day":return r[Sc(n)]();case"half-day":return r[Oc(n)]()/24;case"hour":return r[Oc(n)]();case"minute":return r[Mc(n)]();case"second":return r[Ac(n)]();case"millisecond":return r[Cc(n)]()}}function _c(t){return t?"getUTCFullYear":"getFullYear"}function wc(t){return t?"getUTCMonth":"getMonth"}function Sc(t){return t?"getUTCDate":"getDate"}function Oc(t){return t?"getUTCHours":"getHours"}function Mc(t){return t?"getUTCMinutes":"getMinutes"}function Ac(t){return t?"getUTCSeconds":"getSeconds"}function Cc(t){return t?"getUTCMilliseconds":"getMilliseconds"}function Ic(t){return t?"setUTCFullYear":"setFullYear"}function Tc(t){return t?"setUTCMonth":"setMonth"}function kc(t){return t?"setUTCDate":"setDate"}function Dc(t){return t?"setUTCHours":"setHours"}function Lc(t){return t?"setUTCMinutes":"setMinutes"}function jc(t){return t?"setUTCSeconds":"setSeconds"}function Pc(t){return t?"setUTCMilliseconds":"setMilliseconds"}function Ec(t,e,n,r,i,o,a,s){var l=new Rs({style:{text:t,font:e,align:n,verticalAlign:r,padding:i,rich:o,overflow:a?"truncate":null,lineHeight:s}});return l.getBoundingRect()}function Rc(t){if(!fi(t))return v["isString"](t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function Nc(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var zc=v["normalizeCssArray"],Bc=/([&<>"'])/g,Vc={"&":"&","<":"<",">":">",'"':""","'":"'"};function Fc(t){return null==t?"":(t+"").replace(Bc,(function(t,e){return Vc[e]}))}function Hc(t,e,n){var r="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function i(t){return t&&v["trim"](t)?t:"-"}function o(t){return!(null==t||isNaN(t)||!isFinite(t))}var a="time"===e,s=t instanceof Date;if(a||s){var l=a?ai(t):t;if(!isNaN(+l))return yc(l,r,n);if(s)return"-"}if("ordinal"===e)return v["isStringSafe"](t)?i(t):v["isNumber"](t)&&o(t)?t+"":"-";var u=pi(t);return o(u)?Rc(u):v["isStringSafe"](t)?i(t):"boolean"===typeof t?t+"":"-"}var Gc=["a","b","c","d","e","f","g"],Wc=function(t,e){return"{"+t+(null==e?"":e)+"}"};function Uc(t,e,n){v["isArray"](e)||(e=[e]);var r=e.length;if(!r)return"";for(var i=e[0].$vars||[],o=0;o':'';var a=n.markerId||"markerX";return{renderMode:o,content:"{"+a+"|} ",style:"subItem"===i?{width:4,height:4,borderRadius:2,backgroundColor:r}:{width:10,height:10,borderRadius:5,backgroundColor:r}}}function Xc(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var r=ai(e),i=n?"getUTC":"get",o=r[i+"FullYear"](),a=r[i+"Month"]()+1,s=r[i+"Date"](),l=r[i+"Hours"](),u=r[i+"Minutes"](),c=r[i+"Seconds"](),h=r[i+"Milliseconds"]();return t=t.replace("MM",fc(a,2)).replace("M",a).replace("yyyy",o).replace("yy",fc(o%100+"",2)).replace("dd",fc(s,2)).replace("d",s).replace("hh",fc(l,2)).replace("h",l).replace("mm",fc(u,2)).replace("m",u).replace("ss",fc(c,2)).replace("s",c).replace("SSS",fc(h,3)),t}function $c(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function Zc(t,e){return e=e||"transparent",v["isString"](t)?t:v["isObject"](t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Kc(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var Jc=v["each"],Qc=["left","right","top","bottom","width","height"],th=[["width","left","right"],["height","top","bottom"]];function eh(t,e,n,r,i){var o=0,a=0;null==r&&(r=1/0),null==i&&(i=1/0);var s=0;e.eachChild((function(l,u){var c,h,p=l.getBoundingRect(),f=e.childAt(u+1),d=f&&f.getBoundingRect();if("horizontal"===t){var g=p.width+(d?-d.x+p.x:0);c=o+g,c>r||l.newline?(o=0,c=g,a+=s+n,s=p.height):s=Math.max(s,p.height)}else{var v=p.height+(d?-d.y+p.y:0);h=a+v,h>i||l.newline?(o+=s+n,a=0,h=v,s=p.width):s=Math.max(s,p.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=c+n:a=h+n)}))}var nh=eh;v["curry"](eh,"vertical"),v["curry"](eh,"horizontal");function rh(t,e,n){var r=e.width,i=e.height,o=Xr(t.left,r),a=Xr(t.top,i),s=Xr(t.right,r),l=Xr(t.bottom,i);return(isNaN(o)||isNaN(parseFloat(t.left)))&&(o=0),(isNaN(s)||isNaN(parseFloat(t.right)))&&(s=r),(isNaN(a)||isNaN(parseFloat(t.top)))&&(a=0),(isNaN(l)||isNaN(parseFloat(t.bottom)))&&(l=i),n=zc(n||0),{width:Math.max(s-o-n[1]-n[3],0),height:Math.max(l-a-n[0]-n[2],0)}}function ih(t,e,n){n=zc(n||0);var r=e.width,i=e.height,o=Xr(t.left,r),a=Xr(t.top,i),s=Xr(t.right,r),l=Xr(t.bottom,i),u=Xr(t.width,r),c=Xr(t.height,i),h=n[2]+n[0],p=n[1]+n[3],f=t.aspect;switch(isNaN(u)&&(u=r-s-p-o),isNaN(c)&&(c=i-l-h-a),null!=f&&(isNaN(u)&&isNaN(c)&&(f>r/i?u=.8*r:c=.8*i),isNaN(u)&&(u=f*c),isNaN(c)&&(c=u/f)),isNaN(o)&&(o=r-s-u-p),isNaN(a)&&(a=i-l-c-h),t.left||t.right){case"center":o=r/2-u/2-n[3];break;case"right":o=r-u-p;break}switch(t.top||t.bottom){case"middle":case"center":a=i/2-c/2-n[0];break;case"bottom":a=i-c-h;break}o=o||0,a=a||0,isNaN(u)&&(u=r-p-o-(s||0)),isNaN(c)&&(c=i-h-a-(l||0));var d=new or(o+n[3],a+n[0],u,c);return d.margin=n,d}function oh(t,e,n,r,i,o){var a,s=!i||!i.hv||i.hv[0],l=!i||!i.hv||i.hv[1],u=i&&i.boundingMode||"all";if(o=o||t,o.x=t.x,o.y=t.y,!s&&!l)return!1;if("raw"===u)a="group"===t.type?new or(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(a=t.getBoundingRect(),t.needLocalTransform()){var c=t.getLocalTransform();a=a.clone(),a.applyTransform(c)}var h=ih(v["defaults"]({width:a.width,height:a.height},e),n,r),p=s?h.x-a.x:0,f=l?h.y-a.y:0;return"raw"===u?(o.x=p,o.y=f):(o.x+=p,o.y+=f),o===t&&t.markRedraw(),!0}function ah(t,e){return null!=t[th[e][0]]||null!=t[th[e][1]]&&null!=t[th[e][2]]}function sh(t){var e=t.layoutMode||t.constructor.layoutMode;return v["isObject"](e)?e:e?{type:e}:null}function lh(t,e,n){var r=n&&n.ignoreSize;!v["isArray"](r)&&(r=[r,r]);var i=a(th[0],0),o=a(th[1],1);function a(n,i){var o={},a=0,u={},c=0,h=2;if(Jc(n,(function(e){u[e]=t[e]})),Jc(n,(function(t){s(e,t)&&(o[t]=u[t]=e[t]),l(o,t)&&a++,l(u,t)&&c++})),r[i])return l(e,n[1])?u[n[2]]=null:l(e,n[2])&&(u[n[1]]=null),u;if(c!==h&&a){if(a>=h)return o;for(var p=0;p=0;a--)o=v["merge"](o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",r=t+"Id";return Xi(this.ecModel,t,{index:this.get(n,!0),id:this.get(r,!0)},e)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0}(),e}(Bu);function fh(t){var e=[];return v["each"](ph.getClassesByMainType(t),(function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])})),e=v["map"](e,(function(t){return ro(t).main})),"dataset"!==t&&v["indexOf"](e,"dataset")<=0&&e.unshift("dataset"),e}lo(ph,Bu),fo(ph),Hu(ph),Gu(ph,fh);var dh=ph,gh="";"undefined"!==typeof navigator&&(gh=navigator.platform||"");var vh="rgba(0, 0, 0, 0.2)",yh={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:vh,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:vh,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:vh,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:vh,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:vh,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:vh,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:gh.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},mh=Object(v["createHashMap"])(["tooltip","label","itemName","itemId","itemGroupId","seriesName"]),bh="original",xh="arrayRows",_h="objectRows",wh="keyedColumns",Sh="typedArray",Oh="unknown",Mh="column",Ah="row",Ch={Must:1,Might:2,Not:3},Ih=Hi();function Th(t){Ih(t).datasetMap=Object(v["createHashMap"])()}function kh(t,e,n){var r={},i=Lh(e);if(!i||!t)return r;var o,a,s=[],l=[],u=e.ecModel,c=Ih(u).datasetMap,h=i.uid+"_"+n.seriesLayoutBy;t=t.slice(),Object(v["each"])(t,(function(e,n){var i=Object(v["isObject"])(e)?e:t[n]={name:e};"ordinal"===i.type&&null==o&&(o=n,a=d(i)),r[i.name]=[]}));var p=c.get(h)||c.set(h,{categoryWayDim:a,valueWayDim:0});function f(t,e,n){for(var r=0;re)return t[r];return t[n-1]}function Wh(t,e,n,r,i,o,a){o=o||t;var s=e(o),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(i))return u[i];var c=null!=a&&r?Gh(r,a):n;if(c=c||n,c&&c.length){var h=c[l];return i&&(u[i]=h),s.paletteIdx=(l+1)%c.length,h}}function Uh(t,e){e(t).paletteIdx=0,e(t).paletteNameMap={}}var Yh,qh,Xh;"undefined"!==typeof console&&console.warn&&console.log;function $h(t){0}function Zh(t){throw new Error(t)}var Kh="\0_ec_inner",Jh=1;var Qh=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.init=function(t,e,n,r,i,o){r=r||{},this.option=null,this._theme=new Bu(r),this._locale=new Bu(i),this._optionManager=o},e.prototype.setOption=function(t,e,n){var r=ip(e);this._optionManager.setOption(t,n,r),this._resetOption(null,r)},e.prototype.resetOption=function(t,e){return this._resetOption(t,ip(e))},e.prototype._resetOption=function(t,e){var n=!1,r=this._optionManager;if(!t||"recreate"===t){var i=r.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(i,e)):Xh(this,i),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=r.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=r.getMediaOption(this);a.length&&Object(v["each"])(a,(function(t){n=!0,this._mergeOption(t,e)}),this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,r=this._componentsMap,i=this._componentsCount,o=[],a=Object(v["createHashMap"])(),s=e&&e.replaceMergeMainTypeMap;function l(e){var o=zh(this,e,xi(t[e])),a=r.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=Mi(a,o,l);zi(u,e,dh),n[e]=null,r.set(e,null),i.set(e,0);var c,h=[],p=[],f=0;Object(v["each"])(u,(function(t,n){var r=t.existing,i=t.newOption;if(i){var o="series"===e,a=dh.getClass(e,t.keyInfo.subType,!o);if(!a)return;if("tooltip"===e){if(c)return void 0;c=!0}if(r&&r.constructor===a)r.name=t.keyInfo.name,r.mergeOption(i,this),r.optionUpdated(i,!1);else{var s=Object(v["extend"])({componentIndex:n},t.keyInfo);r=new a(i,this,this,s),Object(v["extend"])(r,s),t.brandNew&&(r.__requireNewView=!0),r.init(i,this,this),r.optionUpdated(null,!0)}}else r&&(r.mergeOption({},this),r.optionUpdated({},!1));r?(h.push(r.option),p.push(r),f++):(h.push(void 0),p.push(void 0))}),this),n[e]=h,r.set(e,p),i.set(e,f),"series"===e&&Yh(this)}Th(this),Object(v["each"])(t,(function(t,e){null!=t&&(dh.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?Object(v["clone"])(t):Object(v["merge"])(n[e],t,!0))})),s&&s.each((function(t,e){dh.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))})),dh.topologicalTravel(o,dh.getAllClassMainTypes(),l,this),this._seriesIndices||Yh(this)},e.prototype.getOption=function(){var t=Object(v["clone"])(this.option);return Object(v["each"])(t,(function(e,n){if(dh.hasClass(n)){for(var r=xi(e),i=r.length,o=!1,a=i-1;a>=0;a--)r[a]&&!Ri(r[a])?o=!0:(r[a]=null,!o&&i--);r.length=i,t[n]=r}})),delete t[Kh],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var r=n[e||0];if(r)return r;if(null==e)for(var i=0;i=e:"max"===n?t<=e:t===e}function yp(t,e){return t.join(",")===e.join(",")}var mp=fp,bp=v["each"],xp=v["isObject"],_p=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function wp(t){var e=t&&t.itemStyle;if(e)for(var n=0,r=_p.length;n=0;g--){var v=t[g];if(s||(p=v.data.rawIndexOf(v.stackedByDimension,h)),p>=0){var y=v.data.getByRawIndex(v.stackResultDimension,p);if("all"===l||"positive"===l&&y>0||"negative"===l&&y<0||"samesign"===l&&f>=0&&y>0||"samesign"===l&&f<=0&&y<0){f=ei(f,y),d=y;break}}}return r[0]=f,r[1]=d,r}))}))}var Up,Yp,qp,Xp,$p,Zp=function(){function t(t){this.data=t.data||(t.sourceFormat===wh?{}:[]),this.sourceFormat=t.sourceFormat||Oh,this.seriesLayoutBy=t.seriesLayoutBy||Mh,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var n=0;nu&&(u=f)}s[0]=l,s[1]=u}},r=function(){return this._data?this._data.length/this._dimSize:0};function i(t){for(var e=0;e=0&&(s=o.interpolatedValue[l])}return null!=s?s+"":""}))}},t.prototype.getRawValue=function(t,e){return bf(this.getData(e),t)},t.prototype.formatTooltip=function(t,e,n){},t}();function wf(t){var e,n;return v["isObject"](t)?t.type&&(n=t):e=t,{text:e,frag:n}}function Sf(t){return new Of(t)}var Of=function(){function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return t.prototype.perform=function(t){var e,n=this._upstream,r=t&&t.skip;if(this._dirty&&n){var i=this.context;i.data=i.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!r&&(e=this._plan(this.context));var o,a=c(this._modBy),s=this._modDataCount||0,l=c(t&&t.modBy),u=t&&t.modDataCount||0;function c(t){return!(t>=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(r)),this._modBy=l,this._modDataCount=u;var h=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,f=Math.min(null!=h?this._dueIndex+h:1/0,this._dueEnd);if(!r&&(o||p1&&r>0?s:a}};return o;function a(){return e=t?null:oe},gte:function(t,e){return t>=e}},kf=function(){function t(t,e){if(!Object(v["isNumber"])(e)){var n="";0,Zh(n)}this._opFn=Tf[t],this._rvalFloat=pi(e)}return t.prototype.evaluate=function(t){return Object(v["isNumber"])(t)?this._opFn(t,this._rvalFloat):this._opFn(pi(t),this._rvalFloat)},t}(),Df=function(){function t(t,e){var n="desc"===t;this._resultLT=n?1:-1,null==e&&(e=n?"min":"max"),this._incomparable="min"===e?-1/0:1/0}return t.prototype.evaluate=function(t,e){var n=Object(v["isNumber"])(t)?t:pi(t),r=Object(v["isNumber"])(e)?e:pi(e),i=isNaN(n),o=isNaN(r);if(i&&(n=this._incomparable),o&&(r=this._incomparable),i&&o){var a=Object(v["isString"])(t),s=Object(v["isString"])(e);a&&(n=s?t:0),s&&(r=a?e:0)}return nr?-this._resultLT:0},t}(),Lf=function(){function t(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this._rvalFloat=pi(e)}return t.prototype.evaluate=function(t){var e=t===this._rval;if(!e){var n=typeof t;n===this._rvalTypeof||"number"!==n&&"number"!==this._rvalTypeof||(e=pi(t)===this._rvalFloat)}return this._isEQ?e:!e},t}();function jf(t,e){return"eq"===t||"ne"===t?new Lf("eq"===t,e):Object(v["hasOwn"])(Tf,t)?new kf(t,e):null}var Pf=function(){function t(){}return t.prototype.getRawData=function(){throw new Error("not supported")},t.prototype.getRawDataItem=function(t){throw new Error("not supported")},t.prototype.cloneRawData=function(){},t.prototype.getDimensionInfo=function(t){},t.prototype.cloneAllDimensionInfo=function(){},t.prototype.count=function(){},t.prototype.retrieveValue=function(t,e){},t.prototype.retrieveValueFromItem=function(t,e){},t.prototype.convertValue=function(t,e){return Af(t,e)},t}();function Ef(t,e){var n=new Pf,r=t.data,i=n.sourceFormat=t.sourceFormat,o=t.startIndex,a="";t.seriesLayoutBy!==Mh&&Zh(a);var s=[],l={},u=t.dimensionsDefine;if(u)Object(v["each"])(u,(function(t,e){var n=t.name,r={index:e,name:n,displayName:t.displayName};if(s.push(r),null!=n){var i="";Object(v["hasOwn"])(l,n)&&Zh(i),l[n]=r}}));else for(var c=0;c65535?qf:Xf}function Qf(){return[1/0,-1/0]}function td(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function ed(t,e,n,r,i){var o=Kf[n||"float"];if(i){var a=t[e],s=a&&a.length;if(s!==r){for(var l=new o(r),u=0;ug[1]&&(g[1]=d)}return this._rawCount=this._count=s,{start:a,end:s}},t.prototype._initDataFromProvider=function(t,e,n){for(var r=this._provider,i=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=Object(v["map"])(o,(function(t){return t.property})),u=0;uy[1]&&(y[1]=g)}}!r.persistent&&r.clean&&r.clean(),this._rawCount=this._count=e,this._extent=[]},t.prototype.count=function(){return this._count},t.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;i=o-1}}return-1},t.prototype.indicesOfNearest=function(t,e,n){var r=this._chunks,i=r[t],o=[];if(!i)return o;null==n&&(n=1/0);for(var a=1/0,s=-1,l=0,u=0,c=this.count();u=0&&s<0)&&(a=f,s=p,l=0),p===s&&(o[l++]=u))}return o.length=l,o},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,r=this._count;if(n===Array){t=new n(r);for(var i=0;i=c&&m<=h||isNaN(m))&&(s[l++]=d),d++}f=!0}else if(2===i){g=p[r[0]];var b=p[r[1]],x=t[r[1]][0],_=t[r[1]][1];for(y=0;y=c&&m<=h||isNaN(m))&&(w>=x&&w<=_||isNaN(w))&&(s[l++]=d),d++}f=!0}}if(!f)if(1===i)for(y=0;y=c&&m<=h||isNaN(m))&&(s[l++]=S)}else for(y=0;yt[A][1])&&(O=!1)}O&&(s[l++]=e.getRawIndex(y))}return lv[1]&&(v[1]=g)}}}},t.prototype.lttbDownSample=function(t,e){var n,r,i,o=this.clone([t],!0),a=o._chunks,s=a[t],l=this.count(),u=0,c=Math.floor(1/e),h=this.getRawIndex(0),p=new(Jf(this._rawCount))(Math.min(2*(Math.ceil(l/c)+2),l));p[u++]=h;for(var f=1;fn&&(n=r,i=b))}A>0&&Au-f&&(s=u-f,a.length=s);for(var d=0;dc[1]&&(c[1]=v),h[p++]=y}return i._count=p,i._indices=h,i._updateGetRawIdx(),i},t.prototype.each=function(t,e){if(this._count)for(var n=t.length,r=this._chunks,i=0,o=this.count();is&&(s=c)}return r=[a,s],this._extent[t]=r,r},t.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var n=[],r=this._chunks,i=0;i=0?this._indices[t]:-1},t.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},t.internalField=function(){function t(t,e,n,r){return Af(t[r],this._dimensions[r])}Uf={arrayRows:t,objectRows:function(t,e,n,r){return Af(t[e],this._dimensions[r])},keyedColumns:t,original:function(t,e,n,r){var i=t&&(null==t.value?t:t.value);return Af(i instanceof Array?i[r]:i,this._dimensions[r])},typedArray:function(t,e,n,r){return t[r]}}}(),t}(),rd=nd,id=function(){function t(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return t.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},t.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,r=this._getUpstreamSourceManagers(),i=!!r.length;if(ad(n)){var o=n,a=void 0,s=void 0,l=void 0;if(i){var u=r[0];u.prepareSource(),l=u.getSource(),a=l.data,s=l.sourceFormat,e=[u._getVersionSign()]}else a=o.get("data",!0),s=Object(v["isTypedArray"])(a)?Sh:bh,e=[];var c=this._getSourceMetaRawOption()||{},h=l&&l.metaRawOption||{},p=Object(v["retrieve2"])(c.seriesLayoutBy,h.seriesLayoutBy)||null,f=Object(v["retrieve2"])(c.sourceHeader,h.sourceHeader),d=Object(v["retrieve2"])(c.dimensions,h.dimensions),g=p!==h.seriesLayoutBy||!!f!==!!h.sourceHeader||d;t=g?[Jp(a,{seriesLayoutBy:p,sourceHeader:f,dimensions:d},s)]:[]}else{var y=n;if(i){var m=this._applyTransform(r);t=m.sourceList,e=m.upstreamSignList}else{var b=y.get("source",!0);t=[Jp(b,this._getSourceMetaRawOption(),null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,r=n.get("transform",!0),i=n.get("fromTransformResult",!0);if(null!=i){var o="";1!==t.length&&sd(o)}var a=[],s=[];return Object(v["each"])(t,(function(t){t.prepareSource();var e=t.getSource(i||0),n="";null==i||e||sd(n),a.push(e),s.push(t._getVersionSign())})),r?e=Hf(r,a,{datasetIndex:n.componentIndex}):null!=i&&(e=[tf(a[0])]),{sourceList:e,upstreamSignList:s}},t.prototype._isDirty=function(){if(this._dirty)return!0;for(var t=this._getUpstreamSourceManagers(),e=0;e1||n>0&&!t.noHeader;return Object(v["each"])(t.blocks,(function(t){var n=gd(t);n>=e&&(e=n+ +(r&&(!n||fd(t)&&!t.noHeader)))})),e}return 0}function vd(t,e,n,r){var i=e.noHeader,o=bd(gd(e)),a=[],s=e.blocks||[];Object(v["assert"])(!s||Object(v["isArray"])(s)),s=s||[];var l=t.orderMode;if(e.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(Object(v["hasOwn"])(u,l)){var c=new Df(u[l],null);s.sort((function(t,e){return c.evaluate(t.sortParam,e.sortParam)}))}else"seriesDesc"===l&&s.reverse()}Object(v["each"])(s,(function(n,i){var s=e.valueFormatter,l=dd(n)(s?Object(v["extend"])(Object(v["extend"])({},t),{valueFormatter:s}):t,n,i>0?o.html:0,r);null!=l&&a.push(l)}));var h="richText"===t.renderMode?a.join(o.richText):xd(a.join(""),i?n:o.html);if(i)return h;var p=Hc(e.header,"ordinal",t.useUTC),f=ud(r,t.renderMode).nameStyle;return"richText"===t.renderMode?Sd(t,p,f)+o.richText+h:xd('
'+Fc(p)+"
"+h,n)}function yd(t,e,n,r){var i=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=t.useUTC,c=e.valueFormatter||t.valueFormatter||function(t){return t=Object(v["isArray"])(t)?t:[t],Object(v["map"])(t,(function(t,e){return Hc(t,Object(v["isArray"])(f)?f[e]:f,u)}))};if(!o||!a){var h=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",i),p=o?"":Hc(l,"ordinal",u),f=e.valueType,d=a?[]:c(e.value),g=!s||!o,y=!s&&o,m=ud(r,i),b=m.nameStyle,x=m.valueStyle;return"richText"===i?(s?"":h)+(o?"":Sd(t,p,b))+(a?"":Od(t,d,g,y,x)):xd((s?"":h)+(o?"":_d(p,!s,b))+(a?"":wd(d,g,y,x)),n)}}function md(t,e,n,r,i,o){if(t){var a=dd(t),s={useUTC:i,renderMode:n,orderMode:r,markupStyleCreator:e,valueFormatter:t.valueFormatter};return a(s,t,0,o)}}function bd(t){return{html:cd[t],richText:hd[t]}}function xd(t,e){var n='
',r="margin: "+e+"px 0 0";return'
'+t+n+"
"}function _d(t,e,n){var r=e?"margin-left:2px":"";return''+Fc(t)+""}function wd(t,e,n,r){var i=n?"10px":"20px",o=e?"float:right;margin-left:"+i:"";return t=Object(v["isArray"])(t)?t:[t],''+Object(v["map"])(t,(function(t){return Fc(t)})).join("  ")+""}function Sd(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function Od(t,e,n,r,i){var o=[i],a=r?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(Object(v["isArray"])(e)?e.join(" "):e,o)}function Md(t,e){var n=t.getData().getItemVisual(e,"style"),r=n[t.visualDrawType];return Zc(r)}function Ad(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var Cd=function(){function t(){this.richTextStyles={},this._nextStyleNameId=di()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var r="richText"===n?this._generateStyleName():null,i=qc({color:e,type:t,renderMode:n,markerId:r});return Object(v["isString"])(i)?i:(this.richTextStyles[r]=i.style,i.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};Object(v["isArray"])(e)?Object(v["each"])(e,(function(t){return Object(v["extend"])(n,t)})):Object(v["extend"])(n,e);var r=this._generateStyleName();return this.richTextStyles[r]=n,"{"+r+"|"+t+"}"},t}();function Id(t){var e,n,r,i,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),c=u.length,h=o.getRawValue(a),p=Object(v["isArray"])(h),f=Md(o,a);if(c>1||p&&!c){var d=Td(h,o,a,u,f);e=d.inlineValues,n=d.inlineValueTypes,r=d.blocks,i=d.inlineValues[0]}else if(c){var g=l.getDimensionInfo(u[0]);i=e=bf(l,a,u[0]),n=g.type}else i=e=p?h[0]:h;var y=Ei(o),m=y&&o.name||"",b=l.getName(a),x=s?m:b;return pd("section",{header:m,noHeader:s||!y,sortParam:i,blocks:[pd("nameValue",{markerType:"item",markerColor:f,name:x,noName:!Object(v["trim"])(x),value:e,valueType:n})].concat(r||[])})}function Td(t,e,n,r,i){var o=e.getData(),a=Object(v["reduce"])(t,(function(t,e,n){var r=o.getDimensionInfo(n);return t||r&&!1!==r.tooltip&&null!=r.displayName}),!1),s=[],l=[],u=[];function c(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(pd("nameValue",{markerType:"subItem",markerColor:i,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return r.length?Object(v["each"])(r,(function(t){c(bf(o,n,t),t)})):Object(v["each"])(t,c),{inlineValues:s,inlineValueTypes:l,blocks:u}}var kd=Hi();function Dd(t,e){return t.getName(e)||t.getId(e)}var Ld="__universalTransitionEnabled",jd=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return d(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=Sf({count:Rd,reset:Nd}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n);var r=kd(this).sourceManager=new id(this);r.prepareSource();var i=this.getInitialData(t,n);Bd(i,this),this.dataTask.context.data=i,kd(this).dataBeforeProcessed=i,Pd(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=sh(this),r=n?uh(t):{},i=this.subType;dh.hasClass(i)&&(i+="Series"),v["merge"](t,e.getTheme().get(this.subType)),v["merge"](t,this.getDefaultOption()),_i(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&lh(t,r,n)},e.prototype.mergeOption=function(t,e){t=v["merge"](this.option,t,!0),this.fillDataTextStyle(t.data);var n=sh(this);n&&lh(this.option,t,n);var r=kd(this).sourceManager;r.dirty(),r.prepareSource();var i=this.getInitialData(t,e);Bd(i,this),this.dataTask.dirty(),this.dataTask.context.data=i,kd(this).dataBeforeProcessed=i,Pd(this),this._initSelectedMapFromData(i)},e.prototype.fillDataTextStyle=function(t){if(t&&!v["isTypedArray"](t))for(var e=["show"],n=0;nthis.getShallow("animationThreshold")&&(e=!1),!!e},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var r=this.ecModel,i=Fh.prototype.getColorFromPalette.call(this,t,e,n);return i||(i=r.getColorFromPalette(t,e,n)),i},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var r=this.option.selectedMode,i=this.getData(e);if("series"===r||"all"===n)return this.option.selectedMap={},void(this._selectedDataIndicesMap={});for(var o=0;o=0&&n.push(i)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;if(!n)return!1;var r=this.getData(e);return("all"===n||n[Dd(r,t)])&&!r.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this[Ld])return!0;var t=this.option.universalTransition;return!!t&&(!0===t||t&&t.enabled)},e.prototype._innerSelect=function(t,e){var n,r,i=this.option,o=i.selectedMode,a=e.length;if(o&&a)if("series"===o)i.selectedMap="all";else if("multiple"===o){v["isObject"](i.selectedMap)||(i.selectedMap={});for(var s=i.selectedMap,l=0;l0&&this._innerSelect(t,e)}},e.registerClass=function(t){return dh.registerClass(t)},e.protoInitialize=function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"}(),e}(dh);function Pd(t){var e=t.name;Ei(t)||(t.name=Ed(t)||e)}function Ed(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),r=[];return v["each"](n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&r.push(n.displayName)})),r.join(" ")}function Rd(t){return t.model.getRawData().count()}function Nd(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),zd}function zd(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Bd(t,e){v["each"](v["concatArray"](t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function(n){t.wrapMethod(n,v["curry"](Vd,e))}))}function Vd(t,e){var n=Fd(t);return n&&n.setOutputEnd((e||this).count()),e}function Fd(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var r=n.currentTask;if(r){var i=r.agentStubMap;i&&(r=i.get(t.uid))}return r}}v["mixin"](jd,_f),v["mixin"](jd,Fh),lo(jd,dh);var Hd=jd,Gd=function(){function t(){this.group=new Lr,this.uid=Fu("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,r){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,r){},t.prototype.updateLayout=function(t,e,n,r){},t.prototype.updateVisual=function(t,e,n,r){},t.prototype.toggleBlurSeries=function(t,e,n){},t.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},t}();ao(Gd),fo(Gd);var Wd=Gd;function Ud(){var t=Hi();return function(e){var n=t(e),r=e.pipelineContext,i=!!n.large,o=!!n.progressiveRender,a=n.large=!(!r||!r.large),s=n.progressiveRender=!(!r||!r.progressiveRender);return!(i===a&&o===s)&&"reset"}}var Yd=Ta.CMD,qd=[[],[],[]],Xd=Math.sqrt,$d=Math.atan2;function Zd(t,e){if(e){var n,r,i,o,a,s,l=t.data,u=t.len(),c=Yd.M,h=Yd.C,p=Yd.L,f=Yd.R,d=Yd.A,g=Yd.Q;for(i=0,o=0;i1&&(a*=Kd(d),s*=Kd(d));var g=(i===o?-1:1)*Kd((a*a*(s*s)-a*a*(f*f)-s*s*(p*p))/(a*a*(f*f)+s*s*(p*p)))||0,v=g*a*f/s,y=g*-s*p/a,m=(t+n)/2+Qd(h)*v-Jd(h)*y,b=(e+r)/2+Jd(h)*v+Qd(h)*y,x=rg([1,0],[(p-v)/a,(f-y)/s]),_=[(p-v)/a,(f-y)/s],w=[(-1*p-v)/a,(-1*f-y)/s],S=rg(_,w);if(ng(_,w)<=-1&&(S=tg),ng(_,w)>=1&&(S=0),S<0){var O=Math.round(S/tg*1e6)/1e6;S=2*tg+O%2*tg}c.addData(u,m,b,a,s,x,S,h,o)}var og=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,ag=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function sg(t){var e=new Ta;if(!t)return e;var n,r=0,i=0,o=r,a=i,s=Ta.CMD,l=t.match(og);if(!l)return e;for(var u=0;uk*k+D*D&&(O=A,M=C),{cx:O,cy:M,x0:-c,y0:-h,x1:O*(i/_-1),y1:M*(i/_-1)}}function Pg(t){var e;if(Object(v["isArray"])(t)){var n=t.length;if(!n)return t;e=1===n?[t[0],t[0],0,0]:2===n?[t[0],t[0],t[1],t[1]]:3===n?t.concat(t[2]):t}else e=[t,t,t,t];return e}function Eg(t,e){var n,r=Tg(e.r,0),i=Tg(e.r0||0,0),o=r>0,a=i>0;if(o||a){if(o||(r=i,i=0),i>r){var s=r;r=i,i=s}var l=e.startAngle,u=e.endAngle;if(!isNaN(l)&&!isNaN(u)){var c=e.cx,h=e.cy,p=!!e.clockwise,f=Cg(u-l),d=f>wg&&f%wg;if(d>Dg&&(f=d),r>Dg)if(f>wg-Dg)t.moveTo(c+r*Og(l),h+r*Sg(l)),t.arc(c,h,r,l,u,!p),i>Dg&&(t.moveTo(c+i*Og(u),h+i*Sg(u)),t.arc(c,h,i,u,l,p));else{var g=void 0,v=void 0,y=void 0,m=void 0,b=void 0,x=void 0,_=void 0,w=void 0,S=void 0,O=void 0,M=void 0,A=void 0,C=void 0,I=void 0,T=void 0,k=void 0,D=r*Og(l),L=r*Sg(l),j=i*Og(u),P=i*Sg(u),E=f>Dg;if(E){var R=e.cornerRadius;R&&(n=Pg(R),g=n[0],v=n[1],y=n[2],m=n[3]);var N=Cg(r-i)/2;if(b=kg(N,y),x=kg(N,m),_=kg(N,g),w=kg(N,v),M=S=Tg(b,x),A=O=Tg(_,w),(S>Dg||O>Dg)&&(C=r*Og(u),I=r*Sg(u),T=i*Og(l),k=i*Sg(l),f<_g)){var z=Lg(D,L,T,k,C,I,j,P);if(z){var B=D-z[0],V=L-z[1],F=C-z[0],H=I-z[1],G=1/Sg(Mg((B*F+V*H)/(Ig(B*B+V*V)*Ig(F*F+H*H)))/2),W=Ig(z[0]*z[0]+z[1]*z[1]);M=kg(S,(r-W)/(G+1)),A=kg(O,(i-W)/(G-1))}}}if(E)if(M>Dg){var U=kg(y,M),Y=kg(m,M),q=jg(T,k,D,L,r,U,p),X=jg(C,I,j,P,r,Y,p);t.moveTo(c+q.cx+q.x0,h+q.cy+q.y0),M0&&t.arc(c+q.cx,h+q.cy,U,Ag(q.y0,q.x0),Ag(q.y1,q.x1),!p),t.arc(c,h,r,Ag(q.cy+q.y1,q.cx+q.x1),Ag(X.cy+X.y1,X.cx+X.x1),!p),Y>0&&t.arc(c+X.cx,h+X.cy,Y,Ag(X.y1,X.x1),Ag(X.y0,X.x0),!p))}else t.moveTo(c+D,h+L),t.arc(c,h,r,l,u,!p);else t.moveTo(c+D,h+L);if(i>Dg&&E)if(A>Dg){U=kg(g,A),Y=kg(v,A),q=jg(j,P,C,I,i,-Y,p),X=jg(D,L,T,k,i,-U,p);t.lineTo(c+q.cx+q.x0,h+q.cy+q.y0),A0&&t.arc(c+q.cx,h+q.cy,Y,Ag(q.y0,q.x0),Ag(q.y1,q.x1),!p),t.arc(c,h,i,Ag(q.cy+q.y1,q.cx+q.x1),Ag(X.cy+X.y1,X.cx+X.x1),p),U>0&&t.arc(c+X.cx,h+X.cy,U,Ag(X.y1,X.x1),Ag(X.y0,X.x0),!p))}else t.lineTo(c+j,h+P),t.arc(c,h,i,u,l,p);else t.lineTo(c+j,h+P)}else t.moveTo(c,h);t.closePath()}}}var Rg=function(){function t(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.cornerRadius=0}return t}(),Ng=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.getDefaultShape=function(){return new Rg},e.prototype.buildPath=function(t,e){Eg(t,e)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e}(es);Ng.prototype.type="sector";var zg=Ng,Bg=function(){function t(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return t}(),Vg=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.getDefaultShape=function(){return new Bg},e.prototype.buildPath=function(t,e){var n=e.cx,r=e.cy,i=2*Math.PI;t.moveTo(n+e.r,r),t.arc(n,r,e.r,0,i,!1),t.moveTo(n+e.r0,r),t.arc(n,r,e.r0,0,i,!0)},e}(es);Vg.prototype.type="ring";var Fg=Vg;function Hg(t,e,n,r){var i,o,a,s,l=[],u=[],c=[],h=[];if(r){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,f=t.length;p=2){if(r){var o=Hg(i,r,n,e.smoothConstraint);t.moveTo(i[0][0],i[0][1]);for(var a=i.length,s=0;s<(n?a:a-1);s++){var l=o[2*s],u=o[2*s+1],c=i[(s+1)%a];t.bezierCurveTo(l[0],l[1],u[0],u[1],c[0],c[1])}}else{t.moveTo(i[0][0],i[0][1]);s=1;for(var h=i.length;syv[1]){if(a=!1,i)return a;var u=Math.abs(yv[0]-vv[1]),c=Math.abs(vv[0]-yv[1]);Math.min(u,c)>r.len()&&(uMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function Wv(t){return!t.isGroup}function Uv(t){return null!=t.shape}function Yv(t,e,n){if(t&&e){var r=i(t);e.traverse((function(t){if(Wv(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),nu(t,i,n,Ns(t).dataIndex)}}}))}function i(t){var e={};return t.traverse((function(t){Wv(t)&&t.anid&&(e[t.anid]=t)})),e}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return Uv(t)&&(e.shape=Object(v["extend"])({},t.shape)),e}}function qv(t,e){return Object(v["map"])(t,(function(t){var n=t[0];n=Mv(n,e.x),n=Av(n,e.x+e.width);var r=t[1];return r=Mv(r,e.y),r=Av(r,e.y+e.height),[n,r]}))}function Xv(t,e){var n=Mv(t.x,e.x),r=Av(t.x+t.width,e.x+e.width),i=Mv(t.y,e.y),o=Av(t.y+t.height,e.y+e.height);if(r>=n&&o>=i)return{x:n,y:i,width:r-n,height:o-i}}function $v(t,e,n){var r=Object(v["extend"])({rectHover:!0},e),i=r.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(i.image=t.slice(8),Object(v["defaults"])(i,n),new us(r)):jv(t.replace("path://",""),r,n,"center")}function Zv(t,e,n,r,i){for(var o=0,a=i[i.length-1];o1)return!1;var v=Jv(f,d,c,h)/p;return!(v<0||v>1)}function Jv(t,e,n,r){return t*r-n*e}function Qv(t){return t<=1e-6&&t>=-1e-6}function ty(t){var e=t.itemTooltipOption,n=t.componentModel,r=t.itemName,i=Object(v["isString"])(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:r,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&Object(v["each"])(Object(v["keys"])(l),(function(t){Object(v["hasOwn"])(s,t)||(s[t]=l[t],s.$vars.push(t))}));var u=Ns(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:r,option:Object(v["defaults"])({content:r,formatterParams:s},i)}}function ey(t,e){var n;t.isGroup&&(n=e(t)),n||t.traverse(e)}function ny(t,e){if(t)if(Object(v["isArray"])(t))for(var n=0;n=0?h():c=setTimeout(h,-i),l=r};return p.clear=function(){c&&(clearTimeout(c),c=null)},p.debounceNextCall=function(t){s=t},p}function vy(t,e,n,r){var i=t[e];if(i){var o=i[py]||i,a=i[dy],s=i[fy];if(s!==n||a!==r){if(null==n||!r)return t[e]=o;i=t[e]=gy(o,n,"debounce"===r),i[py]=o,i[dy]=r,i[fy]=n}return i}}function yy(t,e){var n=t[e];n&&n[py]&&(n.clear&&n.clear(),t[e]=n[py])}var my=Hi(),by={itemStyle:go(Eu,!0),lineStyle:go(Lu,!0)},xy={lineStyle:"stroke",itemStyle:"fill"};function _y(t,e){var n=t.visualStyleMapper||by[e];return n||(console.warn("Unkown style type '"+e+"'."),by.itemStyle)}function wy(t,e){var n=t.visualDrawType||xy[e];return n||(console.warn("Unkown style type '"+e+"'."),"fill")}var Sy={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),r=t.visualStyleAccessPath||"itemStyle",i=t.getModel(r),o=_y(t,r),a=o(i),s=i.getShallow("decal");s&&(n.setVisual("decal",s),s.dirty=!0);var l=wy(t,r),u=a[l],c=Object(v["isFunction"])(u)?u:null,h="auto"===a.fill||"auto"===a.stroke;if(!a[l]||c||h){var p=t.getColorFromPalette(t.name,null,e.getSeriesCount());a[l]||(a[l]=p,n.setVisual("colorFromPalette",!0)),a.fill="auto"===a.fill||Object(v["isFunction"])(a.fill)?p:a.fill,a.stroke="auto"===a.stroke||Object(v["isFunction"])(a.stroke)?p:a.stroke}if(n.setVisual("style",a),n.setVisual("drawType",l),!e.isSeriesFiltered(t)&&c)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var r=t.getDataParams(n),i=Object(v["extend"])({},a);i[l]=c(r),e.setItemVisual(n,"style",i)}}}},Oy=new Bu,My={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData&&!e.isSeriesFiltered(t)){var n=t.getData(),r=t.visualStyleAccessPath||"itemStyle",i=_y(t,r),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[r]){Oy.option=n[r];var a=i(Oy),s=t.ensureUniqueItemVisual(e,"style");Object(v["extend"])(s,a),Oy.option.decal&&(t.setItemVisual(e,"decal",Oy.option.decal),Oy.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},Ay={performRawSeries:!0,overallReset:function(t){var e=Object(v["createHashMap"])();t.eachSeries((function(t){var n=t.getColorBy();if(!t.isColorBySeries()){var r=t.type+"-"+n,i=e.get(r);i||(i={},e.set(r,i)),my(t).scope=i}})),t.eachSeries((function(e){if(!e.isColorBySeries()&&!t.isSeriesFiltered(e)){var n=e.getRawData(),r={},i=e.getData(),o=my(e).scope,a=e.visualStyleAccessPath||"itemStyle",s=wy(e,a);i.each((function(t){var e=i.getRawIndex(t);r[e]=t})),n.each((function(t){var a=r[t],l=i.getItemVisual(a,"colorFromPalette");if(l){var u=i.ensureUniqueItemVisual(a,"style"),c=n.getName(t)||t+"",h=n.count();u[s]=e.getColorFromPalette(c,o,h)}}))}}))}},Cy=Math.PI;function Iy(t,e){e=e||{},v["defaults"](e,{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new Lr,r=new ms({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(r);var i,o=new Rs({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new ms({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&(i=new sv({shape:{startAngle:-Cy/2,endAngle:-Cy/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001}),i.animateShape(!0).when(1e3,{endAngle:3*Cy/2}).start("circularInOut"),i.animateShape(!0).when(1e3,{startAngle:3*Cy/2}).delay(300).start("circularInOut"),n.add(i)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&i.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),r.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n}var Ty=function(){function t(t,e,n,r){this._stageTaskMap=Object(v["createHashMap"])(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),r=this._visualHandlers=r.slice(),this._allHandlers=n.concat(r)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each((function(t){var e=t.overallTask;e&&e.dirty()}))},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),r=n.context,i=!e&&n.progressiveEnabled&&(!r||r.progressiveRender)&&t.__idxInPipeline>n.blockIndex,o=i?n.step:null,a=r&&r.modDataCount,s=null!=a?Math.ceil(a/o):null;return{step:o,modBy:s,modDataCount:a}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),r=t.getData(),i=r.count(),o=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,a=t.get("large")&&i>=t.get("largeThreshold"),s="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:o,modDataCount:s,large:a}},t.prototype.restorePipelines=function(t){var e=this,n=e._pipelineMap=Object(v["createHashMap"])();t.eachSeries((function(t){var r=t.getProgressive(),i=t.uid;n.set(i,{id:i,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:r&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(r||700),count:0}),e._pipe(t,t.dataTask)}))},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;Object(v["each"])(this._allHandlers,(function(r){var i=t.get(r.uid)||t.set(r.uid,{}),o="";Object(v["assert"])(!(r.reset&&r.overallReset),o),r.reset&&this._createSeriesStageTask(r,i,e,n),r.overallReset&&this._createOverallStageTask(r,i,e,n)}),this)},t.prototype.prepareView=function(t,e,n,r){var i=t.renderTask,o=i.context;o.model=e,o.ecModel=n,o.api=r,i.__block=!t.incrementalPrepareRender,this._pipe(e,i)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,r){r=r||{};var i=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}Object(v["each"])(t,(function(t,s){if(!r.visualType||r.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,c=l.overallTask;if(c){var h,p=c.agentStubMap;p.each((function(t){a(r,t)&&(t.dirty(),h=!0)})),h&&c.dirty(),o.updatePayload(c,n);var f=o.getPerformArgs(c,r.block);p.each((function(t){t.perform(f)})),c.perform(f)&&(i=!0)}else u&&u.each((function(s,l){a(r,s)&&s.dirty();var u=o.getPerformArgs(s,r.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(i=!0)}))}})),this.unfinished=i||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e=t.dataTask.perform()||e})),this.unfinished=e||this.unfinished},t.prototype.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)}))},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,r){var i=this,o=e.seriesTaskMap,a=e.seriesTaskMap=Object(v["createHashMap"])(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Sf({plan:Py,reset:Ey,count:zy}));l.context={model:e,ecModel:n,api:r,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:i},i._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,r).each(u)},t.prototype._createOverallStageTask=function(t,e,n,r){var i=this,o=e.overallTask=e.overallTask||Sf({reset:ky});o.context={ecModel:n,api:r,overallReset:t.overallReset,scheduler:i};var a=o.agentStubMap,s=o.agentStubMap=Object(v["createHashMap"])(),l=t.seriesType,u=t.getTargetSeries,c=!0,h=!1,p="";function f(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(h=!0,Sf({reset:Dy,onDirty:jy})));n.context={model:t,overallProgress:c},n.agent=o,n.__block=c,i._pipe(t,n)}Object(v["assert"])(!t.createOnAllSeries,p),l?n.eachRawSeriesByType(l,f):u?u(n,r).each(f):(c=!1,Object(v["each"])(n.getSeries(),f)),h&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,r=this._pipelineMap.get(n);!r.head&&(r.head=e),r.tail&&r.tail.pipe(e),r.tail=e,e.__idxInPipeline=r.count++,e.__pipeline=r},t.wrapStageHandler=function(t,e){return Object(v["isFunction"])(t)&&(t={overallReset:t,seriesType:By(t)}),t.uid=Fu("stageHandler"),e&&(t.visualType=e),t},t}();function ky(t){t.overallReset(t.ecModel,t.api,t.payload)}function Dy(t){return t.overallProgress&&Ly}function Ly(){this.agent.dirty(),this.getDownstream().dirty()}function jy(){this.agent&&this.agent.dirty()}function Py(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function Ey(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=xi(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?Object(v["map"])(e,(function(t,e){return Ny(e)})):Ry}var Ry=Ny(0);function Ny(t){return function(e,n){var r=n.data,i=n.resetDefines[t];if(i&&i.dataEach)for(var o=e.start;o0&&c===i.length-u.length){var h=i.slice(0,c);"data"!==h&&(e.mainType=h,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(i)&&(n[i]=t,s=!0),s||(r[i]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:r}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var r=n.targetEl,i=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,i,"name")&&u(l,i,"dataIndex")&&u(l,i,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,r,i));function u(t,e,n,r){return null==t[n]||e[r||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),tm=["symbol","symbolSize","symbolRotate","symbolOffset"],em=tm.concat(["symbolKeepAspect"]),nm={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){for(var r={},i={},o=!1,a=0;a=0&&Cm(l)?l:.5;var u=t.createRadialGradient(a,s,0,a,s,l);return u}function km(t,e,n){for(var r="radial"===e.type?Tm(t,e,n):Im(t,e,n),i=e.colorStops,o=0;o0?"dashed"===t?[4*e,2*e]:"dotted"===t?[e]:Object(v["isNumber"])(t)?[t]:Object(v["isArray"])(t)?t:null:null}function Em(t){var e=t.style,n=e.lineDash&&e.lineWidth>0&&Pm(e.lineDash,e.lineWidth),r=e.lineDashOffset;if(n){var i=e.strokeNoScale&&t.getLineScale?t.getLineScale():1;i&&1!==i&&(n=Object(v["map"])(n,(function(t){return t/i})),r/=i)}return[n,r]}var Rm=new Ta(!0);function Nm(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function zm(t){return"string"===typeof t&&"none"!==t}function Bm(t){var e=t.fill;return null!=e&&"none"!==e}function Vm(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function Fm(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function Hm(t,e,n){var r=_o(e.image,e.__image,n);if(So(r)){var i=t.createPattern(r,e.repeat||"repeat");if("function"===typeof DOMMatrix&&i&&i.setTransform){var o=new DOMMatrix;o.translateSelf(e.x||0,e.y||0),o.rotateSelf(0,0,(e.rotation||0)*v["RADIAN_TO_DEGREE"]),o.scaleSelf(e.scaleX||1,e.scaleY||1),i.setTransform(o)}return i}}function Gm(t,e,n,r){var i,o=Nm(n),a=Bm(n),s=n.strokePercent,l=s<1,u=!e.path;e.silent&&!l||!u||e.createPathProxy();var c=e.path||Rm,h=e.__dirty;if(!r){var p=n.fill,f=n.stroke,d=a&&!!p.colorStops,g=o&&!!f.colorStops,v=a&&!!p.image,y=o&&!!f.image,m=void 0,b=void 0,x=void 0,_=void 0,w=void 0;(d||g)&&(w=e.getBoundingRect()),d&&(m=h?km(t,p,w):e.__canvasFillGradient,e.__canvasFillGradient=m),g&&(b=h?km(t,f,w):e.__canvasStrokeGradient,e.__canvasStrokeGradient=b),v&&(x=h||!e.__canvasFillPattern?Hm(t,p,e):e.__canvasFillPattern,e.__canvasFillPattern=x),y&&(_=h||!e.__canvasStrokePattern?Hm(t,f,e):e.__canvasStrokePattern,e.__canvasStrokePattern=x),d?t.fillStyle=m:v&&(x?t.fillStyle=x:a=!1),g?t.strokeStyle=b:y&&(_?t.strokeStyle=_:o=!1)}var S,O,M=e.getGlobalScale();c.setScale(M[0],M[1],e.segmentIgnoreThreshold),t.setLineDash&&n.lineDash&&(i=Em(e),S=i[0],O=i[1]);var A=!0;(u||h&Ft)&&(c.setDPR(t.dpr),l?c.setContext(null):(c.setContext(t),A=!1),c.reset(),e.buildPath(c,e.shape,r),c.toStatic(),e.pathUpdated()),A&&c.rebuildPath(t,l?s:1),S&&(t.setLineDash(S),t.lineDashOffset=O),r||(n.strokeFirst?(o&&Fm(t,n),a&&Vm(t,n)):(a&&Vm(t,n),o&&Fm(t,n))),S&&t.setLineDash([])}function Wm(t,e,n){var r=e.__image=_o(n.image,e.__image,e,e.onload);if(r&&So(r)){var i=n.x||0,o=n.y||0,a=e.getWidth(),s=e.getHeight(),l=r.width/r.height;if(null==a&&null!=s?a=s*l:null==s&&null!=a?s=a/l:null==a&&null==s&&(a=r.width,s=r.height),n.sWidth&&n.sHeight){var u=n.sx||0,c=n.sy||0;t.drawImage(r,u,c,n.sWidth,n.sHeight,i,o,a,s)}else if(n.sx&&n.sy){u=n.sx,c=n.sy;var h=a-u,p=s-c;t.drawImage(r,u,c,h,p,i,o,a,s)}else t.drawImage(r,i,o,a,s)}}function Um(t,e,n){var r,i=n.text;if(null!=i&&(i+=""),i){t.font=n.font||sr["a"],t.textAlign=n.textAlign,t.textBaseline=n.textBaseline;var o=void 0,a=void 0;t.setLineDash&&n.lineDash&&(r=Em(e),o=r[0],a=r[1]),o&&(t.setLineDash(o),t.lineDashOffset=a),n.strokeFirst?(Nm(n)&&t.strokeText(i,n.x,n.y),Bm(n)&&t.fillText(i,n.x,n.y)):(Bm(n)&&t.fillText(i,n.x,n.y),Nm(n)&&t.strokeText(i,n.x,n.y)),o&&t.setLineDash([])}}var Ym=["shadowBlur","shadowOffsetX","shadowOffsetY"],qm=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function Xm(t,e,n,r,i){var o=!1;if(!r&&(n=n||{},e===n))return!1;if(r||e.opacity!==n.opacity){ob(t,i),o=!0;var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?Vo.opacity:a}(r||e.blend!==n.blend)&&(o||(ob(t,i),o=!0),t.globalCompositeOperation=e.blend||Vo.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,e,n){if(!this[Ub])if(this._disposed)Mx(this.id);else{var r,i,o;if(Object(v["isObject"])(e)&&(n=e.lazyUpdate,r=e.silent,i=e.replaceMerge,o=e.transition,e=e.notMerge),this[Ub]=!0,!this._model||e){var a=new mp(this._api),s=this._theme,l=this._model=new op;l.scheduler=this._scheduler,l.ssr=this._ssr,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:i},Tx);var u={seriesTransition:o,optionChanged:!0};if(n)this[Yb]={silent:r,updateParams:u},this[Ub]=!1,this.getZr().wakeUp();else{try{nx(this),ox.update.call(this,null,u)}catch(c){throw this[Yb]=null,this[Ub]=!1,c}this._ssr||this._zr.flush(),this[Yb]=null,this[Ub]=!1,ux.call(this,r),cx.call(this,r)}}},e.prototype.setTheme=function(){$h("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Mb&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var e=this._zr.painter;return e.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var e=this._zr.painter;return e.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){if(g["a"].svgSupported){var t=this._zr,e=t.storage.getDisplayList();return Object(v["each"])(e,(function(t){t.stopAnimation(null,!0)})),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(!this._disposed){t=t||{};var e=t.excludeComponents,n=this._model,r=[],i=this;Object(v["each"])(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=i._componentsMap[t.__viewId];e.group.ignore||(r.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return Object(v["each"])(r,(function(t){t.group.ignore=!1})),o}Mx(this.id)},e.prototype.getConnectedDataURL=function(t){if(!this._disposed){var e="svg"===t.type,n=this.group,r=Math.min,i=Math.max,o=1/0;if(Px[n]){var a=o,s=o,l=-o,u=-o,c=[],h=t&&t.pixelRatio||this.getDevicePixelRatio();Object(v["each"])(jx,(function(o,h){if(o.group===n){var p=e?o.getZr().painter.getSvgDom().innerHTML:o.renderToCanvas(Object(v["clone"])(t)),f=o.getDom().getBoundingClientRect();a=r(f.left,a),s=r(f.top,s),l=i(f.right,l),u=i(f.bottom,u),c.push({dom:p,left:f.left,top:f.top})}})),a*=h,s*=h,l*=h,u*=h;var p=l-a,f=u-s,d=sr["d"].createCanvas(),g=zr(d,{renderer:e?"svg":"canvas"});if(g.resize({width:p,height:f}),e){var y="";return Object(v["each"])(c,(function(t){var e=t.left-a,n=t.top-s;y+=''+t.dom+""})),g.painter.getSvgRoot().innerHTML=y,t.connectedBackgroundColor&&g.painter.setBackgroundColor(t.connectedBackgroundColor),g.refreshImmediately(),g.painter.toDataURL()}return t.connectedBackgroundColor&&g.add(new ms({shape:{x:0,y:0,width:p,height:f},style:{fill:t.connectedBackgroundColor}})),Object(v["each"])(c,(function(t){var e=new us({style:{x:t.left*h-a,y:t.top*h-s,image:t.dom}});g.add(e)})),g.refreshImmediately(),d.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}Mx(this.id)},e.prototype.convertToPixel=function(t,e){return ax(this,"convertToPixel",t,e)},e.prototype.convertFromPixel=function(t,e){return ax(this,"convertFromPixel",t,e)},e.prototype.containPixel=function(t,e){if(!this._disposed){var n,r=this._model,i=Wi(r,t);return Object(v["each"])(i,(function(t,r){r.indexOf("Models")>=0&&Object(v["each"])(t,(function(t){var i=t.coordinateSystem;if(i&&i.containPoint)n=n||!!i.containPoint(e);else if("seriesModels"===r){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0}),this)}),this),!!n}Mx(this.id)},e.prototype.getVisual=function(t,e){var n=this._model,r=Wi(n,t,{defaultMainType:"series"}),i=r.seriesModel;var o=i.getData(),a=r.hasOwnProperty("dataIndexInside")?r.dataIndexInside:r.hasOwnProperty("dataIndex")?o.indexOfRawIndex(r.dataIndex):null;return null!=a?im(o,a,e):om(o,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t=this;Object(v["each"])(Ox,(function(e){var n=function(n){var r,i=t.getModel(),o=n.target,a="globalout"===e;if(a?r={}:o&&cm(o,(function(t){var e=Ns(t);if(e&&null!=e.dataIndex){var n=e.dataModel||i.getSeriesByIndex(e.seriesIndex);return r=n&&n.getDataParams(e.dataIndex,e.dataType)||{},!0}if(e.eventData)return r=Object(v["extend"])({},e.eventData),!0}),!0),r){var s=r.componentType,l=r.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=r.seriesIndex);var u=s&&null!=l&&i.getComponent(s,l),c=u&&t["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,r.event=n,r.type=e,t._$eventProcessor.eventInfo={targetEl:o,packedEvent:r,model:u,view:c},t.trigger(e,r)}};n.zrEventfulCallAtLast=!0,t._zr.on(e,n,t)})),Object(v["each"])(Cx,(function(e,n){t._messageCenter.on(n,(function(t){this.trigger(n,t)}),t)})),Object(v["each"])(["selectchanged"],(function(e){t._messageCenter.on(e,(function(t){this.trigger(e,t)}),t)})),um(this._messageCenter,this,this._api)},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?Mx(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)Mx(this.id);else{this._disposed=!0;var t=this.getDom();t&&$i(this.getDom(),Nx,"");var e=this,n=e._api,r=e._model;Object(v["each"])(e._componentsViews,(function(t){t.dispose(r,n)})),Object(v["each"])(e._chartsViews,(function(t){t.dispose(r,n)})),e._zr.dispose(),e._dom=e._model=e._chartsMap=e._componentsMap=e._chartsViews=e._componentsViews=e._scheduler=e._api=e._zr=e._throttledZrFlush=e._theme=e._coordSysMgr=e._messageCenter=null,delete jx[e.id]}},e.prototype.resize=function(t){if(!this[Ub])if(this._disposed)Mx(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),r=t&&t.silent;this[Yb]&&(null==r&&(r=this[Yb].silent),n=!0,this[Yb]=null),this[Ub]=!0;try{n&&nx(this),ox.update.call(this,{type:"resize",animation:Object(v["extend"])({duration:0},t&&t.animation)})}catch(i){throw this[Ub]=!1,i}this[Ub]=!1,ux.call(this,r),cx.call(this,r)}}},e.prototype.showLoading=function(t,e){if(this._disposed)Mx(this.id);else if(Object(v["isObject"])(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Lx[t]){var n=Lx[t](this._api,e),r=this._zr;this._loadingFX=n,r.add(n)}},e.prototype.hideLoading=function(){this._disposed?Mx(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=Object(v["extend"])({},t);return e.type=Cx[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)Mx(this.id);else if(Object(v["isObject"])(e)||(e={silent:!!e}),Ax[t.type]&&this._model)if(this[Ub])this._pendingActions.push(t);else{var n=e.silent;lx.call(this,t,n);var r=e.flush;r?this._zr.flush():!1!==r&&g["a"].browser.weChat&&this._throttledZrFlush(),ux.call(this,n),cx.call(this,n)}},e.prototype.updateLabelLayout=function(){_b.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed)Mx(this.id);else{var e=t.seriesIndex,n=this.getModel(),r=n.getSeriesByIndex(e);0,r.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){t.clearColorPalette(),t.eachSeries((function(t){t.clearColorPalette()}))}function e(t){var e=[],n=[],r=!1;if(t.eachComponent((function(t,i){var o=i.get("zlevel")||0,a=i.get("z")||0,s=i.getZLevelKey();r=r||!!s,("series"===t?n:e).push({zlevel:o,z:a,idx:i.componentIndex,type:t,key:s})})),r){var i,o,a=e.concat(n);zt(a,(function(t,e){return t.zlevel===e.zlevel?t.z-e.z:t.zlevel-e.zlevel})),Object(v["each"])(a,(function(e){var n=t.getComponent(e.type,e.idx),r=e.zlevel,a=e.key;null!=i&&(r=Math.max(i,r)),a?(r===i&&a!==o&&r++,o=a):o&&(r===i&&r++,o=""),i=r,n.setZLevel(r)}))}}function n(t){for(var e=[],n=t.currentStates,r=0;re.get("hoverLayerThreshold")&&!g["a"].node&&!g["a"].worker&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.eachRendered((function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)}))}}))}function i(t,e){var n=t.get("blendMode")||null;e.eachRendered((function(t){t.isGroup||(t.style.blend=n)}))}function o(t,e){if(!t.preventAutoZ){var n=t.get("z")||0,r=t.get("zlevel")||0;e.eachRendered((function(t){return a(t,n,r,-1/0),!0}))}}function a(t,e,n,r){var i=t.getTextContent(),o=t.getTextGuideLine(),s=t.isGroup;if(s)for(var l=t.childrenRef(),u=0;u0?{duration:o,delay:r.get("delay"),easing:r.get("easing")}:null;e.eachRendered((function(t){if(t.states&&t.states.emphasis){if(iu(t))return;if(t instanceof es&&Jl(t),t.__dirty){var e=t.prevStates;e&&t.useStates(e)}if(i){t.stateTransition=a;var r=t.getTextContent(),o=t.getTextGuideLine();r&&(r.stateTransition=a),o&&(o.stateTransition=a)}t.__dirty&&n(t)}}))}nx=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),rx(t,!0),rx(t,!1),e.plan()},rx=function(t,e){for(var n=t._model,r=t._scheduler,i=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;l=0)){n_.push(n);var o=Wy.wrapStageHandler(n,i);o.__prio=e,o.__raw=n,t.push(o)}}function i_(t,e){Lx[t]=e}function o_(t){Object(sr["e"])({createCanvas:t})}function a_(t,e,n){var r=Ob("registerMap");r&&r(t,e,n)}function s_(t){var e=Ob("getMap");return e&&e(t)}var l_=Ff;e_(Rb,Sy),e_(Bb,My),e_(Bb,Ay),e_(Rb,nm),e_(Bb,rm),e_(Gb,bb),Yx(Hp),qx(kb,Gp),i_("default",Iy),Kx({type:Zs,event:Zs,update:Zs},v["noop"]),Kx({type:Ks,event:Ks,update:Ks},v["noop"]),Kx({type:Js,event:Js,update:Js},v["noop"]),Kx({type:Qs,event:Qs,update:Qs},v["noop"]),Kx({type:tl,event:tl,update:tl},v["noop"]),Ux("light",Yy),Ux("dark",Jy);var u_={},c_=[],h_={registerPreprocessor:Yx,registerProcessor:qx,registerPostInit:Xx,registerPostUpdate:$x,registerUpdateLifecycle:Zx,registerAction:Kx,registerCoordinateSystem:Jx,registerLayout:t_,registerVisual:e_,registerTransform:l_,registerLoading:i_,registerMap:a_,registerImpl:Sb,PRIORITY:Wb,ComponentModel:dh,ComponentView:Wd,SeriesModel:Hd,ChartView:hy,registerComponentModel:function(t){dh.registerClass(t)},registerComponentView:function(t){Wd.registerClass(t)},registerSeriesModel:function(t){Hd.registerClass(t)},registerChartView:function(t){hy.registerClass(t)},registerSubTypeDefaulter:function(t,e){dh.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){Hr(t,e)}};function p_(t){Object(v["isArray"])(t)?Object(v["each"])(t,(function(t){p_(t)})):Object(v["indexOf"])(c_,t)>=0||(c_.push(t),Object(v["isFunction"])(t)&&(t={install:t}),t.install(h_))}function f_(t){return null==t?0:t.length||1}function d_(t){return t}var g_=function(){function t(t,e,n,r,i,o){this._old=t,this._new=e,this._oldKeyGetter=n||d_,this._newKeyGetter=r||d_,this.context=i,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},r=new Array(t.length),i=new Array(e.length);this._initIndexMap(t,null,r,"_oldKeyGetter"),this._initIndexMap(e,n,i,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(i,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},r={},i=[],o=[];this._initIndexMap(t,n,i,"_oldKeyGetter"),this._initIndexMap(e,r,o,"_newKeyGetter");for(var a=0;a1&&1===h)this._updateManyToOne&&this._updateManyToOne(u,l),r[s]=null;else if(1===c&&h>1)this._updateOneToMany&&this._updateOneToMany(u,l),r[s]=null;else if(1===c&&1===h)this._update&&this._update(u,l),r[s]=null;else if(c>1&&h>1)this._updateManyToMany&&this._updateManyToMany(u,l),r[s]=null;else if(c>1)for(var p=0;p1)for(var a=0;a30}var D_,L_,j_,P_,E_,R_,N_,z_=v["isObject"],B_=v["map"],V_="undefined"===typeof Int32Array?Array:Int32Array,F_="e\0\0",H_=-1,G_=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],W_=["_approximateExtent"],U_=function(){function t(t,e){var n;this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var r=!1;C_(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(r=!0,n=t),n=n||["x","y"];for(var i={},o=[],a={},s=!1,l={},u=0;u=e)){var n=this._store,r=n.getProvider();this._updateOrdinalMeta();var i=this._nameList,o=this._idList,a=r.getSource().sourceFormat,s=a===bh;if(s&&!r.pure)for(var l=[],u=t;u0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,r=n[t];r||(r=n[t]={});var i=r[e];return null==i&&(i=this.getVisual(e),v["isArray"](i)?i=i.slice():z_(i)&&(i=v["extend"]({},i)),r[e]=i),i},t.prototype.setItemVisual=function(t,e,n){var r=this._itemVisuals[t]||{};this._itemVisuals[t]=r,z_(e)?v["extend"](r,e):r[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){z_(t)?v["extend"](this._layout,t):this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?v["extend"](this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){var n=this.hostModel&&this.hostModel.seriesIndex;zs(n,this.dataType,t,e),this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){v["each"](this._graphicEls,(function(n,r){n&&t&&t.call(e,n,r)}))},t.prototype.cloneShallow=function(e){return e||(e=new t(this._schema?this._schema:B_(this.dimensions,this._getDimInfo,this),this.hostModel)),E_(e,this),e._store=this._store,e},t.prototype.wrapMethod=function(t,e){var n=this[t];v["isFunction"](n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(v["slice"](arguments)))})},t.internalField=function(){D_=function(t){var e=t._invertedIndicesMap;v["each"](e,(function(n,r){var i=t._dimInfos[r],o=i.ordinalMeta,a=t._store;if(o){n=e[r]=new V_(o.categories.length);for(var s=0;s1&&(s+="__ec__"+u),r[e]=s}}}(),t}(),Y_=U_;function q_(t,e){return X_(t,e).dimensions}function X_(t,e){Kp(t)||(t=Qp(t)),e=e||{};var n=e.coordDimensions||[],r=e.dimensionsDefine||t.dimensionsDefine||[],i=Object(v["createHashMap"])(),o=[],a=Z_(t,n,r,e.dimensionsCount),s=e.canOmitUnusedDimensions&&k_(a),l=r===t.dimensionsDefine,u=l?T_(t):I_(r),c=e.encodeDefine;!c&&e.encodeDefaulter&&(c=e.encodeDefaulter(t,a));for(var h=Object(v["createHashMap"])(c),p=new $f(a),f=0;f0&&(r.name=i+(o-1)),o++,e.set(i,o)}}function Z_(t,e,n,r){var i=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,r||0);return Object(v["each"])(e,(function(t){var e;Object(v["isObject"])(t)&&(e=t.dimsDef)&&(i=Math.max(i,e.length))})),i}function K_(t,e,n){var r=e.data;if(n||r.hasOwnProperty(t)){var i=0;while(r.hasOwnProperty(t+i))i++;t+=i}return e.set(t,!0),t}var J_=function(){function t(t){this.coordSysDims=[],this.axisMap=Object(v["createHashMap"])(),this.categoryAxisMap=Object(v["createHashMap"])(),this.coordSysName=t}return t}();function Q_(t){var e=t.get("coordinateSystem"),n=new J_(e),r=tw[e];if(r)return r(t,n,n.axisMap,n.categoryAxisMap),n}var tw={cartesian2d:function(t,e,n,r){var i=t.getReferringComponents("xAxis",Yi).models[0],o=t.getReferringComponents("yAxis",Yi).models[0];e.coordSysDims=["x","y"],n.set("x",i),n.set("y",o),ew(i)&&(r.set("x",i),e.firstCategoryDimIndex=0),ew(o)&&(r.set("y",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,r){var i=t.getReferringComponents("singleAxis",Yi).models[0];e.coordSysDims=["single"],n.set("single",i),ew(i)&&(r.set("single",i),e.firstCategoryDimIndex=0)},polar:function(t,e,n,r){var i=t.getReferringComponents("polar",Yi).models[0],o=i.findAxisModel("radiusAxis"),a=i.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),ew(o)&&(r.set("radius",o),e.firstCategoryDimIndex=0),ew(a)&&(r.set("angle",a),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e,n,r){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,r){var i=t.ecModel,o=i.getComponent("parallel",t.get("parallelIndex")),a=e.coordSysDims=o.dimensions.slice();Object(v["each"])(o.parallelAxisIndex,(function(t,o){var s=i.getComponent("parallelAxis",t),l=a[o];n.set(l,s),ew(s)&&(r.set(l,s),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=o))}))}};function ew(t){return"category"===t.get("type")}function nw(t,e,n){n=n||{};var r,i,o,a=n.byIndex,s=n.stackedCoordDimension;rw(e)?r=e:(i=e.schema,r=i.dimensions,o=e.store);var l,u,c,h,p=!(!t||!t.get("stack"));if(Object(v["each"])(r,(function(t,e){Object(v["isString"])(t)&&(r[e]=t={name:t}),p&&!t.isExtraCoord&&(a||l||!t.ordinalMeta||(l=t),u||"ordinal"===t.type||"time"===t.type||s&&s!==t.coordDim||(u=t))})),!u||a||l||(a=!0),u){c="__\0ecstackresult_"+t.id,h="__\0ecstackedover_"+t.id,l&&(l.createInvertedIndices=!0);var f=u.coordDim,d=u.type,g=0;Object(v["each"])(r,(function(t){t.coordDim===f&&g++}));var y={name:c,coordDim:f,coordDimIndex:g,type:d,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:r.length},m={name:h,coordDim:h,coordDimIndex:g+1,type:d,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:r.length+1};i?(o&&(y.storeDimIndex=o.ensureCalculationDimension(h,d),m.storeDimIndex=o.ensureCalculationDimension(c,d)),i.appendCalculationDimension(y),i.appendCalculationDimension(m)):(r.push(y),r.push(m))}return{stackedDimension:u&&u.name,stackedByDimension:l&&l.name,isStackedByIndex:a,stackedOverDimension:h,stackResultDimension:c}}function rw(t){return!C_(t.schema)}function iw(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function ow(t,e){return iw(t,e)?t.getCalculationInfo("stackResultDimension"):e}function aw(t,e){var n,r=t.get("coordinateSystem"),i=hp.get(r);return e&&e.coordSysDims&&(n=v["map"](e.coordSysDims,(function(t){var n={name:t},r=e.axisMap.get(t);if(r){var i=r.get("type");n.type=x_(i)}return n}))),n||(n=i&&(i.getDimensionsInfo?i.getDimensionsInfo():i.dimensions.slice())||["x","y"]),n}function sw(t,e,n){var r,i;return n&&v["each"](t,(function(t,o){var a=t.coordDim,s=n.categoryAxisMap.get(a);s&&(null==r&&(r=o),t.ordinalMeta=s.getOrdinalMeta(),e&&(t.createInvertedIndices=!0)),null!=t.otherDims.itemName&&(i=!0)})),i||null==r||(t[r].otherDims.itemName=0),r}function lw(t,e,n){n=n||{};var r,i=e.getSourceManager(),o=!1;t?(o=!0,r=Qp(t)):(r=i.getSource(),o=r.sourceFormat===bh);var a=Q_(e),s=aw(e,a),l=n.useEncodeDefaulter,u=v["isFunction"](l)?l:l?v["curry"](kh,s,e):null,c={coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o},h=X_(r,c),p=sw(h.dimensions,n.createInvertedIndices,a),f=o?null:i.getSharedDataStore(h),d=nw(e,{schema:h,store:f}),g=new Y_(h,e);g.setCalculationInfo(d);var y=null!=p&&uw(r)?function(t,e,n,r){return r===p?n:this.defaultDimValueGetter(t,e,n,r)}:null;return g.hasItemOption=!1,g.initData(o?r:f,null,y),g}function uw(t){if(t.sourceFormat===bh){var e=cw(t.data||[]);return!v["isArray"](Si(e))}}function cw(t){var e=0;while(ee[1]&&(e[1]=t[1])},t.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},t.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},t.prototype.isBlank=function(){return this._isBlank},t.prototype.setBlank=function(t){this._isBlank=t},t}();fo(pw);var fw=pw,dw=0,gw=function(){function t(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++dw}return t.createByAxisModel=function(e){var n=e.option,r=n.data,i=r&&Object(v["map"])(r,vw);return new t({categories:i,needCollect:!i,deduplication:!1!==n.dedplication})},t.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},t.prototype.parseAndCollect=function(t){var e,n=this._needCollect;if(!Object(v["isString"])(t)&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var r=this._getOrCreateMap();return e=r.get(t),null==e&&(n?(e=this.categories.length,this.categories[e]=t,r.set(t,e)):e=NaN),e},t.prototype._getOrCreateMap=function(){return this._map||(this._map=Object(v["createHashMap"])(this.categories))},t}();function vw(t){return Object(v["isObject"])(t)&&null!=t.value?t.value:t+""}var yw=gw;function mw(t){return"interval"===t.type||"log"===t.type}function bw(t,e,n,r){var i={},o=t[1]-t[0],a=i.interval=ui(o/e,!0);null!=n&&ar&&(a=i.interval=r);var s=i.intervalPrecision=_w(a),l=i.niceTickExtent=[$r(Math.ceil(t[0]/a)*a,s),$r(Math.floor(t[1]/a)*a,s)];return Sw(l,t),i}function xw(t){var e=Math.pow(10,li(t)),n=t/e;return n?2===n?n=3:3===n?n=5:n*=2:n=1,$r(n*e)}function _w(t){return Kr(t)+2}function ww(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function Sw(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),ww(t,0,e),ww(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Ow(t,e){return t>=e[0]&&t<=e[1]}function Mw(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function Aw(t,e){return t*(e[1]-e[0])+e[0]}var Cw=function(t){function e(e){var n=t.call(this,e)||this;n.type="ordinal";var r=n.getSetting("ordinalMeta");return r||(r=new yw({})),Object(v["isArray"])(r)&&(r=new yw({categories:Object(v["map"])(r,(function(t){return Object(v["isObject"])(t)?t.value:t}))})),n._ordinalMeta=r,n._extent=n.getSetting("extent")||[0,r.categories.length-1],n}return d(e,t),e.prototype.parse=function(t){return null==t?NaN:Object(v["isString"])(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return t=this.parse(t),Ow(t,this._extent)&&null!=this._ordinalMeta.categories[t]},e.prototype.normalize=function(t){return t=this._getTickNumber(this.parse(t)),Mw(t,this._extent)},e.prototype.scale=function(t){return t=Math.round(Aw(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){var t=[],e=this._extent,n=e[0];while(n<=e[1])t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],r=this._ticksByOrdinalNumber=[],i=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);i=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.calcNiceTicks=function(){},e.prototype.calcNiceExtent=function(){},e.type="ordinal",e}(fw);fw.registerClass(Cw);var Iw=Cw,Tw=$r,kw=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return d(e,t),e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Ow(t,this._extent)},e.prototype.normalize=function(t){return Mw(t,this._extent)},e.prototype.scale=function(t){return Aw(t,this._extent)},e.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},e.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=_w(t)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,r=this._niceExtent,i=this._intervalPrecision,o=[];if(!e)return o;var a=1e4;n[0]a)return[]}var l=o.length?o[o.length-1].value:r[1];return n[1]>l&&(t?o.push({value:Tw(l+e,i)}):o.push({value:n[1]})),o},e.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],r=this.getExtent(),i=1;ir[0]&&h0&&(o=null===o?s:Math.min(o,s))}n[r]=o}}return n}function Fw(t){var e=Vw(t),n=[];return Object(v["each"])(t,(function(t){var r,i=t.coordinateSystem,o=i.getBaseAxis(),a=o.getExtent();if("category"===o.type)r=o.getBandWidth();else if("value"===o.type||"time"===o.type){var s=o.dim+"_"+o.index,l=e[s],u=Math.abs(a[1]-a[0]),c=o.scale.getExtent(),h=Math.abs(c[1]-c[0]);r=l?u/h*l:u}else{var p=t.getData();r=Math.abs(a[1]-a[0])/p.count()}var f=Xr(t.get("barWidth"),r),d=Xr(t.get("barMaxWidth"),r),g=Xr(t.get("barMinWidth")||(qw(t)?.5:1),r),v=t.get("barGap"),y=t.get("barCategoryGap");n.push({bandWidth:r,barWidth:f,barMaxWidth:d,barMinWidth:g,barGap:v,barCategoryGap:y,axisKey:Nw(o),stackId:Rw(t)})})),Hw(n)}function Hw(t){var e={};Object(v["each"])(t,(function(t,n){var r=t.axisKey,i=t.bandWidth,o=e[r]||{bandWidth:i,remainedWidth:i,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},a=o.stacks;e[r]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var c=t.barMinWidth;c&&(a[s].minWidth=c);var h=t.barGap;null!=h&&(o.gap=h);var p=t.barCategoryGap;null!=p&&(o.categoryGap=p)}));var n={};return Object(v["each"])(e,(function(t,e){n[e]={};var r=t.stacks,i=t.bandWidth,o=t.categoryGap;if(null==o){var a=Object(v["keys"])(r).length;o=Math.max(35-4*a,15)+"%"}var s=Xr(o,i),l=Xr(t.gap,1),u=t.remainedWidth,c=t.autoWidthCount,h=(u-s)/(c+(c-1)*l);h=Math.max(h,0),Object(v["each"])(r,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){r=t.width;e&&(r=Math.min(r,e)),n&&(r=Math.max(r,n)),t.width=r,u-=r+l*r,c--}else{var r=h;e&&er&&(r=n),r!==h&&(t.width=r,u-=r+l*r,c--)}})),h=(u-s)/(c+(c-1)*l),h=Math.max(h,0);var p,f=0;Object(v["each"])(r,(function(t,e){t.width||(t.width=h),p=t,f+=t.width*(1+l)})),p&&(f-=p.width*l);var d=-f/2;Object(v["each"])(r,(function(t,r){n[e][r]=n[e][r]||{bandWidth:i,offset:d,width:t.width},d+=t.width*(1+l)}))})),n}function Gw(t,e,n){if(t&&e){var r=t[Nw(e)];return null!=r&&null!=n?r[Rw(n)]:r}}function Ww(t,e){var n=Bw(t,e),r=Fw(n);Object(v["each"])(n,(function(t){var e=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),o=Rw(t),a=r[Nw(i)][o],s=a.offset,l=a.width;e.setLayout({bandWidth:a.bandWidth,offset:s,size:l})}))}function Uw(t){return{seriesType:t,plan:Ud(),reset:function(t){if(Yw(t)){var e=t.getData(),n=t.coordinateSystem,r=n.getBaseAxis(),i=n.getOtherAxis(r),o=e.getDimensionIndex(e.mapDimension(i.dim)),a=e.getDimensionIndex(e.mapDimension(r.dim)),s=t.get("showBackground",!0),l=e.mapDimension(i.dim),u=e.getCalculationInfo("stackResultDimension"),c=iw(e,l)&&!!e.getCalculationInfo("stackedOnSeries"),h=i.isHorizontal(),p=Xw(r,i),f=qw(t),d=t.get("barMinHeight")||0,g=u&&e.getDimensionIndex(u),v=e.getLayout("size"),y=e.getLayout("offset");return{progress:function(t,e){var r,i=t.count,l=f&&Pw(3*i),u=f&&s&&Pw(3*i),m=f&&Pw(i),b=n.master.getRect(),x=h?b.width:b.height,_=e.getStore(),w=0;while(null!=(r=t.next())){var S=_.get(c?g:o,r),O=_.get(a,r),M=p,A=void 0;c&&(A=+S-_.get(o,r));var C=void 0,I=void 0,T=void 0,k=void 0;if(h){var D=n.dataToPoint([S,O]);if(c){var L=n.dataToPoint([A,O]);M=L[0]}C=M,I=D[1]+y,T=D[0]-M,k=v,Math.abs(T)>>1;t[i][1]n&&(this._approxInterval=n);var o=Kw.length,a=Math.min($w(Kw,this._approxInterval,0,o),o-1);this._interval=Kw[a][1],this._minLevelUnit=Kw[Math.max(a-1,0)][0]},e.prototype.parse=function(t){return Object(v["isNumber"])(t)?t:+ai(t)},e.prototype.contain=function(t){return Ow(this.parse(t),this._extent)},e.prototype.normalize=function(t){return Mw(this.parse(t),this._extent)},e.prototype.scale=function(t){return Aw(t,this._extent)},e.type="time",e}(Dw),Kw=[["second",rc],["minute",ic],["hour",oc],["quarter-day",6*oc],["half-day",12*oc],["day",1.2*ac],["half-week",3.5*ac],["week",7*ac],["month",31*ac],["quarter",95*ac],["half-year",sc/2],["year",sc]];function Jw(t,e,n,r){var i=ai(e),o=ai(n),a=function(t){return xc(i,t,r)===xc(o,t,r)},s=function(){return a("year")},l=function(){return s()&&a("month")},u=function(){return l()&&a("day")},c=function(){return u()&&a("hour")},h=function(){return c()&&a("minute")},p=function(){return h()&&a("second")},f=function(){return p()&&a("millisecond")};switch(t){case"year":return s();case"month":return l();case"day":return u();case"hour":return c();case"minute":return h();case"second":return p();case"millisecond":return f()}}function Qw(t,e){return t/=ac,t>16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function tS(t){var e=30*ac;return t/=e,t>6?6:t>3?3:t>2?2:1}function eS(t){return t/=oc,t>12?12:t>6?6:t>3.5?4:t>2?2:1}function nS(t,e){return t/=e?ic:rc,t>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function rS(t){return ui(t,!0)}function iS(t,e,n){var r=new Date(t);switch(dc(e)){case"year":case"month":r[Tc(n)](0);case"day":r[kc(n)](1);case"hour":r[Dc(n)](0);case"minute":r[Lc(n)](0);case"second":r[jc(n)](0),r[Pc(n)](0)}return r.getTime()}function oS(t,e,n,r){var i=1e4,o=pc,a=0;function s(t,e,n,i,o,a,s){var l=new Date(e),u=e,c=l[i]();while(u1&&0===u&&o.unshift({value:o[0].value-p})}}for(u=0;u=r[0]&&b<=r[1]&&h++)}var x=(r[1]-r[0])/e;if(h>1.5*x&&p>x/1.5)break;if(u.push(y),h>x||t===o[f])break}c=[]}}}var _=Object(v["filter"])(Object(v["map"])(u,(function(t){return Object(v["filter"])(t,(function(t){return t.value>=r[0]&&t.value<=r[1]&&!t.notAdd}))})),(function(t){return t.length>0})),w=[],S=_.length-1;for(f=0;f<_.length;++f)for(var O=_[f],M=0;M0)r*=10;var o=[$r(hS(e[0]/r)*r),$r(cS(e[1]/r)*r)];this._interval=r,this._niceExtent=o}},e.prototype.calcNiceExtent=function(t){lS.calcNiceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return t=fS(t)/fS(this.base),Ow(t,this._extent)},e.prototype.normalize=function(t){return t=fS(t)/fS(this.base),Mw(t,this._extent)},e.prototype.scale=function(t){return t=Aw(t,this._extent),pS(this.base,t)},e.type="log",e}(fw),gS=dS.prototype;function vS(t,e){return uS(t,Kr(e))}gS.getMinorTicks=lS.getMinorTicks,gS.getLabel=lS.getLabel,fw.registerClass(dS);var yS=dS,mS=function(){function t(t,e,n){this._prepareParams(t,e,n)}return t.prototype._prepareParams=function(t,e,n){n[1]0&&s>0&&!l&&(a=0),a<0&&s<0&&!u&&(s=0));var h=this._determinedMin,p=this._determinedMax;return null!=h&&(a=h,l=!0),null!=p&&(s=p,u=!0),{min:a,max:s,minFixed:l,maxFixed:u,isBlank:c}},t.prototype.modifyDataMinMax=function(t,e){this[xS[t]]=e},t.prototype.setDeterminedMinMax=function(t,e){var n=bS[t];this[n]=e},t.prototype.freeze=function(){this.frozen=!0},t}(),bS={min:"_determinedMin",max:"_determinedMax"},xS={min:"_dataMin",max:"_dataMax"};function _S(t,e,n){var r=t.rawExtentInfo;return r||(r=new mS(t,e,n),t.rawExtentInfo=r,r)}function wS(t,e){return null==e?null:Object(v["eqNaN"])(e)?NaN:t.parse(e)}function SS(t,e){var n=t.type,r=_S(t,e,t.getExtent()).calculate();t.setBlank(r.isBlank);var i=r.min,o=r.max,a=e.ecModel;if(a&&"time"===n){var s=Bw("bar",a),l=!1;if(v["each"](s,(function(t){l=l||t.getBaseAxis()===e.axis})),l){var u=Fw(s),c=OS(i,o,e,u);i=c.min,o=c.max}}return{extent:[i,o],fixMin:r.minFixed,fixMax:r.maxFixed}}function OS(t,e,n,r){var i=n.axis.getExtent(),o=i[1]-i[0],a=Gw(r,n.axis);if(void 0===a)return{min:t,max:e};var s=1/0;v["each"](a,(function(t){s=Math.min(t.offset,s)}));var l=-1/0;v["each"](a,(function(t){l=Math.max(t.offset+t.width,l)})),s=Math.abs(s),l=Math.abs(l);var u=s+l,c=e-t,h=1-(s+l)/o,p=c/h-c;return e+=p*(l/u),t-=p*(s/u),{min:t,max:e}}function MS(t,e){var n=e,r=SS(t,n),i=r.extent,o=n.get("splitNumber");t instanceof yS&&(t.base=n.get("logBase"));var a=t.type,s=n.get("interval"),l="interval"===a||"time"===a;t.setExtent(i[0],i[1]),t.calcNiceExtent({splitNumber:o,fixMin:r.fixMin,fixMax:r.fixMax,minInterval:l?n.get("minInterval"):null,maxInterval:l?n.get("maxInterval"):null}),null!=s&&t.setInterval&&t.setInterval(s)}function AS(t,e){if(e=e||t.get("type"),e)switch(e){case"category":return new Iw({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new aS({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new(fw.getClass(e)||Dw)}}function CS(t){var e=t.scale.getExtent(),n=e[0],r=e[1];return!(n>0&&r>0||n<0&&r<0)}function IS(t){var e=t.getLabelModel().get("formatter"),n="category"===t.type?t.scale.getExtent()[0]:null;return"time"===t.scale.type?function(e){return function(n,r){return t.scale.getFormattedLabel(n,r,e)}}(e):v["isString"](e)?function(e){return function(n){var r=t.scale.getLabel(n),i=e.replace("{value}",null!=r?r:"");return i}}(e):v["isFunction"](e)?function(e){return function(r,i){return null!=n&&(i=r.value-n),e(TS(t,r),i,null!=r.level?{level:r.level}:null)}}(e):function(e){return t.scale.getLabel(e)}}function TS(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}function kS(t){var e=t.model,n=t.scale;if(e.get(["axisLabel","show"])&&!n.isBlank()){var r,i,o=n.getExtent();n instanceof Iw?i=n.count():(r=n.getTicks(),i=r.length);var a,s=t.getLabelModel(),l=IS(t),u=1;i>40&&(u=Math.ceil(i/40));for(var c=0;ct[1]&&(t[1]=r[1])}))}var RS=function(){function t(){}return t.prototype.getNeedCrossZero=function(){var t=this.option;return!t.scale},t.prototype.getCoordSysModel=function(){},t}();function NS(t){return hw(null,t)}var zS={isDimensionStacked:iw,enableDataStack:nw,getStackedDimension:ow};function BS(t,e){var n=e;e instanceof Bu||(n=new Bu(e));var r=AS(n);return r.setExtent(t[0],t[1]),MS(r,n),r}function VS(t){v["mixin"](t,RS)}function FS(t,e){return e=e||{},gu(t,null,null,"normal"!==e.state)}var HS=1e-8;function GS(t,e){return Math.abs(t-e)n&&(t=i,n=a)}if(t)return XS(t.exterior);var s=this.getBoundingRect();return[s.x+s.width/2,s.y+s.height/2]},e.prototype.getBoundingRect=function(t){var e=this._rect;if(e&&!t)return e;var n=[1/0,1/0],r=[-1/0,-1/0],i=this.geometries;return Object(v["each"])(i,(function(e){"polygon"===e.type?qS(e.exterior,n,r,t):Object(v["each"])(e.points,(function(e){qS(e,n,r,t)}))})),isFinite(n[0])&&isFinite(n[1])&&isFinite(r[0])&&isFinite(r[1])||(n[0]=n[1]=r[0]=r[1]=0),e=new or(n[0],n[1],r[0]-n[0],r[1]-n[1]),t||(this._rect=e),e},e.prototype.contain=function(t){var e=this.getBoundingRect(),n=this.geometries;if(!e.contain(t[0],t[1]))return!1;t:for(var r=0,i=n.length;r>1^-(1&s),l=l>>1^-(1&l),s+=i,l+=o,i=s,o=l,r.push([s/n,l/n])}return r}function rO(t,e){return t=tO(t),v["map"](v["filter"](t.features,(function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0})),(function(t){var n=t.properties,r=t.geometry,i=[];switch(r.type){case"Polygon":var o=r.coordinates;i.push(new ZS(o[0],o.slice(1)));break;case"MultiPolygon":v["each"](r.coordinates,(function(t){t[0]&&i.push(new ZS(t[0],t.slice(1)))}));break;case"LineString":i.push(new KS([r.coordinates]));break;case"MultiLineString":i.push(new KS(r.coordinates))}var a=new JS(n[e||"name"],i,n.cp);return a.properties=n,a}))}var iO=Hi();function oO(t){return"category"===t.type?sO(t):cO(t)}function aO(t,e){return"category"===t.type?uO(t,e):{ticks:v["map"](t.scale.getTicks(),(function(t){return t.value}))}}function sO(t){var e=t.getLabelModel(),n=lO(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}function lO(t,e){var n,r,i=hO(t,"labels"),o=LS(e),a=pO(i,o);return a||(v["isFunction"](o)?n=mO(t,o):(r="auto"===o?dO(t):o,n=yO(t,r)),fO(i,o,{labels:n,labelCategoryInterval:r}))}function uO(t,e){var n,r,i=hO(t,"ticks"),o=LS(e),a=pO(i,o);if(a)return a;if(e.get("show")&&!t.scale.isBlank()||(n=[]),v["isFunction"](o))n=mO(t,o,!0);else if("auto"===o){var s=lO(t,t.getLabelModel());r=s.labelCategoryInterval,n=v["map"](s.labels,(function(t){return t.tickValue}))}else r=o,n=yO(t,r,!0);return fO(i,o,{ticks:n,tickCategoryInterval:r})}function cO(t){var e=t.scale.getTicks(),n=IS(t);return{labels:v["map"](e,(function(e,r){return{level:e.level,formattedLabel:n(e,r),rawLabel:t.scale.getLabel(e),tickValue:e.value}}))}}function hO(t,e){return iO(t)[e]||(iO(t)[e]=[])}function pO(t,e){for(var n=0;n40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),c=Math.abs(u*Math.cos(r)),h=Math.abs(u*Math.sin(r)),p=0,f=0;l<=o[1];l+=s){var d=0,g=0,v=hr(n({value:l}),e.font,"center","top");d=1.3*v.width,g=1.3*v.height,p=Math.max(p,d,7),f=Math.max(f,g,7)}var y=p/c,m=f/h;isNaN(y)&&(y=1/0),isNaN(m)&&(m=1/0);var b=Math.max(0,Math.floor(Math.min(y,m))),x=iO(t.model),_=t.getExtent(),w=x.lastAutoInterval,S=x.lastTickCount;return null!=w&&null!=S&&Math.abs(w-b)<=1&&Math.abs(S-a)<=1&&w>b&&x.axisExtent0===_[0]&&x.axisExtent1===_[1]?b=w:(x.lastTickCount=a,x.lastAutoInterval=b,x.axisExtent0=_[0],x.axisExtent1=_[1]),b}function vO(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function yO(t,e,n){var r=IS(t),i=t.scale,o=i.getExtent(),a=t.getLabelModel(),s=[],l=Math.max((e||0)+1,1),u=o[0],c=i.count();0!==u&&l>1&&c/l>2&&(u=Math.round(Math.ceil(u/l)*l));var h=jS(t),p=a.get("showMinLabel")||h,f=a.get("showMaxLabel")||h;p&&u!==o[0]&&g(o[0]);for(var d=u;d<=o[1];d+=l)g(d);function g(t){var e={value:t};s.push(n?t:{formattedLabel:r(e),rawLabel:i.getLabel(e),tickValue:t})}return f&&d-l!==o[1]&&g(o[1]),s}function mO(t,e,n){var r=t.scale,i=IS(t),o=[];return v["each"](r.getTicks(),(function(t){var a=r.getLabel(t),s=t.value;e(t.value,a)&&o.push(n?s:{formattedLabel:i(t),rawLabel:a,tickValue:s})})),o}var bO=[0,1],xO=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),r=Math.max(e[0],e[1]);return t>=n&&t<=r},t.prototype.containData=function(t){return this.scale.contain(t)},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.getPixelPrecision=function(t){return Qr(t||this.scale.getExtent(),this._extent)},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this._extent,r=this.scale;return t=r.normalize(t),this.onBand&&"ordinal"===r.type&&(n=n.slice(),_O(n,r.count())),qr(t,bO,n,e)},t.prototype.coordToData=function(t,e){var n=this._extent,r=this.scale;this.onBand&&"ordinal"===r.type&&(n=n.slice(),_O(n,r.count()));var i=qr(t,n,bO,e);return this.scale.scale(i)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){t=t||{};var e=t.tickModel||this.getTickModel(),n=aO(this,e),r=n.ticks,i=Object(v["map"])(r,(function(t){return{coord:this.dataToCoord("ordinal"===this.scale.type?this.scale.getRawOrdinalNumber(t):t),tickValue:t}}),this),o=e.get("alignWithLabel");return wO(this,i,o,t.clamp),i},t.prototype.getMinorTicksCoords=function(){if("ordinal"===this.scale.type)return[];var t=this.model.getModel("minorTick"),e=t.get("splitNumber");e>0&&e<100||(e=5);var n=this.scale.getMinorTicks(e),r=Object(v["map"])(n,(function(t){return Object(v["map"])(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this);return r},t.prototype.getViewLabels=function(){return oO(this).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var r=Math.abs(t[1]-t[0]);return Math.abs(r)/n},t.prototype.calculateCategoryInterval=function(){return gO(this)},t}();function _O(t,e){var n=t[1]-t[0],r=e,i=n/r/2;t[0]+=i,t[1]-=i}function wO(t,e,n,r){var i=e.length;if(t.onBand&&!n&&i){var o,a,s=t.getExtent();if(1===i)e[0].coord=s[0],o=e[1]={coord:s[0]};else{var l=e[i-1].tickValue-e[0].tickValue,u=(e[i-1].coord-e[0].coord)/l;Object(v["each"])(e,(function(t){t.coord-=u/2}));var c=t.scale.getExtent();a=1+c[1]-e[i-1].tickValue,o={coord:e[i-1].coord+u*a},e.push(o)}var h=s[0]>s[1];p(e[0].coord,s[0])&&(r?e[0].coord=s[0]:e.shift()),r&&p(s[0],e[0].coord)&&e.unshift({coord:s[0]}),p(s[1],o.coord)&&(r?o.coord=s[1]:e.pop()),r&&p(o.coord,s[1])&&e.push({coord:s[1]})}function p(t,e){return t=$r(t),e=$r(e),h?t>e:ti&&(i+=IO);var f=Math.atan2(s,a);if(f<0&&(f+=IO),f>=r&&f<=i||f+IO>=r&&f+IO<=i)return l[0]=c,l[1]=h,u-n;var d=n*Math.cos(r)+t,g=n*Math.sin(r)+e,v=n*Math.cos(i)+t,y=n*Math.sin(i)+e,m=(d-a)*(d-a)+(g-s)*(g-s),b=(v-a)*(v-a)+(y-s)*(y-s);return m0){e=e/180*Math.PI,zO.fromArray(t[0]),BO.fromArray(t[1]),VO.fromArray(t[2]),$n.sub(FO,zO,BO),$n.sub(HO,VO,BO);var n=FO.len(),r=HO.len();if(!(n<.001||r<.001)){FO.scale(1/n),HO.scale(1/r);var i=FO.dot(HO),o=Math.cos(e);if(o1&&$n.copy(UO,VO),UO.toArray(t[1])}}}}function qO(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,zO.fromArray(t[0]),BO.fromArray(t[1]),VO.fromArray(t[2]),$n.sub(FO,BO,zO),$n.sub(HO,VO,BO);var r=FO.len(),i=HO.len();if(!(r<.001||i<.001)){FO.scale(1/r),HO.scale(1/i);var o=FO.dot(e),a=Math.cos(n);if(o=l)$n.copy(UO,VO);else{UO.scaleAndAdd(HO,s/Math.tan(Math.PI/2-c));var h=VO.x!==BO.x?(UO.x-BO.x)/(VO.x-BO.x):(UO.y-BO.y)/(VO.y-BO.y);if(isNaN(h))return;h<0?$n.copy(UO,BO):h>1&&$n.copy(UO,VO)}UO.toArray(t[1])}}}}function XO(t,e,n,r){var i="normal"===n,o=i?t:t.ensureState(n);o.ignore=e;var a=r.get("smooth");a&&!0===a&&(a=.3),o.shape=o.shape||{},a>0&&(o.shape.smooth=a);var s=r.getModel("lineStyle").getLineStyle();i?t.useStyle(s):o.style=s}function $O(t,e){var n=e.smooth,r=e.points;if(r)if(t.moveTo(r[0][0],r[0][1]),n>0&&r.length>=3){var i=P(r[0],r[1]),o=P(r[1],r[2]);if(!i||!o)return t.lineTo(r[1][0],r[1][1]),void t.lineTo(r[2][0],r[2][1]);var a=Math.min(i,o)*n,s=z([],r[1],r[0],a/i),l=z([],r[1],r[2],a/o),u=z([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],r[2][0],r[2][1])}else for(var c=1;c0&&o&&w(-h/a,0,a);var v,y,m=t[0],b=t[a-1];return x(),v<0&&S(-v,.8),y<0&&S(y,.8),x(),_(v,y,1),_(y,v,-1),x(),v<0&&O(-v),y<0&&O(y),u}function x(){v=m.rect[e]-r,y=i-b.rect[e]-b.rect[n]}function _(t,e,n){if(t<0){var r=Math.min(e,-t);if(r>0){w(r*n,0,a);var i=r+t;i<0&&S(-i*n,1)}else S(-t*n,1)}}function w(n,r,i){0!==n&&(u=!0);for(var o=r;o0)for(l=0;l0;l--){p=o[l-1]*h;w(-p,l,a)}}}function O(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(a-1)),r=0;r0?w(n,0,r+1):w(-n,a-r-1,a),t-=n,t<=0)return}}function tM(t,e,n,r){return QO(t,"x","width",e,n,r)}function eM(t,e,n,r){return QO(t,"y","height",e,n,r)}function nM(t){var e=[];t.sort((function(t,e){return e.priority-t.priority}));var n=new or(0,0,0,0);function r(t){if(!t.ignore){var e=t.ensureState("emphasis");null==e.ignore&&(e.ignore=!1)}t.ignore=!0}for(var i=0;i=0&&n.attr(i.oldLayoutSelect),Object(v["indexOf"])(c,"emphasis")>=0&&n.attr(i.oldLayoutEmphasis)),nu(n,l,e,s)}else if(n.attr(l),!Ou(n).valueAnimation){var h=Object(v["retrieve2"])(n.style.opacity,1);n.style.opacity=0,ru(n,{style:{opacity:h}},e,s)}if(i.oldLayout=l,n.states.select){var p=i.oldLayoutSelect={};uM(p,l,cM),uM(p,n.states.select,cM)}if(n.states.emphasis){var f=i.oldLayoutEmphasis={};uM(f,l,cM),uM(f,n.states.emphasis,cM)}Au(n,s,u,e,e)}if(r&&!r.ignore&&!r.invisible){i=lM(r),o=i.oldLayout;var d={points:r.shape.points};o?(r.attr({shape:o}),nu(r,{shape:d},e)):(r.setShape(d),r.style.strokePercent=0,ru(r,{style:{strokePercent:1}},e)),i.oldLayout=d}},t}(),pM=hM,fM=Hi();function dM(t){t.registerUpdateLifecycle("series:beforeupdate",(function(t,e,n){var r=fM(e).labelManager;r||(r=fM(e).labelManager=new pM),r.clearLabels()})),t.registerUpdateLifecycle("series:layoutlabels",(function(t,e,n){var r=fM(e).labelManager;n.updatedSeries.forEach((function(t){r.addLabelsOfSeries(e.getViewOfSeriesModel(t))})),r.updateLayoutConfig(e),r.layout(e),r.processLabelsOverall()}))}function gM(t,e,n){var r=sr["d"].createCanvas(),i=e.getWidth(),o=e.getHeight(),a=r.style;return a&&(a.position="absolute",a.left="0",a.top="0",a.width=i+"px",a.height=o+"px",r.setAttribute("data-zr-dom-id",t)),r.width=i*n,r.height=o*n,r}p_(dM);var vM=function(t){function e(e,n,r){var i,o=t.call(this)||this;o.motionBlur=!1,o.lastFrameAlpha=.7,o.dpr=1,o.virtual=!1,o.config={},o.incremental=!1,o.zlevel=0,o.maxRepaintRectCount=5,o.__dirty=!0,o.__firstTimePaint=!0,o.__used=!1,o.__drawIndex=0,o.__startIndex=0,o.__endIndex=0,o.__prevStartIndex=null,o.__prevEndIndex=null,r=r||Sn,"string"===typeof e?i=gM(e,n,r):v["isObject"](e)&&(i=e,e=i.id),o.id=e,o.dom=i;var a=i.style;return a&&(v["disableUserSelect"](i),i.onselectstart=function(){return!1},a.padding="0",a.margin="0",a.borderWidth="0"),o.painter=n,o.dpr=r,o}return d(e,t),e.prototype.getElementCount=function(){return this.__endIndex-this.__startIndex},e.prototype.afterBrush=function(){this.__prevStartIndex=this.__startIndex,this.__prevEndIndex=this.__endIndex},e.prototype.initContext=function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},e.prototype.setUnpainted=function(){this.__firstTimePaint=!0},e.prototype.createBackBuffer=function(){var t=this.dpr;this.domBack=gM("back-"+this.id,this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!==t&&this.ctxBack.scale(t,t)},e.prototype.createRepaintRects=function(t,e,n,r){if(this.__firstTimePaint)return this.__firstTimePaint=!1,null;var i,o=[],a=this.maxRepaintRectCount,s=!1,l=new or(0,0,0,0);function u(t){if(t.isFinite()&&!t.isZero())if(0===o.length){var e=new or(0,0,0,0);e.copy(t),o.push(e)}else{for(var n=!1,r=1/0,i=0,u=0;u=a)}}for(var c=this.__startIndex;c15)break}}n.prevElClipPaths&&h.restore()};if(f)if(0===f.length)s=l.__endIndex;else for(var x=p.dpr,_=0;_0&&t>r[0]){for(s=0;st)break;a=n[r[s]]}if(r.splice(s+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?o.insertBefore(e.dom,l.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.__painter=this}},t.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,r=0;r0?xM:0),this._needsManuallyCompositing),u.__builtin__||v["logError"]("ZLevel "+l+" has been used by unkown layer "+u.id),u!==a&&(u.__used=!0,u.__startIndex!==o&&(u.__dirty=!0),u.__startIndex=o,u.incremental?u.__drawIndex=-1:u.__drawIndex=o,e(o),a=u),r.__dirty&Bt&&!r.__inHover&&(u.__dirty=!0,u.incremental&&u.__drawIndex<0&&(u.__drawIndex=o))}e(o),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},t.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},t.prototype._clearLayer=function(t){t.clear()},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t,v["each"](this._layers,(function(t){t.setUnpainted()}))},t.prototype.configLayer=function(t,e){if(e){var n=this._layerConfig;n[t]?v["merge"](n[t],e,!0):n[t]=e;for(var r=0;r=kM:-l>=kM),p=l>0?l%kM:l%kM+kM,f=!1;f=!!h||!Object(Ce["j"])(c)&&p>=TM===!!u;var d=t+n*IM(o),g=e+r*CM(o);this._start&&this._add("M",d,g);var v=Math.round(i*DM);if(h){var y=1/this._p,m=(u?1:-1)*(kM-y);this._add("A",n,r,v,1,+u,t+n*IM(o+m),e+r*CM(o+m)),y>.01&&this._add("A",n,r,v,0,+u,d,g)}else{var b=t+n*IM(a),x=e+r*CM(a);this._add("A",n,r,v,+f,+u,b,x)}},t.prototype.rect=function(t,e,n,r){this._add("M",t,e),this._add("l",n,0),this._add("l",0,r),this._add("l",-n,0),this._add("Z")},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,r,i,o,a,s,l){for(var u=[],c=this._p,h=1;h"}function XM(t){return""}function $M(t,e){e=e||{};var n=e.newline?"\n":"";function r(t){var e=t.children,i=t.tag,o=t.attrs;return qM(i,o)+(t.text||"")+(e?""+n+Object(v["map"])(e,(function(t){return r(t)})).join(n)+n:"")+XM(i)}return r(t)}function ZM(t,e,n){n=n||{};var r=n.newline?"\n":"",i=" {"+r,o=r+"}",a=Object(v["map"])(Object(v["keys"])(t),(function(e){return e+i+Object(v["map"])(Object(v["keys"])(t[e]),(function(n){return n+":"+t[e][n]+";"})).join(r)+o})).join(r),s=Object(v["map"])(Object(v["keys"])(e),(function(t){return"@keyframes "+t+i+Object(v["map"])(Object(v["keys"])(e[t]),(function(n){return n+i+Object(v["map"])(Object(v["keys"])(e[t][n]),(function(r){var i=e[t][n][r];return"d"===r&&(i='path("'+i+'")'),r+":"+i+";"})).join(r)+o})).join(r)+o})).join(r);return a||s?[""].join(r):""}function KM(t){return{zrId:t,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssClassIdx:0,cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function JM(t,e,n,r){return YM("svg","root",{width:t,height:e,xmlns:FM,"xmlns:xlink":HM,version:"1.1",baseProfile:"full",viewBox:!!r&&"0 0 "+t+" "+e},n)}var QM={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},tA="transform-origin";function eA(t,e,n){var r=Object(v["extend"])({},t.shape);Object(v["extend"])(r,e),t.buildPath(n,r);var i=new jM;return i.reset(Object(Ce["f"])(t)),n.rebuildPath(i,1),i.generateStr(),i.getStr()}function nA(t,e){var n=e.originX,r=e.originY;(n||r)&&(t[tA]=n+"px "+r+"px")}var rA={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function iA(t,e){var n=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[n]=t,n}function oA(t,e,n){var r,i,o=t.shape.paths,a={};if(Object(v["each"])(o,(function(t){var e=KM(n.zrId);e.animation=!0,sA(t,{},e,!0);var o=e.cssAnims,s=e.cssNodes,l=Object(v["keys"])(o),u=l.length;if(u){i=l[u-1];var c=o[i];for(var h in c){var p=c[h];a[h]=a[h]||{d:""},a[h].d+=p.d||""}for(var f in s){var d=s[f].animation;d.indexOf(i)>=0&&(r=d)}}})),r){e.d=!1;var s=iA(a,n);return r.replace(i,s)}}function aA(t){return Object(v["isString"])(t)?QM[t]?"cubic-bezier("+QM[t]+")":Se(t)?t:"":""}function sA(t,e,n,r){var i=t.animators,o=i.length,a=[];if(t instanceof uv){var s=oA(t,e,n);if(s)a.push(s);else if(!o)return}else if(!o)return;for(var l={},u=0;u0})).length){var k=iA(c,n);return k+" "+i[0]+" both"}}for(var y in l){s=g(l[y]);s&&a.push(s)}if(a.length){var m=n.zrId+"-cls-"+n.cssClassIdx++;n.cssNodes["."+m]={animation:a.join(",")},e["class"]=m}}var lA=Math.round;function uA(t){return t&&Object(v["isString"])(t.src)}function cA(t){return t&&Object(v["isFunction"])(t.toDataURL)}function hA(t,e,n,r){VM((function(i,o){var a="fill"===i||"stroke"===i;a&&Object(Ce["k"])(o)?MA(e,t,i,r):a&&Object(Ce["n"])(o)?AA(n,t,i,r):t[i]=o}),e,n,!1),OA(n,t,r)}function pA(t){return Object(Ce["j"])(t[0]-1)&&Object(Ce["j"])(t[1])&&Object(Ce["j"])(t[2])&&Object(Ce["j"])(t[3]-1)}function fA(t){return Object(Ce["j"])(t[4])&&Object(Ce["j"])(t[5])}function dA(t,e,n){if(e&&(!fA(e)||!pA(e))){var r=n?10:1e4;t.transform=pA(e)?"translate("+lA(e[4]*r)/r+" "+lA(e[5]*r)/r+")":Object(Ce["e"])(e)}}function gA(t,e,n){for(var r=t.points,i=[],o=0;ou?(a=null==n[p+1]?null:n[p+1].elm,GA(t,a,n,l,p)):WA(t,e,s,u))}function qA(t,e){var n=e.elm=t.elm,r=t.children,i=e.children;t!==e&&(UA(t,e),zA(e.text)?BA(r)&&BA(i)?r!==i&&YA(n,r,i):BA(i)?(BA(t.text)&&PA(n,""),GA(n,null,i,0,i.length-1)):BA(r)?WA(n,r,0,r.length-1):BA(t.text)&&PA(n,""):t.text!==e.text&&(BA(r)&&WA(n,r,0,r.length-1),PA(n,e.text)))}function XA(t,e){if(FA(t,e))qA(t,e);else{var n=t.elm,r=LA(n);HA(e),null!==r&&(TA(r,e.elm,jA(n)),WA(r,[t],0,0))}return e}var $A=0,ZA=function(){function t(t,e,n){if(this.type="svg",this.refreshHover=KA("refreshHover"),this.configLayer=KA("configLayer"),this.storage=e,this._opts=n=Object(v["extend"])({},n),this.root=t,this._id="zr"+$A++,this._oldVNode=JM(n.width,n.height),t&&!n.ssr){var r=this._viewport=document.createElement("div");r.style.cssText="position:relative;overflow:hidden";var i=this._svgDom=this._oldVNode.elm=UM("svg");UA(null,this._oldVNode),r.appendChild(i),t.appendChild(r)}this.resize(n.width,n.height)}return t.prototype.getType=function(){return this.type},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",XA(this._oldVNode,t),this._oldVNode=t}},t.prototype.renderOneToVNode=function(t){return SA(t,KM(this._id))},t.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),n=this._backgroundColor,r=this._width,i=this._height,o=KM(this._id);o.animation=t.animation,o.willUpdate=t.willUpdate,o.compress=t.compress;var a=[];if(n&&"none"!==n){var s=Object(Ce["p"])(n),l=s.color,u=s.opacity;this._bgVNode=YM("rect","bg",{width:r,height:i,x:"0",y:"0",id:"0",fill:l,"fill-opacity":u}),a.push(this._bgVNode)}else this._bgVNode=null;var c=t.compress?null:this._mainVNode=YM("g","main",{},[]);this._paintList(e,o,c?c.children:a),c&&a.push(c);var h=Object(v["map"])(Object(v["keys"])(o.defs),(function(t){return o.defs[t]}));if(h.length&&a.push(YM("defs","defs",{},h)),t.animation){var p=ZM(o.cssNodes,o.cssAnims,{newline:!0});if(p){var f=YM("style","stl",{},[],p);a.push(f)}}return JM(r,i,a,t.useViewBox)},t.prototype.renderToString=function(t){return t=t||{},$M(this.renderToVNode({animation:Object(v["retrieve2"])(t.cssAnimation,!0),willUpdate:!1,compress:!0,useViewBox:Object(v["retrieve2"])(t.useViewBox,!0)}),{newline:!0})},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t;var e=this._bgVNode;if(e&&e.elm){var n=Object(Ce["p"])(t),r=n.color,i=n.opacity;e.elm.setAttribute("fill",r),i<1&&e.elm.setAttribute("fill-opacity",i)}},t.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},t.prototype._paintList=function(t,e,n){for(var r,i,o=t.length,a=[],s=0,l=0,u=0;u=0;d--)if(h&&i&&h[d]===i[d])break;for(var g=f-1;g>d;g--)s--,r=a[s-1];for(var v=d+1;v-1&&(s.style.stroke=s.style.fill,s.style.fill="#fff",s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},e}(Hd),eC=tC;function nC(t,e){var n=t.mapDimensionsAll("defaultedLabel"),r=n.length;if(1===r){var i=bf(t,e,n[0]);return null!=i?i+"":null}if(r){for(var o=[],a=0;a=0&&r.push(e[o])}return r.join(" ")}var iC=function(t){function e(e,n,r,i){var o=t.call(this)||this;return o.updateData(e,n,r,i),o}return d(e,t),e.prototype._createSymbol=function(t,e,n,r,i){this.removeAll();var o=Om(t,-1,-1,2,2,null,i);o.attr({z2:100,culling:!0,scaleX:r[0]/2,scaleY:r[1]/2}),o.drift=oC,this._symbolType=t,this.add(o)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){wl(this.childAt(0))},e.prototype.downplay=function(){Sl(this.childAt(0))},e.prototype.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},e.prototype.setDraggable=function(t,e){var n=this.childAt(0);n.draggable=t,n.cursor=!e&&t?"move":n.cursor},e.prototype.updateData=function(t,n,r,i){this.silent=!1;var o=t.getItemVisual(n,"symbol")||"circle",a=t.hostModel,s=e.getSymbolSize(t,n),l=o!==this._symbolType,u=i&&i.disableAnimation;if(l){var c=t.getItemVisual(n,"symbolKeepAspect");this._createSymbol(o,t,n,s,c)}else{var h=this.childAt(0);h.silent=!1;var p={scaleX:s[0]/2,scaleY:s[1]/2};u?h.attr(p):nu(h,p,a,n),lu(h)}if(this._updateCommon(t,n,s,r,i),l){h=this.childAt(0);if(!u){p={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:h.style.opacity}};h.scaleX=h.scaleY=0,h.style.opacity=0,ru(h,p,a,n)}}u&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,e,n,r,i){var o,a,s,l,u,c,h,p,f,d=this.childAt(0),g=t.hostModel;if(r&&(o=r.emphasisItemStyle,a=r.blurItemStyle,s=r.selectItemStyle,l=r.focus,u=r.blurScope,h=r.labelStatesModels,p=r.hoverScale,f=r.cursorStyle,c=r.emphasisDisabled),!r||t.hasItemOption){var y=r&&r.itemModel?r.itemModel:t.getItemModel(e),m=y.getModel("emphasis");o=m.getModel("itemStyle").getItemStyle(),s=y.getModel(["select","itemStyle"]).getItemStyle(),a=y.getModel(["blur","itemStyle"]).getItemStyle(),l=m.get("focus"),u=m.get("blurScope"),c=m.get("disabled"),h=du(y),p=m.getShallow("scale"),f=y.getShallow("cursor")}var b=t.getItemVisual(e,"symbolRotate");d.attr("rotation",(b||0)*Math.PI/180||0);var x=Am(t.getItemVisual(e,"symbolOffset"),n);x&&(d.x=x[0],d.y=x[1]),f&&d.attr("cursor",f);var _=t.getItemVisual(e,"style"),w=_.fill;if(d instanceof us){var S=d.style;d.useStyle(Object(v["extend"])({image:S.image,x:S.x,y:S.y,width:S.width,height:S.height},_))}else d.__isEmptyBrush?d.useStyle(Object(v["extend"])({},_)):d.useStyle(_),d.style.decal=null,d.setColor(w,i&&i.symbolInnerColor),d.style.strokeNoScale=!0;var O=t.getItemVisual(e,"liftZ"),M=this._z2;null!=O?null==M&&(this._z2=d.z2,d.z2+=O):null!=M&&(d.z2=M,this._z2=null);var A=i&&i.useNameLabel;function C(e){return A?t.getName(e):nC(t,e)}fu(d,h,{labelFetcher:g,labelDataIndex:e,defaultText:C,inheritColor:w,defaultOpacity:_.opacity}),this._sizeX=n[0]/2,this._sizeY=n[1]/2;var I=d.ensureState("emphasis");if(I.style=o,d.ensureState("select").style=s,d.ensureState("blur").style=a,p){var T=Math.max(Object(v["isNumber"])(p)?p:1.1,3/this._sizeY);I.scaleX=this._sizeX*T,I.scaleY=this._sizeY*T}this.setSymbolScale(1),Fl(this,l,u,c)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,e,n){var r=this.childAt(0),i=Ns(this).dataIndex,o=n&&n.animation;if(this.silent=r.silent=!0,n&&n.fadeLabel){var a=r.getTextContent();a&&ou(a,{style:{opacity:0}},e,{dataIndex:i,removeOpt:o,cb:function(){r.removeTextContent()}})}else r.removeTextContent();ou(r,{style:{opacity:0},scaleX:0,scaleY:0},e,{dataIndex:i,cb:t,removeOpt:o})},e.getSymbolSize=function(t,e){return Mm(t.getItemVisual(e,"symbolSize"))},e}(Lr);function oC(t,e){this.parent.drift(t,e)}var aC=iC;function sC(t,e,n,r){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(r.isIgnore&&r.isIgnore(n))&&!(r.clipShape&&!r.clipShape.contain(e[0],e[1]))&&"none"!==t.getItemVisual(n,"symbol")}function lC(t){return null==t||Object(v["isObject"])(t)||(t={isIgnore:t}),t||{}}function uC(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:du(e),cursorStyle:e.get("cursor")}}var cC=function(){function t(t){this.group=new Lr,this._SymbolCtor=t||aC}return t.prototype.updateData=function(t,e){this._progressiveEls=null,e=lC(e);var n=this.group,r=t.hostModel,i=this._data,o=this._SymbolCtor,a=e.disableAnimation,s=uC(t),l={disableAnimation:a},u=e.getSymbolPoint||function(e){return t.getItemLayout(e)};i||n.removeAll(),t.diff(i).add((function(r){var i=u(r);if(sC(t,i,r,e)){var a=new o(t,r,s,l);a.setPosition(i),t.setItemGraphicEl(r,a),n.add(a)}})).update((function(c,h){var p=i.getItemGraphicEl(h),f=u(c);if(sC(t,f,c,e)){var d=t.getItemVisual(c,"symbol")||"circle",g=p&&p.getSymbolType&&p.getSymbolType();if(!p||g&&g!==d)n.remove(p),p=new o(t,c,s,l),p.setPosition(f);else{p.updateData(t,c,s,l);var v={x:f[0],y:f[1]};a?p.attr(v):nu(p,v,r)}n.add(p),t.setItemGraphicEl(c,p)}else n.remove(p)})).remove((function(t){var e=i.getItemGraphicEl(t);e&&e.fadeOut((function(){n.remove(e)}),r)})).execute(),this._getSymbolPoint=u,this._data=t},t.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl((function(e,n){var r=t._getSymbolPoint(n);e.setPosition(r),e.markRedraw()}))},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=uC(t),this._data=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e,n){function r(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[],n=lC(n);for(var i=t.start;i0?n=r[0]:r[1]<0&&(n=r[1]),n}function dC(t,e,n,r){var i=NaN;t.stacked&&(i=n.get(n.getCalculationInfo("stackedOverDimension"),r)),isNaN(i)&&(i=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,r),a[1-o]=i,e.dataToPoint(a)}function gC(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}function vC(t,e,n,r,i,o,a,s){for(var l=gC(t,e),u=[],c=[],h=[],p=[],f=[],d=[],g=[],v=pC(i,e,a),y=t.getLayout("points")||[],m=e.getLayout("points")||[],b=0;b=i||g<0)break;if(bC(y,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](y,m),h=y,p=m;else{var b=y-u,x=m-c;if(b*b+x*x<.5){g+=o;continue}if(a>0){var _=g+o,w=e[2*_],S=e[2*_+1];while(w===y&&S===m&&v=r||bC(w,S))f=y,d=m;else{A=w-u,C=S-c;var k=y-u,D=w-y,L=m-c,j=S-m,P=void 0,E=void 0;if("x"===s){P=Math.abs(k),E=Math.abs(D);var R=A>0?1:-1;f=y-R*P*a,d=m,I=y+R*E*a,T=m}else if("y"===s){P=Math.abs(L),E=Math.abs(j);var N=C>0?1:-1;f=y,d=m-N*P*a,I=y,T=m+N*E*a}else P=Math.sqrt(k*k+L*L),E=Math.sqrt(D*D+j*j),M=E/(E+P),f=y-A*a*(1-M),d=m-C*a*(1-M),I=y+A*a*M,T=m+C*a*M,I=yC(I,mC(w,y)),T=yC(T,mC(S,m)),I=mC(I,yC(w,y)),T=mC(T,yC(S,m)),A=I-y,C=T-m,f=y-A*P/E,d=m-C*P/E,f=yC(f,mC(u,y)),d=yC(d,mC(c,m)),f=mC(f,yC(u,y)),d=mC(d,yC(c,m)),A=y-f,C=m-d,I=y+A*E/P,T=m+C*E/P}t.bezierCurveTo(h,p,f,d,y,m),h=I,p=T}else t.lineTo(y,m)}u=y,c=m,g+=o}return v}var _C=function(){function t(){this.smooth=0,this.smoothConstraint=!0}return t}(),wC=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return d(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new _C},e.prototype.buildPath=function(t,e){var n=e.points,r=0,i=n.length/2;if(e.connectNulls){for(;i>0;i--)if(!bC(n[2*i-2],n[2*i-1]))break;for(;r=0){var m=s?(p-r)*y+r:(h-n)*y+n;return s?[t,m]:[m,t]}n=h,r=p;break;case a.C:h=o[u++],p=o[u++],f=o[u++],d=o[u++],g=o[u++],v=o[u++];var b=s?ce(n,h,f,g,t,l):ce(r,p,d,v,t,l);if(b>0)for(var x=0;x=0){m=s?le(r,p,d,v,_):le(n,h,f,g,_);return s?[t,m]:[m,t]}}n=g,r=v;break}}},e}(es),SC=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e}(_C),OC=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return d(e,t),e.prototype.getDefaultShape=function(){return new SC},e.prototype.buildPath=function(t,e){var n=e.points,r=e.stackedOnPoints,i=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0;o--)if(!bC(n[2*o-2],n[2*o-1]))break;for(;ie){r?i.push(a(r,l,e)):n&&i.push(a(n,l,0),a(n,l,e));break}n&&(i.push(a(n,l,0)),n=null),i.push(l),r=l}}return i}function RC(t,e,n){var r=t.getVisual("visualMeta");if(r&&r.length&&t.count()&&"cartesian2d"===e.type){for(var i,o,a=r.length-1;a>=0;a--){var s=t.getDimensionInfo(r[a].dimension);if(i=s&&s.coordDim,"x"===i||"y"===i){o=r[a];break}}if(o){var l=e.getAxis(i),u=v["map"](o.stops,(function(t){return{coord:l.toGlobalCoord(l.dataToCoord(t.value)),color:t.color}})),c=u.length,h=o.outerColors.slice();c&&u[0].coord>u[c-1].coord&&(u.reverse(),h.reverse());var p=EC(u,"x"===i?n.getWidth():n.getHeight()),f=p.length;if(!f&&c)return u[0].coord<0?h[1]?h[1]:u[c-1].color:h[0]?h[0]:u[0].color;var d=10,g=p[0].coord-d,y=p[f-1].coord+d,m=y-g;if(m<.001)return"transparent";v["each"](p,(function(t){t.offset=(t.coord-g)/m})),p.push({offset:f?p[f-1].offset:.5,color:h[1]||"transparent"}),p.unshift({offset:f?p[0].offset:.5,color:h[0]||"transparent"});var b=new fv(0,0,0,0,p,!0);return b[i]=g,b[i+"2"]=y,b}}}function NC(t,e,n){var r=t.get("showAllSymbol"),i="auto"===r;if(!r||i){var o=n.getAxesByScale("ordinal")[0];if(o&&(!i||!zC(o,e))){var a=e.mapDimension(o.dim),s={};return v["each"](o.getViewLabels(),(function(t){var e=o.scale.getRawOrdinalNumber(t.tickValue);s[e]=1})),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function zC(t,e){var n=t.getExtent(),r=Math.abs(n[1]-n[0])/t.scale.count();isNaN(r)&&(r=0);for(var i=e.count(),o=Math.max(1,Math.round(i/5)),a=0;ar)return!1;return!0}function BC(t,e){return isNaN(t)||isNaN(e)}function VC(t){for(var e=t.length/2;e>0;e--)if(!BC(t[2*e-2],t[2*e-1]))break;return e-1}function FC(t,e){return[t[2*e],t[2*e+1]]}function HC(t,e,n){for(var r,i,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||r>=e&&i<=e){l=u;break}s=u,r=i}else r=i;return{range:[s,l],t:(e-r)/(i-r)}}function GC(t){if(t.get(["endLabel","show"]))return!0;for(var e=0;e0&&"bolder"===t.get(["emphasis","lineStyle","width"])){var E=f.getState("emphasis").style;E.lineWidth=+f.style.lineWidth+1}Ns(f).seriesIndex=t.seriesIndex,Fl(f,L,j,P);var R=LC(t.get("smooth")),N=t.get("smoothMonotone");if(f.setShape({smooth:R,smoothMonotone:N,connectNulls:S}),d){var z=a.getCalculationInfo("stackedOnSeries"),B=0;d.useStyle(v["defaults"](l.getAreaStyle(),{fill:I,opacity:.7,lineJoin:"bevel",decal:a.getVisual("style").decal})),z&&(B=LC(z.get("smooth"))),d.setShape({smooth:R,stackedOnSmooth:B,smoothMonotone:N,connectNulls:S}),Ul(d,t,"areaStyle"),Ns(d).seriesIndex=t.seriesIndex,Fl(d,L,j,P)}var V=function(t){r._changePolyState(t)};a.eachItemGraphicEl((function(t){t&&(t.onHoverStateChange=V)})),this._polyline.onHoverStateChange=V,this._data=a,this._coordSys=i,this._stackedOnPoints=_,this._points=u,this._step=C,this._valueOrigin=b,t.get("triggerLineEvent")&&(this.packEventData(t,f),d&&this.packEventData(t,d))},e.prototype.packEventData=function(t,e){Ns(e).eventData={componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line"}},e.prototype.highlight=function(t,e,n,r){var i=t.getData(),o=Fi(i,r);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=i.getLayout("points"),s=i.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(isNaN(l)||isNaN(u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var c=t.get("zlevel"),h=t.get("z");s=new aC(i,o),s.x=l,s.y=u,s.setZ(c,h);var p=s.getSymbolPath().getTextContent();p&&(p.zlevel=c,p.z=h,p.z2=this._polyline.z2+1),s.__temp=!0,i.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else hy.prototype.highlight.call(this,t,e,n,r)},e.prototype.downplay=function(t,e,n,r){var i=t.getData(),o=Fi(i,r);if(this._changePolyState("normal"),null!=o&&o>=0){var a=i.getItemGraphicEl(o);a&&(a.__temp?(i.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else hy.prototype.downplay.call(this,t,e,n,r)},e.prototype._changePolyState=function(t){var e=this._polygon;fl(this._polyline,t),e&&fl(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new wC({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new OC({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var r,i,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(r=o.isHorizontal(),i=!1):"polar"===e.type&&(r="angle"===o.dim,i=!0);var s=t.hostModel,l=s.get("animationDuration");v["isFunction"](l)&&(l=l(null));var u=s.get("animationDelay")||0,c=v["isFunction"](u)?u(null):u;t.eachItemGraphicEl((function(t,o){var s=t;if(s){var h=[t.x,t.y],p=void 0,f=void 0,d=void 0;if(n)if(i){var g=n,y=e.pointToCoord(h);r?(p=g.startAngle,f=g.endAngle,d=-y[1]/180*Math.PI):(p=g.r0,f=g.r,d=y[0])}else{var m=n;r?(p=m.x,f=m.x+m.width,d=t.x):(p=m.y+m.height,f=m.y,d=t.y)}var b=f===p?0:(d-p)/(f-p);a&&(b=1-b);var x=v["isFunction"](u)?u(o):l*b+c,_=s.getSymbolPath(),w=_.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:x}),w&&w.animateFrom({style:{opacity:0}},{duration:300,delay:x}),_.disableLabelAnimation=!0}}))},e.prototype._initOrUpdateEndLabel=function(t,e,n){var r=t.getModel("endLabel");if(GC(t)){var i=t.getData(),o=this._polyline,a=i.getLayout("points");if(!a)return o.removeTextContent(),void(this._endLabel=null);var s=this._endLabel;s||(s=this._endLabel=new Rs({z2:200}),s.ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var l=VC(a);l>=0&&(fu(o,du(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:l,defaultText:function(t,e,n){return null!=n?rC(i,n):nC(i,t)},enableTextSetter:!0},UC(r,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,r,i,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==r.originalX&&(r.originalX=s.x,r.originalY=s.y);var u=n.getLayout("points"),c=n.hostModel,h=c.get("connectNulls"),p=o.get("precision"),f=o.get("distance")||0,d=a.getBaseAxis(),g=d.isHorizontal(),v=d.inverse,y=e.shape,m=v?g?y.x:y.y+y.height:g?y.x+y.width:y.y,b=(g?f:0)*(v?-1:1),x=(g?0:-f)*(v?-1:1),_=g?"x":"y",w=HC(u,m,_),S=w.range,O=S[1]-S[0],M=void 0;if(O>=1){if(O>1&&!h){var A=FC(u,S[0]);s.attr({x:A[0]+b,y:A[1]+x}),i&&(M=c.getRawValue(S[0]))}else{A=l.getPointOn(m,_);A&&s.attr({x:A[0]+b,y:A[1]+x});var C=c.getRawValue(S[0]),I=c.getRawValue(S[1]);i&&(M=Qi(n,p,C,I,w.t))}r.lastFrameIndex=S[0]}else{var T=1===t||r.lastFrameIndex>0?S[0]:0;A=FC(u,T);i&&(M=c.getRawValue(T)),s.attr({x:A[0]+b,y:A[1]+x})}i&&Ou(s).setLabelText(M)}},e.prototype._doUpdateAnimation=function(t,e,n,r,i,o,a){var s=this._polyline,l=this._polygon,u=t.hostModel,c=vC(this._data,t,this._stackedOnPoints,e,this._coordSys,n,this._valueOrigin,o),h=c.current,p=c.stackedOnCurrent,f=c.next,d=c.stackedOnNext;if(i&&(h=PC(c.current,n,i,a),p=PC(c.stackedOnCurrent,n,i,a),f=PC(c.next,n,i,a),d=PC(c.stackedOnNext,n,i,a)),DC(h,f)>3e3||l&&DC(p,d)>3e3)return s.stopAnimation(),s.setShape({points:f}),void(l&&(l.stopAnimation(),l.setShape({points:f,stackedOnPoints:d})));s.shape.__points=c.current,s.shape.points=h;var g={shape:{points:f}};c.current!==h&&(g.shape.__points=c.next),s.stopAnimation(),nu(s,g,u),l&&(l.setShape({points:h,stackedOnPoints:p}),l.stopAnimation(),nu(l,{shape:{stackedOnPoints:d}},u),s.shape.points!==l.shape.points&&(l.shape.points=s.shape.points));for(var v=[],y=c.status,m=0;me&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n10&&"cartesian2d"===o.type&&i){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),c=n.getDevicePixelRatio(),h=Math.abs(u[1]-u[0])*(c||1),p=Math.round(a/h);if(isFinite(p)&&p>1){"lttb"===i&&t.setData(r.lttbDownSample(r.mapDimension(l.dim),1/p));var f=void 0;Object(v["isString"])(i)?f=$C[i]:Object(v["isFunction"])(i)&&(f=i),f&&t.setData(r.downSample(r.mapDimension(l.dim),1/p,f,ZC))}}}}}function JC(t){t.registerChartView(qC),t.registerSeriesModel(eC),t.registerLayout(XC("line",!0)),t.registerVisual({seriesType:"line",reset:function(t){var e=t.getData(),n=t.getModel("lineStyle").getLineStyle();n&&!n.stroke&&(n.stroke=e.getVisual("style").fill),e.setVisual("legendLineStyle",n)}}),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,KC("line"))}var QC=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.getInitialData=function(t,e){return hw(null,this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t){var e=this.coordinateSystem;if(e&&e.clampData){var n=e.dataToPoint(e.clampData(t)),r=this.getData(),i=r.getLayout("offset"),o=r.getLayout("size"),a=e.getBaseAxis().isHorizontal()?0:1;return n[a]+=i+o/2,n}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e}(Hd);Hd.registerClass(QC);var tI=QC,eI=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.getInitialData=function(){return hw(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=Wu(tI.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e}(tI),nI=eI,rI=function(){function t(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0}return t}(),iI=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return d(e,t),e.prototype.getDefaultShape=function(){return new rI},e.prototype.buildPath=function(t,e){var n=e.cx,r=e.cy,i=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-i),s=i+a,l=e.startAngle,u=e.endAngle,c=e.clockwise,h=2*Math.PI,p=c?u-lMath.PI/2&&c<1.5*Math.PI&&(c-=Math.PI),t.setTextConfig({rotation:c})}}function lI(t,e,n){return e*Math.sin(t)*(n?-1:1)}function uI(t,e,n){return e*Math.cos(t)*(n?1:-1)}var cI=Math.max,hI=Math.min;function pI(t,e){var n=t.getArea&&t.getArea();if(IC(t,"cartesian2d")){var r=t.getBaseAxis();if("category"!==r.type||!r.onBand){var i=e.getLayout("bandWidth");r.isHorizontal()?(n.x-=i,n.width+=2*i):(n.y-=i,n.height+=2*i)}}return n}var fI=function(t){function e(){var n=t.call(this)||this;return n.type=e.type,n._isFirstFrame=!0,n}return d(e,t),e.prototype.render=function(t,e,n,r){this._model=t,this._removeOnRenderedListener(n),this._updateDrawMode(t);var i=t.get("coordinateSystem");("cartesian2d"===i||"polar"===i)&&(this._progressiveEls=null,this._isLargeDraw?this._renderLarge(t,e,n):this._renderNormal(t,e,n,r))},e.prototype.incrementalPrepareRender=function(t){this._clear(),this._updateDrawMode(t),this._updateLargeClip(t)},e.prototype.incrementalRender=function(t,e){this._progressiveEls=[],this._incrementalRenderLarge(t,e)},e.prototype.eachRendered=function(t){ny(this._progressiveEls||this.group,t)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t,e,n,r){var i,o=this.group,a=t.getData(),s=this._data,l=t.coordinateSystem,u=l.getBaseAxis();"cartesian2d"===l.type?i=u.isHorizontal():"polar"===l.type&&(i="angle"===u.dim);var c=t.isAnimationEnabled()?t:null,h=vI(t,l);h&&this._enableRealtimeSort(h,a,n);var p=t.get("clip",!0)||h,f=pI(l,a);o.removeClipPath();var d=t.get("roundCap",!0),g=t.get("showBackground",!0),v=t.getModel("backgroundStyle"),y=v.get("borderRadius")||0,m=[],b=this._backgroundEls,x=r&&r.isInitSort,_=r&&"changeAxisOrder"===r.type;function w(t){var e=wI[l.type](a,t),n=jI(l,i,e);return n.useStyle(v.getItemStyle()),"cartesian2d"===l.type&&n.setShape("r",y),m[t]=n,n}a.diff(s).add((function(e){var n=a.getItemModel(e),r=wI[l.type](a,e,n);if(g&&w(e),a.hasValue(e)&&_I[l.type](r)){var s=!1;p&&(s=dI[l.type](f,r));var v=gI[l.type](t,a,e,r,i,c,u.model,!1,d);h&&(v.forceLabelAnimation=!0),MI(v,a,e,n,r,t,i,"polar"===l.type),x?v.attr({shape:r}):h?yI(h,c,v,r,e,i,!1,!1):ru(v,{shape:r},t,e),a.setItemGraphicEl(e,v),o.add(v),v.ignore=s}})).update((function(e,n){var r=a.getItemModel(e),S=wI[l.type](a,e,r);if(g){var O=void 0;0===b.length?O=w(n):(O=b[n],O.useStyle(v.getItemStyle()),"cartesian2d"===l.type&&O.setShape("r",y),m[e]=O);var M=wI[l.type](a,e),A=LI(i,M,l);nu(O,{shape:A},c,e)}var C=s.getItemGraphicEl(n);if(a.hasValue(e)&&_I[l.type](S)){var I=!1;if(p&&(I=dI[l.type](f,S),I&&o.remove(C)),C?lu(C):C=gI[l.type](t,a,e,S,i,c,u.model,!!C,d),h&&(C.forceLabelAnimation=!0),_){var T=C.getTextContent();if(T){var k=Ou(T);null!=k.prevValue&&(k.prevValue=k.value)}}else MI(C,a,e,r,S,t,i,"polar"===l.type);x?C.attr({shape:S}):h?yI(h,c,C,S,e,i,!0,_):nu(C,{shape:S},t,e,null),a.setItemGraphicEl(e,C),C.ignore=I,o.add(C)}else o.remove(C)})).remove((function(e){var n=s.getItemGraphicEl(e);n&&su(n,t,e)})).execute();var S=this._backgroundGroup||(this._backgroundGroup=new Lr);S.removeAll();for(var O=0;Oo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,r=n.getExtent(),i=Math.max(0,r[0]),o=Math.min(r[1],n.getOrdinalMeta().categories.length-1);i<=o;++i)if(t.ordinalNumbers[i]!==n.getRawOrdinalNumber(i))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,r){if(this._isOrderChangedWithinSameData(t,e,n)){var i=this._dataSort(t,n,e);this._isOrderDifferentInView(i,n)&&(this._removeOnRenderedListener(r),r.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:i}))}},e.prototype._dispatchInitSort=function(t,e,n){var r=e.baseAxis,i=this._dataSort(t,r,(function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)}));n.dispatchAction({type:"changeAxisOrder",componentType:r.dim+"Axis",isInitSort:!0,axisId:r.index,sortInfo:i})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl((function(e){su(e,t,Ns(e).dataIndex)}))):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e}(hy),dI={cartesian2d:function(t,e){var n=e.width<0?-1:1,r=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),r<0&&(e.y+=e.height,e.height=-e.height);var i=t.x+t.width,o=t.y+t.height,a=cI(e.x,t.x),s=hI(e.x+e.width,i),l=cI(e.y,t.y),u=hI(e.y+e.height,o),c=si?s:a,e.y=h&&l>o?u:l,e.width=c?0:s-a,e.height=h?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),r<0&&(e.y+=e.height,e.height=-e.height),c||h},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var r=e.r;e.r=e.r0,e.r0=r}var i=hI(e.r,t.r),o=cI(e.r0,t.r0);e.r=i,e.r0=o;var a=i-o<0;if(n<0){r=e.r;e.r=e.r0,e.r0=r}return a}},gI={cartesian2d:function(t,e,n,r,i,o,a,s,l){var u=new ms({shape:Object(v["extend"])({},r),z2:1});if(u.__dataIndex=n,u.name="item",o){var c=u.shape,h=i?"height":"width";c[h]=0}return u},polar:function(t,e,n,r,i,o,a,s,l){var u=!i&&l?oI:zg,c=new u({shape:r,z2:1});c.name="item";var h=OI(i);if(c.calculateTextPosition=aI(h,{isRoundCap:u===oI}),o){var p=c.shape,f=i?"r":"endAngle",d={};p[f]=i?0:r.startAngle,d[f]=r[f],(s?nu:ru)(c,{shape:d},o)}return c}};function vI(t,e){var n=t.get("realtimeSort",!0),r=e.getBaseAxis();if(n&&"category"===r.type&&"cartesian2d"===e.type)return{baseAxis:r,otherAxis:e.getOtherAxis(r)}}function yI(t,e,n,r,i,o,a,s){var l,u;o?(u={x:r.x,width:r.width},l={y:r.y,height:r.height}):(u={y:r.y,height:r.height},l={x:r.x,width:r.width}),s||(a?nu:ru)(n,{shape:l},e,i,null);var c=e?t.baseAxis.model:null;(a?nu:ru)(n,{shape:u},c,i)}function mI(t,e){for(var n=0;n0?1:-1,a=r.height>0?1:-1;return{x:r.x+o*i/2,y:r.y+a*i/2,width:r.width-o*i,height:r.height-a*i}},polar:function(t,e,n){var r=t.getItemLayout(e);return{cx:r.cx,cy:r.cy,r0:r.r0,r:r.r,startAngle:r.startAngle,endAngle:r.endAngle,clockwise:r.clockwise}}};function SI(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}function OI(t){return function(t){var e=t?"Arc":"Angle";return function(t){switch(t){case"start":case"insideStart":case"end":case"insideEnd":return t+e;default:return t}}}(t)}function MI(t,e,n,r,i,o,a,s){var l=e.getItemVisual(n,"style");s||t.setShape("r",r.get(["itemStyle","borderRadius"])||0),t.useStyle(l);var u=r.getShallow("cursor");u&&t.attr("cursor",u);var c=s?a?i.r>=i.r0?"endArc":"startArc":i.endAngle>=i.startAngle?"endAngle":"startAngle":a?i.height>=0?"bottom":"top":i.width>=0?"right":"left",h=du(r);fu(t,h,{labelFetcher:o,labelDataIndex:n,defaultText:nC(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:c});var p=t.getTextContent();if(s&&p){var f=r.get(["label","position"]);t.textConfig.inside="middle"===f||null,sI(t,"outside"===f?c:f,OI(a),r.get(["label","rotate"]))}Mu(p,h,o.getRawValue(n),(function(t){return rC(e,t)}));var d=r.getModel(["emphasis"]);Fl(t,d.get("focus"),d.get("blurScope"),d.get("disabled")),Ul(t,r),SI(i)&&(t.style.fill="none",t.style.stroke="none",Object(v["each"])(t.states,(function(t){t.style&&(t.style.fill=t.style.stroke="none")})))}function AI(t,e){var n=t.get(["itemStyle","borderColor"]);if(!n||"none"===n)return 0;var r=t.get(["itemStyle","borderWidth"])||0,i=isNaN(e.width)?Number.MAX_VALUE:Math.abs(e.width),o=isNaN(e.height)?Number.MAX_VALUE:Math.abs(e.height);return Math.min(r,i,o)}var CI=function(){function t(){}return t}(),II=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return d(e,t),e.prototype.getDefaultShape=function(){return new CI},e.prototype.buildPath=function(t,e){for(var n=e.points,r=this.baseDimIdx,i=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;l=0?n:null}),30,!1);function DI(t,e,n){for(var r=t.baseDimIdx,i=1-r,o=t.shape.points,a=t.largeDataIndices,s=[],l=[],u=t.barWidth,c=0,h=o.length/3;c=s[0]&&e<=s[0]+l[0]&&n>=s[1]&&n<=s[1]+l[1])return a[c]}return-1}function LI(t,e,n){if(IC(n,"cartesian2d")){var r=e,i=n.getArea();return{x:t?r.x:i.x,y:t?i.y:r.y,width:t?r.width:i.width,height:t?i.height:r.height}}i=n.getArea();var o=e;return{cx:i.cx,cy:i.cy,r0:t?i.r0:o.r0,r:t?i.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}function jI(t,e,n){var r="polar"===t.type?zg:ms;return new r({shape:LI(e,n,t),silent:!0,z2:0})}var PI=fI;function EI(t){t.registerChartView(PI),t.registerSeriesModel(nI),t.registerLayout(t.PRIORITY.VISUAL.LAYOUT,v["curry"](Ww,"bar")),t.registerLayout(t.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,Uw("bar")),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,KC("bar")),t.registerAction({type:"changeAxisOrder",event:"changeAxisOrder",update:"update"},(function(t,e){var n=t.componentType||"series";e.eachComponent({mainType:n,query:t},(function(e){t.sortInfo&&e.axis.setCategorySortInfo(t.sortInfo)}))}))}var RI=2*Math.PI,NI=Math.PI/180;function zI(t,e){return ih(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function BI(t,e){var n=zI(t,e),r=t.get("center"),i=t.get("radius");v["isArray"](i)||(i=[0,i]),v["isArray"](r)||(r=[r,r]);var o=Xr(n.width,e.getWidth()),a=Xr(n.height,e.getHeight()),s=Math.min(o,a),l=Xr(r[0],o)+n.x,u=Xr(r[1],a)+n.y,c=Xr(i[0],s/2),h=Xr(i[1],s/2);return{cx:l,cy:u,r0:c,r:h}}function VI(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),r=e.mapDimension("value"),i=zI(t,n),o=BI(t,n),a=o.cx,s=o.cy,l=o.r,u=o.r0,c=-t.get("startAngle")*NI,h=t.get("minAngle")*NI,p=0;e.each(r,(function(t){!isNaN(t)&&p++}));var f=e.getSum(r),d=Math.PI/(f||p)*2,g=t.get("clockwise"),v=t.get("roseType"),y=t.get("stillShowZeroSum"),m=e.getDataExtent(r);m[0]=0;var b=RI,x=0,_=c,w=g?1:-1;if(e.setLayout({viewRect:i,r:l}),e.each(r,(function(t,n){var r;if(isNaN(t))e.setItemLayout(n,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:g,cx:a,cy:s,r0:u,r:v?NaN:l});else{r="area"!==v?0===f&&y?d:t*d:RI/p,rn?a:o,c=Math.abs(l.label.y-n);if(c>=u.maxY){var h=l.label.x-e-l.len2*i,p=r+l.len,d=Math.abs(h)t.unconstrainedWidth?null:f:null;r.setStyle("width",d)}var g=r.getBoundingRect();o.width=g.width;var v=(r.style.margin||0)+2.1;o.height=g.height+v,o.y-=(o.height-h)/2}}}function YI(t){return"center"===t.position}function qI(t){var e,n,r=t.getData(),i=[],o=!1,a=(t.get("minShowLabelAngle")||0)*HI,s=r.getLayout("viewRect"),l=r.getLayout("r"),u=s.width,c=s.x,h=s.y,p=s.height;function f(t){t.ignore=!0}function d(t){if(!t.ignore)return!0;for(var e in t.states)if(!1===t.states[e].ignore)return!0;return!1}r.each((function(t){var s=r.getItemGraphicEl(t),h=s.shape,p=s.getTextContent(),g=s.getTextGuideLine(),y=r.getItemModel(t),m=y.getModel("label"),b=m.get("position")||y.get(["emphasis","label","position"]),x=m.get("distanceToLabelLine"),_=m.get("alignTo"),w=Xr(m.get("edgeDistance"),u),S=m.get("bleedMargin"),O=y.getModel("labelLine"),M=O.get("length");M=Xr(M,u);var A=O.get("length2");if(A=Xr(A,u),Math.abs(h.endAngle-h.startAngle)0?"right":"left":L>0?"left":"right"}var F=Math.PI,H=0,G=m.get("rotate");if(Object(v["isNumber"])(G))H=G*(F/180);else if("center"===b)H=0;else if("radial"===G||!0===G){var W=L<0?-D+F:-D;H=W}else if("tangential"===G&&"outside"!==b&&"outer"!==b){var U=Math.atan2(L,j);U<0&&(U=2*F+U);var Y=j>0;Y&&(U=F+U),H=U-F}if(o=!!H,p.x=C,p.y=I,p.rotation=H,p.setStyle({verticalAlign:"middle"}),P){p.setStyle({align:k});var q=p.states.select;q&&(q.x+=p.x,q.y+=p.y)}else{var X=p.getBoundingRect().clone();X.applyTransform(p.getComputedTransform());var $=(p.style.margin||0)+2.1;X.y-=$/2,X.height+=$,i.push({label:p,labelLine:g,position:b,len:M,len2:A,minTurnAngle:O.get("minTurnAngle"),maxSurfaceAngle:O.get("maxSurfaceAngle"),surfaceNormal:new $n(L,j),linePoints:T,textAlign:k,labelDistance:x,labelAlignTo:_,edgeDistance:w,bleedMargin:S,rect:X,unconstrainedWidth:X.width,labelStyleWidth:p.style.width})}s.setTextConfig({inside:P})}})),!o&&t.get("avoidLabelOverlap")&&WI(i,e,n,l,u,p,c,h);for(var g=0;g0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=r.r0}},e.type="pie",e}(hy),KI=ZI;function JI(t,e,n){e=Object(v["isArray"])(e)&&{coordDimensions:e}||Object(v["extend"])({encodeDefine:t.getEncode()},e);var r=t.getSource(),i=X_(r,e).dimensions,o=new Y_(i,t);return o.initData(r,n),o}var QI=function(){function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return t.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},t.prototype.containName=function(t){var e=this._getRawData();return e.indexOfName(t)>=0},t.prototype.indexOfName=function(t){var e=this._getDataWithEncodedVisual();return e.indexOfName(t)},t.prototype.getItemVisual=function(t,e){var n=this._getDataWithEncodedVisual();return n.getItemVisual(t,e)},t}(),tT=QI,eT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new tT(v["bind"](this.getData,this),v["bind"](this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return JI(this,{coordDimensions:["value"],encodeDefaulter:v["curry"](Dh,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),r=t.prototype.getDataParams.call(this,e),i=[];return n.each(n.mapDimension("value"),(function(t){i.push(t)})),r.percent=ti(i,e,n.hostModel.get("percentPrecision")),r.$vars.push("percent"),r},e.prototype._defaultLabelLine=function(t){_i(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(Hd),nT=eT;function rT(t){return{seriesType:t,reset:function(t,e){var n=t.getData();n.filterSelf((function(t){var e=n.mapDimension("value"),r=n.get(e,t);return!(Object(v["isNumber"])(r)&&!isNaN(r)&&r<0)}))}}}function iT(t){t.registerChartView(KI),t.registerSeriesModel(nT),sm("pie",t.registerAction),t.registerLayout(Object(v["curry"])(VI,"pie")),t.registerProcessor(FI("pie")),t.registerProcessor(rT("pie"))}var oT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return d(e,t),e.prototype.getInitialData=function(t,e){return hw(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}},e}(Hd),aT=oT,sT=4,lT=function(){function t(){}return t}(),uT=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return d(e,t),e.prototype.getDefaultShape=function(){return new lT},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.buildPath=function(t,e){var n,r=e.points,i=e.size,o=this.symbolProxy,a=o.shape,s=t.getContext?t.getContext():t,l=s&&i[0]=0;s--){var l=2*s,u=r[l]-o/2,c=r[l+1]-a/2;if(t>=u&&e>=c&&t<=u+o&&e<=c+a)return s}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),r=this.getBoundingRect();if(t=n[0],e=n[1],r.contain(t,e)){var i=this.hoverDataIdx=this.findDataIndex(t,e);return i>=0}return this.hoverDataIdx=-1,!1},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.points,r=e.size,i=r[0],o=r[1],a=1/0,s=1/0,l=-1/0,u=-1/0,c=0;c=0&&(l.dataIndex=n+(t.startIndex||0))}))},t.prototype.remove=function(){this._clear()},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),hT=cT,pT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=t.getData(),i=this._updateSymbolDraw(r,t);i.updateData(r,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var r=t.getData(),i=this._updateSymbolDraw(r,t);i.incrementalPrepareUpdate(r),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),{clipShape:this._getClipShape(e)}),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var r=t.getData();if(this.group.dirty(),!this._finished||r.count()>1e4)return{update:!0};var i=XC("").reset(t,e,n);i.progress&&i.progress({start:0,end:r.count(),count:r.count()},r),this._symbolDraw.updateLayout(r)},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._getClipShape=function(t){var e=t.coordinateSystem,n=e&&e.getArea&&e.getArea();return t.get("clip",!0)?n:null},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,r=e.pipelineContext,i=r.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new hT:new hC,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(hy),fT=pT,dT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e}(dh),gT=dT,vT=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Yi).models[0]},e.type="cartesian2dAxis",e}(dh);v["mixin"](vT,RS);var yT={show:!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:"#6E7079",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:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},mT=v["merge"]({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},yT),bT=v["merge"]({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},yT),xT=v["merge"]({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},bT),_T=v["defaults"]({logBase:10},bT),wT={category:mT,value:bT,time:xT,log:_T},ST={value:1,category:1,time:1,log:1};function OT(t,e,n,r){Object(v["each"])(ST,(function(i,o){var a=Object(v["merge"])(Object(v["merge"])({},wT[o],!0),r,!0),s=function(t){function n(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e+"Axis."+o,n}return d(n,t),n.prototype.mergeDefaultAndTheme=function(t,e){var n=sh(this),r=n?uh(t):{},i=e.getTheme();Object(v["merge"])(t,i.get(o+"Axis")),Object(v["merge"])(t,this.getDefaultOption()),t.type=MT(t),n&&lh(t,r,n)},n.prototype.optionUpdated=function(){var t=this.option;"category"===t.type&&(this.__ordinalMeta=yw.createByAxisModel(this))},n.prototype.getCategories=function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},n.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},n.type=e+"Axis."+o,n.defaultOption=a,n}(n);t.registerComponentModel(s)})),t.registerSubTypeDefaulter(e+"Axis",MT)}function MT(t){return t.type||(t.data?"category":"value")}var AT=function(){function t(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return t.prototype.getAxis=function(t){return this._axes[t]},t.prototype.getAxes=function(){return v["map"](this._dimList,(function(t){return this._axes[t]}),this)},t.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),v["filter"](this.getAxes(),(function(e){return e.scale.type===t}))},t.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},t}(),CT=AT,IT=["x","y"];function TT(t){return"interval"===t.type||"time"===t.type}var kT=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="cartesian2d",e.dimensions=IT,e}return d(e,t),e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,e=this.getAxis("y").scale;if(TT(t)&&TT(e)){var n=t.getExtent(),r=e.getExtent(),i=this.dataToPoint([n[0],r[0]]),o=this.dataToPoint([n[1],r[1]]),a=n[1]-n[0],s=r[1]-r[0];if(a&&s){var l=(o[0]-i[0])/a,u=(o[1]-i[1])/s,c=i[0]-n[0]*l,h=i[1]-r[0]*u,p=this._transform=[l,0,0,u,c,h];this._invTransform=En([],p)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,e){var n=this.dataToPoint(t),r=this.dataToPoint(e),i=this.getArea(),o=new or(n[0],n[1],r[0]-n[0],r[1]-n[1]);return i.intersect(o)},e.prototype.dataToPoint=function(t,e,n){n=n||[];var r=t[0],i=t[1];if(this._transform&&null!=r&&isFinite(r)&&null!=i&&isFinite(i))return B(n,t,this._transform);var o=this.getAxis("x"),a=this.getAxis("y");return n[0]=o.toGlobalCoord(o.dataToCoord(r,e)),n[1]=a.toGlobalCoord(a.dataToCoord(i,e)),n},e.prototype.clampData=function(t,e){var n=this.getAxis("x").scale,r=this.getAxis("y").scale,i=n.getExtent(),o=r.getExtent(),a=n.parse(t[0]),s=r.parse(t[1]);return e=e||[],e[0]=Math.min(Math.max(Math.min(i[0],i[1]),a),Math.max(i[0],i[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},e.prototype.pointToData=function(t,e){var n=[];if(this._invTransform)return B(n,t,this._invTransform);var r=this.getAxis("x"),i=this.getAxis("y");return n[0]=r.coordToData(r.toLocalCoord(t[0]),e),n[1]=i.coordToData(i.toLocalCoord(t[1]),e),n},e.prototype.getOtherAxis=function(t){return this.getAxis("x"===t.dim?"y":"x")},e.prototype.getArea=function(){var t=this.getAxis("x").getGlobalExtent(),e=this.getAxis("y").getGlobalExtent(),n=Math.min(t[0],t[1]),r=Math.min(e[0],e[1]),i=Math.max(t[0],t[1])-n,o=Math.max(e[0],e[1])-r;return new or(n,r,i,o)},e}(CT),DT=kT,LT=function(t){function e(e,n,r,i,o){var a=t.call(this,e,n,r)||this;return a.index=0,a.type=i||"value",a.position=o||"bottom",a}return d(e,t),e.prototype.isHorizontal=function(){var t=this.position;return"top"===t||"bottom"===t},e.prototype.getGlobalExtent=function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(SO),jT=LT;function PT(t,e,n){n=n||{};var r=t.coordinateSystem,i=e.axis,o={},a=i.getAxesOnZeroOf()[0],s=i.position,l=a?"onZero":s,u=i.dim,c=r.getRect(),h=[c.x,c.x+c.width,c.y,c.y+c.height],p={left:0,right:1,top:0,bottom:1,onZero:2},f=e.get("offset")||0,d="x"===u?[h[2]-f,h[3]+f]:[h[0]-f,h[1]+f];if(a){var g=a.toGlobalCoord(a.dataToCoord(0));d[p.onZero]=Math.max(Math.min(g,d[1]),d[0])}o.position=["y"===u?d[p[l]]:h[0],"x"===u?d[p[l]]:h[3]],o.rotation=Math.PI/2*("x"===u?0:1);var y={top:-1,bottom:1,left:-1,right:1};o.labelDirection=o.tickDirection=o.nameDirection=y[s],o.labelOffset=a?d[p[s]]-d[p.onZero]:0,e.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),v["retrieve"](n.labelInside,e.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var m=e.get(["axisLabel","rotate"]);return o.labelRotate="top"===l?-m:m,o.z2=1,o}function ET(t){return"cartesian2d"===t.get("coordinateSystem")}function RT(t){var e={xAxisModel:null,yAxisModel:null};return v["each"](e,(function(n,r){var i=r.replace(/Model$/,""),o=t.getReferringComponents(i,Yi).models[0];e[r]=o})),e}var NT=Math.log;function zT(t,e,n){var r=Dw.prototype,i=r.getTicks.call(n),o=r.getTicks.call(n,!0),a=i.length-1,s=r.getInterval.call(n),l=SS(t,e),u=l.extent,c=l.fixMin,h=l.fixMax;if("log"===t.type){var p=NT(t.base);u=[NT(u[0])/p,NT(u[1])/p]}t.setExtent(u[0],u[1]),t.calcNiceExtent({splitNumber:a,fixMin:c,fixMax:h});var f=r.getExtent.call(t);c&&(u[0]=f[0]),h&&(u[1]=f[1]);var d=r.getInterval.call(t),g=u[0],v=u[1];if(c&&h)d=(v-g)/a;else if(c){v=u[0]+d*a;while(vu[0]&&isFinite(g)&&isFinite(u[0]))d=xw(d),g=u[1]-d*a}else{var y=t.getTicks().length-1;y>a&&(d=xw(d));var m=d*a;v=Math.ceil(u[1]/d)*d,g=$r(v-m),g<0&&u[0]>=0?(g=0,v=$r(m)):v>0&&u[1]<=0&&(v=0,g=-$r(m))}var b=(i[0].value-o[0].value)/s,x=(i[a].value-o[a].value)/s;r.setExtent.call(t,g+d*b,v+d*x),r.setInterval.call(t,d),(b||x)&&r.setNiceExtent.call(t,g+d,v-d)}var BT=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=IT,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;function r(t){var e,n=Object(v["keys"])(t),r=n.length;if(r){for(var i=[],o=r-1;o>=0;o--){var a=+n[o],s=t[a],l=s.model,u=s.scale;mw(u)&&l.get("alignTicks")&&null==l.get("interval")?i.push(s):(MS(u,l),mw(u)&&(e=s))}i.length&&(e||(e=i.pop(),MS(e.scale,e.model)),Object(v["each"])(i,(function(t){zT(t.scale,t.model,e.scale)})))}}this._updateScale(t,this.model),r(n.x),r(n.y);var i={};Object(v["each"])(n.x,(function(t){FT(n,"y",t,i)})),Object(v["each"])(n.y,(function(t){FT(n,"x",t,i)})),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var r=t.getBoxLayoutParams(),i=!n&&t.get("containLabel"),o=ih(r,{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;function s(){Object(v["each"])(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,o.height],r=t.inverse?1:0;t.setExtent(n[r],n[1-r]),GT(t,e?o.x:o.y)}))}s(),i&&(Object(v["each"])(a,(function(t){if(!t.model.get(["axisLabel","inside"])){var e=kS(t);if(e){var n=t.isHorizontal()?"height":"width",r=t.model.get(["axisLabel","margin"]);o[n]-=e[n]+r,"top"===t.position?o.y+=e.height+r:"left"===t.position&&(o.x+=e.width+r)}}})),s()),Object(v["each"])(this._coordsList,(function(t){t.calcAffineTransform()}))},t.prototype.getAxis=function(t,e){var n=this._axesMap[t];if(null!=n)return n[e||0]},t.prototype.getAxes=function(){return this._axesList.slice()},t.prototype.getCartesian=function(t,e){if(null!=t&&null!=e){var n="x"+t+"y"+e;return this._coordsMap[n]}Object(v["isObject"])(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var r=0,i=this._coordsList;r0?"top":"bottom",r="center"):ii(o-UT)?(i=n>0?"bottom":"top",r="center"):(i="middle",r=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:r,textVerticalAlign:i}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),qT={axisLine:function(t,e,n,r){var i=e.get(["axisLine","show"]);if("auto"===i&&t.handleAutoShown&&(i=t.handleAutoShown("axisLine")),i){var o=e.axis.getExtent(),a=r.transform,s=[o[0],0],l=[o[1],0];a&&(B(s,s,a),B(l,l,a));var u=Object(v["extend"])({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),c=new Qg({subPixelOptimize:!0,shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:u,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1});c.anid="line",n.add(c);var h=e.get(["axisLine","symbol"]);if(null!=h){var p=e.get(["axisLine","symbolSize"]);Object(v["isString"])(h)&&(h=[h,h]),(Object(v["isString"])(p)||Object(v["isNumber"])(p))&&(p=[p,p]);var f=Am(e.get(["axisLine","symbolOffset"])||0,p),d=p[0],g=p[1];Object(v["each"])([{rotate:t.rotation+Math.PI/2,offset:f[0],r:0},{rotate:t.rotation-Math.PI/2,offset:f[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],(function(e,r){if("none"!==h[r]&&null!=h[r]){var i=Om(h[r],-d/2,-g/2,d,g,u.stroke,!0),o=e.r+e.offset;i.attr({rotation:e.rotate,x:s[0]+o*Math.cos(t.rotation),y:s[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),n.add(i)}}))}}},axisTickLabel:function(t,e,n,r){var i=tk(n,r,e,t),o=nk(n,r,e,t);if($T(e,o,i),ek(n,r,e,t.tickDirection),e.get(["axisLabel","hideOverlap"])){var a=JO(Object(v["map"])(o,(function(t){return{label:t,priority:t.z2,defaultAttr:{ignore:t.ignore}}})));nM(a)}},axisName:function(t,e,n,r){var i=Object(v["retrieve"])(t.axisName,e.get("name"));if(i){var o,a,s=e.get("nameLocation"),l=t.nameDirection,u=e.getModel("nameTextStyle"),c=e.get("nameGap")||0,h=e.axis.getExtent(),p=h[0]>h[1]?-1:1,f=["start"===s?h[0]-p*c:"end"===s?h[1]+p*c:(h[0]+h[1])/2,JT(s)?t.labelOffset+l*c:0],d=e.get("nameRotate");null!=d&&(d=d*UT/180),JT(s)?o=YT.innerTextLayout(t.rotation,null!=d?d:t.rotation,l):(o=XT(t.rotation,s,d||0,h),a=t.axisNameAvailableWidth,null!=a&&(a=Math.abs(a/Math.sin(o.rotation)),!isFinite(a)&&(a=null)));var g=u.getFont(),y=e.get("nameTruncate",!0)||{},m=y.ellipsis,b=Object(v["retrieve"])(t.nameTruncateMaxWidth,y.maxWidth,a),x=new Rs({x:f[0],y:f[1],rotation:o.rotation,silent:YT.isLabelSilent(e),style:gu(u,{text:i,font:g,overflow:"truncate",width:b,ellipsis:m,fill:u.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:u.get("align")||o.textAlign,verticalAlign:u.get("verticalAlign")||o.textVerticalAlign}),z2:1});if(ty({el:x,componentModel:e,itemName:i}),x.__fullText=i,x.anid="name",e.get("triggerEvent")){var _=YT.makeAxisEventDataBase(e);_.targetType="axisName",_.name=i,Ns(x).eventData=_}r.add(x),x.updateTransform(),n.add(x),x.decomposeTransform()}}};function XT(t,e,n,r){var i,o,a=ri(n-t),s=r[0]>r[1],l="start"===e&&!s||"start"!==e&&s;return ii(a-UT/2)?(o=l?"bottom":"top",i="center"):ii(a-1.5*UT)?(o=l?"top":"bottom",i="center"):(o="middle",i=a<1.5*UT&&a>UT/2?l?"left":"right":l?"right":"left"),{rotation:a,textAlign:i,textVerticalAlign:o}}function $T(t,e,n){if(!jS(t.axis)){var r=t.get(["axisLabel","showMinLabel"]),i=t.get(["axisLabel","showMaxLabel"]);e=e||[],n=n||[];var o=e[0],a=e[1],s=e[e.length-1],l=e[e.length-2],u=n[0],c=n[1],h=n[n.length-1],p=n[n.length-2];!1===r?(ZT(o),ZT(u)):KT(o,a)&&(r?(ZT(a),ZT(c)):(ZT(o),ZT(u))),!1===i?(ZT(s),ZT(h)):KT(l,s)&&(i?(ZT(l),ZT(p)):(ZT(s),ZT(h)))}}function ZT(t){t&&(t.ignore=!0)}function KT(t,e){var n=t&&t.getBoundingRect().clone(),r=e&&e.getBoundingRect().clone();if(n&&r){var i=Tn([]);return jn(i,i,-t.rotation),n.applyTransform(Dn([],i,t.getLocalTransform())),r.applyTransform(Dn([],i,e.getLocalTransform())),n.intersect(r)}}function JT(t){return"middle"===t||"center"===t}function QT(t,e,n,r,i){for(var o=[],a=[],s=[],l=0;l=0||t===e}function ck(t){var e=hk(t);if(e){var n=e.axisPointerModel,r=e.axis.scale,i=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=r.parse(a));var s=fk(n);null==o&&(i.status=s?"show":"hide");var l=r.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),a0&&!h.min?h.min=0:null!=h.min&&h.min<0&&!h.max&&(h.max=0);var p=a;null!=h.color&&(p=v["defaults"]({color:h.color},a));var f=v["merge"](v["clone"](h),{boundaryGap:t,splitNumber:e,scale:n,axisLine:r,axisTick:i,axisLabel:o,name:h.text,showName:s,nameLocation:"end",nameGap:u,nameTextStyle:p,triggerEvent:c},!1);if(v["isString"](l)){var d=f.name;f.name=l.replace("{value}",null!=d?d:"")}else v["isFunction"](l)&&(f.name=l(f.name,f));var g=new Bu(f,null,this.ecModel);return v["mixin"](g,RS.prototype),g.mainType="radar",g.componentIndex=this.componentIndex,g}),this);this._indicatorModels=h},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type="radar",e.defaultOption={z:0,center:["50%","50%"],radius:"75%",startAngle:90,axisName:{show:!0},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:v["merge"]({lineStyle:{color:"#bbb"}},Bk.axisLine),axisLabel:Vk(Bk.axisLabel,!1),axisTick:Vk(Bk.axisTick,!1),splitLine:Vk(Bk.splitLine,!0),splitArea:Vk(Bk.splitArea,!0),indicator:[]},e}(dh),Hk=Fk,Gk=["axisLine","axisTickLabel","axisName"],Wk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=this.group;r.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},e.prototype._buildAxes=function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes(),r=v["map"](n,(function(t){var n=t.model.get("showName")?t.name:"",r=new rk(t.model,{axisName:n,position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return r}));v["each"](r,(function(t){v["each"](Gk,t.add,t),this.group.add(t.getGroup())}),this)},e.prototype._buildSplitLineAndArea=function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes();if(n.length){var r=t.get("shape"),i=t.getModel("splitLine"),o=t.getModel("splitArea"),a=i.getModel("lineStyle"),s=o.getModel("areaStyle"),l=i.get("show"),u=o.get("show"),c=a.get("color"),h=s.get("color"),p=v["isArray"](c)?c:[c],f=v["isArray"](h)?h:[h],d=[],g=[];if("circle"===r)for(var y=n[0].getTicksCoords(),m=e.cx,b=e.cy,x=0;x3?1.4:i>1?1.2:1.1,l=r>0?s:1/s;iD(this,"zoom","zoomOnMouseWheel",t,{scale:l,originX:o,originY:a,isAvailableBehavior:null})}if(n){var u=Math.abs(r),c=(r>0?1:-1)*(u>3?.4:u>1?.15:.05);iD(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:c,originX:o,originY:a,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){if(!eD(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;iD(this,"zoom",null,t,{scale:e,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})}},e}(Y);function iD(t,e,n,r,i){t.pointerChecker&&t.pointerChecker(r,i.originX,i.originY)&&(ft(r.event),oD(t,e,n,r,i))}function oD(t,e,n,r,i){i.isAvailableBehavior=Object(v["bind"])(aD,null,n,r),t.trigger(e,i)}function aD(t,e,n){var r=n[t];return!t||r&&(!Object(v["isString"])(r)||e.event[r+"Key"])}var sD=rD;function lD(t,e,n){var r=t.target;r.x+=e,r.y+=n,r.dirty()}function uD(t,e,n,r){var i=t.target,o=t.zoomLimit,a=t.zoom=t.zoom||1;if(a*=e,o){var s=o.min||0,l=o.max||1/0;a=Math.max(Math.min(l,a),s)}var u=a/t.zoom;t.zoom=a,i.x-=(n-i.x)*(u-1),i.y-=(r-i.y)*(u-1),i.scaleX*=u,i.scaleY*=u,i.dirty()}var cD,hD={axisPointer:1,tooltip:1,brush:1};function pD(t,e,n){var r=e.getComponentByElement(t.topTarget),i=r&&r.coordinateSystem;return r&&r!==n&&!hD.hasOwnProperty(r.mainType)&&i&&i.model!==n}function fD(t){if(Object(v["isString"])(t)){var e=new DOMParser;t=e.parseFromString(t,"text/xml")}var n=t;9===n.nodeType&&(n=n.firstChild);while("svg"!==n.nodeName.toLowerCase()||1!==n.nodeType)n=n.nextSibling;return n}var dD={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-anchor":"textAlign",visibility:"visibility",display:"display"},gD=Object(v["keys"])(dD),vD={"alignment-baseline":"textBaseline","stop-color":"stopColor"},yD=Object(v["keys"])(vD),mD=function(){function t(){this._defs={},this._root=null}return t.prototype.parse=function(t,e){e=e||{};var n=fD(t);this._defsUsePending=[];var r=new Lr;this._root=r;var i=[],o=n.getAttribute("viewBox")||"",a=parseFloat(n.getAttribute("width")||e.width),s=parseFloat(n.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(s)&&(s=null),OD(n,r,null,!0,!1);var l,u,c=n.firstChild;while(c)this._parseNode(c,r,i,null,!1,!1),c=c.nextSibling;if(ID(this._defs,this._defsUsePending),this._defsUsePending=[],o){var h=kD(o);h.length>=4&&(l={x:parseFloat(h[0]||0),y:parseFloat(h[1]||0),width:parseFloat(h[2]),height:parseFloat(h[3])})}if(l&&null!=a&&null!=s&&(u=ND(l,{x:0,y:0,width:a,height:s}),!e.ignoreViewBox)){var p=r;r=new Lr,r.add(p),p.scaleX=p.scaleY=u.scale,p.x=u.x,p.y=u.y}return e.ignoreRootClip||null==a||null==s||r.setClipPath(new ms({shape:{x:0,y:0,width:a,height:s}})),{root:r,width:a,height:s,viewBoxRect:l,viewBoxTransform:u,named:i}},t.prototype._parseNode=function(t,e,n,r,i,o){var a,s=t.nodeName.toLowerCase(),l=r;if("defs"===s&&(i=!0),"text"===s&&(o=!0),"defs"===s||"switch"===s)a=e;else{if(!i){var u=cD[s];if(u&&Object(v["hasOwn"])(cD,s)){a=u.call(this,t,e);var c=t.getAttribute("name");if(c){var h={name:c,namedFrom:null,svgNodeTagLower:s,el:a};n.push(h),"g"===s&&(l=h)}else r&&n.push({name:r.name,namedFrom:r,svgNodeTagLower:s,el:a});e.add(a)}}var p=bD[s];if(p&&Object(v["hasOwn"])(bD,s)){var f=p.call(this,t),d=t.getAttribute("id");d&&(this._defs[d]=f)}}if(a&&a.isGroup){var g=t.firstChild;while(g)1===g.nodeType?this._parseNode(g,a,n,l,i,o):3===g.nodeType&&o&&this._parseText(g,a),g=g.nextSibling}},t.prototype._parseText=function(t,e){var n=new is({style:{text:t.textContent},silent:!0,x:this._textX||0,y:this._textY||0});wD(e,n),OD(t,n,this._defsUsePending,!1,!1),MD(n,e);var r=n.style,i=r.fontSize;i&&i<9&&(r.fontSize=9,n.scaleX*=i/9,n.scaleY*=i/9);var o=(r.fontSize||r.fontFamily)&&[r.fontStyle,r.fontWeight,(r.fontSize||12)+"px",r.fontFamily||"sans-serif"].join(" ");r.font=o;var a=n.getBoundingRect();return this._textX+=a.width,e.add(n),n},t.internalField=function(){cD={g:function(t,e){var n=new Lr;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n},rect:function(t,e){var n=new ms;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n.setShape({x:parseFloat(t.getAttribute("x")||"0"),y:parseFloat(t.getAttribute("y")||"0"),width:parseFloat(t.getAttribute("width")||"0"),height:parseFloat(t.getAttribute("height")||"0")}),n.silent=!0,n},circle:function(t,e){var n=new yg;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),r:parseFloat(t.getAttribute("r")||"0")}),n.silent=!0,n},line:function(t,e){var n=new Qg;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n.setShape({x1:parseFloat(t.getAttribute("x1")||"0"),y1:parseFloat(t.getAttribute("y1")||"0"),x2:parseFloat(t.getAttribute("x2")||"0"),y2:parseFloat(t.getAttribute("y2")||"0")}),n.silent=!0,n},ellipse:function(t,e){var n=new xg;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),rx:parseFloat(t.getAttribute("rx")||"0"),ry:parseFloat(t.getAttribute("ry")||"0")}),n.silent=!0,n},polygon:function(t,e){var n,r=t.getAttribute("points");r&&(n=SD(r));var i=new Yg({shape:{points:n||[]},silent:!0});return wD(e,i),OD(t,i,this._defsUsePending,!1,!1),i},polyline:function(t,e){var n,r=t.getAttribute("points");r&&(n=SD(r));var i=new $g({shape:{points:n||[]},silent:!0});return wD(e,i),OD(t,i,this._defsUsePending,!1,!1),i},image:function(t,e){var n=new us;return wD(e,n),OD(t,n,this._defsUsePending,!1,!1),n.setStyle({image:t.getAttribute("xlink:href")||t.getAttribute("href"),x:+t.getAttribute("x"),y:+t.getAttribute("y"),width:+t.getAttribute("width"),height:+t.getAttribute("height")}),n.silent=!0,n},text:function(t,e){var n=t.getAttribute("x")||"0",r=t.getAttribute("y")||"0",i=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0";this._textX=parseFloat(n)+parseFloat(i),this._textY=parseFloat(r)+parseFloat(o);var a=new Lr;return wD(e,a),OD(t,a,this._defsUsePending,!1,!0),a},tspan:function(t,e){var n=t.getAttribute("x"),r=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=r&&(this._textY=parseFloat(r));var i=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0",a=new Lr;return wD(e,a),OD(t,a,this._defsUsePending,!1,!0),this._textX+=parseFloat(i),this._textY+=parseFloat(o),a},path:function(t,e){var n=t.getAttribute("d")||"",r=hg(n);return wD(e,r),OD(t,r,this._defsUsePending,!1,!1),r.silent=!0,r}}}(),t}(),bD={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||"0",10),n=parseInt(t.getAttribute("y1")||"0",10),r=parseInt(t.getAttribute("x2")||"10",10),i=parseInt(t.getAttribute("y2")||"0",10),o=new fv(e,n,r,i);return xD(t,o),_D(t,o),o},radialgradient:function(t){var e=parseInt(t.getAttribute("cx")||"0",10),n=parseInt(t.getAttribute("cy")||"0",10),r=parseInt(t.getAttribute("r")||"0",10),i=new gv(e,n,r);return xD(t,i),_D(t,i),i}};function xD(t,e){var n=t.getAttribute("gradientUnits");"userSpaceOnUse"===n&&(e.global=!0)}function _D(t,e){var n=t.firstChild;while(n){if(1===n.nodeType&&"stop"===n.nodeName.toLocaleLowerCase()){var r=n.getAttribute("offset"),i=void 0;i=r&&r.indexOf("%")>0?parseInt(r,10)/100:r?parseFloat(r):0;var o={};ED(n,o,o);var a=o.stopColor||n.getAttribute("stop-color")||"#000000";e.colorStops.push({offset:i,color:a})}n=n.nextSibling}}function wD(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),Object(v["defaults"])(e.__inheritedStyle,t.__inheritedStyle))}function SD(t){for(var e=kD(t),n=[],r=0;r0;o-=2){var a=r[o],s=r[o-1],l=kD(a);switch(i=i||In(),s){case"translate":Ln(i,i,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":Pn(i,i,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":jn(i,i,-parseFloat(l[0])*LD);break;case"skewX":var u=Math.tan(parseFloat(l[0])*LD);Dn(i,[1,0,u,1,0,0],i);break;case"skewY":var c=Math.tan(parseFloat(l[0])*LD);Dn(i,[1,c,0,1,0,0],i);break;case"matrix":i[0]=parseFloat(l[0]),i[1]=parseFloat(l[1]),i[2]=parseFloat(l[2]),i[3]=parseFloat(l[3]),i[4]=parseFloat(l[4]),i[5]=parseFloat(l[5]);break}}e.setLocalTransform(i)}}var PD=/([^\s:;]+)\s*:\s*([^:;]+)/g;function ED(t,e,n){var r=t.getAttribute("style");if(r){var i;PD.lastIndex=0;while(null!=(i=PD.exec(r))){var o=i[1],a=Object(v["hasOwn"])(dD,o)?dD[o]:null;a&&(e[a]=i[2]);var s=Object(v["hasOwn"])(vD,o)?vD[o]:null;s&&(n[s]=i[2])}}}function RD(t,e,n){for(var r=0;r0,g={api:n,geo:s,mapOrGeoModel:t,data:a,isVisualEncodedByVisualMap:d,isGeo:o,transformInfoRaw:h};"geoJSON"===s.resourceType?this._buildGeoJSON(g):"geoSVG"===s.resourceType&&this._buildSVG(g),this._updateController(t,e,n),this._updateMapSelectHandler(t,l,n,r)},t.prototype._buildGeoJSON=function(t){var e=this._regionsGroupByName=v["createHashMap"](),n=v["createHashMap"](),r=this._regionsGroup,i=t.transformInfoRaw,o=t.mapOrGeoModel,a=t.data,s=t.geo.projection,l=s&&s.stream;function u(t,e){return e&&(t=e(t)),t&&[t[0]*i.scaleX+i.x,t[1]*i.scaleY+i.y]}function c(t){for(var e=[],n=!l&&s&&s.project,r=0;r=0)&&(p=i);var f=a?{normal:{align:"center",verticalAlign:"middle"}}:null;fu(e,du(r),{labelFetcher:p,labelDataIndex:h,defaultText:n},f);var d=e.getTextContent();if(d&&(uL(d).ignore=d.ignore,e.textConfig&&a)){var g=e.getBoundingRect().clone();e.textConfig.layoutRect=g,e.textConfig.position=[(a[0]-g.x)/g.width*100+"%",(a[1]-g.y)/g.height*100+"%"]}e.disableLabelAnimation=!0}else e.removeTextContent(),e.removeTextConfig(),e.disableLabelAnimation=null}function gL(t,e,n,r,i,o){t.data?t.data.setItemGraphicEl(o,e):Ns(e).eventData={componentType:"geo",componentIndex:i.componentIndex,geoIndex:i.componentIndex,name:n,region:r&&r.option||{}}}function vL(t,e,n,r,i){t.data||ty({el:e,componentModel:i,itemName:n,itemTooltipOption:r.get("tooltip")})}function yL(t,e,n,r,i){e.highDownSilentOnTouch=!!i.get("selectedMode");var o=r.getModel("emphasis"),a=o.get("focus");return Fl(e,a,o.get("blurScope"),o.get("disabled")),t.isGeo&&Xl(e,i,n),a}function mL(t,e,n){var r,i=[];function o(){r=[]}function a(){r.length&&(i.push(r),r=[])}var s=e({polygonStart:o,polygonEnd:a,lineStart:o,lineEnd:a,point:function(t,e){isFinite(t)&&isFinite(e)&&r.push([t,e])},sphere:function(){}});return!n&&s.polygonStart(),v["each"](t,(function(t){s.lineStart();for(var e=0;e-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n},e.type="series.map",e.dependencies=["geo"],e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,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)"}},select:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{color:"rgba(255,215,0,0.8)"}},nameProperty:"name"},e}(Hd),SL=wL;function OL(t,e){var n={};return v["each"](t,(function(t){t.each(t.mapDimension("value"),(function(e,r){var i="ec-"+t.getName(r);n[i]=n[i]||[],isNaN(e)||n[i].push(e)}))})),t[0].map(t[0].mapDimension("value"),(function(r,i){for(var o,a="ec-"+t[0].getName(i),s=0,l=1/0,u=-1/0,c=n[a].length,h=0;h1?(f.width=p,f.height=p/b):(f.height=p,f.width=p*b),f.y=h[1]-f.height/2,f.x=h[0]-f.width/2;else{var _=t.getBoxLayoutParams();_.aspect=b,f=ih(_,{width:y,height:m})}this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center"),e),this.setZoom(t.get("zoom"))}function NL(t,e){v["each"](e.get("geoCoord"),(function(e,n){t.addGeoCoord(n,e)}))}var zL=function(){function t(){this.dimensions=LL}return t.prototype.create=function(t,e){var n=[];function r(t){return{nameProperty:t.get("nameProperty"),aspectScale:t.get("aspectScale"),projection:t.get("projection")}}t.eachComponent("geo",(function(t,i){var o=t.get("map"),a=new EL(o+i,o,v["extend"]({nameMap:t.get("nameMap")},r(t)));a.zoomLimit=t.get("scaleLimit"),n.push(a),t.coordinateSystem=a,a.model=t,a.resize=RL,a.resize(t,e)})),t.eachSeries((function(t){var e=t.get("coordinateSystem");if("geo"===e){var r=t.get("geoIndex")||0;t.coordinateSystem=n[r]}}));var i={};return t.eachSeriesByType("map",(function(t){if(!t.getHostGeoModel()){var e=t.getMapType();i[e]=i[e]||[],i[e].push(t)}})),v["each"](i,(function(t,i){var o=v["map"](t,(function(t){return t.get("nameMap")})),a=new EL(i,i,v["extend"]({nameMap:v["mergeAll"](o)},r(t[0])));a.zoomLimit=v["retrieve"].apply(null,v["map"](t,(function(t){return t.get("scaleLimit")}))),n.push(a),a.resize=RL,a.resize(t[0],e),v["each"](t,(function(t){t.coordinateSystem=a,NL(a,t)}))})),n},t.prototype.getFilledRegions=function(t,e,n,r){for(var i=(t||[]).slice(),o=v["createHashMap"](),a=0;a=0;a--){var s=r[a];s.hierNode={defaultAncestor:null,ancestor:s,prelim:0,modifier:0,change:0,shift:0,i:a,thread:null},i.push(s)}}function KL(t,e){var n=t.isExpand?t.children:[],r=t.parentNode.children,i=t.hierNode.i?r[t.hierNode.i-1]:null;if(n.length){nj(t);var o=(n[0].hierNode.prelim+n[n.length-1].hierNode.prelim)/2;i?(t.hierNode.prelim=i.hierNode.prelim+e(t,i),t.hierNode.modifier=t.hierNode.prelim-o):t.hierNode.prelim=o}else i&&(t.hierNode.prelim=i.hierNode.prelim+e(t,i));t.parentNode.hierNode.defaultAncestor=rj(t,i,t.parentNode.hierNode.defaultAncestor||r[0],e)}function JL(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function QL(t){return arguments.length?t:lj}function tj(t,e){return t-=Math.PI/2,{x:e*Math.cos(t),y:e*Math.sin(t)}}function ej(t,e){return ih(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function nj(t){var e=t.children,n=e.length,r=0,i=0;while(--n>=0){var o=e[n];o.hierNode.prelim+=r,o.hierNode.modifier+=r,i+=o.hierNode.change,r+=o.hierNode.shift+i}}function rj(t,e,n,r){if(e){var i=t,o=t,a=o.parentNode.children[0],s=e,l=i.hierNode.modifier,u=o.hierNode.modifier,c=a.hierNode.modifier,h=s.hierNode.modifier;while(s=ij(s),o=oj(o),s&&o){i=ij(i),a=oj(a),i.hierNode.ancestor=t;var p=s.hierNode.prelim+h-o.hierNode.prelim-u+r(s,o);p>0&&(sj(aj(s,t,n),t,p),u+=p,l+=p),h+=s.hierNode.modifier,u+=o.hierNode.modifier,l+=i.hierNode.modifier,c+=a.hierNode.modifier}s&&!ij(i)&&(i.hierNode.thread=s,i.hierNode.modifier+=h-l),o&&!oj(a)&&(a.hierNode.thread=o,a.hierNode.modifier+=u-c,n=t)}return n}function ij(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function oj(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function aj(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:n}function sj(t,e,n){var r=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=r,e.hierNode.shift+=n,e.hierNode.modifier+=n,e.hierNode.prelim+=n,t.hierNode.change+=r}function lj(t,e){return t.parentNode===e.parentNode?1:2}var uj=function(){function t(){this.parentPoint=[],this.childPoints=[]}return t}(),cj=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new uj},e.prototype.buildPath=function(t,e){var n=e.childPoints,r=n.length,i=e.parentPoint,o=n[0],a=n[r-1];if(1===r)return t.moveTo(i[0],i[1]),void t.lineTo(o[0],o[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,c=Xr(e.forkPosition,1),h=[];h[l]=i[l],h[u]=i[u]+(a[u]-i[u])*c,t.moveTo(i[0],i[1]),t.lineTo(h[0],h[1]),t.moveTo(o[0],o[1]),h[l]=o[l],t.lineTo(h[0],h[1]),h[l]=a[l],t.lineTo(h[0],h[1]),t.lineTo(a[0],a[1]);for(var p=1;pb.x,w||(_-=Math.PI));var O=w?"left":"right",M=s.getModel("label"),A=M.get("rotate"),C=A*(Math.PI/180),I=y.getTextContent();I&&(y.setTextConfig({position:M.get("position")||O,rotation:null==A?-_:C,origin:"center"}),I.setStyle("verticalAlign","middle"))}var T=s.get(["emphasis","focus"]),k="relative"===T?v["concatArray"](a.getAncestorsIndices(),a.getDescendantIndices()):"ancestor"===T?a.getAncestorsIndices():"descendant"===T?a.getDescendantIndices():null;k&&(Ns(n).focus=k),dj(i,a,c,n,d,f,g,r),n.__edge&&(n.onHoverStateChange=function(e){if("blur"!==e){var r=a.parentNode&&t.getItemGraphicEl(a.parentNode.dataIndex);r&&r.hoverState===Ws||fl(n.__edge,e)}})}function dj(t,e,n,r,i,o,a,s){var l=e.getModel(),u=t.get("edgeShape"),c=t.get("layout"),h=t.getOrient(),p=t.get(["lineStyle","curveness"]),f=t.get("edgeForkPosition"),d=l.getModel("lineStyle").getLineStyle(),g=r.__edge;if("curve"===u)e.parentNode&&e.parentNode!==n&&(g||(g=r.__edge=new iv({shape:mj(c,h,p,i,i)})),nu(g,{shape:mj(c,h,p,o,a)},t));else if("polyline"===u)if("orthogonal"===c){if(e!==n&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var y=e.children,m=[],b=0;be&&(e=r.height)}this.height=e+1},t.prototype.getNodeById=function(t){if(this.getId()===t)return this;for(var e=0,n=this.children,r=n.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},t.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},t.prototype.getModel=function(t){if(!(this.dataIndex<0)){var e=this.hostTree,n=e.data.getItemModel(this.dataIndex);return n.getModel(t)}},t.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},t.prototype.setVisual=function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},t.prototype.getVisual=function(t){return this.hostTree.data.getItemVisual(this.dataIndex,t)},t.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},t.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},t.prototype.getChildIndex=function(){if(this.parentNode){for(var t=this.parentNode.children,e=0;e=0){var r=n.getData().tree.root,i=t.targetNode;if(v["isString"](i)&&(i=r.getNodeById(i)),i&&r.contains(i))return{node:i};var o=t.targetNodeId;if(null!=o&&(i=r.getNodeById(o)))return{node:i}}}function Rj(t){var e=[];while(t)t=t.parentNode,t&&e.push(t);return e.reverse()}function Nj(t,e){var n=Rj(t);return v["indexOf"](n,e)>=0}function zj(t,e){var n=[];while(t){var r=t.dataIndex;n.push({name:t.name,dataIndex:r,value:e.getRawValue(r)}),t=t.parentNode}return n.reverse(),n}var Bj=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasSymbolVisual=!0,e.ignoreStyleOnData=!0,e}return d(e,t),e.prototype.getInitialData=function(t){var e={name:t.name,children:t.data},n=t.leaves||{},r=new Bu(n,this,this.ecModel),i=Pj.createTree(e,this,o);function o(t){t.wrapMethod("getItemModel",(function(t,e){var n=i.getNodeByDataIndex(e);return n&&n.children.length&&n.isExpand||(t.parentModel=r),t}))}var a=0;i.eachNode("preorder",(function(t){t.depth>a&&(a=t.depth)}));var s=t.expandAndCollapse,l=s&&t.initialTreeDepth>=0?t.initialTreeDepth:a;return i.root.eachNode("preorder",(function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=l})),i.data},e.prototype.getOrient=function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.formatTooltip=function(t,e,n){var r=this.getData().tree,i=r.root.children[0],o=r.getNodeByDataIndex(t),a=o.getValue(),s=o.name;while(o&&o!==i)s=o.parentNode.name+"."+s,o=o.parentNode;return pd("nameValue",{name:s,value:a,noValue:isNaN(a)||null==a})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),r=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=zj(r,this),n.collapsed=!r.isExpand,n},e.type="series.tree",e.layoutMode="box",e.defaultOption={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",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},e}(Hd),Vj=Bj;function Fj(t,e,n){var r,i=[t],o=[];while(r=i.pop())if(o.push(r),r.isExpand){var a=r.children;if(a.length)for(var s=0;s=0;o--)r.push(i[o])}}function Gj(t,e){t.eachSeriesByType("tree",(function(t){Wj(t,e)}))}function Wj(t,e){var n=ej(t,e);t.layoutInfo=n;var r=t.get("layout"),i=0,o=0,a=null;"radial"===r?(i=2*Math.PI,o=Math.min(n.height,n.width)/2,a=QL((function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth}))):(i=n.width,o=n.height,a=QL());var s=t.getData().tree.root,l=s.children[0];if(l){ZL(s),Fj(l,KL,a),s.hierNode.modifier=-l.hierNode.prelim,Hj(l,JL);var u=l,c=l,h=l;Hj(l,(function(t){var e=t.getLayout().x;ec.getLayout().x&&(c=t),t.depth>h.depth&&(h=t)}));var p=u===c?1:a(u,c)/2,f=p-u.getLayout().x,d=0,g=0,v=0,y=0;if("radial"===r)d=i/(c.getLayout().x+p+f),g=o/(h.depth-1||1),Hj(l,(function(t){v=(t.getLayout().x+f)*d,y=(t.depth-1)*g;var e=tj(v,y);t.setLayout({x:e.x,y:e.y,rawX:v,rawY:y},!0)}));else{var m=t.getOrient();"RL"===m||"LR"===m?(g=o/(c.getLayout().x+p+f),d=i/(h.depth-1||1),Hj(l,(function(t){y=(t.getLayout().x+f)*g,v="LR"===m?(t.depth-1)*d:i-(t.depth-1)*d,t.setLayout({x:v,y:y},!0)}))):"TB"!==m&&"BT"!==m||(d=i/(c.getLayout().x+p+f),g=o/(h.depth-1||1),Hj(l,(function(t){v=(t.getLayout().x+f)*d,y="TB"===m?(t.depth-1)*g:o-(t.depth-1)*g,t.setLayout({x:v,y:y},!0)})))}}}function Uj(t){t.eachSeriesByType("tree",(function(t){var e=t.getData(),n=e.tree;n.eachNode((function(t){var n=t.getModel(),r=n.getModel("itemStyle").getItemStyle(),i=e.ensureUniqueItemVisual(t.dataIndex,"style");Object(v["extend"])(i,r)}))}))}function Yj(t){t.registerAction({type:"treeExpandAndCollapse",event:"treeExpandAndCollapse",update:"update"},(function(t,e){e.eachComponent({mainType:"series",subType:"tree",query:t},(function(e){var n=t.dataIndex,r=e.getData().tree,i=r.getNodeByDataIndex(n);i.isExpand=!i.isExpand}))})),t.registerAction({type:"treeRoam",event:"treeRoam",update:"none"},(function(t,e,n){e.eachComponent({mainType:"series",subType:"tree",query:t},(function(e){var r=e.coordinateSystem,i=WL(r,t,void 0,n);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)}))}))}function qj(t){t.registerChartView(bj),t.registerSeriesModel(Vj),t.registerLayout(Gj),t.registerVisual(Uj),Yj(t)}var Xj=["treemapZoomToNode","treemapRender","treemapMove"];function $j(t){for(var e=0;e1)n=n.parentNode;var i=Hh(t.ecModel,n.name||n.dataIndex+"",r);e.setVisual("decal",i)}))}var Kj=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventUsingHoverLayer=!0,n}return d(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};Jj(n);var r=t.levels||[],i=this.designatedVisualItemStyle={},o=new Bu({itemStyle:i},this,e);r=t.levels=Qj(r,e);var a=v["map"](r||[],(function(t){return new Bu(t,o,e)}),this),s=Pj.createTree(n,this,l);function l(t){t.wrapMethod("getItemModel",(function(t,e){var n=s.getNodeByDataIndex(e),r=n?a[n.depth]:null;return t.parentModel=r||o,t}))}return s.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.formatTooltip=function(t,e,n){var r=this.getData(),i=this.getRawValue(t),o=r.getName(t);return pd("nameValue",{name:o,value:i})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),r=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=zj(r,this),n.treePathInfo=n.treeAncestors,n},e.prototype.setLayoutInfo=function(t){this.layoutInfo=this.layoutInfo||{},v["extend"](this.layoutInfo,t)},e.prototype.mapIdToIndex=function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=v["createHashMap"](),this._idIndexMapCount=0);var n=e.get(t);return null==n&&e.set(t,n=this._idIndexMapCount++),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.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)},e.prototype.enableAriaDecal=function(){Zj(this)},e.type="series.treemap",e.layoutMode="box",e.defaultOption={progressive:0,left:"center",top:"middle",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)",textStyle:{color:"#fff"}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],overflow:"truncate",verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},e}(Hd);function Jj(t){var e=0;v["each"](t.children,(function(t){Jj(t);var n=t.value;v["isArray"](n)&&(n=n[0]),e+=n}));var n=t.value;v["isArray"](n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),v["isArray"](t.value)?t.value[0]=n:t.value=n}function Qj(t,e){var n=xi(e.get("color")),r=xi(e.get(["aria","decal","decals"]));if(n){var i,o;t=t||[],v["each"](t,(function(t){var e=new Bu(t),n=e.get("color"),r=e.get("decal");(e.get(["itemStyle","color"])||n&&"none"!==n)&&(i=!0),(e.get(["itemStyle","decal"])||r&&"none"!==r)&&(o=!0)}));var a=t[0]||(t[0]={});return i||(a.color=n.slice()),!o&&r&&(a.decal=r.slice()),t}}var tP=Kj,eP=8,nP=8,rP=5,iP=function(){function t(t){this.group=new Lr,t.add(this.group)}return t.prototype.render=function(t,e,n,r){var i=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),i.get("show")&&n){var a=i.getModel("itemStyle"),s=a.getModel("textStyle"),l={pos:{left:i.get("left"),right:i.get("right"),top:i.get("top"),bottom:i.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:i.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(n,l,s),this._renderContent(t,l,a,s,r),oh(o,l.pos,l.box)}},t.prototype._prepare=function(t,e,n){for(var r=t;r;r=r.parentNode){var i=Pi(r.getModel().get("name"),""),o=n.getTextRect(i),a=Math.max(o.width+2*eP,e.emptyItemWidth);e.totalWidth+=a+nP,e.renderList.push({node:r,text:i,width:a})}},t.prototype._renderContent=function(t,e,n,r,i){for(var o=0,a=e.emptyItemWidth,s=t.get(["breadcrumb","height"]),l=rh(e.pos,e.box),u=e.totalWidth,c=e.renderList,h=c.length-1;h>=0;h--){var p=c[h],f=p.node,d=p.width,g=p.text;u>l.width&&(u-=d-a,d=a,g=null);var y=new Yg({shape:{points:oP(o,0,d,s,h===c.length-1,0===h)},style:Object(v["defaults"])(n.getItemStyle(),{lineJoin:"bevel"}),textContent:new Rs({style:{text:g,fill:r.getTextColor(),font:r.getFont()}}),textConfig:{position:"inside"},z2:1e4*Xs,onclick:Object(v["curry"])(i,f)});y.disableLabelAnimation=!0,this.group.add(y),aP(y,t,f),o+=d+nP}},t.prototype.remove=function(){this.group.removeAll()},t}();function oP(t,e,n,r,i,o){var a=[[i?t:t-rP,e],[t+n,e],[t+n,e+r],[i?t:t-rP,e+r]];return!o&&a.splice(2,0,[t+n+rP,e+r/2]),!i&&a.push([t,e+r/2]),a}function aP(t,e,n){Ns(t).eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.seriesIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:n&&n.dataIndex,name:n&&n.name},treePathInfo:n&&zj(n,e)}}var sP=iP,lP=function(){function t(){this._storage=[],this._elExistsMap={}}return t.prototype.add=function(t,e,n,r,i){return!this._elExistsMap[t.id]&&(this._elExistsMap[t.id]=!0,this._storage.push({el:t,target:e,duration:n,delay:r,easing:i}),!0)},t.prototype.finished=function(t){return this._finishedCallback=t,this},t.prototype.start=function(){for(var t=this,e=this._storage.length,n=function(){e--,e<=0&&(t._storage.length=0,t._elExistsMap={},t._finishedCallback&&t._finishedCallback())},r=0,i=this._storage.length;rpP||Math.abs(t.dy)>pP)){var e=this.seriesModel.getData().tree.root;if(!e)return;var n=e.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},e.prototype._onZoom=function(t){var e=t.originX,n=t.originY;if("animating"!==this._state){var r=this.seriesModel.getData().tree.root;if(!r)return;var i=r.getLayout();if(!i)return;var o=new or(i.x,i.y,i.width,i.height),a=this.seriesModel.layoutInfo;e-=a.x,n-=a.y;var s=In();Ln(s,s,[-e,-n]),Pn(s,s,[t.scale,t.scale]),Ln(s,s,[e,n]),o.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:o.x,y:o.y,width:o.width,height:o.height}})}},e.prototype._initEvents=function(t){var e=this;t.on("click",(function(t){if("ready"===e._state){var n=e.seriesModel.get("nodeClick",!0);if(n){var r=e.findTarget(t.offsetX,t.offsetY);if(r){var i=r.node;if(i.getLayout().isLeafRoot)e._rootToNode(r);else if("zoomToNode"===n)e._zoomToNode(r);else if("link"===n){var o=i.hostTree.data.getItemModel(i.dataIndex),a=o.get("link",!0),s=o.get("target",!0)||"blank";a&&Kc(a,s)}}}}}),this)},e.prototype._renderBreadcrumb=function(t,e,n){var r=this;n||(n=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2),n||(n={node:t.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new sP(this.group))).render(t,e,n.node,(function(e){"animating"!==r._state&&(Nj(t.getViewRoot(),e)?r._rootToNode({node:e}):r._zoomToNode({node:e}))}))},e.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=wP(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},e.prototype.dispose=function(){this._clearController()},e.prototype._zoomToNode=function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype._rootToNode=function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype.findTarget=function(t,e){var n,r=this.seriesModel.getViewRoot();return r.eachNode({attr:"viewChildren",order:"preorder"},(function(r){var i=this._storage.background[r.getRawIndex()];if(i){var o=i.transformCoordToLocal(t,e),a=i.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:r,offsetX:o[0],offsetY:o[1]}}}),this),n},e.type="treemap",e}(hy);function wP(){return{nodeGroup:[],background:[],content:[]}}function SP(t,e,n,r,i,o,a,s,l,u){if(a){var c=a.getLayout(),h=t.getData(),p=a.getModel();if(h.setItemGraphicEl(a.dataIndex,null),c&&c.isInView){var f=c.width,d=c.height,g=c.borderWidth,y=c.invisible,m=a.getRawIndex(),b=s&&s.getRawIndex(),x=a.viewChildren,_=c.upperHeight,w=x&&x.length,S=p.getModel("itemStyle"),O=p.getModel(["emphasis","itemStyle"]),M=p.getModel(["blur","itemStyle"]),A=p.getModel(["select","itemStyle"]),C=S.get("borderRadius")||0,I=F("nodeGroup",cP);if(I){if(l.add(I),I.x=c.x||0,I.y=c.y||0,I.markRedraw(),xP(I).nodeWidth=f,xP(I).nodeHeight=d,c.isAboveViewRoot)return I;var T=F("background",hP,u,vP);T&&R(I,T,w&&c.upperLabelHeight);var k=p.getModel("emphasis"),D=k.get("focus"),L=k.get("blurScope"),j=k.get("disabled"),P="ancestor"===D?a.getAncestorsIndices():"descendant"===D?a.getDescendantIndices():D;if(w)ql(I)&&Yl(I,!1),T&&(Yl(T,!j),h.setItemGraphicEl(a.dataIndex,T),Hl(T,P,L));else{var E=F("content",hP,u,yP);E&&N(I,E),T.disableMorphing=!0,T&&ql(T)&&Yl(T,!1),Yl(I,!j),h.setItemGraphicEl(a.dataIndex,I),Hl(I,P,L)}return I}}}function R(e,n,r){var i=Ns(n);if(i.dataIndex=a.dataIndex,i.seriesIndex=t.seriesIndex,n.setShape({x:0,y:0,width:f,height:d,r:C}),y)z(n);else{n.invisible=!1;var o=a.getVisual("style"),s=o.stroke,l=bP(S);l.fill=s;var u=mP(O);u.fill=O.get("borderColor");var c=mP(M);c.fill=M.get("borderColor");var h=mP(A);if(h.fill=A.get("borderColor"),r){var p=f-2*g;B(n,s,o.opacity,{x:g,y:0,width:p,height:_})}else n.removeTextContent();n.setStyle(l),n.ensureState("emphasis").style=u,n.ensureState("blur").style=c,n.ensureState("select").style=h,bl(n)}e.add(n)}function N(e,n){var r=Ns(n);r.dataIndex=a.dataIndex,r.seriesIndex=t.seriesIndex;var i=Math.max(f-2*g,0),o=Math.max(d-2*g,0);if(n.culling=!0,n.setShape({x:g,y:g,width:i,height:o,r:C}),y)z(n);else{n.invisible=!1;var s=a.getVisual("style"),l=s.fill,u=bP(S);u.fill=l,u.decal=s.decal;var c=mP(O),h=mP(M),p=mP(A);B(n,l,s.opacity,null),n.setStyle(u),n.ensureState("emphasis").style=c,n.ensureState("blur").style=h,n.ensureState("select").style=p,bl(n)}e.add(n)}function z(t){!t.invisible&&o.push(t)}function B(e,n,r,i){var o=p.getModel(i?dP:fP),s=Pi(p.get("name"),null),l=o.getShallow("show");fu(e,du(p,i?dP:fP),{defaultText:l?s:null,inheritColor:n,defaultOpacity:r,labelFetcher:t,labelDataIndex:a.dataIndex});var u=e.getTextContent();if(u){var h=u.style,f=Object(v["normalizeCssArray"])(h.padding||0);i&&(e.setTextConfig({layoutRect:i}),u.disableLabelLayout=!0),u.beforeUpdate=function(){var t=Math.max((i?i.width:e.shape.width)-f[1]-f[3],0),n=Math.max((i?i.height:e.shape.height)-f[0]-f[2],0);h.width===t&&h.height===n||u.setStyle({width:t,height:n})},h.truncateMinChar=2,h.lineOverflow="truncate",V(h,i,c);var d=u.getState("emphasis");V(d?d.style:null,i,c)}}function V(e,n,r){var i=e?e.text:null;if(!n&&r.isLeafRoot&&null!=i){var o=t.get("drillDownIcon",!0);e.text=o?o+" "+i:i}}function F(t,r,o,a){var s=null!=b&&n[t][b],l=i[t];return s?(n[t][b]=null,H(l,s)):y||(s=new r,s instanceof Xo&&(s.z2=OP(o,a)),G(l,s)),e[t][m]=s}function H(t,e){var n=t[m]={};e instanceof cP?(n.oldX=e.x,n.oldY=e.y):n.oldShape=Object(v["extend"])({},e.shape)}function G(t,e){var n=t[m]={},o=a.parentNode,s=e instanceof Lr;if(o&&(!r||"drillDown"===r.direction)){var l=0,u=0,c=i.background[o.getRawIndex()];!r&&c&&c.oldShape&&(l=c.oldShape.width,u=c.oldShape.height),s?(n.oldX=0,n.oldY=u):n.oldShape={x:l,y:u,width:0,height:0}}n.fadein=!s}}function OP(t,e){return t*gP+e}var MP=_P,AP=v["each"],CP=v["isObject"],IP=-1,TP=function(){function t(e){var n=e.mappingMethod,r=e.type,i=this.option=v["clone"](e);this.type=r,this.mappingMethod=n,this._normalizeData=FP[n];var o=t.visualHandlers[r];this.applyVisual=o.applyVisual,this.getColorMapper=o.getColorMapper,this._normalizedToVisual=o._normalizedToVisual[n],"piecewise"===n?(LP(i),kP(i)):"category"===n?i.categories?DP(i):LP(i,!0):(v["assert"]("linear"!==n||i.dataExtent),LP(i))}return t.prototype.mapValueToVisual=function(t){var e=this._normalizeData(t);return this._normalizedToVisual(e,t)},t.prototype.getNormalizer=function(){return v["bind"](this._normalizeData,this)},t.listVisualTypes=function(){return v["keys"](t.visualHandlers)},t.isValidType=function(e){return t.visualHandlers.hasOwnProperty(e)},t.eachVisual=function(t,e,n){v["isObject"](t)?v["each"](t,e,n):e.call(n,t)},t.mapVisual=function(e,n,r){var i,o=v["isArray"](e)?[]:v["isObject"](e)?{}:(i=!0,null);return t.eachVisual(e,(function(t,e){var a=n.call(r,t,e);i?o=a:o[e]=a})),o},t.retrieveVisuals=function(e){var n,r={};return e&&AP(t.visualHandlers,(function(t,i){e.hasOwnProperty(i)&&(r[i]=e[i],n=!0)})),n?r:null},t.prepareVisualTypes=function(t){if(v["isArray"](t))t=t.slice();else{if(!CP(t))return[];var e=[];AP(t,(function(t,n){e.push(n)})),t=e}return t.sort((function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1})),t},t.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},t.findPieceIndex=function(t,e,n){for(var r,i=1/0,o=0,a=e.length;o=0;o--)null==r[o]&&(delete n[e[o]],e.pop())}function LP(t,e){var n=t.visual,r=[];v["isObject"](n)?AP(n,(function(t){r.push(t)})):null!=n&&r.push(n);var i={color:1,symbol:1};e||1!==r.length||i.hasOwnProperty(t.type)||(r[1]=r[0]),VP(t,r)}function jP(t){return{applyVisual:function(e,n,r){var i=this.mapValueToVisual(e);r("color",t(n("color"),i))},_normalizedToVisual:zP([0,1])}}function PP(t){var e=this.option.visual;return e[Math.round(qr(t,[0,1],[0,e.length-1],!0))]||{}}function EP(t){return function(e,n,r){r(t,this.mapValueToVisual(e))}}function RP(t){var e=this.option.visual;return e[this.option.loop&&t!==IP?t%e.length:t]}function NP(){return this.option.visual[0]}function zP(t){return{linear:function(e){return qr(e,t,this.option.visual,!0)},category:RP,piecewise:function(e,n){var r=BP.call(this,n);return null==r&&(r=qr(e,t,this.option.visual,!0)),r},fixed:NP}}function BP(t){var e=this.option,n=e.pieceList;if(e.hasSpecialVisual){var r=TP.findPieceIndex(t,n),i=n[r];if(i&&i.visual)return i.visual[this.type]}}function VP(t,e){return t.visual=e,"color"===t.type&&(t.parsedVisual=v["map"](e,(function(t){var e=Ae["parse"](t);return e||[0,0,0,1]}))),e}var FP={linear:function(t){return qr(t,this.option.dataExtent,[0,1],!0)},piecewise:function(t){var e=this.option.pieceList,n=TP.findPieceIndex(t,e,!0);if(null!=n)return qr(n,[0,e.length-1],[0,1],!0)},category:function(t){var e=this.option.categories?this.option.categoryMap[t]:t;return null==e?IP:e},fixed:v["noop"]};function HP(t,e,n){return t?e<=n:e=n.length||t===n[t.depth]){var o=tE(i,u,t,e,d,r);qP(t,o,n,r)}}))}else s=$P(u),c.fill=s}}function XP(t,e,n){var r=Object(v["extend"])({},e),i=n.designatedVisualItemStyle;return Object(v["each"])(["color","colorAlpha","colorSaturation"],(function(n){i[n]=e[n];var o=t.get(n);i[n]=null,null!=o&&(r[n]=o)})),r}function $P(t){var e=KP(t,"color");if(e){var n=KP(t,"colorAlpha"),r=KP(t,"colorSaturation");return r&&(e=Object(Ae["modifyHSL"])(e,null,null,r)),n&&(e=Object(Ae["modifyAlpha"])(e,n)),e}}function ZP(t,e){return null!=e?Object(Ae["modifyHSL"])(e,null,null,t):null}function KP(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}function JP(t,e,n,r,i,o){if(o&&o.length){var a=QP(e,"color")||null!=i.color&&"none"!==i.color&&(QP(e,"colorAlpha")||QP(e,"colorSaturation"));if(a){var s=e.get("visualMin"),l=e.get("visualMax"),u=n.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var c=e.get("colorMappingBy"),h={type:a.name,dataExtent:u,visual:a.range};"color"!==h.type||"index"!==c&&"id"!==c?h.mappingMethod="linear":(h.mappingMethod="category",h.loop=!0);var p=new GP(h);return UP(p).drColorMappingBy=c,p}}}function QP(t,e){var n=t.get(e);return Object(v["isArray"])(n)&&n.length?{name:e,range:n}:null}function tE(t,e,n,r,i,o){var a=Object(v["extend"])({},e);if(i){var s=i.type,l="color"===s&&UP(i).drColorMappingBy,u="index"===l?r:"id"===l?o.mapIdToIndex(n.getId()):n.getValue(t.get("visualDimension"));a[s]=i.mapValueToVisual(u)}return a}var eE=Math.max,nE=Math.min,rE=v["retrieve"],iE=v["each"],oE=["itemStyle","borderWidth"],aE=["itemStyle","gapWidth"],sE=["upperLabel","show"],lE=["upperLabel","height"],uE={seriesType:"treemap",reset:function(t,e,n,r){var i=n.getWidth(),o=n.getHeight(),a=t.option,s=ih(t.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()}),l=a.size||[],u=Xr(rE(s.width,l[0]),i),c=Xr(rE(s.height,l[1]),o),h=r&&r.type,p=["treemapZoomToNode","treemapRootToNode"],f=Ej(r,p,t),d="treemapRender"===h||"treemapMove"===h?r.rootRect:null,g=t.getViewRoot(),y=Rj(g);if("treemapMove"!==h){var m="treemapZoomToNode"===h?yE(t,f,g,u,c):d?[d.width,d.height]:[u,c],b=a.sort;b&&"asc"!==b&&"desc"!==b&&(b="desc");var x={squareRatio:a.squareRatio,sort:b,leafDepth:a.leafDepth};g.hostTree.clearLayouts();var _={x:0,y:0,width:m[0],height:m[1],area:m[0]*m[1]};g.setLayout(_),cE(g,x,!1,0),_=g.getLayout(),iE(y,(function(t,e){var n=(y[e+1]||g).getValue();t.setLayout(v["extend"]({dataExtent:[n,n],borderWidth:0,upperHeight:0},_))}))}var w=t.getData().tree.root;w.setLayout(mE(s,d,f),!0),t.setLayoutInfo(s),bE(w,new or(-s.x,-s.y,i,o),y,g,0)}};function cE(t,e,n,r){var i,o;if(!t.isRemoved()){var a=t.getLayout();i=a.width,o=a.height;var s=t.getModel(),l=s.get(oE),u=s.get(aE)/2,c=xE(s),h=Math.max(l,c),p=l-u,f=h-u;t.setLayout({borderWidth:l,upperHeight:h,upperLabelHeight:c},!0),i=eE(i-2*p,0),o=eE(o-p-f,0);var d=i*o,g=hE(t,s,d,e,n,r);if(g.length){var v={x:p,y:f,width:i,height:o},y=nE(i,o),m=1/0,b=[];b.area=0;for(var x=0,_=g.length;x<_;){var w=g[x];b.push(w),b.area+=w.getLayout().area;var S=gE(b,y,e.squareRatio);S<=m?(x++,m=S):(b.area-=b.pop().getLayout().area,vE(b,y,v,u,!1),y=nE(v.width,v.height),b.length=b.area=0,m=1/0)}if(b.length&&vE(b,y,v,u,!0),!n){var O=s.get("childrenVisibleMin");null!=O&&d=0;l--){var u=i["asc"===r?a-l-1:l].getValue();u/n*ea[1]&&(a[1]=e)}))):a=[NaN,NaN],{sum:r,dataExtent:a}}function gE(t,e,n){for(var r=0,i=1/0,o=0,a=void 0,s=t.length;or&&(r=a));var l=t.area*t.area,u=e*e*n;return l?eE(u*r/l,l/(u*i)):1/0}function vE(t,e,n,r,i){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width","height"],u=n[s[o]],c=e?t.area/e:0;(i||c>n[l[a]])&&(c=n[l[a]]);for(var h=0,p=t.length;hni&&(u=ni),a=o}ur&&(r=e);var o=r%2?r+2:r+3;i=[];for(var a=0;a0&&(m[0]=-m[0],m[1]=-m[1]);var x=y[0]<0?-1:1;if("start"!==r.__position&&"end"!==r.__position){var _=-Math.atan2(y[1],y[0]);u[0].8?"left":c[0]<-.8?"right":"center",p=c[1]>.8?"top":c[1]<-.8?"bottom":"middle";break;case"start":r.x=-c[0]*d+l[0],r.y=-c[1]*g+l[1],h=c[0]>.8?"right":c[0]<-.8?"left":"center",p=c[1]>.8?"bottom":c[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":r.x=d*x+l[0],r.y=l[1]+w,h=y[0]<0?"right":"left",r.originX=-d*x,r.originY=-w;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":r.x=b[0],r.y=b[1]+w,h="center",r.originY=-w;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":r.x=-d*x+u[0],r.y=u[1]+w,h=y[0]>=0?"right":"left",r.originX=d*x,r.originY=-w;break}r.scaleX=r.scaleY=i,r.setStyle({verticalAlign:r.__verticalAlign||p,align:r.__align||h})}}}function O(t,e){var n=t.__specifiedRotation;if(null==n){var r=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(r[1],r[0]))}else t.attr("rotation",n)}},e}(Lr),cR=uR,hR=function(){function t(t){this.group=new Lr,this._LineCtor=t||cR}return t.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var n=this,r=n.group,i=n._lineData;n._lineData=t,i||r.removeAll();var o=fR(t);t.diff(i).add((function(n){e._doAdd(t,n,o)})).update((function(n,r){e._doUpdate(i,t,r,n,o)})).remove((function(t){r.remove(i.getItemGraphicEl(t))})).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=fR(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e){function n(t){t.isGroup||pR(t)||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[];for(var r=t.start;r0}function fR(t){var e=t.hostModel,n=e.getModel("emphasis");return{lineStyle:e.getModel("lineStyle").getLineStyle(),emphasisLineStyle:n.getModel(["lineStyle"]).getLineStyle(),blurLineStyle:e.getModel(["blur","lineStyle"]).getLineStyle(),selectLineStyle:e.getModel(["select","lineStyle"]).getLineStyle(),emphasisDisabled:n.get("disabled"),blurScope:n.get("blurScope"),focus:n.get("focus"),labelStatesModels:du(e)}}function dR(t){return isNaN(t[0])||isNaN(t[1])}function gR(t){return t&&!dR(t[0])&&!dR(t[1])}var vR=hR,yR=[],mR=[],bR=[],xR=ge,_R=R,wR=Math.abs;function SR(t,e,n){for(var r,i=t[0],o=t[1],a=t[2],s=1/0,l=n*n,u=.1,c=.1;c<=.9;c+=.1){yR[0]=xR(i[0],o[0],a[0],c),yR[1]=xR(i[1],o[1],a[1],c);var h=wR(_R(yR,e)-l);h=0?r+=u:r-=u:d>=0?r-=u:r+=u}return r}function OR(t,e){var n=[],r=be,i=[[],[],[]],o=[[],[]],a=[];e/=2,t.eachEdge((function(t,s){var l=t.getLayout(),u=t.getVisual("fromSymbol"),c=t.getVisual("toSymbol");l.__original||(l.__original=[b(l[0]),b(l[1])],l[2]&&l.__original.push(b(l[2])));var h=l.__original;if(null!=l[2]){if(m(i[0],h[0]),m(i[1],h[2]),m(i[2],h[1]),u&&"none"!==u){var p=FE(t.node1),f=SR(i,h[0],p*e);r(i[0][0],i[1][0],i[2][0],f,n),i[0][0]=n[3],i[1][0]=n[4],r(i[0][1],i[1][1],i[2][1],f,n),i[0][1]=n[3],i[1][1]=n[4]}if(c&&"none"!==c){p=FE(t.node2),f=SR(i,h[1],p*e);r(i[0][0],i[1][0],i[2][0],f,n),i[1][0]=n[1],i[2][0]=n[2],r(i[0][1],i[1][1],i[2][1],f,n),i[1][1]=n[1],i[2][1]=n[2]}m(l[0],i[0]),m(l[1],i[2]),m(l[2],i[1])}else{if(m(o[0],h[0]),m(o[1],h[1]),S(a,o[1],o[0]),L(a,a),u&&"none"!==u){p=FE(t.node1);w(o[0],o[0],a,p*e)}if(c&&"none"!==c){p=FE(t.node2);w(o[1],o[1],a,-p*e)}m(l[0],o[0]),m(l[1],o[1])}}))}function MR(t){return"view"===t.type}var AR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(t,e){var n=new hC,r=new vR,i=this.group;this._controller=new sD(e.getZr()),this._controllerHost={target:i},i.add(n.group),i.add(r.group),this._symbolDraw=n,this._lineDraw=r,this._firstRender=!0},e.prototype.render=function(t,e,n){var r=this,i=t.coordinateSystem;this._model=t;var o=this._symbolDraw,a=this._lineDraw,s=this.group;if(MR(i)){var l={x:i.x,y:i.y,scaleX:i.scaleX,scaleY:i.scaleY};this._firstRender?s.attr(l):nu(s,l,t)}OR(t.getGraph(),VE(t));var u=t.getData();o.updateData(u);var c=t.getEdgeData();a.updateData(c),this._updateNodeAndLinkScale(),this._updateController(t,e,n),clearTimeout(this._layoutTimeout);var h=t.forceLayout,p=t.get(["force","layoutAnimation"]);h&&this._startForceLayoutIteration(h,p),u.graph.eachNode((function(t){var e=t.dataIndex,n=t.getGraphicEl(),i=t.getModel();if(n){n.off("drag").off("dragend");var o=i.get("draggable");o&&n.on("drag",(function(){h&&(h.warmUp(),!r._layouting&&r._startForceLayoutIteration(h,p),h.setFixed(e),u.setItemLayout(e,[n.x,n.y]))})).on("dragend",(function(){h&&h.setUnfixed(e)})),n.setDraggable(o&&!!h,!!i.get("cursor"));var a=i.get(["emphasis","focus"]);"adjacency"===a&&(Ns(n).focus=t.getAdjacentDataIndices())}})),u.graph.eachEdge((function(t){var e=t.getGraphicEl(),n=t.getModel().get(["emphasis","focus"]);e&&"adjacency"===n&&(Ns(e).focus={edge:[t.dataIndex],node:[t.node1.dataIndex,t.node2.dataIndex]})}));var f="circular"===t.get("layout")&&t.get(["circular","rotateLabel"]),d=u.getLayout("cx"),g=u.getLayout("cy");u.eachItemGraphicEl((function(t,e){var n=u.getItemModel(e),r=n.get(["label","rotate"])||0,i=t.getSymbolPath();if(f){var o=u.getItemLayout(e),a=Math.atan2(o[1]-g,o[0]-d);a<0&&(a=2*Math.PI+a);var s=o[0]=0&&t.call(e,n[i],i)},t.prototype.eachEdge=function(t,e){for(var n=this.edges,r=n.length,i=0;i=0&&n[i].node1.dataIndex>=0&&n[i].node2.dataIndex>=0&&t.call(e,n[i],i)},t.prototype.breadthFirstTraverse=function(t,e,n,r){if(e instanceof kR||(e=this._nodesMap[IR(e)]),e){for(var i="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0}));for(i=0,o=r.length;i=0&&this[t][e].setItemVisual(this.dataIndex,n,r)},getVisual:function(n){return this[t][e].getItemVisual(this.dataIndex,n)},setLayout:function(n,r){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,n,r)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}}v["mixin"](kR,LR("hostGraph","data")),v["mixin"](DR,LR("hostGraph","edgeData"));var jR=TR;function PR(t,e,n,r,i){for(var o=new jR(r),a=0;a "+p)),u++)}var f,d=n.get("coordinateSystem");if("cartesian2d"===d||"polar"===d)f=hw(t,n);else{var g=hp.get(d),y=g&&g.dimensions||[];v["indexOf"](y,"value")<0&&y.concat(["value"]);var m=X_(t,{coordDimensions:y,encodeDefine:n.getEncode()}).dimensions;f=new Y_(m,n),f.initData(t)}var b=new Y_(["value"],n);return b.initData(l,s),i&&i(f,b),kj({mainData:f,struct:o,structAttr:"graph",datas:{node:f,edge:b},datasAttr:{node:"data",edge:"edgeData"}}),o.update(),o}var ER=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return d(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments);var n=this;function r(){return n._categoriesData}this.legendVisualProvider=new tT(r,r),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeDefaultAndTheme=function(e){t.prototype.mergeDefaultAndTheme.apply(this,arguments),_i(e,"edgeLabel",["show"])},e.prototype.getInitialData=function(t,e){var n=t.edges||t.links||[],r=t.data||t.nodes||[],i=this;if(r&&n){PE(this);var o=PR(r,n,this,!0,a);return v["each"](o.edges,(function(t){EE(t.node1,t.node2,this,t.dataIndex)}),this),o.data}function a(t,e){t.wrapMethod("getItemModel",(function(t){var e=i._categoriesModels,n=t.getShallow("category"),r=e[n];return r&&(r.parentModel=t.parentModel,t.parentModel=r),t}));var n=Bu.prototype.getModel;function r(t,e){var r=n.call(this,t,e);return r.resolveParentPath=o,r}function o(t){if(t&&("label"===t[0]||"label"===t[1])){var e=t.slice();return"label"===t[0]?e[0]="edgeLabel":"label"===t[1]&&(e[1]="edgeLabel"),e}return t}e.wrapMethod("getItemModel",(function(t){return t.resolveParentPath=o,t.getModel=r,t}))}},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.getCategoriesData=function(){return this._categoriesData},e.prototype.formatTooltip=function(t,e,n){if("edge"===n){var r=this.getData(),i=this.getDataParams(t,n),o=r.graph.getEdgeByIndex(t),a=r.getName(o.node1.dataIndex),s=r.getName(o.node2.dataIndex),l=[];return null!=a&&l.push(a),null!=s&&l.push(s),pd("nameValue",{name:l.join(" > "),value:i.value,noValue:null==i.value})}var u=Id({series:this,dataIndex:t,multipleSeries:e});return u},e.prototype._updateCategoriesData=function(){var t=v["map"](this.option.categories||[],(function(t){return null!=t.value?t:v["extend"]({value:0},t)})),e=new Y_(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray((function(t){return e.getItemModel(t)}))},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.isAnimationEnabled=function(){return t.prototype.isAnimationEnabled.call(this)&&!("force"===this.get("layout")&&this.get(["force","layoutAnimation"]))},e.type="series.graph",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,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,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(Hd),RR=ER,NR={type:"graphRoam",event:"graphRoam",update:"none"};function zR(t){t.registerChartView(CR),t.registerSeriesModel(RR),t.registerProcessor(wE),t.registerVisual(SE),t.registerVisual(ME),t.registerLayout(BE),t.registerLayout(t.PRIORITY.VISUAL.POST_CHART_LAYOUT,YE),t.registerLayout($E),t.registerCoordinateSystem("graphView",{dimensions:kL.dimensions,create:KE}),t.registerAction({type:"focusNodeAdjacency",event:"focusNodeAdjacency",update:"series:focusNodeAdjacency"},v["noop"]),t.registerAction({type:"unfocusNodeAdjacency",event:"unfocusNodeAdjacency",update:"series:unfocusNodeAdjacency"},v["noop"]),t.registerAction(NR,(function(t,e,n){e.eachComponent({mainType:"series",query:t},(function(e){var r=e.coordinateSystem,i=WL(r,t,void 0,n);e.setCenter&&e.setCenter(i.center),e.setZoom&&e.setZoom(i.zoom)}))}))}var BR=function(){function t(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0}return t}(),VR=function(t){function e(e){var n=t.call(this,e)||this;return n.type="pointer",n}return d(e,t),e.prototype.getDefaultShape=function(){return new BR},e.prototype.buildPath=function(t,e){var n=Math.cos,r=Math.sin,i=e.r,o=e.width,a=e.angle,s=e.x-n(a)*o*(o>=i/3?1:2),l=e.y-r(a)*o*(o>=i/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+n(a)*o,e.y+r(a)*o),t.lineTo(e.x+n(e.angle)*i,e.y+r(e.angle)*i),t.lineTo(e.x-n(a)*o,e.y-r(a)*o),t.lineTo(s,l)},e}(es),FR=VR;function HR(t,e){var n=t.get("center"),r=e.getWidth(),i=e.getHeight(),o=Math.min(r,i),a=Xr(n[0],e.getWidth()),s=Xr(n[1],e.getHeight()),l=Xr(t.get("radius"),o/2);return{cx:a,cy:s,r:l}}function GR(t,e){var n=null==t?"":t+"";return e&&(Object(v["isString"])(e)?n=e.replace("{value}",n):Object(v["isFunction"])(e)&&(n=e(t))),n}var WR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){this.group.removeAll();var r=t.get(["axisLine","lineStyle","color"]),i=HR(t,n);this._renderMain(t,e,n,r,i),this._data=t.getData()},e.prototype.dispose=function(){},e.prototype._renderMain=function(t,e,n,r,i){var o=this.group,a=t.get("clockwise"),s=-t.get("startAngle")/180*Math.PI,l=-t.get("endAngle")/180*Math.PI,u=t.getModel("axisLine"),c=u.get("roundCap"),h=c?oI:zg,p=u.get("show"),f=u.getModel("lineStyle"),d=f.get("width"),g=[s,l];Ca(g,!a),s=g[0],l=g[1];for(var v=l-s,y=s,m=0;p&&m=t&&(0===e?0:r[e-1][0]).8?"bottom":"middle",align:u<-.4?"left":u>.4?"right":"center"},{inheritColor:P}),silent:!0}))}if(m.get("show")&&k!==x){D=m.get("distance");D=D?D+l:l;for(var E=0;E<=_;E++){u=Math.cos(O),c=Math.sin(O);var R=new Qg({shape:{x1:u*(d-D)+p,y1:c*(d-D)+f,x2:u*(d-S-D)+p,y2:c*(d-S-D)+f},silent:!0,style:I});"auto"===I.stroke&&R.setStyle({stroke:r((k+E/_)/x)}),h.add(R),O+=A}O-=A}else O+=M}},e.prototype._renderPointer=function(t,e,n,r,i,o,a,s,l){var u=this.group,c=this._data,h=this._progressEls,p=[],f=t.get(["pointer","show"]),d=t.getModel("progress"),g=d.get("show"),y=t.getData(),m=y.mapDimension("value"),b=+t.get("min"),x=+t.get("max"),_=[b,x],w=[o,a];function S(e,n){var r,o=y.getItemModel(e),a=o.getModel("pointer"),s=Xr(a.get("width"),i.r),l=Xr(a.get("length"),i.r),u=t.get(["pointer","icon"]),c=a.get("offsetCenter"),h=Xr(c[0],i.r),p=Xr(c[1],i.r),f=a.get("keepAspect");return r=u?Om(u,h-s/2,p-l,s,l,null,f):new FR({shape:{angle:-Math.PI/2,width:s,r:l,x:h,y:p}}),r.rotation=-(n+Math.PI/2),r.x=i.cx,r.y=i.cy,r}function O(t,e){var n=d.get("roundCap"),r=n?oI:zg,a=d.get("overlap"),u=a?d.get("width"):l/y.count(),c=a?i.r-u:i.r-(t+1)*u,h=a?i.r:i.r-t*u,p=new r({shape:{startAngle:o,endAngle:e,cx:i.cx,cy:i.cy,clockwise:s,r0:c,r:h}});return a&&(p.z2=x-y.get(m,t)%x),p}(g||f)&&(y.diff(c).add((function(e){var n=y.get(m,e);if(f){var r=S(e,o);ru(r,{rotation:-((isNaN(+n)?w[0]:qr(n,_,w,!0))+Math.PI/2)},t),u.add(r),y.setItemGraphicEl(e,r)}if(g){var i=O(e,o),a=d.get("clip");ru(i,{shape:{endAngle:qr(n,_,w,a)}},t),u.add(i),zs(t.seriesIndex,y.dataType,e,i),p[e]=i}})).update((function(e,n){var r=y.get(m,e);if(f){var i=c.getItemGraphicEl(n),a=i?i.rotation:o,s=S(e,a);s.rotation=a,nu(s,{rotation:-((isNaN(+r)?w[0]:qr(r,_,w,!0))+Math.PI/2)},t),u.add(s),y.setItemGraphicEl(e,s)}if(g){var l=h[n],v=l?l.shape.endAngle:o,b=O(e,v),x=d.get("clip");nu(b,{shape:{endAngle:qr(r,_,w,x)}},t),u.add(b),zs(t.seriesIndex,y.dataType,e,b),p[e]=b}})).execute(),y.each((function(t){var e=y.getItemModel(t),n=e.getModel("emphasis"),i=n.get("focus"),o=n.get("blurScope"),a=n.get("disabled");if(f){var s=y.getItemGraphicEl(t),l=y.getItemVisual(t,"style"),u=l.fill;if(s instanceof us){var c=s.style;s.useStyle(Object(v["extend"])({image:c.image,x:c.x,y:c.y,width:c.width,height:c.height},l))}else s.useStyle(l),"pointer"!==s.type&&s.setColor(u);s.setStyle(e.getModel(["pointer","itemStyle"]).getItemStyle()),"auto"===s.style.fill&&s.setStyle("fill",r(qr(y.get(m,t),_,[0,1],!0))),s.z2EmphasisLift=0,Ul(s,e),Fl(s,i,o,a)}if(g){var h=p[t];h.useStyle(y.getItemVisual(t,"style")),h.setStyle(e.getModel(["progress","itemStyle"]).getItemStyle()),h.z2EmphasisLift=0,Ul(h,e),Fl(h,i,o,a)}})),this._progressEls=p)},e.prototype._renderAnchor=function(t,e){var n=t.getModel("anchor"),r=n.get("show");if(r){var i=n.get("size"),o=n.get("icon"),a=n.get("offsetCenter"),s=n.get("keepAspect"),l=Om(o,e.cx-i/2+Xr(a[0],e.r),e.cy-i/2+Xr(a[1],e.r),i,i,null,s);l.z2=n.get("showAbove")?1:0,l.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(l)}},e.prototype._renderTitleAndDetail=function(t,e,n,r,i){var o=this,a=t.getData(),s=a.mapDimension("value"),l=+t.get("min"),u=+t.get("max"),c=new Lr,h=[],p=[],f=t.isAnimationEnabled(),d=t.get(["pointer","showAbove"]);a.diff(this._data).add((function(t){h[t]=new Rs({silent:!0}),p[t]=new Rs({silent:!0})})).update((function(t,e){h[t]=o._titleEls[e],p[t]=o._detailEls[e]})).execute(),a.each((function(e){var n=a.getItemModel(e),o=a.get(s,e),g=new Lr,v=r(qr(o,[l,u],[0,1],!0)),y=n.getModel("title");if(y.get("show")){var m=y.get("offsetCenter"),b=i.cx+Xr(m[0],i.r),x=i.cy+Xr(m[1],i.r),_=h[e];_.attr({z2:d?0:2,style:gu(y,{x:b,y:x,text:a.getName(e),align:"center",verticalAlign:"middle"},{inheritColor:v})}),g.add(_)}var w=n.getModel("detail");if(w.get("show")){var S=w.get("offsetCenter"),O=i.cx+Xr(S[0],i.r),M=i.cy+Xr(S[1],i.r),A=Xr(w.get("width"),i.r),C=Xr(w.get("height"),i.r),I=t.get(["progress","show"])?a.getItemVisual(e,"style").fill:v,T=(_=p[e],w.get("formatter"));_.attr({z2:d?0:2,style:gu(w,{x:O,y:M,text:GR(o,T),width:isNaN(A)?null:A,height:isNaN(C)?null:C,align:"center",verticalAlign:"middle"},{inheritColor:I})}),Mu(_,{normal:w},o,(function(t){return GR(t,T)})),f&&Au(_,e,a,t,{getFormattedLabel:function(t,e,n,r,i,a){return GR(a?a.interpolatedValue:o,T)}}),g.add(_)}c.add(g)})),this.group.add(c),this._titleEls=h,this._detailEls=p},e.type="gauge",e}(hy),UR=WR,YR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="itemStyle",n}return d(e,t),e.prototype.getInitialData=function(t,e){return JI(this,["value"])},e.type="series.gauge",e.defaultOption={z:2,colorBy:"data",center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,roundCap:!1,lineStyle:{color:[[1,"#E6EBF8"]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:"#63677A",width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:"#63677A",width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:"#464646",fontSize:12},pointer:{icon:null,offsetCenter:[0,0],show:!0,showAbove:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:"#fff",borderWidth:0,borderColor:"#5470c6"}},title:{show:!0,offsetCenter:[0,"20%"],color:"#464646",fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:"#464646",fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},e}(Hd),qR=YR;function XR(t){t.registerChartView(UR),t.registerSeriesModel(qR)}var $R=["itemStyle","opacity"],ZR=function(t){function e(e,n){var r=t.call(this)||this,i=r,o=new $g,a=new Rs;return i.setTextContent(a),r.setTextGuideLine(o),r.updateData(e,n,!0),r}return d(e,t),e.prototype.updateData=function(t,e,n){var r=this,i=t.hostModel,o=t.getItemModel(e),a=t.getItemLayout(e),s=o.getModel("emphasis"),l=o.get($R);l=null==l?1:l,n||lu(r),r.useStyle(t.getItemVisual(e,"style")),r.style.lineJoin="round",n?(r.setShape({points:a.points}),r.style.opacity=0,ru(r,{style:{opacity:l}},i,e)):nu(r,{style:{opacity:l},shape:{points:a.points}},i,e),Ul(r,o),this._updateLabel(t,e),Fl(this,s.get("focus"),s.get("blurScope"),s.get("disabled"))},e.prototype._updateLabel=function(t,e){var n=this,r=this.getTextGuideLine(),i=n.getTextContent(),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e),l=s.label,u=t.getItemVisual(e,"style"),c=u.fill;fu(i,du(a),{labelFetcher:t.hostModel,labelDataIndex:e,defaultOpacity:u.opacity,defaultText:t.getName(e)},{normal:{align:l.textAlign,verticalAlign:l.verticalAlign}}),n.setTextConfig({local:!0,inside:!!l.inside,insideStroke:c,outsideFill:c});var h=l.linePoints;r.setShape({points:h}),n.textGuideLineConfig={anchor:h?new $n(h[0][0],h[0][1]):null},nu(i,{style:{x:l.x,y:l.y}},o,e),i.attr({rotation:l.rotation,originX:l.x,originY:l.y,z2:10}),ZO(n,KO(a),{stroke:c})},e}(Yg),KR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreLabelLineUpdate=!0,n}return d(e,t),e.prototype.render=function(t,e,n){var r=t.getData(),i=this._data,o=this.group;r.diff(i).add((function(t){var e=new ZR(r,t);r.setItemGraphicEl(t,e),o.add(e)})).update((function(t,e){var n=i.getItemGraphicEl(e);n.updateData(r,t),o.add(n),r.setItemGraphicEl(t,n)})).remove((function(e){var n=i.getItemGraphicEl(e);su(n,t,e)})).execute(),this._data=r},e.prototype.remove=function(){this.group.removeAll(),this._data=null},e.prototype.dispose=function(){},e.type="funnel",e}(hy),JR=KR,QR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new tT(v["bind"](this.getData,this),v["bind"](this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.getInitialData=function(t,e){return JI(this,{coordDimensions:["value"],encodeDefaulter:v["curry"](Dh,this)})},e.prototype._defaultLabelLine=function(t){_i(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.prototype.getDataParams=function(e){var n=this.getData(),r=t.prototype.getDataParams.call(this,e),i=n.mapDimension("value"),o=n.getSum(i);return r.percent=o?+(n.get(i,e)/o*100).toFixed(2):0,r.$vars.push("percent"),r},e.type="series.funnel",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(Hd),tN=QR;function eN(t,e){return ih(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function nN(t,e){for(var n=t.mapDimension("value"),r=t.mapArray(n,(function(t){return t})),i=[],o="ascending"===e,a=0,s=t.count();aMN)return;var i=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==i.behavior&&this._dispatchExpand({axisExpandWindow:i.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&IN(this,"mousemove")){var e=this._model,n=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),r=n.behavior;"jump"===r&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===r?null:{axisExpandWindow:n.axisExpandWindow,animation:"jump"===r?null:{duration:0}})}}};function IN(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("axisExpandTriggerOn")===e}var TN=AN,kN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(){t.prototype.init.apply(this,arguments),this.mergeOption({})},e.prototype.mergeOption=function(t){var e=this.option;t&&v["merge"](e,t,!0),this._initDimensions()},e.prototype.contains=function(t,e){var n=t.get("parallelIndex");return null!=n&&e.getComponent("parallel",n)===this},e.prototype.setAxisExpand=function(t){v["each"](["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],(function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])}),this)},e.prototype._initDimensions=function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[],n=v["filter"](this.ecModel.queryComponents({mainType:"parallelAxis"}),(function(t){return(t.get("parallelIndex")||0)===this.componentIndex}),this);v["each"](n,(function(n){t.push("dim"+n.get("dim")),e.push(n.componentIndex)}))},e.type="parallel",e.dependencies=["parallelAxis"],e.layoutMode="box",e.defaultOption={z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},e}(dh),DN=kN,LN=function(t){function e(e,n,r,i,o){var a=t.call(this,e,n,r)||this;return a.type=i||"value",a.axisIndex=o,a}return d(e,t),e.prototype.isHorizontal=function(){return"horizontal"!==this.coordinateSystem.getModel().get("layout")},e}(SO),jN=LN;function PN(t,e,n,r,i,o){t=t||0;var a=n[1]-n[0];if(null!=i&&(i=RN(i,[0,a])),null!=o&&(o=Math.max(o,null!=i?i:0)),"all"===r){var s=Math.abs(e[1]-e[0]);s=RN(s,[0,a]),i=o=RN(s,[i,o]),r=0}e[0]=RN(e[0],n),e[1]=RN(e[1],n);var l=EN(e,r);e[r]+=t;var u,c=i||0,h=n.slice();return l.sign<0?h[0]+=c:h[1]-=c,e[r]=RN(e[r],h),u=EN(e,r),null!=i&&(u.sign!==l.sign||u.spano&&(e[1-r]=e[r]+u.sign*o),e}function EN(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function RN(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var NN=v["each"],zN=Math.min,BN=Math.max,VN=Math.floor,FN=Math.ceil,HN=$r,GN=Math.PI,WN=function(){function t(t,e,n){this.type="parallel",this._axesMap=v["createHashMap"](),this._axesLayout={},this.dimensions=t.dimensions,this._model=t,this._init(t,e,n)}return t.prototype._init=function(t,e,n){var r=t.dimensions,i=t.parallelAxisIndex;NN(r,(function(t,n){var r=i[n],o=e.getComponent("parallelAxis",r),a=this._axesMap.set(t,new jN(t,AS(o),[0,0],o.get("type"),r)),s="category"===a.type;a.onBand=s&&o.get("boundaryGap"),a.inverse=o.get("inverse"),o.axis=a,a.model=o,a.coordinateSystem=o.coordinateSystem=this}),this)},t.prototype.update=function(t,e){this._updateAxesFromSeries(this._model,t)},t.prototype.containPoint=function(t){var e=this._makeLayoutInfo(),n=e.axisBase,r=e.layoutBase,i=e.pixelDimIndex,o=t[1-i],a=t[i];return o>=n&&o<=n+e.axisLength&&a>=r&&a<=r+e.layoutLength},t.prototype.getModel=function(){return this._model},t.prototype._updateAxesFromSeries=function(t,e){e.eachSeries((function(n){if(t.contains(n,e)){var r=n.getData();NN(this.dimensions,(function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(r,r.mapDimension(t)),MS(e.scale,e.model)}),this)}}),this)},t.prototype.resize=function(t,e){this._rect=ih(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},t.prototype.getRect=function(){return this._rect},t.prototype._makeLayoutInfo=function(){var t,e=this._model,n=this._rect,r=["x","y"],i=["width","height"],o=e.get("layout"),a="horizontal"===o?0:1,s=n[i[a]],l=[0,s],u=this.dimensions.length,c=UN(e.get("axisExpandWidth"),l),h=UN(e.get("axisExpandCount")||0,[0,u]),p=e.get("axisExpandable")&&u>3&&u>h&&h>1&&c>0&&s>0,f=e.get("axisExpandWindow");if(f)t=UN(f[1]-f[0],l),f[1]=f[0]+t;else{t=UN(c*(h-1),l);var d=e.get("axisExpandCenter")||VN(u/2);f=[c*d-t/2],f[1]=f[0]+t}var g=(s-t)/(u-h);g<3&&(g=0);var v=[VN(HN(f[0]/c,1))+1,FN(HN(f[1]/c,1))-1],y=g/c*f[0];return{layout:o,pixelDimIndex:a,layoutBase:n[r[a]],layoutLength:s,axisBase:n[r[1-a]],axisLength:n[i[1-a]],axisExpandable:p,axisExpandWidth:c,axisCollapseWidth:g,axisExpandWindow:f,axisCount:u,winInnerIndices:v,axisExpandWindow0Pos:y}},t.prototype._layoutAxes=function(){var t=this._rect,e=this._axesMap,n=this.dimensions,r=this._makeLayoutInfo(),i=r.layout;e.each((function(t){var e=[0,r.axisLength],n=t.inverse?1:0;t.setExtent(e[n],e[1-n])})),NN(n,(function(e,n){var o=(r.axisExpandable?qN:YN)(n,r),a={horizontal:{x:o.position,y:r.axisLength},vertical:{x:0,y:o.position}},s={horizontal:GN/2,vertical:0},l=[a[i].x+t.x,a[i].y+t.y],u=s[i],c=In();jn(c,c,u),Ln(c,c,l),this._axesLayout[e]={position:l,rotation:u,transform:c,axisNameAvailableWidth:o.axisNameAvailableWidth,axisLabelShow:o.axisLabelShow,nameTruncateMaxWidth:o.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}}),this)},t.prototype.getAxis=function(t){return this._axesMap.get(t)},t.prototype.dataToPoint=function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},t.prototype.eachActiveState=function(t,e,n,r){null==n&&(n=0),null==r&&(r=t.count());var i=this._axesMap,o=this.dimensions,a=[],s=[];v["each"](o,(function(e){a.push(t.mapDimension(e)),s.push(i.get(e).model)}));for(var l=this.hasAxisBrushed(),u=n;ui*(1-c[0])?(l="jump",a=s-i*(1-c[2])):(a=s-i*c[1])>=0&&(a=s-i*(1-c[1]))<=0&&(a=0),a*=e.axisExpandWidth/u,a?PN(a,r,o,"all"):l="none";else{var p=r[1]-r[0],f=o[1]*s/p;r=[BN(0,f-p/2)],r[1]=zN(o[1],r[0]+p),r[0]=r[1]-p}return{axisExpandWindow:r,behavior:l}},t}();function UN(t,e){return zN(BN(t,e[0]),e[1])}function YN(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*t,axisNameAvailableWidth:n,axisLabelShow:!0}}function qN(t,e){var n,r,i=e.layoutLength,o=e.axisExpandWidth,a=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,c=!1;return t=0;n--)Zr(e[n])},e.prototype.getActiveState=function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(+t))return"inactive";if(1===e.length){var n=e[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var r=0,i=e.length;roz}function Oz(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function Mz(t,e,n,r){var i=new Lr;return i.add(new ms({name:"main",style:Tz(n),silent:!0,draggable:!0,cursor:"move",drift:Object(v["curry"])(Pz,t,e,i,["n","s","w","e"]),ondragend:Object(v["curry"])(wz,e,{isEnd:!0})})),Object(v["each"])(r,(function(n){i.add(new ms({name:n.join(""),style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:Object(v["curry"])(Pz,t,e,i,n),ondragend:Object(v["curry"])(wz,e,{isEnd:!0})}))})),i}function Az(t,e,n,r){var i=r.brushStyle.lineWidth||0,o=nz(i,az),a=n[0][0],s=n[1][0],l=a-i/2,u=s-i/2,c=n[0][1],h=n[1][1],p=c-o+i/2,f=h-o+i/2,d=c-a,g=h-s,v=d+i,y=g+i;Iz(t,e,"main",a,s,d,g),r.transformable&&(Iz(t,e,"w",l,u,o,y),Iz(t,e,"e",p,u,o,y),Iz(t,e,"n",l,u,v,o),Iz(t,e,"s",l,f,v,o),Iz(t,e,"nw",l,u,o,o),Iz(t,e,"ne",p,u,o,o),Iz(t,e,"sw",l,f,o,o),Iz(t,e,"se",p,f,o,o))}function Cz(t,e){var n=e.__brushOption,r=n.transformable,i=e.childAt(0);i.useStyle(Tz(n)),i.attr({silent:!r,cursor:r?"move":"default"}),Object(v["each"])([["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]],(function(n){var i=e.childOfName(n.join("")),o=1===n.length?Lz(t,n[0]):jz(t,n);i&&i.attr({silent:!r,invisible:!r,cursor:r?uz[o]+"-resize":null})}))}function Iz(t,e,n,r,i,o,a){var s=e.childOfName(n);s&&s.setShape(zz(Nz(t,e,[[r,i],[r+o,i+a]])))}function Tz(t){return Object(v["defaults"])({strokeNoScale:!0},t.brushStyle)}function kz(t,e,n,r){var i=[ez(t,n),ez(e,r)],o=[nz(t,n),nz(e,r)];return[[i[0],o[0]],[i[1],o[1]]]}function Dz(t){return Fv(t.group)}function Lz(t,e){var n={w:"left",e:"right",n:"top",s:"bottom"},r={left:"w",right:"e",top:"n",bottom:"s"},i=Gv(n[e],Dz(t));return r[i]}function jz(t,e){var n=[Lz(t,e[0]),Lz(t,e[1])];return("e"===n[0]||"w"===n[0])&&n.reverse(),n.join("")}function Pz(t,e,n,r,i,o){var a=n.__brushOption,s=t.toRectRange(a.range),l=Rz(e,i,o);Object(v["each"])(r,(function(t){var e=lz[t];s[e[0]][e[1]]+=l[e[0]]})),a.range=t.fromRectRange(kz(s[0][0],s[1][0],s[0][1],s[1][1])),yz(e,n),wz(e,{isEnd:!1})}function Ez(t,e,n,r){var i=e.__brushOption.range,o=Rz(t,n,r);Object(v["each"])(i,(function(t){t[0]+=o[0],t[1]+=o[1]})),yz(t,e),wz(t,{isEnd:!1})}function Rz(t,e,n){var r=t.group,i=r.transformCoordToLocal(e,n),o=r.transformCoordToLocal(0,0);return[i[0]-o[0],i[1]-o[1]]}function Nz(t,e,n){var r=xz(t,e);return r&&r!==tz?r.clipPath(n,t._transform):Object(v["clone"])(n)}function zz(t){var e=ez(t[0][0],t[1][0]),n=ez(t[0][1],t[1][1]),r=nz(t[0][0],t[1][0]),i=nz(t[0][1],t[1][1]);return{x:e,y:n,width:r-e,height:i-n}}function Bz(t,e,n){if(t._brushType&&!Yz(t,e.offsetX,e.offsetY)){var r=t._zr,i=t._covers,o=bz(t,e,n);if(!t._dragging)for(var a=0;ar.getWidth()||n<0||n>r.getHeight()}var qz={lineX:Xz(0),lineY:Xz(1),rect:{createCover:function(t,e){function n(t){return t}return Mz({toRectRange:n,fromRectRange:n},t,e,[["w"],["e"],["n"],["s"],["s","e"],["s","w"],["n","e"],["n","w"]])},getCreatingRange:function(t){var e=Oz(t);return kz(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(t,e,n,r){Az(t,e,n,r)},updateCommon:Cz,contain:Fz},polygon:{createCover:function(t,e){var n=new Lr;return n.add(new $g({name:"main",style:Tz(e),silent:!0})),n},getCreatingRange:function(t){return t},endCreating:function(t,e){e.remove(e.childAt(0)),e.add(new Yg({name:"main",draggable:!0,drift:Object(v["curry"])(Ez,t,e),ondragend:Object(v["curry"])(wz,t,{isEnd:!0})}))},updateCoverShape:function(t,e,n,r){e.childAt(0).setShape({points:Nz(t,e,n)})},updateCommon:Cz,contain:Fz}};function Xz(t){return{createCover:function(e,n){return Mz({toRectRange:function(e){var n=[e,[0,100]];return t&&n.reverse(),n},fromRectRange:function(e){return e[t]}},e,n,[[["w"],["e"]],[["n"],["s"]]][t])},getCreatingRange:function(e){var n=Oz(e),r=ez(n[0][t],n[1][t]),i=nz(n[0][t],n[1][t]);return[r,i]},updateCoverShape:function(e,n,r,i){var o,a=xz(e,n);if(a!==tz&&a.getLinearBrushOtherExtent)o=a.getLinearBrushOtherExtent(t);else{var s=e._zr;o=[0,[s.getWidth(),s.getHeight()][1-t]]}var l=[r,o];t&&l.reverse(),Az(e,n,l,i)},updateCommon:Cz,contain:Fz}}var $z=pz;function Zz(t){return t=Qz(t),function(e){return qv(e,t)}}function Kz(t,e){return t=Qz(t),function(n){var r=null!=e?e:n,i=r?t.width:t.height,o=r?t.x:t.y;return[o,o+(i||0)]}}function Jz(t,e,n){var r=Qz(t);return function(t,i){return r.contain(i[0],i[1])&&!pD(t,e,n)}}function Qz(t){return or.create(t)}var tB=["axisLine","axisTickLabel","axisName"],eB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(e,n){t.prototype.init.apply(this,arguments),(this._brushController=new $z(n.getZr())).on("brush",v["bind"](this._onBrush,this))},e.prototype.render=function(t,e,n,r){if(!nB(t,e,r)){this.axisModel=t,this.api=n,this.group.removeAll();var i=this._axisGroup;if(this._axisGroup=new Lr,this.group.add(this._axisGroup),t.get("show")){var o=iB(t,e),a=o.coordinateSystem,s=t.getAreaSelectStyle(),l=s.width,u=t.axis.dim,c=a.getAxisLayout(u),h=v["extend"]({strokeContainThreshold:l},c),p=new rk(t,h);v["each"](tB,p.add,p),this._axisGroup.add(p.getGroup()),this._refreshBrushController(h,s,t,o,l,n),Yv(i,this._axisGroup,t)}}},e.prototype._refreshBrushController=function(t,e,n,r,i,o){var a=n.axis.getExtent(),s=a[1]-a[0],l=Math.min(30,.1*Math.abs(s)),u=or.create({x:a[0],y:-i/2,width:s,height:i});u.x-=l,u.width+=2*l,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,x:t.position[0],y:t.position[1]}).setPanels([{panelId:"pl",clipPath:Zz(u),isTargetByCursor:Jz(u,o,r),getLinearBrushOtherExtent:Kz(u,0)}]).enableBrush({brushType:"lineX",brushStyle:e,removeOnClick:!0}).updateCovers(rB(n))},e.prototype._onBrush=function(t){var e=t.areas,n=this.axisModel,r=n.axis,i=v["map"](e,(function(t){return[r.coordToData(t.range[0],!0),r.coordToData(t.range[1],!0)]}));(!n.option.realtime===t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:n.id,intervals:i})},e.prototype.dispose=function(){this._brushController.dispose()},e.type="parallelAxis",e}(Wd);function nB(t,e,n){return n&&"axisAreaSelect"===n.type&&e.findComponents({mainType:"parallelAxis",query:n})[0]===t}function rB(t){var e=t.axis;return v["map"](t.activeIntervals,(function(t){return{brushType:"lineX",panelId:"pl",range:[e.dataToCoord(t[0],!0),e.dataToCoord(t[1],!0)]}}))}function iB(t,e){return e.getComponent("parallel",t.get("parallelIndex"))}var oB=eB,aB={type:"axisAreaSelect",event:"axisAreaSelected"};function sB(t){t.registerAction(aB,(function(t,e){e.eachComponent({mainType:"parallelAxis",query:t},(function(e){e.axis.model.setActiveIntervals(t.intervals)}))})),t.registerAction("parallelAxisExpand",(function(t,e){e.eachComponent({mainType:"parallel",query:t},(function(e){e.setAxisExpand(t)}))}))}var lB={type:"value",areaSelectStyle:{width:20,borderWidth:1,borderColor:"rgba(160,197,232)",color:"rgba(160,197,232)",opacity:.3},realtime:!0,z:10};function uB(t){t.registerComponentView(TN),t.registerComponentModel(DN),t.registerCoordinateSystem("parallel",KN),t.registerPreprocessor(wN),t.registerComponentModel(QN),t.registerComponentView(oB),OT(t,"parallel",QN,lB),sB(t)}function cB(t){p_(uB),t.registerChartView(dN),t.registerSeriesModel(mN),t.registerVisual(t.PRIORITY.VISUAL.BRUSH,_N)}var hB=function(){function t(){this.x1=0,this.y1=0,this.x2=0,this.y2=0,this.cpx1=0,this.cpy1=0,this.cpx2=0,this.cpy2=0,this.extent=0}return t}(),pB=function(t){function e(e){return t.call(this,e)||this}return d(e,t),e.prototype.getDefaultShape=function(){return new hB},e.prototype.buildPath=function(t,e){var n=e.extent;t.moveTo(e.x1,e.y1),t.bezierCurveTo(e.cpx1,e.cpy1,e.cpx2,e.cpy2,e.x2,e.y2),"vertical"===e.orient?(t.lineTo(e.x2+n,e.y2),t.bezierCurveTo(e.cpx2+n,e.cpy2,e.cpx1+n,e.cpy1,e.x1+n,e.y1)):(t.lineTo(e.x2,e.y2+n),t.bezierCurveTo(e.cpx2,e.cpy2+n,e.cpx1,e.cpy1+n,e.x1,e.y1+n)),t.closePath()},e.prototype.highlight=function(){wl(this)},e.prototype.downplay=function(){Sl(this)},e}(es),fB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._focusAdjacencyDisabled=!1,n}return d(e,t),e.prototype.render=function(t,e,n){var r=this,i=t.getGraph(),o=this.group,a=t.layoutInfo,s=a.width,l=a.height,u=t.getData(),c=t.getData("edge"),h=t.get("orient");this._model=t,o.removeAll(),o.x=a.x,o.y=a.y,i.eachEdge((function(e){var n=new pB,r=Ns(n);r.dataIndex=e.dataIndex,r.seriesIndex=t.seriesIndex,r.dataType="edge";var i,a,u,p,f,d,g,y,m=e.getModel(),b=m.getModel("lineStyle"),x=b.get("curveness"),_=e.node1.getLayout(),w=e.node1.getModel(),S=w.get("localX"),O=w.get("localY"),M=e.node2.getLayout(),A=e.node2.getModel(),C=A.get("localX"),I=A.get("localY"),T=e.getLayout();switch(n.shape.extent=Math.max(1,T.dy),n.shape.orient=h,"vertical"===h?(i=(null!=S?S*s:_.x)+T.sy,a=(null!=O?O*l:_.y)+_.dy,u=(null!=C?C*s:M.x)+T.ty,p=null!=I?I*l:M.y,f=i,d=a*(1-x)+p*x,g=u,y=a*x+p*(1-x)):(i=(null!=S?S*s:_.x)+_.dx,a=(null!=O?O*l:_.y)+T.sy,u=null!=C?C*s:M.x,p=(null!=I?I*l:M.y)+T.ty,f=i*(1-x)+u*x,d=a,g=i*x+u*(1-x),y=p),n.setShape({x1:i,y1:a,x2:u,y2:p,cpx1:f,cpy1:d,cpx2:g,cpy2:y}),n.useStyle(b.getItemStyle()),n.style.fill){case"source":n.style.fill=e.node1.getVisual("color"),n.style.decal=e.node1.getVisual("style").decal;break;case"target":n.style.fill=e.node2.getVisual("color"),n.style.decal=e.node2.getVisual("style").decal;break;case"gradient":var k=e.node1.getVisual("color"),D=e.node2.getVisual("color");Object(v["isString"])(k)&&Object(v["isString"])(D)&&(n.style.fill=new fv(0,0,+("horizontal"===h),+("vertical"===h),[{color:k,offset:0},{color:D,offset:1}]))}var L=m.getModel("emphasis");Ul(n,m,"lineStyle",(function(t){return t.getItemStyle()})),o.add(n),c.setItemGraphicEl(e.dataIndex,n);var j=L.get("focus");Fl(n,"adjacency"===j?e.getAdjacentDataIndices():j,L.get("blurScope"),L.get("disabled")),Ns(n).dataType="edge"})),i.eachNode((function(e){var n=e.getLayout(),r=e.getModel(),i=r.get("localX"),a=r.get("localY"),c=r.getModel("emphasis"),h=new ms({shape:{x:null!=i?i*s:n.x,y:null!=a?a*l:n.y,width:n.dx,height:n.dy},style:r.getModel("itemStyle").getItemStyle(),z2:10});fu(h,du(r),{labelFetcher:t,labelDataIndex:e.dataIndex,defaultText:e.id}),h.disableLabelAnimation=!0,h.setStyle("fill",e.getVisual("color")),h.setStyle("decal",e.getVisual("style").decal),Ul(h,r),o.add(h),u.setItemGraphicEl(e.dataIndex,h),Ns(h).dataType="node";var p=c.get("focus");Fl(h,"adjacency"===p?e.getAdjacentDataIndices():p,c.get("blurScope"),c.get("disabled"))})),u.eachItemGraphicEl((function(e,i){var o=u.getItemModel(i);o.get("draggable")&&(e.drift=function(e,o){r._focusAdjacencyDisabled=!0,this.shape.x+=e,this.shape.y+=o,this.dirty(),n.dispatchAction({type:"dragNode",seriesId:t.id,dataIndex:u.getRawIndex(i),localX:this.shape.x/s,localY:this.shape.y/l})},e.ondragend=function(){r._focusAdjacencyDisabled=!1},e.draggable=!0,e.cursor="move")})),!this._data&&t.isAnimationEnabled()&&o.setClipPath(dB(o.getBoundingRect(),t,(function(){o.removeClipPath()}))),this._data=t.getData()},e.prototype.dispose=function(){},e.type="sankey",e}(hy);function dB(t,e,n){var r=new ms({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return ru(r,{shape:{width:t.width+20}},e,n),r}var gB=fB,vB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.getInitialData=function(t,e){var n=t.edges||t.links,r=t.data||t.nodes,i=t.levels;this.levelModels=[];for(var o=this.levelModels,a=0;a=0&&(o[i[a].depth]=new Bu(i[a],this,e));if(r&&n){var s=PR(r,n,this,!0,l);return s.data}function l(t,e){t.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,r=n.getData().getItemLayout(e);if(r){var i=r.depth,o=n.levelModels[i];o&&(t.parentModel=o)}return t})),e.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,r=n.getGraph().getEdgeByIndex(e),i=r.node1.getLayout();if(i){var o=i.depth,a=n.levelModels[o];a&&(t.parentModel=a)}return t}))}},e.prototype.setNodePosition=function(t,e){var n=this.option.data||this.option.nodes,r=n[t];r.localX=e[0],r.localY=e[1]},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.formatTooltip=function(t,e,n){function r(t){return isNaN(t)||null==t}if("edge"===n){var i=this.getDataParams(t,n),o=i.data,a=i.value,s=o.source+" -- "+o.target;return pd("nameValue",{name:s,value:a,noValue:r(a)})}var l=this.getGraph().getNodeByIndex(t),u=l.getLayout().value,c=this.getDataParams(t,n).data.name;return pd("nameValue",{name:null!=c?c+"":null,value:u,noValue:r(u)})},e.prototype.optionUpdated=function(){},e.prototype.getDataParams=function(e,n){var r=t.prototype.getDataParams.call(this,e,n);if(null==r.value&&"node"===n){var i=this.getGraph().getNodeByIndex(e),o=i.getLayout().value;r.value=o}return r},e.type="series.sankey",e.defaultOption={z:2,coordinateSystem:"view",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,label:{show:!0,position:"right",fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:"#314656",opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:"#212121"}},animationEasing:"linear",animationDuration:1e3},e}(Hd),yB=vB;function mB(t,e){t.eachSeriesByType("sankey",(function(t){var n=t.get("nodeWidth"),r=t.get("nodeGap"),i=bB(t,e);t.layoutInfo=i;var o=i.width,a=i.height,s=t.getGraph(),l=s.nodes,u=s.edges;_B(l);var c=v["filter"](l,(function(t){return 0===t.getLayout().value})),h=0!==c.length?0:t.get("layoutIterations"),p=t.get("orient"),f=t.get("nodeAlign");xB(l,u,n,r,o,a,h,p,f)}))}function bB(t,e){return ih(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function xB(t,e,n,r,i,o,a,s,l){wB(t,e,n,i,o,s,l),CB(t,e,o,i,r,a,s),VB(t,s)}function _B(t){v["each"](t,(function(t){var e=zB(t.outEdges,NB),n=zB(t.inEdges,NB),r=t.getValue()||0,i=Math.max(e,n,r);t.setLayout({value:i},!0)}))}function wB(t,e,n,r,i,o,a){for(var s=[],l=[],u=[],c=[],h=0,p=0;p=0;y&&v.depth>f&&(f=v.depth),g.setLayout({depth:y?v.depth:h},!0),"vertical"===o?g.setLayout({dy:n},!0):g.setLayout({dx:n},!0);for(var m=0;mh-1?f:h-1;a&&"left"!==a&&OB(t,a,o,S);var O="vertical"===o?(i-n)/S:(r-n)/S;AB(t,O,o)}function SB(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return null!=e.depth&&e.depth>=0}function OB(t,e,n,r){if("right"===e){var i=[],o=t,a=0;while(o.length){for(var s=0;s0;o--)l*=.99,DB(s,l,a),kB(s,i,n,r,a),BB(s,l,a),kB(s,i,n,r,a)}function IB(t,e){var n=[],r="vertical"===e?"y":"x",i=Ji(t,(function(t){return t.getLayout()[r]}));return i.keys.sort((function(t,e){return t-e})),v["each"](i.keys,(function(t){n.push(i.buckets.get(t))})),n}function TB(t,e,n,r,i,o){var a=1/0;v["each"](t,(function(t){var e=t.length,s=0;v["each"](t,(function(t){s+=t.getLayout().value}));var l="vertical"===o?(r-(e-1)*i)/s:(n-(e-1)*i)/s;l0&&(a=s.getLayout()[o]+l,"vertical"===i?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]+s.getLayout()[h]+e;var f="vertical"===i?r:n;if(l=u-e-f,l>0){a=s.getLayout()[o]-l,"vertical"===i?s.setLayout({x:a},!0):s.setLayout({y:a},!0),u=a;for(p=c-2;p>=0;--p)s=t[p],l=s.getLayout()[o]+s.getLayout()[h]+e-u,l>0&&(a=s.getLayout()[o]-l,"vertical"===i?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]}}))}function DB(t,e,n){v["each"](t.slice().reverse(),(function(t){v["each"](t,(function(t){if(t.outEdges.length){var r=zB(t.outEdges,LB,n)/zB(t.outEdges,NB);if(isNaN(r)){var i=t.outEdges.length;r=i?zB(t.outEdges,jB,n)/i:0}if("vertical"===n){var o=t.getLayout().x+(r-RB(t,n))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(r-RB(t,n))*e;t.setLayout({y:a},!0)}}}))}))}function LB(t,e){return RB(t.node2,e)*t.getValue()}function jB(t,e){return RB(t.node2,e)}function PB(t,e){return RB(t.node1,e)*t.getValue()}function EB(t,e){return RB(t.node1,e)}function RB(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function NB(t){return t.getValue()}function zB(t,e,n){var r=0,i=t.length,o=-1;while(++oi&&(i=e)})),v["each"](n,(function(e){var n=new GP({type:"color",mappingMethod:"linear",dataExtent:[r,i],visual:t.get("color")}),o=n.mapValueToVisual(e.getLayout().value),a=e.getModel().get(["itemStyle","color"]);null!=a?(e.setVisual("color",a),e.setVisual("style",{fill:a})):(e.setVisual("color",o),e.setVisual("style",{fill:o}))}))}}))}function HB(t){t.registerChartView(gB),t.registerSeriesModel(yB),t.registerLayout(mB),t.registerVisual(FB),t.registerAction({type:"dragNode",event:"dragnode",update:"update"},(function(t,e){e.eachComponent({mainType:"series",subType:"sankey",query:t},(function(e){e.setNodePosition(t.dataIndex,[t.localX,t.localY])}))}))}var GB=function(){function t(){}return t.prototype.getInitialData=function(t,e){var n,r,i=e.getComponent("xAxis",this.get("xAxisIndex")),o=e.getComponent("yAxis",this.get("yAxisIndex")),a=i.get("type"),s=o.get("type");"category"===a?(t.layout="horizontal",n=i.getOrdinalMeta(),r=!0):"category"===s?(t.layout="vertical",n=o.getOrdinalMeta(),r=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,c=this._baseAxisDim=l[u],h=l[1-u],p=[i,o],f=p[u].get("type"),d=p[1-u].get("type"),g=t.data;if(g&&r){var y=[];v["each"](g,(function(t,e){var n;v["isArray"](t)?(n=t.slice(),t.unshift(e)):v["isArray"](t.value)?(n=v["extend"]({},t),n.value=n.value.slice(),t.value.unshift(e)):n=t,y.push(n)})),t.data=y}var m=this.defaultValueDimensions,b=[{name:c,type:x_(f),ordinalMeta:n,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:h,type:x_(d),dimsDef:m.slice()}];return JI(this,{coordDimensions:b,dimensionsCount:m.length+1,encodeDefaulter:v["curry"](kh,b,this)})},t.prototype.getBaseAxis=function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis},t}(),WB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],n.visualDrawType="stroke",n}return d(e,t),e.type="series.boxplot",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0,0,0,0.2)"}},animationDuration:800},e}(Hd);Object(v["mixin"])(WB,GB,!0);var UB=WB,YB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=t.getData(),i=this.group,o=this._data;this._data||i.removeAll();var a="horizontal"===t.get("layout")?1:0;r.diff(o).add((function(t){if(r.hasValue(t)){var e=r.getItemLayout(t),n=$B(e,r,t,a,!0);r.setItemGraphicEl(t,n),i.add(n)}})).update((function(t,e){var n=o.getItemGraphicEl(e);if(r.hasValue(t)){var s=r.getItemLayout(t);n?(lu(n),ZB(s,n,r,t)):n=$B(s,r,t,a),i.add(n),r.setItemGraphicEl(t,n)}else i.remove(n)})).remove((function(t){var e=o.getItemGraphicEl(t);e&&i.remove(e)})).execute(),this._data=r},e.prototype.remove=function(t){var e=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl((function(t){t&&e.remove(t)}))},e.type="boxplot",e}(hy),qB=function(){function t(){}return t}(),XB=function(t){function e(e){var n=t.call(this,e)||this;return n.type="boxplotBoxPath",n}return d(e,t),e.prototype.getDefaultShape=function(){return new qB},e.prototype.buildPath=function(t,e){var n=e.points,r=0;for(t.moveTo(n[r][0],n[r][1]),r++;r<4;r++)t.lineTo(n[r][0],n[r][1]);for(t.closePath();rg){var _=[m,x];r.push(_)}}}return{boxData:n,outliers:r}}var aV={type:"echarts:boxplot",transform:function(t){var e=t.upstream;if(e.sourceFormat!==xh){var n="";0,Zh(n)}var r=oV(e.getRawData(),t.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:r.boxData},{data:r.outliers}]}};function sV(t){t.registerSeriesModel(UB),t.registerChartView(JB),t.registerVisual(QB),t.registerLayout(eV),t.registerTransform(aV)}var lV=["color","borderColor"],uV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){this.group.removeClipPath(),this._progressiveEls=null,this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},e.prototype.incrementalPrepareRender=function(t,e,n){this._clear(),this._updateDrawMode(t)},e.prototype.incrementalRender=function(t,e,n,r){this._progressiveEls=[],this._isLargeDraw?this._incrementalRenderLarge(t,e):this._incrementalRenderNormal(t,e)},e.prototype.eachRendered=function(t){ny(this._progressiveEls||this.group,t)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t){var e=t.getData(),n=this._data,r=this.group,i=e.getLayout("isSimpleBox"),o=t.get("clip",!0),a=t.coordinateSystem,s=a.getArea&&a.getArea();this._data||r.removeAll(),e.diff(n).add((function(n){if(e.hasValue(n)){var a=e.getItemLayout(n);if(o&&fV(s,a))return;var l=pV(a,n,!0);ru(l,{shape:{points:a.ends}},t,n),dV(l,e,n,i),r.add(l),e.setItemGraphicEl(n,l)}})).update((function(a,l){var u=n.getItemGraphicEl(l);if(e.hasValue(a)){var c=e.getItemLayout(a);o&&fV(s,c)?r.remove(u):(u?(nu(u,{shape:{points:c.ends}},t,a),lu(u)):u=pV(c,a),dV(u,e,a,i),r.add(u),e.setItemGraphicEl(a,u))}else r.remove(u)})).remove((function(t){var e=n.getItemGraphicEl(t);e&&r.remove(e)})).execute(),this._data=e},e.prototype._renderLarge=function(t){this._clear(),mV(t,this.group);var e=t.get("clip",!0)?CC(t.coordinateSystem,!1,t):null;e?this.group.setClipPath(e):this.group.removeClipPath()},e.prototype._incrementalRenderNormal=function(t,e){var n,r=e.getData(),i=r.getLayout("isSimpleBox");while(null!=(n=t.next())){var o=r.getItemLayout(n),a=pV(o,n);dV(a,r,n,i),a.incremental=!0,this.group.add(a),this._progressiveEls.push(a)}},e.prototype._incrementalRenderLarge=function(t,e){mV(e,this.group,this._progressiveEls,!0)},e.prototype.remove=function(t){this._clear()},e.prototype._clear=function(){this.group.removeAll(),this._data=null},e.type="candlestick",e}(hy),cV=function(){function t(){}return t}(),hV=function(t){function e(e){var n=t.call(this,e)||this;return n.type="normalCandlestickBox",n}return d(e,t),e.prototype.getDefaultShape=function(){return new cV},e.prototype.buildPath=function(t,e){var n=e.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))},e}(es);function pV(t,e,n){var r=t.ends;return new hV({shape:{points:n?gV(r,t):r},z2:100})}function fV(t,e){for(var n=!0,r=0;r0?"borderColor":"borderColor0"])||n.get(["itemStyle",t>0?"color":"color0"]),o=n.getModel("itemStyle").getItemStyle(lV);e.useStyle(o),e.style.fill=null,e.style.stroke=i}var xV=uV,_V=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"open",defaultTooltip:!0},{name:"close",defaultTooltip:!0},{name:"lowest",defaultTooltip:!0},{name:"highest",defaultTooltip:!0}],n}return d(e,t),e.prototype.getShadowDim=function(){return"open"},e.prototype.brushSelector=function(t,e,n){var r=e.getItemLayout(t);return r&&n.rect(r.brushRect)},e.type="series.candlestick",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,clip:!0,itemStyle:{color:"#eb5454",color0:"#47b262",borderColor:"#eb5454",borderColor0:"#47b262",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,large:!0,largeThreshold:600,progressive:3e3,progressiveThreshold:1e4,progressiveChunkMode:"mod",animationEasing:"linear",animationDuration:300},e}(Hd);Object(v["mixin"])(_V,GB,!0);var wV=_V;function SV(t){t&&v["isArray"](t.series)&&v["each"](t.series,(function(t){v["isObject"](t)&&"k"===t.type&&(t.type="candlestick")}))}var OV=["itemStyle","borderColor"],MV=["itemStyle","borderColor0"],AV=["itemStyle","color"],CV=["itemStyle","color0"],IV={seriesType:"candlestick",plan:Ud(),performRawSeries:!0,reset:function(t,e){function n(t,e){return e.get(t>0?AV:CV)}function r(t,e){return e.get(t>0?OV:MV)}if(!e.isSeriesFiltered(t)){var i=t.pipelineContext.large;return!i&&{progress:function(t,e){var i;while(null!=(i=t.next())){var o=e.getItemModel(i),a=e.getItemLayout(i).sign,s=o.getItemStyle();s.fill=n(a,o),s.stroke=r(a,o)||s.fill;var l=e.ensureUniqueItemVisual(i,"style");Object(v["extend"])(l,s)}}}}}},TV=IV,kV={seriesType:"candlestick",plan:Ud(),reset:function(t){var e=t.coordinateSystem,n=t.getData(),r=LV(t,n),i=0,o=1,a=["x","y"],s=n.getDimensionIndex(n.mapDimension(a[i])),l=Object(v["map"])(n.mapDimensionsAll(a[o]),n.getDimensionIndex,n),u=l[0],c=l[1],h=l[2],p=l[3];if(n.setLayout({candleWidth:r,isSimpleBox:r<=1.3}),!(s<0||l.length<4))return{progress:t.pipelineContext.large?d:f};function f(t,n){var a,l=n.getStore();while(null!=(a=t.next())){var f=l.get(s,a),d=l.get(u,a),g=l.get(c,a),v=l.get(h,a),y=l.get(p,a),m=Math.min(d,g),b=Math.max(d,g),x=M(m,f),_=M(b,f),w=M(v,f),S=M(y,f),O=[];A(O,_,0),A(O,x,1),O.push(I(S),I(_),I(w),I(x)),n.setItemLayout(a,{sign:DV(l,a,d,g,c),initBaseline:d>g?_[o]:x[o],ends:O,brushRect:C(v,y,f)})}function M(t,n){var r=[];return r[i]=n,r[o]=t,isNaN(n)||isNaN(t)?[NaN,NaN]:e.dataToPoint(r)}function A(t,e,n){var o=e.slice(),a=e.slice();o[i]=Vv(o[i]+r/2,1,!1),a[i]=Vv(a[i]-r/2,1,!0),n?t.push(o,a):t.push(a,o)}function C(t,e,n){var a=M(t,n),s=M(e,n);return a[i]-=r/2,s[i]-=r/2,{x:a[0],y:a[1],width:o?r:s[0]-a[0],height:o?s[1]-a[1]:r}}function I(t){return t[i]=Vv(t[i],1),t}}function d(t,n){var r,a,l=Pw(4*t.count),f=0,d=[],g=[],v=n.getStore();while(null!=(a=t.next())){var y=v.get(s,a),m=v.get(u,a),b=v.get(c,a),x=v.get(h,a),_=v.get(p,a);isNaN(y)||isNaN(x)||isNaN(_)?(l[f++]=NaN,f+=3):(l[f++]=DV(v,a,m,b,c),d[i]=y,d[o]=x,r=e.dataToPoint(d,null,g),l[f++]=r?r[0]:NaN,l[f++]=r?r[1]:NaN,d[o]=_,r=e.dataToPoint(d,null,g),l[f++]=r?r[1]:NaN)}n.setLayout("largePoints",l)}}};function DV(t,e,n,r,i){var o;return o=n>r?-1:n0?t.get(i,e-1)<=r?1:-1:1,o}function LV(t,e){var n,r=t.getBaseAxis(),i="category"===r.type?r.getBandWidth():(n=r.getExtent(),Math.abs(n[1]-n[0])/e.count()),o=Xr(Object(v["retrieve2"])(t.get("barMaxWidth"),i),i),a=Xr(Object(v["retrieve2"])(t.get("barMinWidth"),1),i),s=t.get("barWidth");return null!=s?Xr(s,i):Math.max(Math.min(i/2,o),a)}var jV=kV;function PV(t){t.registerChartView(xV),t.registerSeriesModel(wV),t.registerPreprocessor(SV),t.registerVisual(TV),t.registerLayout(jV)}function EV(t,e){var n=e.rippleEffectColor||e.color;t.eachChild((function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?n:null,fill:"fill"===e.brushType?n:null}})}))}var RV=function(t){function e(e,n){var r=t.call(this)||this,i=new aC(e,n),o=new Lr;return r.add(i),r.add(o),r.updateData(e,n),r}return d(e,t),e.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},e.prototype.startEffectAnimation=function(t){for(var e=t.symbolType,n=t.color,r=t.rippleNumber,i=this.childAt(1),o=0;o0&&(o=this._getLineLength(r)/s*1e3),o!==this._period||a!==this._loop){r.stopAnimation();var u=void 0;u=v["isFunction"](l)?l(n):l,r.__t>0&&(u=-o*r.__t),this._animateSymbol(r,o,u,a)}this._period=o,this._loop=a}},e.prototype._animateSymbol=function(t,e,n,r){if(e>0){t.__t=0;var i=this,o=t.animate("",r).when(e,{__t:1}).delay(n).during((function(){i._updateSymbolPosition(t)}));r||o.done((function(){i.remove(t)})),o.start()}},e.prototype._getLineLength=function(t){return P(t.__p1,t.__cp1)+P(t.__cp1,t.__p2)},e.prototype._updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},e.prototype.updateData=function(t,e,n){this.childAt(0).updateData(t,e,n),this._updateEffectSymbol(t,e)},e.prototype._updateSymbolPosition=function(t){var e=t.__p1,n=t.__p2,r=t.__cp1,i=t.__t,o=[t.x,t.y],a=o.slice(),s=ge,l=ve;o[0]=s(e[0],r[0],n[0],i),o[1]=s(e[1],r[1],n[1],i);var u=l(e[0],r[0],n[0],i),c=l(e[1],r[1],n[1],i);t.rotation=-Math.atan2(c,u)-Math.PI/2,"line"!==this._symbolType&&"rect"!==this._symbolType&&"roundRect"!==this._symbolType||(void 0!==t.__lastT&&t.__lastT=0;o--)if(r[o]<=e)break;o=Math.min(o,i-2)}else{for(o=a;oe)break;o=Math.min(o-1,i-2)}var l=(e-r[o])/(r[o+1]-r[o]),u=n[o],c=n[o+1];t.x=u[0]*(1-l)+l*c[0],t.y=u[1]*(1-l)+l*c[1];var h=c[0]-u[0],p=c[1]-u[1];t.rotation=-Math.atan2(p,h)-Math.PI/2,this._lastFrame=o,this._lastFramePercent=e,t.ignore=!1}},e}(WV),XV=qV,$V=function(){function t(){this.polyline=!1,this.curveness=0,this.segs=[]}return t}(),ZV=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return d(e,t),e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new $V},e.prototype.buildPath=function(t,e){var n,r=e.segs,i=e.curveness;if(e.polyline)for(n=this._off;n0){t.moveTo(r[n++],r[n++]);for(var a=1;a0){var h=(s+u)/2-(l-c)*i,p=(l+c)/2-(u-s)*i;t.quadraticCurveTo(h,p,u,c)}else t.lineTo(u,c)}this.incremental&&(this._off=n,this.notClear=!0)},e.prototype.findDataIndex=function(t,e){var n=this.shape,r=n.segs,i=n.curveness,o=this.style.lineWidth;if(n.polyline)for(var a=0,s=0;s0)for(var u=r[s++],c=r[s++],h=1;h0){var d=(u+p)/2-(c-f)*i,g=(c+f)/2-(p-u)*i;if(La(u,c,d,g,p,f,o,t,e))return a}else if(ka(u,c,p,f,o,t,e))return a;a++}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),r=this.getBoundingRect();if(t=n[0],e=n[1],r.contain(t,e)){var i=this.hoverDataIdx=this.findDataIndex(t,e);return i>=0}return this.hoverDataIdx=-1,!1},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.segs,r=1/0,i=1/0,o=-1/0,a=-1/0,s=0;s0&&(o.dataIndex=n+t.__startIndex)}))},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),JV=KV,QV={seriesType:"lines",plan:Ud(),reset:function(t){var e=t.coordinateSystem;if(e){var n=t.get("polyline"),r=t.pipelineContext.large;return{progress:function(i,o){var a=[];if(r){var s=void 0,l=i.end-i.start;if(n){for(var u=0,c=i.start;c0&&(l||s.configLayer(o,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(a/10+.9,1),0)})),i.updateData(r);var u=t.get("clip",!0)&&CC(t.coordinateSystem,!1,t);u?this.group.setClipPath(u):this.group.removeClipPath(),this._lastZlevel=o,this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var r=t.getData(),i=this._updateLineDraw(r,t);i.incrementalPrepareUpdate(r),this._clearLayer(n),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._lineDraw.incrementalUpdate(t,e.getData()),this._finished=t.end===e.getData().count()},e.prototype.eachRendered=function(t){this._lineDraw&&this._lineDraw.eachRendered(t)},e.prototype.updateTransform=function(t,e,n){var r=t.getData(),i=t.pipelineContext;if(!this._finished||i.large||i.progressiveRender)return{update:!0};var o=tF.reset(t,e,n);o.progress&&o.progress({start:0,end:r.count(),count:r.count()},r),this._lineDraw.updateLayout(),this._clearLayer(n)},e.prototype._updateLineDraw=function(t,e){var n=this._lineDraw,r=this._showEffect(e),i=!!e.get("polyline"),o=e.pipelineContext,a=o.large;return n&&r===this._hasEffet&&i===this._isPolyline&&a===this._isLargeDraw||(n&&n.remove(),n=this._lineDraw=a?new JV:new vR(i?r?XV:YV:r?WV:cR),this._hasEffet=r,this._isPolyline=i,this._isLargeDraw=a),this.group.add(n.group),n},e.prototype._showEffect=function(t){return!!t.get(["effect","show"])},e.prototype._clearLayer=function(t){var e=t.getZr(),n="svg"===e.painter.getType();n||null==this._lastZlevel||e.painter.getLayer(this._lastZlevel).clear(!0)},e.prototype.remove=function(t,e){this._lineDraw&&this._lineDraw.remove(),this._lineDraw=null,this._clearLayer(e)},e.prototype.dispose=function(t,e){this.remove(t,e)},e.type="lines",e}(hy),nF=eF,rF="undefined"===typeof Uint32Array?Array:Uint32Array,iF="undefined"===typeof Float64Array?Array:Float64Array;function oF(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=Object(v["map"])(e,(function(t){var e=[t[0].coord,t[1].coord],n={coords:e};return t[0].name&&(n.fromName=t[0].name),t[1].name&&(n.toName=t[1].name),Object(v["mergeAll"])([n,t[0],t[1]])})))}var aF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="lineStyle",n.visualDrawType="stroke",n}return d(e,t),e.prototype.init=function(e){e.data=e.data||[],oF(e);var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count)),t.prototype.init.apply(this,arguments)},e.prototype.mergeOption=function(e){if(oF(e),e.data){var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count))}t.prototype.mergeOption.apply(this,arguments)},e.prototype.appendData=function(t){var e=this._processFlatCoordsArray(t.data);e.flatCoords&&(this._flatCoords?(this._flatCoords=Object(v["concatArray"])(this._flatCoords,e.flatCoords),this._flatCoordsOffset=Object(v["concatArray"])(this._flatCoordsOffset,e.flatCoordsOffset)):(this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset),t.data=new Float32Array(e.count)),this.getRawData().appendData(t.data)},e.prototype._getCoordsFromItemModel=function(t){var e=this.getData().getItemModel(t),n=e.option instanceof Array?e.option:e.getShallow("coords");return n},e.prototype.getLineCoordsCount=function(t){return this._flatCoordsOffset?this._flatCoordsOffset[2*t+1]:this._getCoordsFromItemModel(t).length},e.prototype.getLineCoords=function(t,e){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[2*t],r=this._flatCoordsOffset[2*t+1],i=0;i ")})},e.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},e.prototype.getZLevelKey=function(){var t=this.getModel("effect"),e=t.get("trailLength");return this.getData().count()>this.getProgressiveThreshold()?this.id:t.get("show")&&e>0?e+"":""},e.type="series.lines",e.dependencies=["grid","polar","geo","calendar"],e.defaultOption={coordinateSystem:"geo",z:2,legendHoverLink:!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}},e}(Hd),sF=aF;function lF(t){return t instanceof Array||(t=[t,t]),t}var uF={seriesType:"lines",reset:function(t){var e=lF(t.get("symbol")),n=lF(t.get("symbolSize")),r=t.getData();function i(t,e){var n=t.getItemModel(e),r=lF(n.getShallow("symbol",!0)),i=lF(n.getShallow("symbolSize",!0));r[0]&&t.setItemVisual(e,"fromSymbol",r[0]),r[1]&&t.setItemVisual(e,"toSymbol",r[1]),i[0]&&t.setItemVisual(e,"fromSymbolSize",i[0]),i[1]&&t.setItemVisual(e,"toSymbolSize",i[1])}return r.setVisual("fromSymbol",e&&e[0]),r.setVisual("toSymbol",e&&e[1]),r.setVisual("fromSymbolSize",n&&n[0]),r.setVisual("toSymbolSize",n&&n[1]),{dataEach:r.hasItemOption?i:null}}},cF=uF;function hF(t){t.registerChartView(nF),t.registerSeriesModel(sF),t.registerLayout(tF),t.registerVisual(cF)}var pF=256,fF=function(){function t(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var t=sr["d"].createCanvas();this.canvas=t}return t.prototype.update=function(t,e,n,r,i,o){var a=this._getBrush(),s=this._getGradient(i,"inRange"),l=this._getGradient(i,"outOfRange"),u=this.pointSize+this.blurSize,c=this.canvas,h=c.getContext("2d"),p=t.length;c.width=e,c.height=n;for(var f=0;f0){var C=o(m)?s:l;m>0&&(m=m*M+S),x[_++]=C[A],x[_++]=C[A+1],x[_++]=C[A+2],x[_++]=C[A+3]*m*256}else _+=4}return h.putImageData(b,0,0),c},t.prototype._getBrush=function(){var t=this._brushCanvas||(this._brushCanvas=sr["d"].createCanvas()),e=this.pointSize+this.blurSize,n=2*e;t.width=n,t.height=n;var r=t.getContext("2d");return r.clearRect(0,0,n,n),r.shadowOffsetX=n,r.shadowBlur=this.blurSize,r.shadowColor="#000",r.beginPath(),r.arc(-e,e,this.pointSize,0,2*Math.PI,!0),r.closePath(),r.fill(),t},t.prototype._getGradient=function(t,e){for(var n=this._gradientPixels,r=n[e]||(n[e]=new Uint8ClampedArray(1024)),i=[0,0,0,0],o=0,a=0;a<256;a++)t[e](a/255,!0,i),r[o++]=i[0],r[o++]=i[1],r[o++]=i[2],r[o++]=i[3];return r},t}(),dF=fF;function gF(t,e,n){var r=t[1]-t[0];e=v["map"](e,(function(e){return{interval:[(e.interval[0]-t[0])/r,(e.interval[1]-t[0])/r]}}));var i=e.length,o=0;return function(t){var r;for(r=o;r=0;r--){a=e[r].interval;if(a[0]<=t&&t<=a[1]){o=r;break}}return r>=0&&r=e[0]&&t<=e[1]}}function yF(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var mF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r;e.eachComponent("visualMap",(function(e){e.eachTargetSeries((function(n){n===t&&(r=e)}))})),this._progressiveEls=null,this.group.removeAll();var i=t.coordinateSystem;"cartesian2d"===i.type||"calendar"===i.type?this._renderOnCartesianAndCalendar(t,n,0,t.getData().count()):yF(i)&&this._renderOnGeo(i,t,r,n)},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll()},e.prototype.incrementalRender=function(t,e,n,r){var i=e.coordinateSystem;i&&(yF(i)?this.render(e,n,r):(this._progressiveEls=[],this._renderOnCartesianAndCalendar(e,r,t.start,t.end,!0)))},e.prototype.eachRendered=function(t){ny(this._progressiveEls||this.group,t)},e.prototype._renderOnCartesianAndCalendar=function(t,e,n,r,i){var o,a,s,l,u=t.coordinateSystem,c=IC(u,"cartesian2d");if(c){var h=u.getAxis("x"),p=u.getAxis("y");0,o=h.getBandWidth()+.5,a=p.getBandWidth()+.5,s=h.scale.getExtent(),l=p.scale.getExtent()}for(var f=this.group,d=t.getData(),g=t.getModel(["emphasis","itemStyle"]).getItemStyle(),v=t.getModel(["blur","itemStyle"]).getItemStyle(),y=t.getModel(["select","itemStyle"]).getItemStyle(),m=t.get(["itemStyle","borderRadius"]),b=du(t),x=t.getModel("emphasis"),_=x.get("focus"),w=x.get("blurScope"),S=x.get("disabled"),O=c?[d.mapDimension("x"),d.mapDimension("y"),d.mapDimension("value")]:[d.mapDimension("time"),d.mapDimension("value")],M=n;Ms[1]||Tl[1])continue;var k=u.dataToPoint([I,T]);A=new ms({shape:{x:k[0]-o/2,y:k[1]-a/2,width:o,height:a},style:C})}else{if(isNaN(d.get(O[1],M)))continue;A=new ms({z2:1,shape:u.dataToRect([d.get(O[0],M)]).contentShape,style:C})}if(d.hasItemOption){var D=d.getItemModel(M),L=D.getModel("emphasis");g=L.getModel("itemStyle").getItemStyle(),v=D.getModel(["blur","itemStyle"]).getItemStyle(),y=D.getModel(["select","itemStyle"]).getItemStyle(),m=D.get(["itemStyle","borderRadius"]),_=L.get("focus"),w=L.get("blurScope"),S=L.get("disabled"),b=du(D)}A.shape.r=m;var j=t.getRawValue(M),P="-";j&&null!=j[2]&&(P=j[2]+""),fu(A,b,{labelFetcher:t,labelDataIndex:M,defaultOpacity:C.opacity,defaultText:P}),A.ensureState("emphasis").style=g,A.ensureState("blur").style=v,A.ensureState("select").style=y,Fl(A,_,w,S),A.incremental=i,i&&(A.states.emphasis.hoverLayer=!0),f.add(A),d.setItemGraphicEl(M,A),this._progressiveEls&&this._progressiveEls.push(A)}},e.prototype._renderOnGeo=function(t,e,n,r){var i=n.targetVisuals.inRange,o=n.targetVisuals.outOfRange,a=e.getData(),s=this._hmLayer||this._hmLayer||new dF;s.blurSize=e.get("blurSize"),s.pointSize=e.get("pointSize"),s.minOpacity=e.get("minOpacity"),s.maxOpacity=e.get("maxOpacity");var l=t.getViewRect().clone(),u=t.getRoamTransform();l.applyTransform(u);var c=Math.max(l.x,0),h=Math.max(l.y,0),p=Math.min(l.width+l.x,r.getWidth()),f=Math.min(l.height+l.y,r.getHeight()),d=p-c,g=f-h,v=[a.mapDimension("lng"),a.mapDimension("lat"),a.mapDimension("value")],y=a.mapArray(v,(function(e,n,r){var i=t.dataToPoint([e,n]);return i[0]-=c,i[1]-=h,i.push(r),i})),m=n.getExtent(),b="visualMap.continuous"===n.type?vF(m,n.option.range):gF(m,n.getPieceList(),n.option.selected);s.update(y,d,g,i.color.getNormalizer(),{inRange:i.color.getColorMapper(),outOfRange:o.color.getColorMapper()},b);var x=new us({style:{width:d,height:g,x:c,y:h,image:s.canvas},silent:!0});this.group.add(x)},e.type="heatmap",e}(hy),bF=mF,xF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.getInitialData=function(t,e){return hw(null,this,{generateCoord:"value"})},e.prototype.preventIncremental=function(){var t=hp.get(this.get("coordinateSystem"));if(t&&t.dimensions)return"lng"===t.dimensions[0]&&"lat"===t.dimensions[1]},e.type="series.heatmap",e.dependencies=["grid","geo","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0,select:{itemStyle:{borderColor:"#212121"}}},e}(Hd),_F=xF;function wF(t){t.registerChartView(bF),t.registerSeriesModel(_F)}var SF=["itemStyle","borderWidth"],OF=[{xy:"x",wh:"width",index:0,posDesc:["left","right"]},{xy:"y",wh:"height",index:1,posDesc:["top","bottom"]}],MF=new yg,AF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=this.group,i=t.getData(),o=this._data,a=t.coordinateSystem,s=a.getBaseAxis(),l=s.isHorizontal(),u=a.master.getRect(),c={ecSize:{width:n.getWidth(),height:n.getHeight()},seriesModel:t,coordSys:a,coordSysExtent:[[u.x,u.x+u.width],[u.y,u.y+u.height]],isHorizontal:l,valueDim:OF[+l],categoryDim:OF[1-+l]};return i.diff(o).add((function(t){if(i.hasValue(t)){var e=zF(i,t),n=CF(i,t,e,c),o=FF(i,c,n);i.setItemGraphicEl(t,o),r.add(o),qF(o,c,n)}})).update((function(t,e){var n=o.getItemGraphicEl(e);if(i.hasValue(t)){var a=zF(i,t),s=CF(i,t,a,c),l=WF(i,s);n&&l!==n.__pictorialShapeStr&&(r.remove(n),i.setItemGraphicEl(t,null),n=null),n?HF(n,c,s):n=FF(i,c,s,!0),i.setItemGraphicEl(t,n),n.__pictorialSymbolMeta=s,r.add(n),qF(n,c,s)}else r.remove(n)})).remove((function(t){var e=o.getItemGraphicEl(t);e&&GF(o,t,e.__pictorialSymbolMeta.animationModel,e)})).execute(),this._data=i,this.group},e.prototype.remove=function(t,e){var n=this.group,r=this._data;t.get("animation")?r&&r.eachItemGraphicEl((function(e){GF(r,Ns(e).dataIndex,t,e)})):n.removeAll()},e.type="pictorialBar",e}(hy);function CF(t,e,n,r){var i=t.getItemLayout(e),o=n.get("symbolRepeat"),a=n.get("symbolClip"),s=n.get("symbolPosition")||"start",l=n.get("symbolRotate"),u=(l||0)*Math.PI/180||0,c=n.get("symbolPatternSize")||2,h=n.isAnimationEnabled(),p={dataIndex:e,layout:i,itemModel:n,symbolType:t.getItemVisual(e,"symbol")||"circle",style:t.getItemVisual(e,"style"),symbolClip:a,symbolRepeat:o,symbolRepeatDirection:n.get("symbolRepeatDirection"),symbolPatternSize:c,rotation:u,animationModel:h?n:null,hoverScale:h&&n.get(["emphasis","scale"]),z2:n.getShallow("z",!0)||0};IF(n,o,i,r,p),kF(t,e,i,o,a,p.boundingLength,p.pxSign,c,r,p),DF(n,p.symbolScale,u,r,p);var f=p.symbolSize,d=Am(n.get("symbolOffset"),f);return LF(n,f,i,o,a,d,s,p.valueLineWidth,p.boundingLength,p.repeatCutLength,r,p),p}function IF(t,e,n,r,i){var o,a=r.valueDim,s=t.get("symbolBoundingData"),l=r.coordSys.getOtherAxis(r.coordSys.getBaseAxis()),u=l.toGlobalCoord(l.dataToCoord(0)),c=1-+(n[a.wh]<=0);if(v["isArray"](s)){var h=[TF(l,s[0])-u,TF(l,s[1])-u];h[1]0?1:-1}function TF(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function kF(t,e,n,r,i,o,a,s,l,u){var c,h=l.valueDim,p=l.categoryDim,f=Math.abs(n[p.wh]),d=t.getItemVisual(e,"symbolSize");c=v["isArray"](d)?d.slice():null==d?["100%","100%"]:[d,d],c[p.index]=Xr(c[p.index],f),c[h.index]=Xr(c[h.index],r?f:Math.abs(o)),u.symbolSize=c;var g=u.symbolScale=[c[0]/s,c[1]/s];g[h.index]*=(l.isHorizontal?-1:1)*a}function DF(t,e,n,r,i){var o=t.get(SF)||0;o&&(MF.attr({scaleX:e[0],scaleY:e[1],rotation:n}),MF.updateTransform(),o/=MF.getLineScale(),o*=e[r.valueDim.index]),i.valueLineWidth=o||0}function LF(t,e,n,r,i,o,a,s,l,u,c,h){var p=c.categoryDim,f=c.valueDim,d=h.pxSign,g=Math.max(e[f.index]+s,0),y=g;if(r){var m=Math.abs(l),b=v["retrieve"](t.get("symbolMargin"),"15%")+"",x=!1;b.lastIndexOf("!")===b.length-1&&(x=!0,b=b.slice(0,b.length-1));var _=Xr(b,e[f.index]),w=Math.max(g+2*_,0),S=x?0:2*_,O=fi(r),M=O?r:XF((m+S)/w),A=m-M*g;_=A/2/(x?M:Math.max(M-1,1)),w=g+2*_,S=x?0:2*_,O||"fixed"===r||(M=u?XF((Math.abs(u)+S)/w):0),y=M*w-S,h.repeatTimes=M,h.symbolMargin=_}var C=d*(y/2),I=h.pathPosition=[];I[p.index]=n[p.wh]/2,I[f.index]="start"===a?C:"end"===a?l-C:l/2,o&&(I[0]+=o[0],I[1]+=o[1]);var T=h.bundlePosition=[];T[p.index]=n[p.xy],T[f.index]=n[f.xy];var k=h.barRectShape=v["extend"]({},n);k[f.wh]=d*Math.max(Math.abs(n[f.wh]),Math.abs(I[f.index]+C)),k[p.wh]=n[p.wh];var D=h.clipShape={};D[p.xy]=-n[p.xy],D[p.wh]=c.ecSize[p.wh],D[f.xy]=0,D[f.wh]=n[f.wh]}function jF(t){var e=t.symbolPatternSize,n=Om(t.symbolType,-e/2,-e/2,e,e);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function PF(t,e,n,r){var i=t.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=e.valueDim,u=n.repeatTimes||0,c=0,h=o[e.valueDim.index]+a+2*n.symbolMargin;for(UF(t,(function(t){t.__pictorialAnimationIndex=c,t.__pictorialRepeatTimes=u,c0:r<0)&&(i=u-1-t),e[l.index]=h*(i-u/2+.5)+s[l.index],{x:e[0],y:e[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation}}}function EF(t,e,n,r){var i=t.__pictorialBundle,o=t.__pictorialMainPath;o?YF(o,null,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation},n,r):(o=t.__pictorialMainPath=jF(n),i.add(o),YF(o,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:0,scaleY:0,rotation:n.rotation},{scaleX:n.symbolScale[0],scaleY:n.symbolScale[1]},n,r))}function RF(t,e,n){var r=v["extend"]({},e.barRectShape),i=t.__pictorialBarRect;i?YF(i,null,{shape:r},e,n):(i=t.__pictorialBarRect=new ms({z2:2,shape:r,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),i.disableMorphing=!0,t.add(i))}function NF(t,e,n,r){if(n.symbolClip){var i=t.__pictorialClipPath,o=v["extend"]({},n.clipShape),s=e.valueDim,l=n.animationModel,u=n.dataIndex;if(i)nu(i,{shape:o},l,u);else{o[s.wh]=0,i=new ms({shape:o}),t.__pictorialBundle.setClipPath(i),t.__pictorialClipPath=i;var c={};c[s.wh]=n.clipShape[s.wh],a[r?"updateProps":"initProps"](i,{shape:c},l,u)}}}function zF(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParams=BF,n.isAnimationEnabled=VF,n}function BF(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function VF(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function FF(t,e,n,r){var i=new Lr,o=new Lr;return i.add(o),i.__pictorialBundle=o,o.x=n.bundlePosition[0],o.y=n.bundlePosition[1],n.symbolRepeat?PF(i,e,n):EF(i,e,n),RF(i,n,r),NF(i,e,n,r),i.__pictorialShapeStr=WF(t,n),i.__pictorialSymbolMeta=n,i}function HF(t,e,n){var r=n.animationModel,i=n.dataIndex,o=t.__pictorialBundle;nu(o,{x:n.bundlePosition[0],y:n.bundlePosition[1]},r,i),n.symbolRepeat?PF(t,e,n,!0):EF(t,e,n,!0),RF(t,n,!0),NF(t,e,n,!0)}function GF(t,e,n,r){var i=r.__pictorialBarRect;i&&i.removeTextContent();var o=[];UF(r,(function(t){o.push(t)})),r.__pictorialMainPath&&o.push(r.__pictorialMainPath),r.__pictorialClipPath&&(n=null),v["each"](o,(function(t){ou(t,{scaleX:0,scaleY:0},n,e,(function(){r.parent&&r.parent.remove(r)}))})),t.setItemGraphicEl(e,null)}function WF(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function UF(t,e,n){v["each"](t.__pictorialBundle.children(),(function(r){r!==t.__pictorialBarRect&&e.call(n,r)}))}function YF(t,e,n,r,i,o){e&&t.attr(e),r.symbolClip&&!i?n&&t.attr(n):n&&a[i?"updateProps":"initProps"](t,n,r.animationModel,r.dataIndex,o)}function qF(t,e,n){var r=n.dataIndex,i=n.itemModel,o=i.getModel("emphasis"),a=o.getModel("itemStyle").getItemStyle(),s=i.getModel(["blur","itemStyle"]).getItemStyle(),l=i.getModel(["select","itemStyle"]).getItemStyle(),u=i.getShallow("cursor"),c=o.get("focus"),h=o.get("blurScope"),p=o.get("scale");UF(t,(function(t){if(t instanceof us){var e=t.style;t.useStyle(v["extend"]({image:e.image,x:e.x,y:e.y,width:e.width,height:e.height},n.style))}else t.useStyle(n.style);var r=t.ensureState("emphasis");r.style=a,p&&(r.scaleX=1.1*t.scaleX,r.scaleY=1.1*t.scaleY),t.ensureState("blur").style=s,t.ensureState("select").style=l,u&&(t.cursor=u),t.z2=n.z2}));var f=e.valueDim.posDesc[+(n.boundingLength>0)],d=t.__pictorialBarRect;fu(d,du(i),{labelFetcher:e.seriesModel,labelDataIndex:r,defaultText:nC(e.seriesModel.getData(),r),inheritColor:n.style.fill,defaultOpacity:n.style.opacity,defaultOutsidePosition:f}),Fl(t,c,h,o.get("disabled"))}function XF(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}var $F=AF,ZF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n.defaultSymbol="roundRect",n}return d(e,t),e.prototype.getInitialData=function(e){return e.stack=null,t.prototype.getInitialData.apply(this,arguments)},e.type="series.pictorialBar",e.dependencies=["grid"],e.defaultOption=Wu(tI.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:"#212121"}}}),e}(tI),KF=ZF;function JF(t){t.registerChartView($F),t.registerSeriesModel(KF),t.registerLayout(t.PRIORITY.VISUAL.LAYOUT,Object(v["curry"])(Ww,"pictorialBar")),t.registerLayout(t.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,Uw("pictorialBar"))}var QF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._layers=[],n}return d(e,t),e.prototype.render=function(t,e,n){var r=t.getData(),i=this,o=this.group,a=t.getLayerSeries(),s=r.getLayout("layoutInfo"),l=s.rect,u=s.boundaryGap;function c(t){return t.name}o.x=0,o.y=l.y+u[0];var h=new v_(this._layersSeries||[],a,c,c),p=[];function f(e,n,s){var l=i._layers;if("remove"!==e){for(var u,c,h=[],f=[],d=a[n].indices,g=0;go&&(o=s),r.push(s)}for(var u=0;uo&&(o=h)}return{y0:i,max:o}}function lH(t){t.registerChartView(eH),t.registerSeriesModel(iH),t.registerLayout(oH),t.registerProcessor(FI("themeRiver"))}var uH=2,cH=4,hH=function(t){function e(e,n,r,i){var o=t.call(this)||this;o.z2=uH,o.textConfig={inside:!0},Ns(o).seriesIndex=n.seriesIndex;var a=new Rs({z2:cH,silent:e.getModel().get(["label","silent"])});return o.setTextContent(a),o.updateData(!0,e,n,r,i),o}return d(e,t),e.prototype.updateData=function(t,e,n,r,i){this.node=e,e.piece=this,n=n||this._seriesModel,r=r||this._ecModel;var o=this;Ns(o).dataIndex=e.dataIndex;var a=e.getModel(),s=a.getModel("emphasis"),l=e.getLayout(),u=v["extend"]({},l);u.label=null;var c=e.getVisual("style");c.lineJoin="bevel";var h=e.getVisual("decal");h&&(c.decal=fb(h,i));var p=XI(a.getModel("itemStyle"),u,!0);v["extend"](u,p),v["each"](Ys,(function(t){var e=o.ensureState(t),n=a.getModel([t,"itemStyle"]);e.style=n.getItemStyle();var r=XI(n,u);r&&(e.shape=r)})),t?(o.setShape(u),o.shape.r=l.r0,nu(o,{shape:{r:l.r}},n,e.dataIndex)):(nu(o,{shape:u},n),lu(o)),o.useStyle(c),this._updateLabel(n);var f=a.getShallow("cursor");f&&o.attr("cursor",f),this._seriesModel=n||this._seriesModel,this._ecModel=r||this._ecModel;var d=s.get("focus"),g="ancestor"===d?e.getAncestorsIndices():"descendant"===d?e.getDescendantIndices():d;Fl(this,g,s.get("blurScope"),s.get("disabled"))},e.prototype._updateLabel=function(t){var e=this,n=this.node.getModel(),r=n.getModel("label"),i=this.node.getLayout(),o=i.endAngle-i.startAngle,a=(i.startAngle+i.endAngle)/2,s=Math.cos(a),l=Math.sin(a),u=this,c=u.getTextContent(),h=this.node.dataIndex,p=r.get("minAngle")/180*Math.PI,f=r.get("show")&&!(null!=p&&Math.abs(o)Math.PI/2?"right":"left"):O&&"center"!==O?"left"===O?(b=i.r0+S,a>Math.PI/2&&(O="right")):"right"===O&&(b=i.r-S,a>Math.PI/2&&(O="left")):(b=o===2*Math.PI&&0===i.r0?0:(i.r+i.r0)/2,O="center"),g.style.align=O,g.style.verticalAlign=d(p,"verticalAlign")||"middle",g.x=b*s+i.cx,g.y=b*l+i.cy;var M=d(p,"rotate"),A=0;"radial"===M?(A=-a,A<-Math.PI/2&&(A+=Math.PI)):"tangential"===M?(A=Math.PI/2-a,A>Math.PI/2?A-=Math.PI:A<-Math.PI/2&&(A+=Math.PI)):v["isNumber"](M)&&(A=M*Math.PI/180),g.rotation=A})),c.dirtyStyle()},e}(zg),pH=hH,fH="sunburstRootToNode",dH="sunburstHighlight",gH="sunburstUnhighlight";function vH(t){t.registerAction({type:fH,update:"updateView"},(function(t,e){function n(e,n){var r=Ej(t,[fH],e);if(r){var i=e.getViewRoot();i&&(t.direction=Nj(i,r.node)?"rollUp":"drillDown"),e.resetViewRoot(r.node)}}e.eachComponent({mainType:"series",subType:"sunburst",query:t},n)})),t.registerAction({type:dH,update:"none"},(function(t,e,n){function r(e){var n=Ej(t,[dH],e);n&&(t.dataIndex=n.node.dataIndex)}t=Object(v["extend"])({},t),e.eachComponent({mainType:"series",subType:"sunburst",query:t},r),n.dispatchAction(Object(v["extend"])(t,{type:"highlight"}))})),t.registerAction({type:gH,update:"updateView"},(function(t,e,n){t=Object(v["extend"])({},t),n.dispatchAction(Object(v["extend"])(t,{type:"downplay"}))}))}var yH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n,r){var i=this;this.seriesModel=t,this.api=n,this.ecModel=e;var o=t.getData(),a=o.tree.root,s=t.getViewRoot(),l=this.group,u=t.get("renderLabelForZeroData"),c=[];s.eachNode((function(t){c.push(t)}));var h=this._oldChildren||[];function p(t,e){function n(t){return t.getId()}function r(n,r){var i=null==n?null:t[n],o=null==r?null:e[r];f(i,o)}0===t.length&&0===e.length||new v_(e,t,n,n).add(r).update(r).remove(v["curry"](r,null)).execute()}function f(r,i){if(u||!r||r.getValue()||(r=null),r!==a&&i!==a)if(i&&i.piece)r?(i.piece.updateData(!1,r,t,e,n),o.setItemGraphicEl(r.dataIndex,i.piece)):d(i);else if(r){var s=new pH(r,t,e,n);l.add(s),o.setItemGraphicEl(r.dataIndex,s)}}function d(t){t&&t.piece&&(l.remove(t.piece),t.piece=null)}function g(r,o){o.depth>0?(i.virtualPiece?i.virtualPiece.updateData(!1,r,t,e,n):(i.virtualPiece=new pH(r,t,e,n),l.add(i.virtualPiece)),o.piece.off("click"),i.virtualPiece.on("click",(function(t){i._rootToNode(o.parentNode)}))):i.virtualPiece&&(l.remove(i.virtualPiece),i.virtualPiece=null)}p(c,h),g(a,s),this._initEvents(),this._oldChildren=c},e.prototype._initEvents=function(){var t=this;this.group.off("click"),this.group.on("click",(function(e){var n=!1,r=t.seriesModel.getViewRoot();r.eachNode((function(r){if(!n&&r.piece&&r.piece===e.target){var i=r.getModel().get("nodeClick");if("rootToNode"===i)t._rootToNode(r);else if("link"===i){var o=r.getModel(),a=o.get("link");if(a){var s=o.get("target",!0)||"_blank";Kc(a,s)}}n=!0}}))}))},e.prototype._rootToNode=function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:fH,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},e.prototype.containPoint=function(t,e){var n=e.getData(),r=n.getItemLayout(0);if(r){var i=t[0]-r.cx,o=t[1]-r.cy,a=Math.sqrt(i*i+o*o);return a<=r.r&&a>=r.r0}},e.type="sunburst",e}(hy),mH=yH,bH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreStyleOnData=!0,n}return d(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};xH(n);var r=this._levelModels=v["map"](t.levels||[],(function(t){return new Bu(t,this,e)}),this),i=Pj.createTree(n,this,o);function o(t){t.wrapMethod("getItemModel",(function(t,e){var n=i.getNodeByDataIndex(e),o=r[n.depth];return o&&(t.parentModel=o),t}))}return i.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),r=this.getData().tree.getNodeByDataIndex(e);return n.treePathInfo=zj(r,this),n},e.prototype.getLevelModel=function(t){return this._levelModels&&this._levelModels[t.depth]},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.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)},e.prototype.enableAriaDecal=function(){Zj(this)},e.type="series.sunburst",e.defaultOption={z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,stillShowZeroSum:!0,nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},emphasis:{focus:"descendant"},blur:{itemStyle:{opacity:.2},label:{opacity:.1}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,data:[],sort:"desc"},e}(Hd);function xH(t){var e=0;v["each"](t.children,(function(t){xH(t);var n=t.value;v["isArray"](n)&&(n=n[0]),e+=n}));var n=t.value;v["isArray"](n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),v["isArray"](t.value)?t.value[0]=n:t.value=n}var _H=bH,wH=Math.PI/180;function SH(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.get("center"),r=t.get("radius");v["isArray"](r)||(r=[0,r]),v["isArray"](e)||(e=[e,e]);var i=n.getWidth(),o=n.getHeight(),a=Math.min(i,o),s=Xr(e[0],i),l=Xr(e[1],o),u=Xr(r[0],a/2),c=Xr(r[1],a/2),h=-t.get("startAngle")*wH,p=t.get("minAngle")*wH,f=t.getData().tree.root,d=t.getViewRoot(),g=d.depth,y=t.get("sort");null!=y&&OH(d,y);var m=0;v["each"](d.children,(function(t){!isNaN(t.getValue())&&m++}));var b=d.getValue(),x=Math.PI/(b||m)*2,_=d.depth>0,w=d.height-(_?-1:1),S=(c-u)/(w||1),O=t.get("clockwise"),M=t.get("stillShowZeroSum"),A=O?1:-1,C=function(e,n){if(e){var r=n;if(e!==f){var i=e.getValue(),o=0===b&&M?x:i*x;o1)i=i.parentNode;var o=n.getColorFromPalette(i.name||i.dataIndex+"",e);return t.depth>1&&Object(v["isString"])(o)&&(o=Object(Ae["lift"])(o,(t.depth-1)/(r-1)*.5)),o}t.eachSeriesByType("sunburst",(function(t){var e=t.getData(),r=e.tree;r.eachNode((function(i){var o=i.getModel(),a=o.getModel("itemStyle").getItemStyle();a.fill||(a.fill=n(i,t,r.root.height));var s=e.ensureUniqueItemVisual(i.dataIndex,"style");Object(v["extend"])(s,a)}))}))}function CH(t){t.registerChartView(mH),t.registerSeriesModel(_H),t.registerLayout(Object(v["curry"])(SH,"sunburst")),t.registerProcessor(Object(v["curry"])(FI,"sunburst")),t.registerVisual(AH),vH(t)}var IH={color:"fill",borderColor:"stroke"},TH={symbol:1,symbolSize:1,symbolKeepAspect:1,legendIcon:1,visualMeta:1,liftZ:1,decal:1},kH=Hi(),DH=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},e.prototype.getInitialData=function(t,e){return hw(null,this)},e.prototype.getDataParams=function(e,n,r){var i=t.prototype.getDataParams.call(this,e,n);return r&&(i.info=kH(r).info),i},e.type="series.custom",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,clip:!1},e}(Hd),LH=DH;function jH(t,e){return e=e||[0,0],v["map"](["x","y"],(function(n,r){var i=this.getAxis(n),o=e[r],a=t[r]/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(o-a)-i.dataToCoord(o+a))}),this)}function PH(t){var e=t.master.getRect();return{coordSys:{type:"cartesian2d",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(e){return t.dataToPoint(e)},size:v["bind"](jH,t)}}}function EH(t,e){return e=e||[0,0],v["map"]([0,1],(function(n){var r=e[n],i=t[n]/2,o=[],a=[];return o[n]=r-i,a[n]=r+i,o[1-n]=a[1-n]=e[1-n],Math.abs(this.dataToPoint(o)[n]-this.dataToPoint(a)[n])}),this)}function RH(t){var e=t.getBoundingRect();return{coordSys:{type:"geo",x:e.x,y:e.y,width:e.width,height:e.height,zoom:t.getZoom()},api:{coord:function(e){return t.dataToPoint(e)},size:v["bind"](EH,t)}}}function NH(t,e){var n=this.getAxis(),r=e instanceof Array?e[0]:e,i=(t instanceof Array?t[0]:t)/2;return"category"===n.type?n.getBandWidth():Math.abs(n.dataToCoord(r-i)-n.dataToCoord(r+i))}function zH(t){var e=t.getRect();return{coordSys:{type:"singleAxis",x:e.x,y:e.y,width:e.width,height:e.height},api:{coord:function(e){return t.dataToPoint(e)},size:Object(v["bind"])(NH,t)}}}function BH(t,e){return e=e||[0,0],v["map"](["Radius","Angle"],(function(n,r){var i="get"+n+"Axis",o=this[i](),a=e[r],s=t[r]/2,l="category"===o.type?o.getBandWidth():Math.abs(o.dataToCoord(a-s)-o.dataToCoord(a+s));return"Angle"===n&&(l=l*Math.PI/180),l}),this)}function VH(t){var e=t.getRadiusAxis(),n=t.getAngleAxis(),r=e.getExtent();return r[0]>r[1]&&r.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:r[1],r0:r[0]},api:{coord:function(r){var i=e.dataToRadius(r[0]),o=n.dataToAngle(r[1]),a=t.coordToPoint([i,o]);return a.push(i,o*Math.PI/180),a},size:v["bind"](BH,t)}}}function FH(t){var e=t.getRect(),n=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:n.start,end:n.end,weeks:n.weeks,dayCount:n.allDay}},api:{coord:function(e,n){return t.dataToPoint(e,n)}}}}function HH(t,e,n,r){return t&&(t.legacy||!1!==t.legacy&&!n&&!r&&"tspan"!==e&&("text"===e||Object(v["hasOwn"])(t,"text")))}function GH(t,e,n){var r,i,o,a=t;if("text"===e)o=a;else{o={},Object(v["hasOwn"])(a,"text")&&(o.text=a.text),Object(v["hasOwn"])(a,"rich")&&(o.rich=a.rich),Object(v["hasOwn"])(a,"textFill")&&(o.fill=a.textFill),Object(v["hasOwn"])(a,"textStroke")&&(o.stroke=a.textStroke),Object(v["hasOwn"])(a,"fontFamily")&&(o.fontFamily=a.fontFamily),Object(v["hasOwn"])(a,"fontSize")&&(o.fontSize=a.fontSize),Object(v["hasOwn"])(a,"fontStyle")&&(o.fontStyle=a.fontStyle),Object(v["hasOwn"])(a,"fontWeight")&&(o.fontWeight=a.fontWeight),i={type:"text",style:o,silent:!0},r={};var s=Object(v["hasOwn"])(a,"textPosition");n?r.position=s?a.textPosition:"inside":s&&(r.position=a.textPosition),Object(v["hasOwn"])(a,"textPosition")&&(r.position=a.textPosition),Object(v["hasOwn"])(a,"textOffset")&&(r.offset=a.textOffset),Object(v["hasOwn"])(a,"textRotation")&&(r.rotation=a.textRotation),Object(v["hasOwn"])(a,"textDistance")&&(r.distance=a.textDistance)}return WH(o,t),Object(v["each"])(o.rich,(function(t){WH(t,t)})),{textConfig:r,textContent:i}}function WH(t,e){e&&(e.font=e.textFont||e.font,Object(v["hasOwn"])(e,"textStrokeWidth")&&(t.lineWidth=e.textStrokeWidth),Object(v["hasOwn"])(e,"textAlign")&&(t.align=e.textAlign),Object(v["hasOwn"])(e,"textVerticalAlign")&&(t.verticalAlign=e.textVerticalAlign),Object(v["hasOwn"])(e,"textLineHeight")&&(t.lineHeight=e.textLineHeight),Object(v["hasOwn"])(e,"textWidth")&&(t.width=e.textWidth),Object(v["hasOwn"])(e,"textHeight")&&(t.height=e.textHeight),Object(v["hasOwn"])(e,"textBackgroundColor")&&(t.backgroundColor=e.textBackgroundColor),Object(v["hasOwn"])(e,"textPadding")&&(t.padding=e.textPadding),Object(v["hasOwn"])(e,"textBorderColor")&&(t.borderColor=e.textBorderColor),Object(v["hasOwn"])(e,"textBorderWidth")&&(t.borderWidth=e.textBorderWidth),Object(v["hasOwn"])(e,"textBorderRadius")&&(t.borderRadius=e.textBorderRadius),Object(v["hasOwn"])(e,"textBoxShadowColor")&&(t.shadowColor=e.textBoxShadowColor),Object(v["hasOwn"])(e,"textBoxShadowBlur")&&(t.shadowBlur=e.textBoxShadowBlur),Object(v["hasOwn"])(e,"textBoxShadowOffsetX")&&(t.shadowOffsetX=e.textBoxShadowOffsetX),Object(v["hasOwn"])(e,"textBoxShadowOffsetY")&&(t.shadowOffsetY=e.textBoxShadowOffsetY))}function UH(t,e,n){var r=t;r.textPosition=r.textPosition||n.position||"inside",null!=n.offset&&(r.textOffset=n.offset),null!=n.rotation&&(r.textRotation=n.rotation),null!=n.distance&&(r.textDistance=n.distance);var i=r.textPosition.indexOf("inside")>=0,o=t.fill||"#000";YH(r,e);var a=null==r.textFill;return i?a&&(r.textFill=n.insideFill||"#fff",!r.textStroke&&n.insideStroke&&(r.textStroke=n.insideStroke),!r.textStroke&&(r.textStroke=o),null==r.textStrokeWidth&&(r.textStrokeWidth=2)):(a&&(r.textFill=t.fill||n.outsideFill||"#000"),!r.textStroke&&n.outsideStroke&&(r.textStroke=n.outsideStroke)),r.text=e.text,r.rich=e.rich,Object(v["each"])(e.rich,(function(t){YH(t,t)})),r}function YH(t,e){e&&(Object(v["hasOwn"])(e,"fill")&&(t.textFill=e.fill),Object(v["hasOwn"])(e,"stroke")&&(t.textStroke=e.fill),Object(v["hasOwn"])(e,"lineWidth")&&(t.textStrokeWidth=e.lineWidth),Object(v["hasOwn"])(e,"font")&&(t.font=e.font),Object(v["hasOwn"])(e,"fontStyle")&&(t.fontStyle=e.fontStyle),Object(v["hasOwn"])(e,"fontWeight")&&(t.fontWeight=e.fontWeight),Object(v["hasOwn"])(e,"fontSize")&&(t.fontSize=e.fontSize),Object(v["hasOwn"])(e,"fontFamily")&&(t.fontFamily=e.fontFamily),Object(v["hasOwn"])(e,"align")&&(t.textAlign=e.align),Object(v["hasOwn"])(e,"verticalAlign")&&(t.textVerticalAlign=e.verticalAlign),Object(v["hasOwn"])(e,"lineHeight")&&(t.textLineHeight=e.lineHeight),Object(v["hasOwn"])(e,"width")&&(t.textWidth=e.width),Object(v["hasOwn"])(e,"height")&&(t.textHeight=e.height),Object(v["hasOwn"])(e,"backgroundColor")&&(t.textBackgroundColor=e.backgroundColor),Object(v["hasOwn"])(e,"padding")&&(t.textPadding=e.padding),Object(v["hasOwn"])(e,"borderColor")&&(t.textBorderColor=e.borderColor),Object(v["hasOwn"])(e,"borderWidth")&&(t.textBorderWidth=e.borderWidth),Object(v["hasOwn"])(e,"borderRadius")&&(t.textBorderRadius=e.borderRadius),Object(v["hasOwn"])(e,"shadowColor")&&(t.textBoxShadowColor=e.shadowColor),Object(v["hasOwn"])(e,"shadowBlur")&&(t.textBoxShadowBlur=e.shadowBlur),Object(v["hasOwn"])(e,"shadowOffsetX")&&(t.textBoxShadowOffsetX=e.shadowOffsetX),Object(v["hasOwn"])(e,"shadowOffsetY")&&(t.textBoxShadowOffsetY=e.shadowOffsetY),Object(v["hasOwn"])(e,"textShadowColor")&&(t.textShadowColor=e.textShadowColor),Object(v["hasOwn"])(e,"textShadowBlur")&&(t.textShadowBlur=e.textShadowBlur),Object(v["hasOwn"])(e,"textShadowOffsetX")&&(t.textShadowOffsetX=e.textShadowOffsetX),Object(v["hasOwn"])(e,"textShadowOffsetY")&&(t.textShadowOffsetY=e.textShadowOffsetY))}var qH={position:["x","y"],scale:["scaleX","scaleY"],origin:["originX","originY"]},XH=Object(v["keys"])(qH),$H=(Object(v["reduce"])(Un,(function(t,e){return t[e]=1,t}),{}),Un.join(", "),["","style","shape","extra"]),ZH=Hi();function KH(t,e,n,r,i){var o=t+"Animation",a=tu(t,r,i)||{},s=ZH(e).userDuring;return a.duration>0&&(a.during=s?Object(v["bind"])(sG,{el:e,userDuring:s}):null,a.setToFinal=!0,a.scope=t),Object(v["extend"])(a,n[o]),a}function JH(t,e,n,r){r=r||{};var i=r.dataIndex,o=r.isInit,a=r.clearStyle,s=n.isAnimationEnabled(),l=ZH(t),u=e.style;l.userDuring=e.during;var c={},h={};if(hG(t,e,h),uG("shape",e,h),uG("extra",e,h),!o&&s&&(cG(t,e,c),lG("shape",t,e,c),lG("extra",t,e,c),pG(t,e,u,c)),h.style=u,nG(t,h,a),iG(t,e),s)if(o){var p={};Object(v["each"])($H,(function(t){var n=t?e[t]:e;n&&n.enterFrom&&(t&&(p[t]=p[t]||{}),Object(v["extend"])(t?p[t]:p,n.enterFrom))}));var f=KH("enter",t,e,n,i);f.duration>0&&t.animateFrom(p,f)}else rG(t,e,i||0,n,c);QH(t,e),u?t.dirty():t.markRedraw()}function QH(t,e){for(var n=ZH(t).leaveToProps,r=0;r<$H.length;r++){var i=$H[r],o=i?e[i]:e;o&&o.leaveTo&&(n||(n=ZH(t).leaveToProps={}),i&&(n[i]=n[i]||{}),Object(v["extend"])(i?n[i]:n,o.leaveTo))}}function tG(t,e,n,r){if(t){var i=t.parent,o=ZH(t).leaveToProps;if(o){var a=KH("update",t,e,n,0);a.done=function(){i.remove(t),r&&r()},t.animateTo(o,a)}else i.remove(t),r&&r()}}function eG(t){return"all"===t}function nG(t,e,n){var r=e.style;if(!t.isGroup&&r){if(n){t.useStyle({});for(var i=t.animators,o=0;o0&&t.animateFrom(i,o)}}function iG(t,e){Object(v["hasOwn"])(e,"silent")&&(t.silent=e.silent),Object(v["hasOwn"])(e,"ignore")&&(t.ignore=e.ignore),t instanceof Xo&&Object(v["hasOwn"])(e,"invisible")&&(t.invisible=e.invisible),t instanceof es&&Object(v["hasOwn"])(e,"autoBatch")&&(t.autoBatch=e.autoBatch)}var oG={},aG={setTransform:function(t,e){return oG.el[t]=e,this},getTransform:function(t){return oG.el[t]},setShape:function(t,e){var n=oG.el,r=n.shape||(n.shape={});return r[t]=e,n.dirtyShape&&n.dirtyShape(),this},getShape:function(t){var e=oG.el.shape;if(e)return e[t]},setStyle:function(t,e){var n=oG.el,r=n.style;return r&&(r[t]=e,n.dirtyStyle&&n.dirtyStyle()),this},getStyle:function(t){var e=oG.el.style;if(e)return e[t]},setExtra:function(t,e){var n=oG.el.extra||(oG.el.extra={});return n[t]=e,this},getExtra:function(t){var e=oG.el.extra;if(e)return e[t]}};function sG(){var t=this,e=t.el;if(e){var n=ZH(e).userDuring,r=t.userDuring;n===r?(oG.el=e,r(aG)):t.el=t.userDuring=null}}function lG(t,e,n,r){var i=n[t];if(i){var o,a=e[t];if(a){var s=n.transition,l=i.transition;if(l)if(!o&&(o=r[t]={}),eG(l))Object(v["extend"])(o,a);else for(var u=xi(l),c=0;c=0){!o&&(o=r[t]={});var f=Object(v["keys"])(a);for(c=0;c=0)){var p=t.getAnimationStyleProps(),f=p?p.style:null;if(f){!i&&(i=r.style={});var d=Object(v["keys"])(n);for(u=0;u=0?e.getStore().get(i,n):void 0}var o=e.get(r.name,n),a=r&&r.ordinalMeta;return a?a.categories[o]:o}function S(n,r){null==r&&(r=s);var i=e.getItemVisual(r,"style"),o=i&&i.fill,a=i&&i.opacity,l=b(r,bG).getItemStyle();null!=o&&(l.fill=o),null!=a&&(l.opacity=a);var u={inheritColor:Object(v["isString"])(o)?o:"#000"},c=x(r,bG),h=gu(c,null,u,!1,!0);h.text=c.getShallow("show")?Object(v["retrieve2"])(t.getFormattedLabel(r,bG),nC(e,r)):null;var p=vu(c,u,!1);return A(n,l),l=UH(l,h,p),n&&M(l,n),l.legacy=!0,l}function O(n,r){null==r&&(r=s);var i=b(r,mG).getItemStyle(),o=x(r,mG),a=gu(o,null,null,!0,!0);a.text=o.getShallow("show")?Object(v["retrieve3"])(t.getFormattedLabel(r,mG),t.getFormattedLabel(r,bG),nC(e,r)):null;var l=vu(o,null,!0);return A(n,i),i=UH(i,a,l),n&&M(i,n),i.legacy=!0,i}function M(t,e){for(var n in e)Object(v["hasOwn"])(e,n)&&(t[n]=e[n])}function A(t,e){t&&(t.textFill&&(e.textFill=t.textFill),t.textPosition&&(e.textPosition=t.textPosition))}function C(t,n){if(null==n&&(n=s),Object(v["hasOwn"])(IH,t)){var r=e.getItemVisual(n,"style");return r?r[IH[t]]:null}if(Object(v["hasOwn"])(TH,t))return e.getItemVisual(n,t)}function I(t){if("cartesian2d"===o.type){var e=o.getBaseAxis();return zw(Object(v["defaults"])({axis:e},t))}}function T(){return n.getCurrentSeriesIndices()}function k(t){return Su(t,n)}}function VG(t){var e={};return Object(v["each"])(t.dimensions,(function(n){var r=t.getDimensionInfo(n);if(!r.isExtraCoord){var i=r.coordDim,o=e[i]=e[i]||[];o[r.coordDimIndex]=t.getDimensionIndex(n)}})),e}function FG(t,e,n,r,i,o,a){if(r){var s=HG(t,e,n,r,i,o);return s&&a.setItemGraphicEl(n,s),s&&Fl(s,r.focus,r.blurScope,r.emphasisDisabled),s}o.remove(e)}function HG(t,e,n,r,i,o){var a=-1,s=e;e&&GG(e,r,i)&&(a=Object(v["indexOf"])(o.childrenRef(),e),e=null);var l=!e,u=e;u?u.clearStates():(u=PG(r),s&&DG(s,u)),!1===r.morph?u.disableMorphing=!0:u.disableMorphing&&(u.disableMorphing=!1),CG.normal.cfg=CG.normal.conOpt=CG.emphasis.cfg=CG.emphasis.conOpt=CG.blur.cfg=CG.blur.conOpt=CG.select.cfg=CG.select.conOpt=null,CG.isLegacy=!1,UG(u,n,r,i,l,CG),WG(u,n,r,i,l),EG(t,u,n,r,CG,i,l),Object(v["hasOwn"])(r,"info")&&(kH(u).info=r.info);for(var c=0;c=0?o.replaceAt(u,a):o.add(u),u}function GG(t,e,n){var r=kH(t),i=e.type,o=e.shape,a=e.style;return n.isUniversalTransitionEnabled()||null!=i&&i!==r.customGraphicType||"path"===i&&eW(o)&&tW(o)!==r.customPathData||"image"===i&&Object(v["hasOwn"])(a,"image")&&a.image!==r.customImagePath}function WG(t,e,n,r,i){var o=n.clipPath;if(!1===o)t&&t.getClipPath()&&t.removeClipPath();else if(o){var a=t.getClipPath();a&&GG(a,o,r)&&(a=null),a||(a=PG(o),t.setClipPath(a)),EG(null,a,e,o,null,r,i)}}function UG(t,e,n,r,i,o){if(!t.isGroup){YG(n,null,o),YG(n,mG,o);var a=o.normal.conOpt,s=o.emphasis.conOpt,l=o.blur.conOpt,u=o.select.conOpt;if(null!=a||null!=s||null!=u||null!=l){var c=t.getTextContent();if(!1===a)c&&t.removeTextContent();else{a=o.normal.conOpt=a||{type:"text"},c?c.clearStates():(c=PG(a),t.setTextContent(c)),EG(null,c,e,a,null,r,i);for(var h=a&&a.style,p=0;p=c;h--){var p=e.childAt(h);tG(p,kH(e).option,i)}}}function ZG(t){new v_(t.oldChildren,t.newChildren,KG,KG,t).add(JG).update(JG).remove(QG).execute()}function KG(t,e){var n=t&&t.name;return null!=n?n:AG+e}function JG(t,e){var n=this.context,r=null!=t?n.newChildren[t]:null,i=null!=e?n.oldChildren[e]:null;HG(n.api,i,n.dataIndex,r,n.seriesModel,n.group)}function QG(t){var e=this.context,n=e.oldChildren[t];tG(n,kH(n).option,e.seriesModel)}function tW(t){return t&&(t.pathData||t.d)}function eW(t){return t&&(Object(v["hasOwn"])(t,"pathData")||Object(v["hasOwn"])(t,"d"))}function nW(t){t.registerChartView(jG),t.registerSeriesModel(LH)}var rW=Hi(),iW=v["clone"],oW=v["bind"],aW=function(){function t(){this._dragging=!1,this.animationThreshold=15}return t.prototype.render=function(t,e,n,r){var i=e.get("value"),o=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=n,r||this._lastValue!==i||this._lastStatus!==o){this._lastValue=i,this._lastStatus=o;var a=this._group,s=this._handle;if(!o||"hide"===o)return a&&a.hide(),void(s&&s.hide());a&&a.show(),s&&s.show();var l={};this.makeElOption(l,i,t,e,n);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=u;var c=this._moveAnimation=this.determineAnimation(t,e);if(a){var h=v["curry"](sW,e,c);this.updatePointerEl(a,l,h),this.updateLabelEl(a,l,h,e)}else a=this._group=new Lr,this.createPointerEl(a,l,t,e),this.createLabelEl(a,l,t,e),n.getZr().add(a);hW(a,e,!0),this._renderHandle(i)}},t.prototype.remove=function(t){this.clear(t)},t.prototype.dispose=function(t){this.clear(t)},t.prototype.determineAnimation=function(t,e){var n=e.get("animation"),r=t.axis,i="category"===r.type,o=e.get("snap");if(!o&&!i)return!1;if("auto"===n||null==n){var a=this.animationThreshold;if(i&&r.getBandWidth()>a)return!0;if(o){var s=hk(t).seriesDataCount,l=r.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,r,i){},t.prototype.createPointerEl=function(t,e,n,r){var i=e.pointer;if(i){var o=rW(t).pointerEl=new a[i.type](iW(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,r){if(e.label){var i=rW(t).labelEl=new Rs(iW(e.label));t.add(i),uW(i,r)}},t.prototype.updatePointerEl=function(t,e,n){var r=rW(t).pointerEl;r&&e.pointer&&(r.setStyle(e.pointer.style),n(r,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,r){var i=rW(t).labelEl;i&&(i.setStyle(e.label.style),n(i,{x:e.label.x,y:e.label.y}),uW(i,r))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,r=this._api.getZr(),i=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return i&&r.remove(i),void(this._handle=null);this._handle||(e=!0,i=this._handle=$v(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){ft(t.event)},onmousedown:oW(this._onHandleDragMove,this,0,0),drift:oW(this._onHandleDragMove,this),ondragend:oW(this._onHandleDragEnd,this)}),r.add(i)),hW(i,n,!1),i.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");v["isArray"](s)||(s=[s,s]),i.scaleX=s[0]/2,i.scaleY=s[1]/2,vy(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){sW(this._axisPointerModel,!e&&this._moveAnimation,this._handle,cW(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var r=this.updateHandleTransform(cW(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=r,n.stopAnimation(),n.attr(cW(r)),rW(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){var t=this._handle;if(t){var e=this._payloadInfo,n=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:e.cursorPoint[0],y:e.cursorPoint[1],tooltipOption:e.tooltipOption,axesInfo:[{axisDim:n.axis.dim,axisIndex:n.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){this._dragging=!1;var t=this._handle;if(t){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,r=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),r&&e.remove(r),this._group=null,this._handle=null,this._payloadInfo=null),yy(this,"_doDispatchAxisPointer")},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}},t}();function sW(t,e,n,r){lW(rW(n).lastProp,r)||(rW(n).lastProp=r,e?nu(n,r,t):(n.stopAnimation(),n.attr(r)))}function lW(t,e){if(v["isObject"](t)&&v["isObject"](e)){var n=!0;return v["each"](e,(function(e,r){n=n&&lW(t[r],e)})),!!n}return t===e}function uW(t,e){t[e.get(["label","show"])?"show":"hide"]()}function cW(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function hW(t,e,n){var r=e.get("z"),i=e.get("zlevel");t&&t.traverse((function(t){"group"!==t.type&&(null!=r&&(t.z=r),null!=i&&(t.zlevel=i),t.silent=n)}))}var pW=aW;function fW(t){var e,n=t.get("type"),r=t.getModel(n+"Style");return"line"===n?(e=r.getLineStyle(),e.fill=null):"shadow"===n&&(e=r.getAreaStyle(),e.stroke=null),e}function dW(t,e,n,r,i){var o=n.get("value"),a=vW(o,e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),s=n.getModel("label"),l=zc(s.get("padding")||0),u=s.getFont(),c=hr(a,u),h=i.position,p=c.width+l[1]+l[3],f=c.height+l[0]+l[2],d=i.align;"right"===d&&(h[0]-=p),"center"===d&&(h[0]-=p/2);var g=i.verticalAlign;"bottom"===g&&(h[1]-=f),"middle"===g&&(h[1]-=f/2),gW(h,p,f,r);var v=s.get("backgroundColor");v&&"auto"!==v||(v=e.get(["axisLine","lineStyle","color"])),t.label={x:h[0],y:h[1],style:gu(s,{text:a,font:u,fill:s.getTextColor(),padding:l,backgroundColor:v}),z2:10}}function gW(t,e,n,r){var i=r.getWidth(),o=r.getHeight();t[0]=Math.min(t[0]+e,i)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function vW(t,e,n,r,i){t=e.scale.parse(t);var o=e.scale.getLabel({value:t},{precision:i.precision}),a=i.formatter;if(a){var s={value:TS(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};v["each"](r,(function(t){var e=n.getSeriesByIndex(t.seriesIndex),r=t.dataIndexInside,i=e&&e.getDataParams(r);i&&s.seriesData.push(i)})),v["isString"](a)?o=a.replace("{value}",o):v["isFunction"](a)&&(o=a(s))}return o}function yW(t,e,n){var r=In();return jn(r,r,n.rotation),Ln(r,r,n.position),Hv([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],r)}function mW(t,e,n,r,i,o){var a=rk.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=i.get(["label","margin"]),dW(e,r,i,o,{position:yW(r.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function bW(t,e,n){return n=n||0,{x1:t[n],y1:t[1-n],x2:e[n],y2:e[1-n]}}function xW(t,e,n){return n=n||0,{x:t[n],y:t[1-n],width:e[n],height:e[1-n]}}function _W(t,e,n,r,i,o){return{cx:t,cy:e,r0:n,r:r,startAngle:i,endAngle:o,clockwise:!0}}var wW=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.makeElOption=function(t,e,n,r,i){var o=n.axis,a=o.grid,s=r.get("type"),l=SW(a,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var c=fW(r),h=OW[s](o,u,l);h.style=c,t.graphicKey=h.type,t.pointer=h}var p=PT(a.model,n);mW(e,t,p,n,r,i)},e.prototype.getHandleTransform=function(t,e,n){var r=PT(e.axis.grid.model,e,{labelInside:!1});r.labelMargin=n.get(["handle","margin"]);var i=yW(e.axis,t,r);return{x:i[0],y:i[1],rotation:r.rotation+(r.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,r){var i=n.axis,o=i.grid,a=i.getGlobalExtent(!0),s=SW(o,i).getOtherAxis(i).getGlobalExtent(),l="x"===i.dim?0:1,u=[t.x,t.y];u[l]+=e[l],u[l]=Math.min(a[1],u[l]),u[l]=Math.max(a[0],u[l]);var c=(s[1]+s[0])/2,h=[c,c];h[l]=u[l];var p=[{verticalAlign:"middle"},{align:"center"}];return{x:u[0],y:u[1],rotation:t.rotation,cursorPoint:h,tooltipOption:p[l]}},e}(pW);function SW(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var OW={line:function(t,e,n){var r=bW([e,n[0]],[e,n[1]],MW(t));return{type:"Line",subPixelOptimize:!0,shape:r}},shadow:function(t,e,n){var r=Math.max(1,t.getBandWidth()),i=n[1]-n[0];return{type:"Rect",shape:xW([e-r/2,n[0]],[r,i],MW(t))}}};function MW(t){return"x"===t.dim?0:1}var AW=wW,CW=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e}(dh),IW=CW,TW=Hi(),kW=v["each"];function DW(t,e,n){if(!g["a"].node){var r=e.getZr();TW(r).records||(TW(r).records={}),LW(r,e);var i=TW(r).records[t]||(TW(r).records[t]={});i.handler=n}}function LW(t,e){function n(n,r){t.on(n,(function(n){var i=RW(e);kW(TW(t).records,(function(t){t&&r(t,n,i.dispatchAction)})),jW(i.pendings,e)}))}TW(t).initialized||(TW(t).initialized=!0,n("click",v["curry"](EW,"click")),n("mousemove",v["curry"](EW,"mousemove")),n("globalout",PW))}function jW(t,e){var n,r=t.showTip.length,i=t.hideTip.length;r?n=t.showTip[r-1]:i&&(n=t.hideTip[i-1]),n&&(n.dispatchAction=null,e.dispatchAction(n))}function PW(t,e,n){t.handler("leave",null,n)}function EW(t,e,n,r){e.handler(t,n,r)}function RW(t){var e={showTip:[],hideTip:[]},n=function(r){var i=e[r.type];i?i.push(r):(r.dispatchAction=n,t.dispatchAction(r))};return{dispatchAction:n,pendings:e}}function NW(t,e){if(!g["a"].node){var n=e.getZr(),r=(TW(n).records||{})[t];r&&(TW(n).records[t]=null)}}var zW=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=e.getComponent("tooltip"),i=t.get("triggerOn")||r&&r.get("triggerOn")||"mousemove|click";DW("axisPointer",n,(function(t,e,n){"none"!==i&&("leave"===t||i.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},e.prototype.remove=function(t,e){NW("axisPointer",e)},e.prototype.dispose=function(t,e){NW("axisPointer",e)},e.type="axisPointer",e}(Wd),BW=zW;function VW(t,e){var n,r=[],i=t.seriesIndex;if(null==i||!(n=e.getSeriesByIndex(i)))return{point:[]};var o=n.getData(),a=Fi(o,t);if(null==a||a<0||v["isArray"](a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)r=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),c=l.getOtherAxis(u),h=c.dim,p=u.dim,f="x"===h||"radius"===h?1:0,d=o.mapDimension(p),g=[];g[f]=o.get(d,a),g[1-f]=o.get(o.getCalculationInfo("stackResultDimension"),a),r=l.dataToPoint(g)||[]}else r=l.dataToPoint(o.getValues(v["map"](l.dimensions,(function(t){return o.mapDimension(t)})),a))||[];else if(s){var y=s.getBoundingRect().clone();y.applyTransform(s.transform),r=[y.x+y.width/2,y.y+y.height/2]}return{point:r,el:s}}var FW=Hi();function HW(t,e,n){var r=t.currTrigger,i=[t.x,t.y],o=t,a=t.dispatchAction||Object(v["bind"])(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){JW(i)&&(i=VW({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=JW(i),u=o.axesInfo,c=s.axesInfo,h="leave"===r||JW(i),p={},f={},d={list:[],map:{}},g={showPointer:Object(v["curry"])(UW,f),showTooltip:Object(v["curry"])(YW,d)};Object(v["each"])(s.coordSysMap,(function(t,e){var n=l||t.containPoint(i);Object(v["each"])(s.coordSysAxesInfo[e],(function(t,e){var r=t.axis,o=ZW(u,t);if(!h&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=r.pointToData(i)),null!=a&&GW(t,a,g,!1,p)}}))}));var y={};return Object(v["each"])(c,(function(t,e){var n=t.linkGroup;n&&!f[e]&&Object(v["each"])(n.axesInfo,(function(e,r){var i=f[r];if(e!==t&&i){var o=i.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,KW(e),KW(t)))),y[t.key]=o}}))})),Object(v["each"])(y,(function(t,e){GW(c[e],t,g,!0,p)})),qW(f,c,p),XW(d,i,t,a),$W(c,a,n),p}}function GW(t,e,n,r,i){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=WW(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==i.seriesIndex&&Object(v["extend"])(i,s[0]),!r&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function WW(t,e){var n=e.axis,r=n.dim,i=t,o=[],a=Number.MAX_VALUE,s=-1;return Object(v["each"])(e.seriesModels,(function(e,l){var u,c,h=e.getData().mapDimensionsAll(r);if(e.getAxisTooltipData){var p=e.getAxisTooltipData(h,t,n);c=p.dataIndices,u=p.nestestValue}else{if(c=e.getData().indicesOfNearest(h[0],t,"category"===n.type?.5:null),!c.length)return;u=e.getData().get(h[0],c[0])}if(null!=u&&isFinite(u)){var f=t-u,d=Math.abs(f);d<=a&&((d=0&&s<0)&&(a=d,s=f,i=u,o.length=0),Object(v["each"])(c,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:i}}function UW(t,e,n,r){t[e.key]={value:n,payloadBatch:r}}function YW(t,e,n,r){var i=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&i.length){var l=e.coordSys.model,u=dk(l),c=t.map[u];c||(c=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(c)),c.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:r,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:i.slice()})}}function qW(t,e,n){var r=n.axesInfo=[];Object(v["each"])(e,(function(e,n){var i=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(i.status="show"),i.value=o.value,i.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(i.status="hide"),"show"===i.status&&r.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:i.value})}))}function XW(t,e,n,r){if(!JW(e)&&t.list.length){var i=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};r({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:i.dataIndexInside,dataIndex:i.dataIndex,seriesIndex:i.seriesIndex,dataByCoordSys:t.list})}else r({type:"hideTip"})}function $W(t,e,n){var r=n.getZr(),i="axisPointerLastHighlights",o=FW(r)[i]||{},a=FW(r)[i]={};Object(v["each"])(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&Object(v["each"])(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t}))}));var s=[],l=[];Object(v["each"])(o,(function(t,e){!a[e]&&l.push(t)})),Object(v["each"])(a,(function(t,e){!o[e]&&s.push(t)})),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function ZW(t,e){for(var n=0;n<(t||[]).length;n++){var r=t[n];if(e.axis.dim===r.axisDim&&e.axis.model.componentIndex===r.axisIndex)return r}}function KW(t){var e=t.axis.model,n={},r=n.axisDim=t.axis.dim;return n.axisIndex=n[r+"AxisIndex"]=e.componentIndex,n.axisName=n[r+"AxisName"]=e.name,n.axisId=n[r+"AxisId"]=e.id,n}function JW(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function QW(t){yk.registerAxisPointerClass("CartesianAxisPointer",AW),t.registerComponentModel(IW),t.registerComponentView(BW),t.registerPreprocessor((function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!Object(v["isArray"])(e)&&(t.axisPointer.link=[e])}})),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,(function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=ik(t,e)})),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},HW)}function tU(t){p_(Tk),p_(QW)}var eU=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.makeElOption=function(t,e,n,r,i){var o=n.axis;"angle"===o.dim&&(this.animationThreshold=Math.PI/18);var a=o.polar,s=a.getOtherAxis(o),l=s.getExtent(),u=o.dataToCoord(e),c=r.get("type");if(c&&"none"!==c){var h=fW(r),p=rU[c](o,a,u,l);p.style=h,t.graphicKey=p.type,t.pointer=p}var f=r.get(["label","margin"]),d=nU(e,n,r,a,f);dW(t,n,r,i,d)},e}(pW);function nU(t,e,n,r,i){var o=e.axis,a=o.dataToCoord(t),s=r.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,c,h=r.getRadiusAxis().getExtent();if("radius"===o.dim){var p=In();jn(p,p,s),Ln(p,p,[r.cx,r.cy]),l=Hv([a,-i],p);var f=e.getModel("axisLabel").get("rotate")||0,d=rk.innerTextLayout(s,f*Math.PI/180,-1);u=d.textAlign,c=d.textVerticalAlign}else{var g=h[1];l=r.coordToPoint([g+i,a]);var v=r.cx,y=r.cy;u=Math.abs(l[0]-v)/g<.3?"center":l[0]>v?"left":"right",c=Math.abs(l[1]-y)/g<.3?"middle":l[1]>y?"top":"bottom"}return{position:l,align:u,verticalAlign:c}}var rU={line:function(t,e,n,r){return"angle"===t.dim?{type:"Line",shape:bW(e.coordToPoint([r[0],n]),e.coordToPoint([r[1],n]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:n}}},shadow:function(t,e,n,r){var i=Math.max(1,t.getBandWidth()),o=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:_W(e.cx,e.cy,r[0],r[1],(-n-i/2)*o,(i/2-n)*o)}:{type:"Sector",shape:_W(e.cx,e.cy,n-i/2,n+i/2,0,2*Math.PI)}}},iU=eU,oU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.findAxisModel=function(t){var e,n=this.ecModel;return n.eachComponent(t,(function(t){t.getCoordSysModel()===this&&(e=t)}),this),e},e.type="polar",e.dependencies=["radiusAxis","angleAxis"],e.defaultOption={z:0,center:["50%","50%"],radius:"80%"},e}(dh),aU=oU,sU=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",Yi).models[0]},e.type="polarAxis",e}(dh);v["mixin"](sU,RS);var lU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="angleAxis",e}(sU),uU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="radiusAxis",e}(sU),cU=function(t){function e(e,n){return t.call(this,"radius",e,n)||this}return d(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e}(SO);cU.prototype.dataToRadius=SO.prototype.dataToCoord,cU.prototype.radiusToData=SO.prototype.coordToData;var hU=cU,pU=Hi(),fU=function(t){function e(e,n){return t.call(this,"angle",e,n||[0,360])||this}return d(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e.prototype.calculateCategoryInterval=function(){var t=this,e=t.getLabelModel(),n=t.scale,r=n.getExtent(),i=n.count();if(r[1]-r[0]<1)return 0;var o=r[0],a=t.dataToCoord(o+1)-t.dataToCoord(o),s=Math.abs(a),l=hr(null==o?"":o+"",e.getFont(),"center","top"),u=Math.max(l.height,7),c=u/s;isNaN(c)&&(c=1/0);var h=Math.max(0,Math.floor(c)),p=pU(t.model),f=p.lastAutoInterval,d=p.lastTickCount;return null!=f&&null!=d&&Math.abs(f-h)<=1&&Math.abs(d-i)<=1&&f>h?h=f:(p.lastTickCount=i,p.lastAutoInterval=h),h},e}(SO);fU.prototype.dataToAngle=SO.prototype.dataToCoord,fU.prototype.angleToData=SO.prototype.coordToData;var dU=fU,gU=["radius","angle"],vU=function(){function t(t){this.dimensions=gU,this.type="polar",this.cx=0,this.cy=0,this._radiusAxis=new hU,this._angleAxis=new dU,this.axisPointerEnabled=!0,this.name=t||"",this._radiusAxis.polar=this._angleAxis.polar=this}return t.prototype.containPoint=function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},t.prototype.containData=function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},t.prototype.getAxis=function(t){var e="_"+t+"Axis";return this[e]},t.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},t.prototype.getAxesByScale=function(t){var e=[],n=this._angleAxis,r=this._radiusAxis;return n.scale.type===t&&e.push(n),r.scale.type===t&&e.push(r),e},t.prototype.getAngleAxis=function(){return this._angleAxis},t.prototype.getRadiusAxis=function(){return this._radiusAxis},t.prototype.getOtherAxis=function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},t.prototype.getTooltipAxes=function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},t.prototype.dataToPoint=function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},t.prototype.pointToData=function(t,e){var n=this.pointToCoord(t);return[this._radiusAxis.radiusToData(n[0],e),this._angleAxis.angleToData(n[1],e)]},t.prototype.pointToCoord=function(t){var e=t[0]-this.cx,n=t[1]-this.cy,r=this.getAngleAxis(),i=r.getExtent(),o=Math.min(i[0],i[1]),a=Math.max(i[0],i[1]);r.inverse?o=a-360:a=o+360;var s=Math.sqrt(e*e+n*n);e/=s,n/=s;var l=Math.atan2(-n,e)/Math.PI*180,u=la)l+=360*u;return[s,l]},t.prototype.coordToPoint=function(t){var e=t[0],n=t[1]/180*Math.PI,r=Math.cos(n)*e+this.cx,i=-Math.sin(n)*e+this.cy;return[r,i]},t.prototype.getArea=function(){var t=this.getAngleAxis(),e=this.getRadiusAxis(),n=e.getExtent().slice();n[0]>n[1]&&n.reverse();var r=t.getExtent(),i=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:n[0],r:n[1],startAngle:-r[0]*i,endAngle:-r[1]*i,clockwise:t.inverse,contain:function(t,e){var n=t-this.cx,r=e-this.cy,i=n*n+r*r-1e-4,o=this.r,a=this.r0;return i<=o*o&&i>=a*a}}},t.prototype.convertToPixel=function(t,e,n){var r=yU(e);return r===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){var r=yU(e);return r===this?this.pointToData(n):null},t}();function yU(t){var e=t.seriesModel,n=t.polarModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}var mU=vU;function bU(t,e,n){var r=e.get("center"),i=n.getWidth(),o=n.getHeight();t.cx=Xr(r[0],i),t.cy=Xr(r[1],o);var a=t.getRadiusAxis(),s=Math.min(i,o)/2,l=e.get("radius");null==l?l=[0,"100%"]:v["isArray"](l)||(l=[0,l]);var u=[Xr(l[0],s),Xr(l[1],s)];a.inverse?a.setExtent(u[1],u[0]):a.setExtent(u[0],u[1])}function xU(t,e){var n=this,r=n.getAngleAxis(),i=n.getRadiusAxis();if(r.scale.setExtent(1/0,-1/0),i.scale.setExtent(1/0,-1/0),t.eachSeries((function(t){if(t.coordinateSystem===n){var e=t.getData();v["each"](PS(e,"radius"),(function(t){i.scale.unionExtentFromData(e,t)})),v["each"](PS(e,"angle"),(function(t){r.scale.unionExtentFromData(e,t)}))}})),MS(r.scale,r.model),MS(i.scale,i.model),"category"===r.type&&!r.onBand){var o=r.getExtent(),a=360/r.scale.count();r.inverse?o[1]+=a:o[1]-=a,r.setExtent(o[0],o[1])}}function _U(t){return"angleAxis"===t.mainType}function wU(t,e){if(t.type=e.get("type"),t.scale=AS(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),_U(e)){t.inverse=t.inverse!==e.get("clockwise");var n=e.get("startAngle");t.setExtent(n,n+(t.inverse?-360:360))}e.axis=t,t.model=e}var SU={dimensions:gU,create:function(t,e){var n=[];return t.eachComponent("polar",(function(t,r){var i=new mU(r+"");i.update=xU;var o=i.getRadiusAxis(),a=i.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");wU(o,s),wU(a,l),bU(i,t,e),n.push(i),t.coordinateSystem=i,i.model=t})),t.eachSeries((function(t){if("polar"===t.get("coordinateSystem")){var e=t.getReferringComponents("polar",Yi).models[0];0,t.coordinateSystem=e.coordinateSystem}})),n}},OU=SU,MU=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function AU(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var r=t.coordToPoint([e[0],n]),i=t.coordToPoint([e[1],n]);return{x1:r[0],y1:r[1],x2:i[0],y2:i[1]}}function CU(t){var e=t.getRadiusAxis();return e.inverse?0:1}function IU(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coord-n.coord)-360)<1e-4&&t.pop()}var TU=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="PolarAxisPointer",n}return d(e,t),e.prototype.render=function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,r=n.polar,i=r.getRadiusAxis().getExtent(),o=n.getTicksCoords(),a=n.getMinorTicksCoords(),s=v["map"](n.getViewLabels(),(function(t){t=v["clone"](t);var e=n.scale,r="ordinal"===e.type?e.getRawOrdinalNumber(t.tickValue):t.tickValue;return t.coord=n.dataToCoord(r),t}));IU(s),IU(o),v["each"](MU,(function(e){!t.get([e,"show"])||n.scale.isBlank()&&"axisLine"!==e||kU[e](this.group,t,r,o,a,i,s)}),this)}},e.type="angleAxis",e}(yk),kU={axisLine:function(t,e,n,r,i,o){var a,s=e.getModel(["axisLine","lineStyle"]),l=CU(n),u=l?0:1;a=0===o[u]?new yg({shape:{cx:n.cx,cy:n.cy,r:o[l]},style:s.getLineStyle(),z2:1,silent:!0}):new Fg({shape:{cx:n.cx,cy:n.cy,r:o[l],r0:o[u]},style:s.getLineStyle(),z2:1,silent:!0}),a.style.fill=null,t.add(a)},axisTick:function(t,e,n,r,i,o){var a=e.getModel("axisTick"),s=(a.get("inside")?-1:1)*a.get("length"),l=o[CU(n)],u=v["map"](r,(function(t){return new Qg({shape:AU(n,[l,l+s],t.coord)})}));t.add(Rv(u,{style:v["defaults"](a.getModel("lineStyle").getLineStyle(),{stroke:e.get(["axisLine","lineStyle","color"])})}))},minorTick:function(t,e,n,r,i,o){if(i.length){for(var a=e.getModel("axisTick"),s=e.getModel("minorTick"),l=(a.get("inside")?-1:1)*s.get("length"),u=o[CU(n)],c=[],h=0;hd?"left":"right",m=Math.abs(f[1]-g)/p<.3?"middle":f[1]>g?"top":"bottom";if(s&&s[h]){var b=s[h];v["isObject"](b)&&b.textStyle&&(a=new Bu(b.textStyle,l,l.ecModel))}var x=new Rs({silent:rk.isLabelSilent(e),style:gu(a,{x:f[0],y:f[1],fill:a.getTextColor()||e.get(["axisLine","lineStyle","color"]),text:r.formattedLabel,align:y,verticalAlign:m})});if(t.add(x),c){var _=rk.makeAxisEventDataBase(e);_.targetType="axisLabel",_.value=r.rawLabel,Ns(x).eventData=_}}),this)},splitLine:function(t,e,n,r,i,o){var a=e.getModel("splitLine"),s=a.getModel("lineStyle"),l=s.get("color"),u=0;l=l instanceof Array?l:[l];for(var c=[],h=0;h=0?"p":"n",A=x;m&&(r[s][O]||(r[s][O]={p:x,n:x}),A=r[s][O][M]);var C=void 0,I=void 0,T=void 0,k=void 0;if("radius"===h.dim){var D=h.dataToCoord(S)-x,L=o.dataToCoord(O);Math.abs(D)=k})}}}))}function FU(t){var e={};v["each"](t,(function(t,n){var r=t.getData(),i=t.coordinateSystem,o=i.getBaseAxis(),a=BU(i,o),s=o.getExtent(),l="category"===o.type?o.getBandWidth():Math.abs(s[1]-s[0])/r.count(),u=e[a]||{bandWidth:l,remainedWidth:l,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},c=u.stacks;e[a]=u;var h=zU(t);c[h]||u.autoWidthCount++,c[h]=c[h]||{width:0,maxWidth:0};var p=Xr(t.get("barWidth"),l),f=Xr(t.get("barMaxWidth"),l),d=t.get("barGap"),g=t.get("barCategoryGap");p&&!c[h].width&&(p=Math.min(u.remainedWidth,p),c[h].width=p,u.remainedWidth-=p),f&&(c[h].maxWidth=f),null!=d&&(u.gap=d),null!=g&&(u.categoryGap=g)}));var n={};return v["each"](e,(function(t,e){n[e]={};var r=t.stacks,i=t.bandWidth,o=Xr(t.categoryGap,i),a=Xr(t.gap,1),s=t.remainedWidth,l=t.autoWidthCount,u=(s-o)/(l+(l-1)*a);u=Math.max(u,0),v["each"](r,(function(t,e){var n=t.maxWidth;n&&n=e.y&&t[1]<=e.y+e.height:n.contain(n.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},t.prototype.pointToData=function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},t.prototype.dataToPoint=function(t){var e=this.getAxis(),n=this.getRect(),r=[],i="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),r[i]=e.toGlobalCoord(e.dataToCoord(+t)),r[1-i]=0===i?n.y+n.height/2:n.x+n.width/2,r},t.prototype.convertToPixel=function(t,e,n){var r=oY(e);return r===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){var r=oY(e);return r===this?this.pointToData(n):null},t}();function oY(t){var e=t.seriesModel,n=t.singleAxisModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}var aY=iY;function sY(t,e){var n=[];return t.eachComponent("singleAxis",(function(r,i){var o=new aY(r,t,e);o.name="single_"+i,o.resize(r,e),r.coordinateSystem=o,n.push(o)})),t.eachSeries((function(t){if("singleAxis"===t.get("coordinateSystem")){var e=t.getReferringComponents("singleAxis",Yi).models[0];t.coordinateSystem=e&&e.coordinateSystem}})),n}var lY={create:sY,dimensions:rY},uY=lY,cY=["x","y"],hY=["width","height"],pY=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.makeElOption=function(t,e,n,r,i){var o=n.axis,a=o.coordinateSystem,s=gY(a,1-dY(o)),l=a.dataToPoint(e)[0],u=r.get("type");if(u&&"none"!==u){var c=fW(r),h=fY[u](o,l,s);h.style=c,t.graphicKey=h.type,t.pointer=h}var p=qU(n);mW(e,t,p,n,r,i)},e.prototype.getHandleTransform=function(t,e,n){var r=qU(e,{labelInside:!1});r.labelMargin=n.get(["handle","margin"]);var i=yW(e.axis,t,r);return{x:i[0],y:i[1],rotation:r.rotation+(r.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,r){var i=n.axis,o=i.coordinateSystem,a=dY(i),s=gY(o,a),l=[t.x,t.y];l[a]+=e[a],l[a]=Math.min(s[1],l[a]),l[a]=Math.max(s[0],l[a]);var u=gY(o,1-a),c=(u[1]+u[0])/2,h=[c,c];return h[a]=l[a],{x:l[0],y:l[1],rotation:t.rotation,cursorPoint:h,tooltipOption:{verticalAlign:"middle"}}},e}(pW),fY={line:function(t,e,n){var r=bW([e,n[0]],[e,n[1]],dY(t));return{type:"Line",subPixelOptimize:!0,shape:r}},shadow:function(t,e,n){var r=t.getBandWidth(),i=n[1]-n[0];return{type:"Rect",shape:xW([e-r/2,n[0]],[r,i],dY(t))}}};function dY(t){return t.isHorizontal()?0:1}function gY(t,e){var n=t.getRect();return[n[cY[e]],n[cY[e]]+n[hY[e]]]}var vY=pY,yY=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="single",e}(Wd);function mY(t){p_(QW),yk.registerAxisPointerClass("SingleAxisPointer",vY),t.registerComponentView(yY),t.registerComponentView(JU),t.registerComponentModel(tY),OT(t,"single",tY,tY.defaultOption),t.registerCoordinateSystem("single",uY)}var bY=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(e,n,r){var i=uh(e);t.prototype.init.apply(this,arguments),xY(e,i)},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),xY(this.option,e)},e.prototype.getCellSize=function(){return this.option.cellSize},e.type="calendar",e.defaultOption={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%",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},e}(dh);function xY(t,e){var n,r=t.cellSize;n=v["isArray"](r)?r:t.cellSize=[r,r],1===n.length&&(n[1]=n[0]);var i=v["map"]([0,1],(function(t){return ah(e,t)&&(n[t]="auto"),null!=n[t]&&"auto"!==n[t]}));lh(t,e,{type:"box",ignoreSize:i})}var _Y=bY,wY=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){var r=this.group;r.removeAll();var i=t.coordinateSystem,o=i.getRangeInfo(),a=i.getOrient(),s=e.getLocaleModel();this._renderDayRect(t,o,r),this._renderLines(t,o,a,r),this._renderYearText(t,o,a,r),this._renderMonthText(t,s,a,r),this._renderWeekText(t,s,o,a,r)},e.prototype._renderDayRect=function(t,e,n){for(var r=t.coordinateSystem,i=t.getModel("itemStyle").getItemStyle(),o=r.getCellWidth(),a=r.getCellHeight(),s=e.start.time;s<=e.end.time;s=r.getNextNDay(s,1).time){var l=r.dataToRect([s],!1).tl,u=new ms({shape:{x:l[0],y:l[1],width:o,height:a},cursor:"default",style:i});n.add(u)}},e.prototype._renderLines=function(t,e,n,r){var i=this,o=t.coordinateSystem,a=t.getModel(["splitLine","lineStyle"]).getLineStyle(),s=t.get(["splitLine","show"]),l=a.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,c=0;u.time<=e.end.time;c++){p(u.formatedDate),0===c&&(u=o.getDateInfo(e.start.y+"-"+e.start.m));var h=u.date;h.setMonth(h.getMonth()+1),u=o.getDateInfo(h)}function p(e){i._firstDayOfMonth.push(o.getDateInfo(e)),i._firstDayPoints.push(o.dataToRect([e],!1).tl);var l=i._getLinePointsOfOneWeek(t,e,n);i._tlpoints.push(l[0]),i._blpoints.push(l[l.length-1]),s&&i._drawSplitline(l,a,r)}p(o.getNextNDay(e.end.time,1).formatedDate),s&&this._drawSplitline(i._getEdgesPoints(i._tlpoints,l,n),a,r),s&&this._drawSplitline(i._getEdgesPoints(i._blpoints,l,n),a,r)},e.prototype._getEdgesPoints=function(t,e,n){var r=[t[0].slice(),t[t.length-1].slice()],i="horizontal"===n?0:1;return r[0][i]=r[0][i]-e/2,r[1][i]=r[1][i]+e/2,r},e.prototype._drawSplitline=function(t,e,n){var r=new $g({z2:20,shape:{points:t},style:e});n.add(r)},e.prototype._getLinePointsOfOneWeek=function(t,e,n){for(var r=t.coordinateSystem,i=r.getDateInfo(e),o=[],a=0;a<7;a++){var s=r.getNextNDay(i.time,a),l=r.dataToRect([s.time],!1);o[2*s.day]=l.tl,o[2*s.day+1]=l["horizontal"===n?"bl":"tr"]}return o},e.prototype._formatterLabel=function(t,e){return Object(v["isString"])(t)&&t?Yc(t,e):Object(v["isFunction"])(t)?t(e):e.nameMap},e.prototype._yearTextPositionControl=function(t,e,n,r,i){var o=e[0],a=e[1],s=["center","bottom"];"bottom"===r?(a+=i,s=["center","top"]):"left"===r?o-=i:"right"===r?(o+=i,s=["center","top"]):a-=i;var l=0;return"left"!==r&&"right"!==r||(l=Math.PI/2),{rotation:l,x:o,y:a,style:{align:s[0],verticalAlign:s[1]}}},e.prototype._renderYearText=function(t,e,n,r){var i=t.getModel("yearLabel");if(i.get("show")){var o=i.get("margin"),a=i.get("position");a||(a="horizontal"!==n?"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,c="horizontal"===n?0:1,h={top:[l,s[c][1]],bottom:[l,s[1-c][1]],left:[s[1-c][0],u],right:[s[c][0],u]},p=e.start.y;+e.end.y>+e.start.y&&(p=p+"-"+e.end.y);var f=i.get("formatter"),d={start:e.start.y,end:e.end.y,nameMap:p},g=this._formatterLabel(f,d),v=new Rs({z2:30,style:gu(i,{text:g})});v.attr(this._yearTextPositionControl(v,h[a],n,a,o)),r.add(v)}},e.prototype._monthTextPositionControl=function(t,e,n,r,i){var o="left",a="top",s=t[0],l=t[1];return"horizontal"===n?(l+=i,e&&(o="center"),"start"===r&&(a="bottom")):(s+=i,e&&(a="middle"),"start"===r&&(o="right")),{x:s,y:l,align:o,verticalAlign:a}},e.prototype._renderMonthText=function(t,e,n,r){var i=t.getModel("monthLabel");if(i.get("show")){var o=i.get("nameMap"),a=i.get("margin"),s=i.get("position"),l=i.get("align"),u=[this._tlpoints,this._blpoints];o&&!Object(v["isString"])(o)||(o&&(e=ec(o)||e),o=e.get(["time","monthAbbr"])||[]);var c="start"===s?0:1,h="horizontal"===n?0:1;a="start"===s?-a:a;for(var p="center"===l,f=0;f=r.start.time&&n.timea.end.time&&t.reverse(),t},t.prototype._getRangeInfo=function(t){var e,n=[this.getDateInfo(t[0]),this.getDateInfo(t[1])];n[0].time>n[1].time&&(e=!0,n.reverse());var r=Math.floor(n[1].time/OY)-Math.floor(n[0].time/OY)+1,i=new Date(n[0].time),o=i.getDate(),a=n[1].date.getDate();i.setDate(o+r-1);var s=i.getDate();if(s!==a){var l=i.getTime()-n[1].time>0?1:-1;while((s=i.getDate())!==a&&(i.getTime()-n[1].time)*l>0)r-=l,i.setDate(s-l)}var u=Math.floor((r+n[0].day+6)/7),c=e?1-u:u-1;return e&&n.reverse(),{range:[n[0].formatedDate,n[1].formatedDate],start:n[0],end:n[1],allDay:r,weeks:u,nthWeek:c,fweek:n[0].day,lweek:n[1].day}},t.prototype._getDateByWeeksAndDay=function(t,e,n){var r=this._getRangeInfo(n);if(t>r.weeks||0===t&&er.lweek)return null;var i=7*(t-1)-r.fweek+e,o=new Date(r.start.time);return o.setDate(+r.start.d+i),this.getDateInfo(o)},t.create=function(e,n){var r=[];return e.eachComponent("calendar",(function(i){var o=new t(i,e,n);r.push(o),i.coordinateSystem=o})),e.eachSeries((function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=r[t.get("calendarIndex")||0])})),r},t.dimensions=["time","value"],t}();function AY(t){var e=t.calendarModel,n=t.seriesModel,r=e?e.coordinateSystem:n?n.coordinateSystem:null;return r}var CY=MY;function IY(t){t.registerComponentModel(_Y),t.registerComponentView(SY),t.registerCoordinateSystem("calendar",CY)}function TY(t,e){var n=t.existing;if(e.id=t.keyInfo.id,!e.type&&n&&(e.type=n.type),null==e.parentId){var r=e.parentOption;r?e.parentId=r.id:n&&(e.parentId=n.parentId)}e.parentOption=null}function kY(t,e){var n;return v["each"](e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}function DY(t,e,n){var r=v["extend"]({},n),i=t[e],o=n.$action||"merge";"merge"===o?i?(v["merge"](i,r,!0),lh(i,r,{ignoreSize:!0}),ch(n,i),PY(n,i),PY(n,i,"shape"),PY(n,i,"style"),PY(n,i,"extra"),n.clipPath=i.clipPath):t[e]=r:"replace"===o?t[e]=r:"remove"===o&&i&&(t[e]=null)}var LY=["transition","enterFrom","leaveTo"],jY=LY.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function PY(t,e,n){if(n&&(!t[n]&&e[n]&&(t[n]={}),t=t[n],e=e[n]),t&&e)for(var r=n?LY:jY,i=0;i=0;l--){u=n[l],c=Pi(u.id,null),h=null!=c?i.get(c):null;if(h){p=h.parent,g=zY(p);var y=p===r?{width:o,height:a}:{width:g.width,height:g.height},m={},b=oh(h,u,y,null,{hv:u.hv,boundingMode:u.bounding},m);if(!zY(h).isNew&&b){for(var x=u.transition,_={},w=0;w=0)?_[S]=O:h[S]=O}nu(h,_,t,0)}else h.attr(m)}}},e.prototype._clear=function(){var t=this,e=this._elMap;e.each((function(n){HY(n,zY(n).option,e,t._lastGraphicModel)})),this._elMap=v["createHashMap"]()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(Wd);function VY(t){var e=v["hasOwn"](NY,t)?NY[t]:Lv(t);var n=new e({});return zY(n).type=t,n}function FY(t,e,n,r){var i=VY(n);return e.add(i),r.set(t,i),zY(i).id=t,zY(i).isNew=!0,i}function HY(t,e,n,r){var i=t&&t.parent;i&&("group"===t.type&&t.traverse((function(t){HY(t,e,n,r)})),tG(t,e,r),n.removeKey(zY(t).id))}function GY(t,e,n,r){t.isGroup||v["each"]([["cursor",Xo.prototype.cursor],["zlevel",r||0],["z",n||0],["z2",0]],(function(n){var r=n[0];v["hasOwn"](e,r)?t[r]=v["retrieve2"](e[r],n[1]):null==t[r]&&(t[r]=n[1])})),v["each"](v["keys"](e),(function(n){if(0===n.indexOf("on")){var r=e[n];t[n]=v["isFunction"](r)?r:null}})),v["hasOwn"](e,"draggable")&&(t.draggable=e.draggable),null!=e.name&&(t.name=e.name),null!=e.id&&(t.id=e.id)}function WY(t){return t=v["extend"]({},t),v["each"](["id","parentId","$action","hv","bounding","textContent","clipPath"].concat(Qc),(function(e){delete t[e]})),t}function UY(t,e,n){var r=Ns(t).eventData;t.silent||t.ignore||r||(r=Ns(t).eventData={componentType:"graphic",componentIndex:e.componentIndex,name:t.name}),r&&(r.info=n.info)}function YY(t){t.registerComponentModel(RY),t.registerComponentView(BY),t.registerPreprocessor((function(t){var e=t.graphic;Object(v["isArray"])(e)?e[0]&&e[0].elements?t.graphic=[t.graphic[0]]:t.graphic=[{elements:e}]:e&&!e.elements&&(t.graphic=[{elements:[e]}])}))}var qY=["x","y","radius","angle","single"],XY=["cartesian2d","polar","singleAxis"];function $Y(t){var e=t.get("coordinateSystem");return Object(v["indexOf"])(XY,e)>=0}function ZY(t){return t+"Axis"}function KY(t,e){var n,r=Object(v["createHashMap"])(),i=[],o=Object(v["createHashMap"])();t.eachComponent({mainType:"dataZoom",query:e},(function(t){o.get(t.uid)||s(t)}));do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&l(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),i.push(t),u(t)}function l(t){var e=!1;return t.eachTargetAxis((function(t,n){var i=r.get(t);i&&i[n]&&(e=!0)})),e}function u(t){t.eachTargetAxis((function(t,e){(r.get(t)||r.set(t,[]))[e]=!0}))}return i}function JY(t){var e=t.ecModel,n={infoList:[],infoMap:Object(v["createHashMap"])()};return t.eachTargetAxis((function(t,r){var i=e.getComponent(ZY(t),r);if(i){var o=i.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(i)}}})),n}var QY=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),tq=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return d(e,t),e.prototype.init=function(t,e,n){var r=eq(t);this.settledOption=r,this.mergeDefaultAndTheme(t,n),this._doInit(r)},e.prototype.mergeOption=function(t){var e=eq(t);Object(v["merge"])(this.option,t,!0),Object(v["merge"])(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;Object(v["each"])([["start","startValue"],["end","endValue"]],(function(t,r){"value"===this._rangePropMode[r]&&(e[t[0]]=n[t[0]]=null)}),this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=Object(v["createHashMap"])(),n=this._fillSpecifiedTargetAxis(e);n?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each((function(t){t.indexList.length&&(this._noTarget=!1)}),this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return Object(v["each"])(qY,(function(n){var r=this.getReferringComponents(ZY(n),qi);if(r.specified){e=!0;var i=new QY;Object(v["each"])(r.models,(function(t){i.add(t.componentIndex)})),t.set(n,i)}}),this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,r=!0;if(r){var i="vertical"===e?"y":"x",o=n.findComponents({mainType:i+"Axis"});a(o,i)}if(r){o=n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}});a(o,"single")}function a(e,n){var i=e[0];if(i){var o=new QY;if(o.add(i.componentIndex),t.set(n,o),r=!1,"x"===n||"y"===n){var a=i.getReferringComponents("grid",Yi).models[0];a&&Object(v["each"])(e,(function(t){i.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",Yi).models[0]&&o.add(t.componentIndex)}))}}}r&&Object(v["each"])(qY,(function(e){if(r){var i=n.findComponents({mainType:ZY(e),filter:function(t){return"category"===t.get("type",!0)}});if(i[0]){var o=new QY;o.add(i[0].componentIndex),t.set(e,o),r=!1}}}),this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis((function(e){!t&&(t=e)}),this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");Object(v["each"])([["start","startValue"],["end","endValue"]],(function(r,i){var o=null!=t[r[0]],a=null!=t[r[1]];o&&!a?e[i]="percent":!o&&a?e[i]="value":n?e[i]=n[i]:o&&(e[i]="percent")}))},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis((function(e,n){null==t&&(t=this.ecModel.getComponent(ZY(e),n))}),this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each((function(n,r){Object(v["each"])(n.indexList,(function(n){t.call(e,r,n)}))}))},e.prototype.getAxisProxy=function(t,e){var n=this.getAxisModel(t,e);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(ZY(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;Object(v["each"])([["start","startValue"],["end","endValue"]],(function(r){null==t[r[0]]&&null==t[r[1]]||(e[r[0]]=n[r[0]]=t[r[0]],e[r[1]]=n[r[1]]=t[r[1]])}),this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;Object(v["each"])(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var e,n=this._targetAxisInfoMap.keys(),r=0;ro[1];if(c&&!h&&!p)return!0;c&&(i=!0),h&&(e=!0),p&&(n=!0)}return i&&e&&n}))}else uq(r,(function(n){if("empty"===i)t.setData(e=e.map(n,(function(t){return a(t)?t:NaN})));else{var r={};r[n]=o,e.selectRange(r)}}));uq(r,(function(t){e.setApproximateExtent(o,t)}))}}))}function a(t){return t>=o[0]&&t<=o[1]}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._dataExtent;uq(["min","max"],(function(r){var i=e.get(r+"Span"),o=e.get(r+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?i=qr(n[0]+o,n,[0,100],!0):null!=i&&(o=qr(i,[0,100],n,!0)-n[0]),t[r+"Span"]=i,t[r+"ValueSpan"]=o}),this)},t.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,n=this._valueWindow;if(e){var r=Qr(n,[0,500]);r=Math.min(r,20);var i=t.axis.scale.rawExtentInfo;0!==e[0]&&i.setDeterminedMinMax("min",+n[0].toFixed(r)),100!==e[1]&&i.setDeterminedMinMax("max",+n[1].toFixed(r)),i.freeze()}},t}();function pq(t,e,n){var r=[1/0,-1/0];uq(n,(function(t){ES(r,t.getData(),e)}));var i=t.getAxisModel(),o=_S(i.axis.scale,i,r).calculate();return[o.min,o.max]}var fq=hq,dq={getTargetSeries:function(t){function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((function(r,i){var o=t.getComponent(ZY(r),i);e(r,i,o,n)}))}))}e((function(t,e,n,r){n.__dzAxisProxy=null}));var n=[];e((function(e,r,i,o){i.__dzAxisProxy||(i.__dzAxisProxy=new fq(e,r,o,t),n.push(i.__dzAxisProxy))}));var r=Object(v["createHashMap"])();return Object(v["each"])(n,(function(t){Object(v["each"])(t.getTargetSeriesModels(),(function(t){r.set(t.uid,t)}))})),r},overallReset:function(t,e){t.eachComponent("dataZoom",(function(t){t.eachTargetAxis((function(e,n){t.getAxisProxy(e,n).reset(t)})),t.eachTargetAxis((function(n,r){t.getAxisProxy(n,r).filterData(t,e)}))})),t.eachComponent("dataZoom",(function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getDataPercentWindow(),r=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:r[0],endValue:r[1]})}}))}},gq=dq;function vq(t){t.registerAction("dataZoom",(function(t,e){var n=KY(e,t);Object(v["each"])(n,(function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))}var yq=!1;function mq(t){yq||(yq=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,gq),vq(t),t.registerSubTypeDefaulter("dataZoom",(function(){return"slider"})))}function bq(t){t.registerComponentModel(iq),t.registerComponentView(lq),mq(t)}var xq=function(){function t(){}return t}(),_q={};function wq(t,e){_q[t]=e}function Sq(t){return _q[t]}var Oq=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.optionUpdated=function(){t.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;v["each"](this.option.feature,(function(t,n){var r=Sq(n);r&&(r.getDefaultOption&&(r.defaultOption=r.getDefaultOption(e)),v["merge"](t,r.defaultOption))}))},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e}(dh),Mq=Oq;function Aq(t,e,n){var r=e.getBoxLayoutParams(),i=e.get("padding"),o={width:n.getWidth(),height:n.getHeight()},a=ih(r,o,i);nh(e.get("orient"),t,e.get("itemGap"),a.width,a.height),oh(t,r,o,i)}function Cq(t,e){var n=zc(e.get("padding")),r=e.getItemStyle(["color","opacity"]);return r.fill=e.get("backgroundColor"),t=new ms({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:r,silent:!0,z2:-1}),t}var Iq=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.render=function(t,e,n,r){var i=this.group;if(i.removeAll(),t.get("show")){var o=+t.get("itemSize"),a="vertical"===t.get("orient"),s=t.get("feature")||{},l=this._features||(this._features={}),u=[];v["each"](s,(function(t,e){u.push(e)})),new v_(this._featureNames||[],u).add(c).update(c).remove(v["curry"](c,null)).execute(),this._featureNames=u,Aq(i,t,n),i.add(Cq(i.getBoundingRect(),t)),a||i.eachChild((function(t){var e=t.__title,r=t.ensureState("emphasis"),a=r.textConfig||(r.textConfig={}),s=t.getTextContent(),l=s&&s.ensureState("emphasis");if(l&&!v["isFunction"](l)&&e){var u=l.style||(l.style={}),c=hr(e,Rs.makeFont(u)),h=t.x+i.x,p=t.y+i.y+o,f=!1;p+c.height>n.getHeight()&&(a.position="top",f=!0);var d=f?-5-c.height:o+10;h+c.width/2>n.getWidth()?(a.position=["100%",d],u.align="right"):h-c.width/2<0&&(a.position=[0,d],u.align="left")}}))}function c(i,o){var a,c=u[i],p=u[o],f=s[c],d=new Bu(f,t,t.ecModel);if(r&&null!=r.newTitle&&r.featureName===c&&(f.title=r.newTitle),c&&!p){if(Tq(c))a={onclick:d.option.onclick,featureName:c};else{var g=Sq(c);if(!g)return;a=new g}l[c]=a}else if(a=l[p],!a)return;a.uid=Fu("toolbox-feature"),a.model=d,a.ecModel=e,a.api=n;var v=a instanceof xq;c||!p?!d.get("show")||v&&a.unusable?v&&a.remove&&a.remove(e,n):(h(d,a,c),d.setIconStatus=function(t,e){var n=this.option,r=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,r[t]&&("emphasis"===e?wl:Sl)(r[t])},a instanceof xq&&a.render&&a.render(d,e,n,r)):v&&a.dispose&&a.dispose(e,n)}function h(r,s,l){var u,c,h=r.getModel("iconStyle"),p=r.getModel(["emphasis","iconStyle"]),f=s instanceof xq&&s.getIcons?s.getIcons():r.get("icon"),d=r.get("title")||{};v["isString"](f)?(u={},u[l]=f):u=f,v["isString"](d)?(c={},c[l]=d):c=d;var g=r.iconPaths={};v["each"](u,(function(l,u){var f=$v(l,{},{x:-o/2,y:-o/2,width:o,height:o});f.setStyle(h.getItemStyle());var d=f.ensureState("emphasis");d.style=p.getItemStyle();var y=new Rs({style:{text:c[u],align:p.get("textAlign"),borderRadius:p.get("textBorderRadius"),padding:p.get("textPadding"),fill:null},ignore:!0});f.setTextContent(y),ty({el:f,componentModel:t,itemName:u,formatterParamsExtra:{title:c[u]}}),f.__title=c[u],f.on("mouseover",(function(){var e=p.getItemStyle(),r=a?null==t.get("right")&&"right"!==t.get("left")?"right":"left":null==t.get("bottom")&&"bottom"!==t.get("top")?"bottom":"top";y.setStyle({fill:p.get("textFill")||e.fill||e.stroke||"#000",backgroundColor:p.get("textBackgroundColor")}),f.setTextConfig({position:p.get("textPosition")||r}),y.ignore=!t.get("showTitle"),n.enterEmphasis(this)})).on("mouseout",(function(){"emphasis"!==r.get(["iconStatus",u])&&n.leaveEmphasis(this),y.hide()})),("emphasis"===r.get(["iconStatus",u])?wl:Sl)(f),i.add(f),f.on("click",v["bind"](s.onclick,s,e,n,u)),g[u]=f}))}},e.prototype.updateView=function(t,e,n,r){v["each"](this._features,(function(t){t instanceof xq&&t.updateView&&t.updateView(t.model,e,n,r)}))},e.prototype.remove=function(t,e){v["each"](this._features,(function(n){n instanceof xq&&n.remove&&n.remove(t,e)})),this.group.removeAll()},e.prototype.dispose=function(t,e){v["each"](this._features,(function(n){n instanceof xq&&n.dispose&&n.dispose(t,e)}))},e.type="toolbox",e}(Wd);function Tq(t){return 0===t.indexOf("my")}var kq=Iq,Dq=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.onclick=function(t,e){var n=this.model,r=n.get("name")||t.get("title.0.text")||"echarts",i="svg"===e.getZr().painter.getType(),o=i?"svg":n.get("type",!0)||"png",a=e.getConnectedDataURL({type:o,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),s=g["a"].browser;if(Object(v["isFunction"])(MouseEvent)&&(s.newEdge||!s.ie&&!s.edge)){var l=document.createElement("a");l.download=r+"."+o,l.target="_blank",l.href=a;var u=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});l.dispatchEvent(u)}else if(window.navigator.msSaveOrOpenBlob||i){var c=a.split(","),h=c[0].indexOf("base64")>-1,p=i?decodeURIComponent(c[1]):c[1];h&&(p=window.atob(p));var f=r+"."+o;if(window.navigator.msSaveOrOpenBlob){var d=p.length,y=new Uint8Array(d);while(d--)y[d]=p.charCodeAt(d);var m=new Blob([y]);window.navigator.msSaveOrOpenBlob(m,f)}else{var b=document.createElement("iframe");document.body.appendChild(b);var x=b.contentWindow,_=x.document;_.open("image/svg+xml","replace"),_.write(p),_.close(),x.focus(),_.execCommand("SaveAs",!0,f),document.body.removeChild(b)}}else{var w=n.get("lang"),S='',O=window.open();O.document.write(S),O.document.title=r}},e.getDefaultOption=function(t){var e={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:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])};return e},e}(xq),Lq=Dq,jq="__ec_magicType_stack__",Pq=[["line","bar"],["stack"]],Eq=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return v["each"](t.get("type"),(function(t){e[t]&&(n[t]=e[t])})),n},e.getDefaultOption=function(t){var e={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:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}};return e},e.prototype.onclick=function(t,e,n){var r=this.model,i=r.get(["seriesIndex",n]);if(Rq[n]){var o,a={series:[]},s=function(t){var e=t.subType,i=t.id,o=Rq[n](e,i,t,r);o&&(v["defaults"](o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim,c=u+"Axis",h=t.getReferringComponents(c,Yi).models[0],p=h.componentIndex;a[c]=a[c]||[];for(var f=0;f<=p;f++)a[c][p]=a[c][p]||{};a[c][p].boundaryGap="bar"===n}}};v["each"](Pq,(function(t){v["indexOf"](t,n)>=0&&v["each"](t,(function(t){r.setIconStatus(t,"normal")}))})),r.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==i?null:{seriesIndex:i}},s);var l=n;"stack"===n&&(o=v["merge"]({stack:r.option.title.tiled,tiled:r.option.title.stack},r.option.title),"emphasis"!==r.get(["iconStatus",n])&&(l="tiled")),e.dispatchAction({type:"changeMagicType",currentType:l,newOption:a,newTitle:o,featureName:"magicType"})}},e}(xq),Rq={line:function(t,e,n,r){if("bar"===t)return v["merge"]({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},r.get(["option","line"])||{},!0)},bar:function(t,e,n,r){if("line"===t)return v["merge"]({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},r.get(["option","bar"])||{},!0)},stack:function(t,e,n,r){var i=n.get("stack")===jq;if("line"===t||"bar"===t)return r.setIconStatus("stack",i?"normal":"emphasis"),v["merge"]({id:e,stack:i?"":jq},r.get(["option","stack"])||{},!0)}};Kx({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)}));var Nq=Eq,zq=new Array(60).join("-"),Bq="\t";function Vq(t){var e={},n=[],r=[];return t.eachRawSeries((function(t){var i=t.coordinateSystem;if(!i||"cartesian2d"!==i.type&&"polar"!==i.type)n.push(t);else{var o=i.getBaseAxis();if("category"===o.type){var a=o.dim+"_"+o.index;e[a]||(e[a]={categoryAxis:o,valueAxis:i.getOtherAxis(o),series:[]},r.push({axisDim:o.dim,axisIndex:o.index})),e[a].series.push(t)}else n.push(t)}})),{seriesGroupByCategoryAxis:e,other:n,meta:r}}function Fq(t){var e=[];return v["each"](t,(function(t,n){var r=t.categoryAxis,i=t.valueAxis,o=i.dim,a=[" "].concat(v["map"](t.series,(function(t){return t.name}))),s=[r.model.getCategories()];v["each"](t.series,(function(t){var e=t.getRawData();s.push(t.getRawData().mapArray(e.mapDimension(o),(function(t){return t})))}));for(var l=[a.join(Bq)],u=0;u=0)return!0}var Yq=new RegExp("["+Bq+"]+","g");function qq(t){for(var e=t.split(/\n+/g),n=Wq(e.shift()).split(Yq),r=[],i=v["map"](n,(function(t){return{name:t,data:[]}})),o=0;o=0;i--){var o=n[i];if(o[r])break}if(i<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:r})[0];if(a){var s=a.getPercentRange();n[0][r]={dataZoomId:r,start:s[0],end:s[1]}}}})),n.push(e)}function nX(t){var e=oX(t),n=e[e.length-1];e.length>1&&e.pop();var r={};return Qq(n,(function(t,n){for(var i=e.length-1;i>=0;i--)if(t=e[i][n],t){r[n]=t;break}})),r}function rX(t){tX(t).snapshots=null}function iX(t){return oX(t).length}function oX(t){var e=tX(t);return e.snapshots||(e.snapshots=[{}]),e.snapshots}var aX=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.onclick=function(t,e){rX(t),e.dispatchAction({type:"restore",from:this.uid})},e.getDefaultOption=function(t){var e={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:t.getLocaleModel().get(["toolbox","restore","title"])};return e},e}(xq);Kx({type:"restore",event:"restore",update:"prepareAndUpdate"},(function(t,e){e.resetOption("recreate")}));var sX=aX,lX=["grid","xAxis","yAxis","geo","graph","polar","radiusAxis","angleAxis","bmap"],uX=function(){function t(t,e,n){var r=this;this._targetInfoList=[];var i=hX(e,t);Object(v["each"])(pX,(function(t,e){(!n||!n.include||Object(v["indexOf"])(n.include,e)>=0)&&t(i,r._targetInfoList)}))}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var r=gX[t.brushType](0,n,e);t.__rangeOffset={offset:yX[t.brushType](r.values,t.range,[1,1]),xyMinMax:r.xyMinMax}}})),t},t.prototype.matchOutputRanges=function(t,e,n){Object(v["each"])(t,(function(t){var r=this.findTargetInfo(t,e);r&&!0!==r&&Object(v["each"])(r.coordSyses,(function(r){var i=gX[t.brushType](1,r,t.range,!0);n(t,i.values,r,e)}))}),this)},t.prototype.setInputRanges=function(t,e){Object(v["each"])(t,(function(t){var n=this.findTargetInfo(t,e);if(t.range=t.range||[],n&&!0!==n){t.panelId=n.panelId;var r=gX[t.brushType](0,n.coordSys,t.coordRange),i=t.__rangeOffset;t.range=i?yX[t.brushType](r.values,i.offset,bX(r.xyMinMax,i.xyMinMax)):r.values}}),this)},t.prototype.makePanelOpts=function(t,e){return Object(v["map"])(this._targetInfoList,(function(n){var r=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:Zz(r),isTargetByCursor:Jz(r,t,n.coordSysModel),getLinearBrushOtherExtent:Kz(r)}}))},t.prototype.controlSeries=function(t,e,n){var r=this.findTargetInfo(t,n);return!0===r||r&&Object(v["indexOf"])(r.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,r=hX(e,t),i=0;it[1]&&t.reverse(),t}function hX(t,e){return Wi(t,e,{includeMainTypes:lX})}var pX={grid:function(t,e){var n=t.xAxisModels,r=t.yAxisModels,i=t.gridModels,o=Object(v["createHashMap"])(),a={},s={};(n||r||i)&&(Object(v["each"])(n,(function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0})),Object(v["each"])(r,(function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0})),Object(v["each"])(i,(function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0})),o.each((function(t){var i=t.coordinateSystem,o=[];Object(v["each"])(i.getCartesians(),(function(t,e){(Object(v["indexOf"])(n,t.getAxis("x").model)>=0||Object(v["indexOf"])(r,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:dX.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})})))},geo:function(t,e){Object(v["each"])(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:dX.geo})}))}},fX=[function(t,e){var n=t.xAxisModel,r=t.yAxisModel,i=t.gridModel;return!i&&n&&(i=n.axis.grid.model),!i&&r&&(i=r.axis.grid.model),i&&i===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],dX={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Fv(t)),e}},gX={lineX:Object(v["curry"])(vX,0),lineY:Object(v["curry"])(vX,1),rect:function(t,e,n,r){var i=t?e.pointToData([n[0][0],n[1][0]],r):e.dataToPoint([n[0][0],n[1][0]],r),o=t?e.pointToData([n[0][1],n[1][1]],r):e.dataToPoint([n[0][1],n[1][1]],r),a=[cX([i[0],o[0]]),cX([i[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,r){var i=[[1/0,-1/0],[1/0,-1/0]],o=Object(v["map"])(n,(function(n){var o=t?e.pointToData(n,r):e.dataToPoint(n,r);return i[0][0]=Math.min(i[0][0],o[0]),i[1][0]=Math.min(i[1][0],o[1]),i[0][1]=Math.max(i[0][1],o[0]),i[1][1]=Math.max(i[1][1],o[1]),o}));return{values:o,xyMinMax:i}}};function vX(t,e,n,r){var i=n.getAxis(["x","y"][t]),o=cX(Object(v["map"])([0,1],(function(t){return e?i.coordToData(i.toLocalCoord(r[t]),!0):i.toGlobalCoord(i.dataToCoord(r[t]))}))),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var yX={lineX:Object(v["curry"])(mX,0),lineY:Object(v["curry"])(mX,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return Object(v["map"])(t,(function(t,r){return[t[0]-n[0]*e[r][0],t[1]-n[1]*e[r][1]]}))}};function mX(t,e,n,r){return[e[0]-r[t]*n[0],e[1]-r[t]*n[1]]}function bX(t,e){var n=xX(t),r=xX(e),i=[n[0]/r[0],n[1]/r[1]];return isNaN(i[0])&&(i[0]=1),isNaN(i[1])&&(i[1]=1),i}function xX(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var _X=uX,wX=v["each"],SX=Ni("toolbox-dataZoom_"),OX=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.render=function(t,e,n,r){this._brushController||(this._brushController=new $z(n.getZr()),this._brushController.on("brush",v["bind"](this._onBrush,this)).mount()),IX(t,e,this,r,n),CX(t,e)},e.prototype.onclick=function(t,e,n){MX[n].call(this)},e.prototype.remove=function(t,e){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},r=this.ecModel;this._brushController.updateCovers([]);var i=new _X(AX(this.model),r,{include:["grid"]});i.matchOutputRanges(e,r,(function(t,e,n){if("cartesian2d"===n.type){var r=t.brushType;"rect"===r?(o("x",n,e[0]),o("y",n,e[1])):o({lineX:"x",lineY:"y"}[r],n,e)}})),eX(r,n),this._dispatchZoomAction(n)}function o(t,e,i){var o=e.getAxis(t),s=o.model,l=a(t,s,r),u=l.findRepresentativeAxisProxy(s).getMinMaxSpan();null==u.minValueSpan&&null==u.maxValueSpan||(i=PN(0,i.slice(),o.scale.getExtent(),0,u.minValueSpan,u.maxValueSpan)),l&&(n[l.id]={dataZoomId:l.id,startValue:i[0],endValue:i[1]})}function a(t,e,n){var r;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){var i=n.getAxisModel(t,e.componentIndex);i&&(r=n)})),r}},e.prototype._dispatchZoomAction=function(t){var e=[];wX(t,(function(t,n){e.push(v["clone"](t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){var e={show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}};return e},e}(xq),MX={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(nX(this.ecModel))}};function AX(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}function CX(t,e){t.setIconStatus("back",iX(e)>1?"emphasis":"normal")}function IX(t,e,n,r,i){var o=n._isZoomActive;r&&"takeGlobalCursor"===r.type&&(o="dataZoomSelect"===r.key&&r.dataZoomSelectActive),n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new _X(AX(t),e,{include:["grid"]}),s=a.makePanelOpts(i,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}));n._brushController.setPanels(s).enableBrush(!(!o||!s.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}Nh("dataZoom",(function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var r=e.getModel(n),i=[],o=AX(r),a=Wi(t,o);return wX(a.xAxisModels,(function(t){return s(t,"xAxis","xAxisIndex")})),wX(a.yAxisModels,(function(t){return s(t,"yAxis","yAxisIndex")})),i}function s(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:r.get("filterMode",!0)||"filter",id:SX+e+o};a[n]=o,i.push(a)}}));var TX=OX;function kX(t){t.registerComponentModel(Mq),t.registerComponentView(kq),wq("saveAsImage",Lq),wq("magicType",Nq),wq("dataView",Jq),wq("dataZoom",TX),wq("restore",sX),p_(bq)}var DX=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e}(dh),LX=DX;function jX(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function PX(t){if(g["a"].domSupported)for(var e=document.documentElement.style,n=0,r=t.length;n-1?(l+="top:50%",u+="translateY(-50%) rotate("+(o="left"===a?-225:-45)+"deg)"):(l+="left:50%",u+="translateX(-50%) rotate("+(o="top"===a?225:45)+"deg)");var c=o*Math.PI/180,h=s+i,p=h*Math.abs(Math.cos(c))+h*Math.abs(Math.sin(c)),f=Math.round(100*((p-Math.SQRT2*i)/2+Math.SQRT2*i-(p-h)/2))/100;l+=";"+a+":-"+f+"px";var d=e+" solid "+i+"px;",g=["position:absolute;width:"+s+"px;height:"+s+"px;",l+";"+u+";","border-bottom:"+d,"border-right:"+d,"background-color:"+r+";"];return'
'}function WX(t,e){var n="cubic-bezier(0.23,1,0.32,1)",r=" "+t/2+"s "+n,i="opacity"+r+",visibility"+r;return e||(r=" "+t+"s "+n,i+=g["a"].transformSupported?","+VX+r:",left"+r+",top"+r),BX+":"+i}function UX(t,e,n){var r=t.toFixed(0)+"px",i=e.toFixed(0)+"px";if(!g["a"].transformSupported)return n?"top:"+i+";left:"+r+";":[["top",i],["left",r]];var o=g["a"].transform3dSupported,a="translate"+(o?"3d":"")+"("+r+","+i+(o?",0":"")+")";return n?"top:0;left:0;"+VX+":"+a+";":[["top",0],["left",0],[EX,a]]}function YX(t){var e=[],n=t.get("fontSize"),r=t.getTextColor();r&&e.push("color:"+r),e.push("font:"+t.getFont()),n&&e.push("line-height:"+Math.round(3*n/2)+"px");var i=t.get("textShadowColor"),o=t.get("textShadowBlur")||0,a=t.get("textShadowOffsetX")||0,s=t.get("textShadowOffsetY")||0;return i&&o&&e.push("text-shadow:"+a+"px "+s+"px "+o+"px "+i),Object(v["each"])(["decoration","align"],(function(n){var r=t.get(n);r&&e.push("text-"+n+":"+r)})),e.join(";")}function qX(t,e,n){var r=[],i=t.get("transitionDuration"),o=t.get("backgroundColor"),a=t.get("shadowBlur"),s=t.get("shadowColor"),l=t.get("shadowOffsetX"),u=t.get("shadowOffsetY"),c=t.getModel("textStyle"),h=Ad(t,"html"),p=l+"px "+u+"px "+a+"px "+s;return r.push("box-shadow:"+p),e&&i&&r.push(WX(i,n)),o&&r.push("background-color:"+o),Object(v["each"])(["width","color","radius"],(function(e){var n="border-"+e,i=Nc(n),o=t.get(i);null!=o&&r.push(n+":"+o+("color"===e?"":"px"))})),r.push(YX(c)),null!=h&&r.push("padding:"+zc(h).join("px ")+"px"),r.join(";")+";"}function XX(t,e,n,r,i){var o=e&&e.painter;if(n){var a=o&&o.getViewportRoot();a&&J(t,a,document.body,r,i)}else{t[0]=r,t[1]=i;var s=o&&o.getViewportRootOffset();s&&(t[0]+=s.offsetLeft,t[1]+=s.offsetTop)}t[2]=t[0]/e.getWidth(),t[3]=t[1]/e.getHeight()}var $X=function(){function t(t,e,n){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._firstShow=!0,this._longHide=!0,g["a"].wxa)return null;var r=document.createElement("div");r.domBelongToZr=!0,this.el=r;var i=this._zr=e.getZr(),o=this._appendToBody=n&&n.appendToBody;XX(this._styleCoord,i,o,e.getWidth()/2,e.getHeight()/2),o?document.body.appendChild(r):t.appendChild(r),this._container=t;var a=this;r.onmouseenter=function(){a._enterable&&(clearTimeout(a._hideTimeout),a._show=!0),a._inContent=!0},r.onmousemove=function(t){if(t=t||window.event,!a._enterable){var e=i.handler,n=i.painter.getViewportRoot();ut(n,t,!0),e.dispatch("mousemove",t)}},r.onmouseleave=function(){a._inContent=!1,a._enterable&&a._show&&a.hideLater(a._hideDelay)}}return t.prototype.update=function(t){var e=this._container,n=zX(e,"position"),r=e.style;"absolute"!==r.position&&"absolute"!==n&&(r.position="relative");var i=t.get("alwaysShowContent");i&&this._moveIfResized(),this.el.className=t.get("className")||""},t.prototype.show=function(t,e){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var n=this.el,r=n.style,i=this._styleCoord;n.innerHTML?r.cssText=FX+qX(t,!this._firstShow,this._longHide)+UX(i[0],i[1],!0)+"border-color:"+Zc(e)+";"+(t.get("extraCssText")||"")+";pointer-events:"+(this._enterable?"auto":"none"):r.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},t.prototype.setContent=function(t,e,n,r,i){var o=this.el;if(null!=t){var a="";if(Object(v["isString"])(i)&&"item"===n.get("trigger")&&!jX(n)&&(a=GX(n,r,i)),Object(v["isString"])(t))o.innerHTML=t+a;else if(t){o.innerHTML="",Object(v["isArray"])(t)||(t=[t]);for(var s=0;s=0?this._tryShow(n,r):"leave"===t&&this._hide(r))}),this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api,r=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==r&&"click"!==r){var i=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&i.manuallyShowTip(t,e,n,{x:i._lastX,y:i._lastY,dataByCoordSys:i._lastDataByCoordSys})}))}},e.prototype.manuallyShowTip=function(t,e,n,r){if(r.from!==this.uid&&!g["a"].node&&n.getDom()){var i=o$(r,n);this._ticket="";var o=r.dataByCoordSys,a=c$(r,e,n);if(a){var s=a.el.getBoundingRect().clone();s.applyTransform(a.el.transform),this._tryShow({offsetX:s.x+s.width/2,offsetY:s.y+s.height/2,target:a.el,position:r.position,positionDefault:"bottom"},i)}else if(r.tooltip&&null!=r.x&&null!=r.y){var l=n$;l.x=r.x,l.y=r.y,l.update(),Ns(l).tooltipConfig={name:null,option:r.tooltip},this._tryShow({offsetX:r.x,offsetY:r.y,target:l},i)}else if(o)this._tryShow({offsetX:r.x,offsetY:r.y,position:r.position,dataByCoordSys:o,tooltipOption:r.tooltipOption},i);else if(null!=r.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,r))return;var u=VW(r,e),c=u.point[0],h=u.point[1];null!=c&&null!=h&&this._tryShow({offsetX:c,offsetY:h,target:u.el,position:r.position,positionDefault:"bottom"},i)}else null!=r.x&&null!=r.y&&(n.dispatchAction({type:"updateAxisPointer",x:r.x,y:r.y}),this._tryShow({offsetX:r.x,offsetY:r.y,position:r.position,target:n.getZr().findHover(r.x,r.y).target},i))}},e.prototype.manuallyHideTip=function(t,e,n,r){var i=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&i.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,r.from!==this.uid&&this._hide(o$(r,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,r){var i=r.seriesIndex,o=r.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=i&&null!=o&&null!=a){var s=e.getSeriesByIndex(i);if(s){var l=s.getData(),u=i$([l.getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel);if("axis"===u.get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:i,dataIndex:o,position:r.position}),!0}}},e.prototype._tryShow=function(t,e){var n=t.target,r=this._tooltipModel;if(r){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var o,a;this._lastDataByCoordSys=null,cm(n,(function(t){return null!=Ns(t).dataIndex?(o=t,!0):null!=Ns(t).tooltipConfig?(a=t,!0):void 0}),!0),o?this._showSeriesItemTooltip(t,o,e):a?this._showComponentItemTooltip(t,a,e):this._hide(e)}else this._lastDataByCoordSys=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=Object(v["bind"])(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,r=this._tooltipModel,i=[e.offsetX,e.offsetY],o=i$([e.tooltipOption],r),a=this._renderMode,s=[],l=pd("section",{blocks:[],noHeader:!0}),u=[],c=new Cd;Object(v["each"])(t,(function(t){Object(v["each"])(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),i=t.value;if(e&&null!=i){var o=vW(i,e.axis,n,t.seriesDataIndices,t.valueLabelOpt),h=pd("section",{header:o,noHeader:!Object(v["trim"])(o),sortBlocks:!0,blocks:[]});l.blocks.push(h),Object(v["each"])(t.seriesDataIndices,(function(l){var p=n.getSeriesByIndex(l.seriesIndex),f=l.dataIndexInside,d=p.getDataParams(f);if(!(d.dataIndex<0)){d.axisDim=t.axisDim,d.axisIndex=t.axisIndex,d.axisType=t.axisType,d.axisId=t.axisId,d.axisValue=TS(e.axis,{value:i}),d.axisValueLabel=o,d.marker=c.makeTooltipMarker("item",Zc(d.color),a);var g=wf(p.formatTooltip(f,!0,null)),y=g.frag;if(y){var m=i$([p],r).get("valueFormatter");h.blocks.push(m?Object(v["extend"])({valueFormatter:m},y):y)}g.text&&u.push(g.text),s.push(d)}}))}}))})),l.blocks.reverse(),u.reverse();var h=e.position,p=o.get("order"),f=md(l,c,a,p,n.get("useUTC"),o.get("textStyle"));f&&u.unshift(f);var d="richText"===a?"\n\n":"
",g=u.join(d);this._showOrMove(o,(function(){this._updateContentNotChangedOnAxis(t,s)?this._updatePosition(o,h,i[0],i[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",i[0],i[1],h,null,c)}))},e.prototype._showSeriesItemTooltip=function(t,e,n){var r=this._ecModel,i=Ns(e),o=i.seriesIndex,a=r.getSeriesByIndex(o),s=i.dataModel||a,l=i.dataIndex,u=i.dataType,c=s.getData(u),h=this._renderMode,p=t.positionDefault,f=i$([c.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,p?{position:p}:null),d=f.get("trigger");if(null==d||"item"===d){var g=s.getDataParams(l,u),y=new Cd;g.marker=y.makeTooltipMarker("item",Zc(g.color),h);var m=wf(s.formatTooltip(l,!1,u)),b=f.get("order"),x=f.get("valueFormatter"),_=m.frag,w=_?md(x?Object(v["extend"])({valueFormatter:x},_):_,y,h,b,r.get("useUTC"),f.get("textStyle")):m.text,S="item_"+s.name+"_"+l;this._showOrMove(f,(function(){this._showTooltipContent(f,w,g,S,t.offsetX,t.offsetY,t.position,t.target,y)})),n({type:"showTip",dataIndexInside:l,dataIndex:c.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var r=Ns(e),i=r.tooltipConfig,o=i.option||{};if(Object(v["isString"])(o)){var a=o;o={content:a,formatter:a}}var s=[o],l=this._ecModel.getComponent(r.componentMainType,r.componentIndex);l&&s.push(l),s.push({formatter:o.content});var u=t.positionDefault,c=i$(s,this._tooltipModel,u?{position:u}:null),h=c.get("content"),p=Math.random()+"",f=new Cd;this._showOrMove(c,(function(){var n=Object(v["clone"])(c.get("formatterParams")||{});this._showTooltipContent(c,h,n,p,t.offsetX,t.offsetY,t.position,e,f)})),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,r,i,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent;u.setEnterable(t.get("enterable"));var c=t.get("formatter");a=a||t.get("position");var h=e,p=this._getNearestPoint([i,o],n,t.get("trigger"),t.get("borderColor")),f=p.color;if(c)if(Object(v["isString"])(c)){var d=t.ecModel.get("useUTC"),g=Object(v["isArray"])(n)?n[0]:n,y=g&&g.axisType&&g.axisType.indexOf("time")>=0;h=c,y&&(h=yc(g.axisValue,h,d)),h=Uc(h,n,!0)}else if(Object(v["isFunction"])(c)){var m=Object(v["bind"])((function(e,r){e===this._ticket&&(u.setContent(r,l,t,f,a),this._updatePosition(t,a,i,o,u,n,s))}),this);this._ticket=r,h=c(n,r,m)}else h=c;u.setContent(h,l,t,f,a),u.show(t,f),this._updatePosition(t,a,i,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,r){return"axis"===n||Object(v["isArray"])(e)?{color:r||("html"===this._renderMode?"#fff":"none")}:Object(v["isArray"])(e)?void 0:{color:r||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,r,i,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=i.getSize(),c=t.get("align"),h=t.get("verticalAlign"),p=a&&a.getBoundingRect().clone();if(a&&p.applyTransform(a.transform),Object(v["isFunction"])(e)&&(e=e([n,r],o,i.el,p,{viewSize:[s,l],contentSize:u.slice()})),Object(v["isArray"])(e))n=Xr(e[0],s),r=Xr(e[1],l);else if(Object(v["isObject"])(e)){var f=e;f.width=u[0],f.height=u[1];var d=ih(f,{width:s,height:l});n=d.x,r=d.y,c=null,h=null}else if(Object(v["isString"])(e)&&a){var g=l$(e,p,u,t.get("borderWidth"));n=g[0],r=g[1]}else{g=a$(n,r,i,s,l,c?null:20,h?null:20);n=g[0],r=g[1]}if(c&&(n-=u$(c)?u[0]/2:"right"===c?u[0]:0),h&&(r-=u$(h)?u[1]/2:"bottom"===h?u[1]:0),jX(t)){g=s$(n,r,i,s,l);n=g[0],r=g[1]}i.moveTo(n,r)},e.prototype._updateContentNotChangedOnAxis=function(t,e){var n=this._lastDataByCoordSys,r=this._cbParamsList,i=!!n&&n.length===t.length;return i&&Object(v["each"])(n,(function(n,o){var a=n.dataByAxis||[],s=t[o]||{},l=s.dataByAxis||[];i=i&&a.length===l.length,i&&Object(v["each"])(a,(function(t,n){var o=l[n]||{},a=t.seriesDataIndices||[],s=o.seriesDataIndices||[];i=i&&t.value===o.value&&t.axisType===o.axisType&&t.axisId===o.axisId&&a.length===s.length,i&&Object(v["each"])(a,(function(t,e){var n=s[e];i=i&&t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})),r&&Object(v["each"])(t.seriesDataIndices,(function(t){var n=t.seriesIndex,o=e[n],a=r[n];o&&a&&a.data!==o.data&&(i=!1)}))}))})),this._lastDataByCoordSys=t,this._cbParamsList=e,!!i},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){!g["a"].node&&e.getDom()&&(yy(this,"_updatePosition"),this._tooltipContent.dispose(),NW("itemTooltip",e))},e.type="tooltip",e}(Wd);function i$(t,e,n){var r,i=e.ecModel;n?(r=new Bu(n,i,i),r=new Bu(e.option,r,i)):r=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof Bu&&(a=a.get("tooltip",!0)),Object(v["isString"])(a)&&(a={formatter:a}),a&&(r=new Bu(a,r,i)))}return r}function o$(t,e){return t.dispatchAction||Object(v["bind"])(e.dispatchAction,e)}function a$(t,e,n,r,i,o,a){var s=n.getSize(),l=s[0],u=s[1];return null!=o&&(t+l+o+2>r?t-=l+o:t+=o),null!=a&&(e+u+a>i?e-=u+a:e+=a),[t,e]}function s$(t,e,n,r,i){var o=n.getSize(),a=o[0],s=o[1];return t=Math.min(t+a,r)-a,e=Math.min(e+s,i)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function l$(t,e,n,r){var i=n[0],o=n[1],a=Math.ceil(Math.SQRT2*r)+8,s=0,l=0,u=e.width,c=e.height;switch(t){case"inside":s=e.x+u/2-i/2,l=e.y+c/2-o/2;break;case"top":s=e.x+u/2-i/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-i/2,l=e.y+c+a;break;case"left":s=e.x-i-a,l=e.y+c/2-o/2;break;case"right":s=e.x+u+a,l=e.y+c/2-o/2}return[s,l]}function u$(t){return"center"===t||"middle"===t}function c$(t,e,n){var r=Ui(t).queryOptionMap,i=r.keys()[0];if(i&&"series"!==i){var o=Xi(e,i,r.get(i),{useDefault:!1,enableAll:!1,enableNone:!1}),a=o.models[0];if(a){var s,l=n.getViewOfComponentModel(a);return l.group.traverse((function(e){var n=Ns(e).tooltipConfig;if(n&&n.name===t.name)return s=e,!0})),s?{componentMainType:i,componentIndex:a.componentIndex,el:s}:void 0}}}var h$=r$;function p$(t){p_(QW),t.registerComponentModel(LX),t.registerComponentView(h$),t.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},v["noop"]),t.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},v["noop"])}var f$=["rect","polygon","keep","clear"];function d$(t,e){var n=xi(t?t.brush:[]);if(n.length){var r=[];v["each"](n,(function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(r=r.concat(e))}));var i=t&&t.toolbox;v["isArray"](i)&&(i=i[0]),i||(i={feature:{}},t.toolbox=[i]);var o=i.feature||(i.feature={}),a=o.brush||(o.brush={}),s=a.type||(a.type=[]);s.push.apply(s,r),g$(s),e&&!s.length&&s.push.apply(s,f$)}}function g$(t){var e={};v["each"](t,(function(t){e[t]=1})),t.length=0,v["each"](e,(function(e,n){t.push(n)}))}var v$=v["each"];function y$(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function m$(t,e,n){var r={};return v$(e,(function(e){var o=r[e]=i();v$(t[e],(function(t,r){if(GP.isValidType(r)){var i={type:r,visual:t};n&&n(i,e),o[r]=new GP(i),"opacity"===r&&(i=v["clone"](i),i.type="colorAlpha",o.__hidden.__alphaForOpacity=new GP(i))}}))})),r;function i(){var t=function(){};t.prototype.__hidden=t.prototype;var e=new t;return e}}function b$(t,e,n){var r;v["each"](n,(function(t){e.hasOwnProperty(t)&&y$(e[t])&&(r=!0)})),r&&v["each"](n,(function(n){e.hasOwnProperty(n)&&y$(e[n])?t[n]=v["clone"](e[n]):delete t[n]}))}function x$(t,e,n,r,i,o){var a,s={};function l(t){return im(n,a,t)}function u(t,e){am(n,a,t,e)}function c(t,c){a=null==o?t:c;var h=n.getRawDataItem(a);if(!h||!1!==h.visualMap)for(var p=r.call(i,t),f=e[p],d=s[p],g=0,v=d.length;ge[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&R$(e)}};function R$(t){return new or(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var N$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new $z(e.getZr())).on("brush",v["bind"](this._onBrush,this)).mount()},e.prototype.render=function(t,e,n,r){this.model=t,this._updateController(t,e,n,r)},e.prototype.updateTransform=function(t,e,n,r){T$(e),this._updateController(t,e,n,r)},e.prototype.updateVisual=function(t,e,n,r){this.updateTransform(t,e,n,r)},e.prototype.updateView=function(t,e,n,r){this._updateController(t,e,n,r)},e.prototype._updateController=function(t,e,n,r){(!r||r.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())},e.prototype.dispose=function(){this._brushController.dispose()},e.prototype._onBrush=function(t){var e=this.model.id,n=this.model.brushTargetManager.setOutputRanges(t.areas,this.ecModel);(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:e,areas:v["clone"](n),$from:e}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:e,areas:v["clone"](n),$from:e})},e.type="brush",e}(Wd),z$=N$,B$="#ddd",V$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.areas=[],n.brushOption={},n}return d(e,t),e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&b$(n,t,["inBrush","outOfBrush"]);var r=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:B$},r.hasOwnProperty("liftZ")||(r.liftZ=5)},e.prototype.setAreas=function(t){t&&(this.areas=v["map"](t,(function(t){return F$(this.option,t)}),this))},e.prototype.setBrushOption=function(t){this.brushOption=F$(this.option,t),this.brushType=this.brushOption.brushType},e.type="brush",e.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],e.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(210,219,238,0.3)",borderColor:"#D2DBEE"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},e}(dh);function F$(t,e){return v["merge"]({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Bu(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}var H$=V$,G$=["rect","polygon","lineX","lineY","keep","clear"],W$=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d(e,t),e.prototype.render=function(t,e,n){var r,i,o;e.eachComponent({mainType:"brush"},(function(t){r=t.brushType,i=t.brushOption.brushMode||"single",o=o||!!t.areas.length})),this._brushType=r,this._brushMode=i,v["each"](t.get("type",!0),(function(e){t.setIconStatus(e,("keep"===e?"multiple"===i:"clear"===e?o:e===r)?"emphasis":"normal")}))},e.prototype.updateView=function(t,e,n){this.render(t,e,n)},e.prototype.getIcons=function(){var t=this.model,e=t.get("icon",!0),n={};return v["each"](t.get("type",!0),(function(t){e[t]&&(n[t]=e[t])})),n},e.prototype.onclick=function(t,e,n){var r=this._brushType,i=this._brushMode;"clear"===n?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===n?r:r!==n&&n,brushMode:"keep"===n?"multiple"===i?"single":"multiple":i}})},e.getDefaultOption=function(t){var e={show:!0,type:G$.slice(),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:t.getLocaleModel().get(["toolbox","brush","title"])};return e},e}(xq),U$=W$;function Y$(t){t.registerComponentView(z$),t.registerComponentModel(H$),t.registerPreprocessor(d$),t.registerVisual(t.PRIORITY.VISUAL.BRUSH,k$),t.registerAction({type:"brush",event:"brush",update:"updateVisual"},(function(t,e){e.eachComponent({mainType:"brush",query:t},(function(e){e.setAreas(t.areas)}))})),t.registerAction({type:"brushSelect",event:"brushSelected",update:"none"},v["noop"]),t.registerAction({type:"brushEnd",event:"brushEnd",update:"none"},v["noop"]),wq("brush",U$)}var q$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return d(e,t),e.type="title",e.defaultOption={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:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e}(dh),X$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var r=this.group,i=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=v["retrieve2"](t.get("textBaseline"),t.get("textVerticalAlign")),l=new Rs({style:gu(i,{text:t.get("text"),fill:i.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),c=t.get("subtext"),h=new Rs({style:gu(o,{text:c,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),p=t.get("link"),f=t.get("sublink"),d=t.get("triggerEvent",!0);l.silent=!p&&!d,h.silent=!f&&!d,p&&l.on("click",(function(){Kc(p,"_"+t.get("target"))})),f&&h.on("click",(function(){Kc(f,"_"+t.get("subtarget"))})),Ns(l).eventData=Ns(h).eventData=d?{componentType:"title",componentIndex:t.componentIndex}:null,r.add(l),c&&r.add(h);var g=r.getBoundingRect(),y=t.getBoxLayoutParams();y.width=g.width,y.height=g.height;var m=ih(y,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||(a=t.get("left")||t.get("right"),"middle"===a&&(a="center"),"right"===a?m.x+=m.width:"center"===a&&(m.x+=m.width/2)),s||(s=t.get("top")||t.get("bottom"),"center"===s&&(s="middle"),"bottom"===s?m.y+=m.height:"middle"===s&&(m.y+=m.height/2),s=s||"top"),r.x=m.x,r.y=m.y,r.markRedraw();var b={align:a,verticalAlign:s};l.setStyle(b),h.setStyle(b),g=r.getBoundingRect();var x=m.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var w=new ms({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});r.add(w)}},e.type="title",e}(Wd);function $$(t){t.registerComponentModel(q$),t.registerComponentView(X$)}var Z$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode="box",n}return d(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n),this._initData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this._initData()},e.prototype.setCurrentIndex=function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},e.prototype.getCurrentIndex=function(){return this.option.currentIndex},e.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},e.prototype.setPlayState=function(t){this.option.autoPlay=!!t},e.prototype.getPlayState=function(){return!!this.option.autoPlay},e.prototype._initData=function(){var t,e=this.option,n=e.data||[],r=e.axisType,i=this._names=[];"category"===r?(t=[],Object(v["each"])(n,(function(e,n){var r,o=Pi(Si(e),"");Object(v["isObject"])(e)?(r=Object(v["clone"])(e),r.value=n):r=n,t.push(r),i.push(o)}))):t=n;var o={category:"ordinal",time:"time",value:"number"}[r]||"number",a=this._data=new Y_([{name:"value",type:o}],this);a.initData(t,i)},e.prototype.getData=function(){return this._data},e.prototype.getCategories=function(){if("category"===this.get("axisType"))return this._names.slice()},e.type="timeline",e.defaultOption={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:[]},e}(dh),K$=Z$,J$=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="timeline.slider",e.defaultOption=Wu(K$.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:"#DAE1F5"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#A4B1D7"},itemStyle:{color:"#A4B1D7",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:15,color:"#316bf3",borderColor:"#fff",borderWidth:2,shadowBlur:2,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0, 0, 0, 0.3)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,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:"M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z",prevIcon:"M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z",prevBtnSize:18,nextBtnSize:18,color:"#A4B1D7",borderColor:"#A4B1D7",borderWidth:1},emphasis:{label:{show:!0,color:"#6f778d"},itemStyle:{color:"#316BF3"},controlStyle:{color:"#316BF3",borderColor:"#316BF3",borderWidth:2}},progress:{lineStyle:{color:"#316BF3"},itemStyle:{color:"#316BF3"},label:{color:"#6f778d"}},data:[]}),e}(K$);Object(v["mixin"])(J$,_f.prototype);var Q$=J$,tZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="timeline",e}(Wd),eZ=tZ,nZ=function(t){function e(e,n,r,i){var o=t.call(this,e,n,r)||this;return o.type=i||"value",o}return d(e,t),e.prototype.getLabelModel=function(){return this.model.getModel("label")},e.prototype.isHorizontal=function(){return"horizontal"===this.model.get("orient")},e}(SO),rZ=nZ,iZ=Math.PI,oZ=Hi(),aZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(t,e){this.api=e},e.prototype.render=function(t,e,n){if(this.model=t,this.api=n,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var r=this._layout(t,n),i=this._createGroup("_mainGroup"),o=this._createGroup("_labelGroup"),a=this._axis=this._createAxis(r,t);t.formatTooltip=function(t){var e=a.scale.getLabel({value:t});return pd("nameValue",{noName:!0,value:e})},Object(v["each"])(["AxisLine","AxisTick","Control","CurrentPointer"],(function(e){this["_render"+e](r,i,a,t)}),this),this._renderAxisLabel(r,o,a,t),this._position(r,t)}this._doPlayStop(),this._updateTicksStatus()},e.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},e.prototype.dispose=function(){this._clearTimer()},e.prototype._layout=function(t,e){var n,r=t.get(["label","position"]),i=t.get("orient"),o=lZ(t,e);n=null==r||"auto"===r?"horizontal"===i?o.y+o.height/2=0||"+"===n?"left":"right"},c={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},h={horizontal:0,vertical:iZ/2},p="vertical"===i?o.height:o.width,f=t.getModel("controlStyle"),d=f.get("show",!0),g=d?f.get("itemSize"):0,y=d?f.get("itemGap"):0,m=g+y,b=t.get(["label","rotate"])||0;b=b*iZ/180;var x=f.get("position",!0),_=d&&f.get("showPlayBtn",!0),w=d&&f.get("showPrevBtn",!0),S=d&&f.get("showNextBtn",!0),O=0,M=p;"left"===x||"bottom"===x?(_&&(a=[0,0],O+=m),w&&(s=[O,0],O+=m),S&&(l=[M-g,0],M-=m)):(_&&(a=[M-g,0],M-=m),w&&(s=[0,0],O+=m),S&&(l=[M-g,0],M-=m));var A=[O,M];return t.get("inverse")&&A.reverse(),{viewRect:o,mainLength:p,orient:i,rotation:h[i],labelRotation:b,labelPosOpt:n,labelAlign:t.get(["label","align"])||u[i],labelBaseline:t.get(["label","verticalAlign"])||t.get(["label","baseline"])||c[i],playPosition:a,prevBtnPosition:s,nextBtnPosition:l,axisExtent:A,controlSize:g,controlGap:y}},e.prototype._position=function(t,e){var n=this._mainGroup,r=this._labelGroup,i=t.viewRect;if("vertical"===t.orient){var o=In(),a=i.x,s=i.y+i.height;Ln(o,o,[-a,-s]),jn(o,o,-iZ/2),Ln(o,o,[a,s]),i=i.clone(),i.applyTransform(o)}var l=y(i),u=y(n.getBoundingRect()),c=y(r.getBoundingRect()),h=[n.x,n.y],p=[r.x,r.y];p[0]=h[0]=l[0][0];var f=t.labelPosOpt;if(null==f||Object(v["isString"])(f)){var d="+"===f?0:1;m(h,u,l,1,d),m(p,c,l,1,1-d)}else{d=f>=0?0:1;m(h,u,l,1,d),p[1]=h[1]+f}function g(t){t.originX=l[0][0]-t.x,t.originY=l[1][0]-t.y}function y(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function m(t,e,n,r,i){t[r]+=n[r][i]-e[r][i]}n.setPosition(h),r.setPosition(p),n.rotation=r.rotation=t.rotation,g(n),g(r)},e.prototype._createAxis=function(t,e){var n=e.getData(),r=e.get("axisType"),i=sZ(e,r);i.getTicks=function(){return n.mapArray(["value"],(function(t){return{value:t}}))};var o=n.getDataExtent("value");i.setExtent(o[0],o[1]),i.calcNiceTicks();var a=new rZ("value",i,t.axisExtent,r);return a.model=e,a},e.prototype._createGroup=function(t){var e=this[t]=new Lr;return this.group.add(e),e},e.prototype._renderAxisLine=function(t,e,n,r){var i=n.getExtent();if(r.get(["lineStyle","show"])){var o=new Qg({shape:{x1:i[0],y1:0,x2:i[1],y2:0},style:Object(v["extend"])({lineCap:"round"},r.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});e.add(o);var a=this._progressLine=new Qg({shape:{x1:i[0],x2:this._currentPointer?this._currentPointer.x:i[0],y1:0,y2:0},style:Object(v["defaults"])({lineCap:"round",lineWidth:o.style.lineWidth},r.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});e.add(a)}},e.prototype._renderAxisTick=function(t,e,n,r){var i=this,o=r.getData(),a=n.scale.getTicks();this._tickSymbols=[],Object(v["each"])(a,(function(t){var a=n.dataToCoord(t.value),s=o.getItemModel(t.value),l=s.getModel("itemStyle"),u=s.getModel(["emphasis","itemStyle"]),c=s.getModel(["progress","itemStyle"]),h={x:a,y:0,onclick:Object(v["bind"])(i._changeTimeline,i,t.value)},p=cZ(s,l,e,h);p.ensureState("emphasis").style=u.getItemStyle(),p.ensureState("progress").style=c.getItemStyle(),Bl(p);var f=Ns(p);s.get("tooltip")?(f.dataIndex=t.value,f.dataModel=r):f.dataIndex=f.dataModel=null,i._tickSymbols.push(p)}))},e.prototype._renderAxisLabel=function(t,e,n,r){var i=this,o=n.getLabelModel();if(o.get("show")){var a=r.getData(),s=n.getViewLabels();this._tickLabels=[],Object(v["each"])(s,(function(r){var o=r.tickValue,s=a.getItemModel(o),l=s.getModel("label"),u=s.getModel(["emphasis","label"]),c=s.getModel(["progress","label"]),h=n.dataToCoord(r.tickValue),p=new Rs({x:h,y:0,rotation:t.labelRotation-t.rotation,onclick:Object(v["bind"])(i._changeTimeline,i,o),silent:!1,style:gu(l,{text:r.formattedLabel,align:t.labelAlign,verticalAlign:t.labelBaseline})});p.ensureState("emphasis").style=gu(u),p.ensureState("progress").style=gu(c),e.add(p),Bl(p),oZ(p).dataIndex=o,i._tickLabels.push(p)}))}},e.prototype._renderControl=function(t,e,n,r){var i=t.controlSize,o=t.rotation,a=r.getModel("controlStyle").getItemStyle(),s=r.getModel(["emphasis","controlStyle"]).getItemStyle(),l=r.getPlayState(),u=r.get("inverse",!0);function c(t,n,l,u){if(t){var c=gr(Object(v["retrieve2"])(r.get(["controlStyle",n+"BtnSize"]),i),i),h=[0,-c/2,c,c],p=uZ(r,n+"Icon",h,{x:t[0],y:t[1],originX:i/2,originY:0,rotation:u?-o:0,rectHover:!0,style:a,onclick:l});p.ensureState("emphasis").style=s,e.add(p),Bl(p)}}c(t.nextBtnPosition,"next",Object(v["bind"])(this._changeTimeline,this,u?"-":"+")),c(t.prevBtnPosition,"prev",Object(v["bind"])(this._changeTimeline,this,u?"+":"-")),c(t.playPosition,l?"stop":"play",Object(v["bind"])(this._handlePlayClick,this,!l),!0)},e.prototype._renderCurrentPointer=function(t,e,n,r){var i=r.getData(),o=r.getCurrentIndex(),a=i.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=Object(v["bind"])(s._handlePointerDrag,s),t.ondragend=Object(v["bind"])(s._handlePointerDragend,s),hZ(t,s._progressLine,o,n,r,!0)},onUpdate:function(t){hZ(t,s._progressLine,o,n,r)}};this._currentPointer=cZ(a,a,this._mainGroup,{},this._currentPointer,l)},e.prototype._handlePlayClick=function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},e.prototype._handlePointerDrag=function(t,e,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},e.prototype._handlePointerDragend=function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},e.prototype._pointerChangeTimeline=function(t,e){var n=this._toAxisCoord(t)[0],r=this._axis,i=Zr(r.getExtent().slice());n>i[1]&&(n=i[1]),n=0&&(a[o]=+a[o].toFixed(p)),[a,h]}var TZ={min:Object(v["curry"])(IZ,"min"),max:Object(v["curry"])(IZ,"max"),average:Object(v["curry"])(IZ,"average"),median:Object(v["curry"])(IZ,"median")};function kZ(t,e){var n=t.getData(),r=t.coordinateSystem;if(e&&!CZ(e)&&!Object(v["isArray"])(e.coord)&&r){var i=r.dimensions,o=DZ(e,n,r,t);if(e=Object(v["clone"])(e),e.type&&TZ[e.type]&&o.baseAxis&&o.valueAxis){var a=Object(v["indexOf"])(i,o.baseAxis.dim),s=Object(v["indexOf"])(i,o.valueAxis.dim),l=TZ[e.type](n,o.baseDataDim,o.valueDataDim,a,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],c=0;c<2;c++)TZ[u[c]]&&(u[c]=RZ(n,n.mapDimension(i[c]),u[c]));e.coord=u}}return e}function DZ(t,e,n,r){var i={};return null!=t.valueIndex||null!=t.valueDim?(i.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,i.valueAxis=n.getAxis(LZ(r,i.valueDataDim)),i.baseAxis=n.getOtherAxis(i.valueAxis),i.baseDataDim=e.mapDimension(i.baseAxis.dim)):(i.baseAxis=r.getBaseAxis(),i.valueAxis=n.getOtherAxis(i.baseAxis),i.baseDataDim=e.mapDimension(i.baseAxis.dim),i.valueDataDim=e.mapDimension(i.valueAxis.dim)),i}function LZ(t,e){var n=t.getData().getDimensionInfo(e);return n&&n.coordDim}function jZ(t,e){return!(t&&t.containData&&e.coord&&!AZ(e))||t.containData(e.coord)}function PZ(t,e,n){return!(t&&t.containZone&&e.coord&&n.coord&&!AZ(e)&&!AZ(n))||t.containZone(e.coord,n.coord)}function EZ(t,e){return t?function(t,n,r,i){var o=i<2?t.coord&&t.coord[i]:t.value;return Af(o,e[i])}:function(t,n,r,i){return Af(t.value,e[i])}}function RZ(t,e,n){if("average"===n){var r=0,i=0;return t.each(e,(function(t,e){isNaN(t)||(r+=t,i++)})),r/i}return"median"===n?t.getMedian(e):t.getDataExtent(e)["max"===n?1:0]}var NZ=Hi(),zZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.init=function(){this.markerGroupMap=Object(v["createHashMap"])()},e.prototype.render=function(t,e,n){var r=this,i=this.markerGroupMap;i.each((function(t){NZ(t).keep=!1})),e.eachSeries((function(t){var i=SZ.getMarkerModelFromSeries(t,r.type);i&&r.renderSeries(t,i,e,n)})),i.each((function(t){!NZ(t).keep&&r.group.remove(t.group)}))},e.prototype.markKeep=function(t){NZ(t).keep=!0},e.prototype.toggleBlurSeries=function(t,e){var n=this;Object(v["each"])(t,(function(t){var r=SZ.getMarkerModelFromSeries(t,n.type);if(r){var i=r.getData();i.eachItemGraphicEl((function(t){t&&(e?Ol(t):Ml(t))}))}}))},e.type="marker",e}(Wd),BZ=zZ;function VZ(t,e,n){var r=e.coordinateSystem;t.each((function(i){var o,a=t.getItemModel(i),s=Xr(a.get("x"),n.getWidth()),l=Xr(a.get("y"),n.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)o=e.getMarkerPosition(t.getValues(t.dimensions,i));else if(r){var u=t.get(r.dimensions[0],i),c=t.get(r.dimensions[1],i);o=r.dataToPoint([u,c])}}else o=[s,l];isNaN(s)||(o[0]=s),isNaN(l)||(o[1]=l),t.setItemLayout(i,o)}))}var FZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=SZ.getMarkerModelFromSeries(t,"markPoint");e&&(VZ(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout())}),this)},e.prototype.renderSeries=function(t,e,n,r){var i=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new hC),u=HZ(i,t,e);e.setData(u),VZ(e.getData(),t,r),u.each((function(t){var n=u.getItemModel(t),r=n.getShallow("symbol"),i=n.getShallow("symbolSize"),o=n.getShallow("symbolRotate"),s=n.getShallow("symbolOffset"),l=n.getShallow("symbolKeepAspect");if(Object(v["isFunction"])(r)||Object(v["isFunction"])(i)||Object(v["isFunction"])(o)||Object(v["isFunction"])(s)){var c=e.getRawValue(t),h=e.getDataParams(t);Object(v["isFunction"])(r)&&(r=r(c,h)),Object(v["isFunction"])(i)&&(i=i(c,h)),Object(v["isFunction"])(o)&&(o=o(c,h)),Object(v["isFunction"])(s)&&(s=s(c,h))}var p=n.getModel("itemStyle").getItemStyle(),f=om(a,"color");p.fill||(p.fill=f),u.setItemVisual(t,{symbol:r,symbolSize:i,symbolRotate:o,symbolOffset:s,symbolKeepAspect:l,style:p})})),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl((function(t){t.traverse((function(t){Ns(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markPoint",e}(BZ);function HZ(t,e,n){var r;r=t?Object(v["map"])(t&&t.dimensions,(function(t){var n=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return Object(v["extend"])(Object(v["extend"])({},n),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var i=new Y_(r,n),o=Object(v["map"])(n.get("data"),Object(v["curry"])(kZ,e));t&&(o=Object(v["filter"])(o,Object(v["curry"])(jZ,t)));var a=EZ(!!t,r);return i.initData(o,null,a),i}var GZ=FZ;function WZ(t){t.registerComponentModel(MZ),t.registerComponentView(GZ),t.registerPreprocessor((function(t){bZ(t.series,"markPoint")&&(t.markPoint=t.markPoint||{})}))}var UZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,r){return new e(t,n,r)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e}(SZ),YZ=UZ,qZ=Hi(),XZ=function(t,e,n,r){var i,o=t.getData();if(Object(v["isArray"])(r))i=r;else{var a=r.type;if("min"===a||"max"===a||"average"===a||"median"===a||null!=r.xAxis||null!=r.yAxis){var s=void 0,l=void 0;if(null!=r.yAxis||null!=r.xAxis)s=e.getAxis(null!=r.yAxis?"y":"x"),l=Object(v["retrieve"])(r.yAxis,r.xAxis);else{var u=DZ(r,o,e,t);s=u.valueAxis;var c=ow(o,u.valueDataDim);l=RZ(o,c,a)}var h="x"===s.dim?0:1,p=1-h,f=Object(v["clone"])(r),d={coord:[]};f.type=null,f.coord=[],f.coord[p]=-1/0,d.coord[p]=1/0;var g=n.get("precision");g>=0&&Object(v["isNumber"])(l)&&(l=+l.toFixed(Math.min(g,20))),f.coord[h]=d.coord[h]=l,i=[f,d,{type:a,valueIndex:r.valueIndex,value:l}]}else i=[]}var y=[kZ(t,i[0]),kZ(t,i[1]),Object(v["extend"])({},i[2])];return y[2].type=y[2].type||null,Object(v["merge"])(y[2],y[0]),Object(v["merge"])(y[2],y[1]),y};function $Z(t){return!isNaN(t)&&!isFinite(t)}function ZZ(t,e,n,r){var i=1-t,o=r.dimensions[t];return $Z(e[i])&&$Z(n[i])&&e[t]===n[t]&&r.getAxis(o).containData(e[t])}function KZ(t,e){if("cartesian2d"===t.type){var n=e[0].coord,r=e[1].coord;if(n&&r&&(ZZ(1,n,r,t)||ZZ(0,n,r,t)))return!0}return jZ(t,e[0])&&jZ(t,e[1])}function JZ(t,e,n,r,i){var o,a=r.coordinateSystem,s=t.getItemModel(e),l=Xr(s.get("x"),i.getWidth()),u=Xr(s.get("y"),i.getHeight());if(isNaN(l)||isNaN(u)){if(r.getMarkerPosition)o=r.getMarkerPosition(t.getValues(t.dimensions,e));else{var c=a.dimensions,h=t.get(c[0],e),p=t.get(c[1],e);o=a.dataToPoint([h,p])}if(IC(a,"cartesian2d")){var f=a.getAxis("x"),d=a.getAxis("y");c=a.dimensions;$Z(t.get(c[0],e))?o[0]=f.toGlobalCoord(f.getExtent()[n?0:1]):$Z(t.get(c[1],e))&&(o[1]=d.toGlobalCoord(d.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var QZ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=SZ.getMarkerModelFromSeries(t,"markLine");if(e){var r=e.getData(),i=qZ(e).from,o=qZ(e).to;i.each((function(e){JZ(i,e,!0,t,n),JZ(o,e,!1,t,n)})),r.each((function(t){r.setItemLayout(t,[i.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},e.prototype.renderSeries=function(t,e,n,r){var i=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new vR);this.group.add(l.group);var u=tK(i,t,e),c=u.from,h=u.to,p=u.line;qZ(e).from=c,qZ(e).to=h,e.setData(p);var f=e.get("symbol"),d=e.get("symbolSize"),g=e.get("symbolRotate"),y=e.get("symbolOffset");function m(e,n,i){var o=e.getItemModel(n);JZ(e,n,i,t,r);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=om(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:Object(v["retrieve2"])(o.get("symbolOffset",!0),y[i?0:1]),symbolRotate:Object(v["retrieve2"])(o.get("symbolRotate",!0),g[i?0:1]),symbolSize:Object(v["retrieve2"])(o.get("symbolSize"),d[i?0:1]),symbol:Object(v["retrieve2"])(o.get("symbol",!0),f[i?0:1]),style:s})}Object(v["isArray"])(f)||(f=[f,f]),Object(v["isArray"])(d)||(d=[d,d]),Object(v["isArray"])(g)||(g=[g,g]),Object(v["isArray"])(y)||(y=[y,y]),u.from.each((function(t){m(c,t,!0),m(h,t,!1)})),p.each((function(t){var e=p.getItemModel(t).getModel("lineStyle").getLineStyle();p.setItemLayout(t,[c.getItemLayout(t),h.getItemLayout(t)]),null==e.stroke&&(e.stroke=c.getItemVisual(t,"style").fill),p.setItemVisual(t,{fromSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:c.getItemVisual(t,"symbolOffset"),fromSymbolRotate:c.getItemVisual(t,"symbolRotate"),fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:h.getItemVisual(t,"symbolOffset"),toSymbolRotate:h.getItemVisual(t,"symbolRotate"),toSymbolSize:h.getItemVisual(t,"symbolSize"),toSymbol:h.getItemVisual(t,"symbol"),style:e})})),l.updateData(p),u.line.eachItemGraphicEl((function(t){Ns(t).dataModel=e,t.traverse((function(t){Ns(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(BZ);function tK(t,e,n){var r;r=t?Object(v["map"])(t&&t.dimensions,(function(t){var n=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return Object(v["extend"])(Object(v["extend"])({},n),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var i=new Y_(r,n),o=new Y_(r,n),a=new Y_([],n),s=Object(v["map"])(n.get("data"),Object(v["curry"])(XZ,e,t,n));t&&(s=Object(v["filter"])(s,Object(v["curry"])(KZ,t)));var l=EZ(!!t,r);return i.initData(Object(v["map"])(s,(function(t){return t[0]})),null,l),o.initData(Object(v["map"])(s,(function(t){return t[1]})),null,l),a.initData(Object(v["map"])(s,(function(t){return t[2]}))),a.hasItemOption=!0,{from:i,to:o,line:a}}var eK=QZ;function nK(t){t.registerComponentModel(YZ),t.registerComponentView(eK),t.registerPreprocessor((function(t){bZ(t.series,"markLine")&&(t.markLine=t.markLine||{})}))}var rK=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,r){return new e(t,n,r)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(SZ),iK=rK,oK=Hi(),aK=function(t,e,n,r){var i=kZ(t,r[0]),o=kZ(t,r[1]),a=i.coord,s=o.coord;a[0]=Object(v["retrieve"])(a[0],-1/0),a[1]=Object(v["retrieve"])(a[1],-1/0),s[0]=Object(v["retrieve"])(s[0],1/0),s[1]=Object(v["retrieve"])(s[1],1/0);var l=Object(v["mergeAll"])([{},i,o]);return l.coord=[i.coord,o.coord],l.x0=i.x,l.y0=i.y,l.x1=o.x,l.y1=o.y,l};function sK(t){return!isNaN(t)&&!isFinite(t)}function lK(t,e,n,r){var i=1-t;return sK(e[i])&&sK(n[i])}function uK(t,e){var n=e.coord[0],r=e.coord[1],i={coord:n,x:e.x0,y:e.y0},o={coord:r,x:e.x1,y:e.y1};return IC(t,"cartesian2d")?!(!n||!r||!lK(1,n,r,t)&&!lK(0,n,r,t))||PZ(t,i,o):jZ(t,i)||jZ(t,o)}function cK(t,e,n,r,i){var o,a=r.coordinateSystem,s=t.getItemModel(e),l=Xr(s.get(n[0]),i.getWidth()),u=Xr(s.get(n[1]),i.getHeight());if(isNaN(l)||isNaN(u)){if(r.getMarkerPosition)o=r.getMarkerPosition(t.getValues(n,e));else{var c=t.get(n[0],e),h=t.get(n[1],e),p=[c,h];a.clampData&&a.clampData(p,p),o=a.dataToPoint(p,!0)}if(IC(a,"cartesian2d")){var f=a.getAxis("x"),d=a.getAxis("y");c=t.get(n[0],e),h=t.get(n[1],e);sK(c)?o[0]=f.toGlobalCoord(f.getExtent()["x0"===n[0]?0:1]):sK(h)&&(o[1]=d.toGlobalCoord(d.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var hK=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],pK=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=SZ.getMarkerModelFromSeries(t,"markArea");if(e){var r=e.getData();r.each((function(e){var i=Object(v["map"])(hK,(function(i){return cK(r,e,i,t,n)}));r.setItemLayout(e,i);var o=r.getItemGraphicEl(e);o.setShape("points",i)}))}}),this)},e.prototype.renderSeries=function(t,e,n,r){var i=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new Lr});this.group.add(l.group),this.markKeep(l);var u=fK(i,t,e);e.setData(u),u.each((function(e){var n=Object(v["map"])(hK,(function(n){return cK(u,e,n,t,r)})),o=i.getAxis("x").scale,s=i.getAxis("y").scale,l=o.getExtent(),c=s.getExtent(),h=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],p=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];Zr(h),Zr(p);var f=!(l[0]>h[1]||l[1]p[1]||c[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e}(dh),mK=yK,bK=v["curry"],xK=v["each"],_K=Lr,wK=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return d(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new _K),this.group.add(this._selectorGroup=new _K),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var r=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var i=t.get("align"),o=t.get("orient");i&&"auto"!==i||(i="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(i,t,e,n,a,o,s);var l=t.getBoxLayoutParams(),u={width:n.getWidth(),height:n.getHeight()},c=t.get("padding"),h=ih(l,u,c),p=this.layoutInner(t,i,h,r,a,s),f=ih(v["defaults"]({width:p.width,height:p.height},l),u,c);this.group.x=f.x-p.x,this.group.y=f.y-p.y,this.group.markRedraw(),this.group.add(this._backgroundEl=Cq(p,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,r,i,o,a){var s=this.getContentGroup(),l=v["createHashMap"](),u=e.get("selectedMode"),c=[];n.eachRawSeries((function(t){!t.get("legendHoverLink")&&c.push(t.id)})),xK(e.getData(),(function(i,o){var a=i.get("name");if(!this.newlineDisabled&&(""===a||"\n"===a)){var h=new _K;return h.newline=!0,void s.add(h)}var p=n.getSeriesByName(a)[0];if(!l.get(a)){if(p){var f=p.getData(),d=f.getVisual("legendLineStyle")||{},g=f.getVisual("legendIcon"),y=f.getVisual("style"),m=this._createItem(p,a,o,i,e,t,d,y,g,u,r);m.on("click",bK(MK,a,null,r,c)).on("mouseover",bK(CK,p.name,null,r,c)).on("mouseout",bK(IK,p.name,null,r,c)),l.set(a,!0)}else n.eachRawSeries((function(n){if(!l.get(a)&&n.legendVisualProvider){var s=n.legendVisualProvider;if(!s.containName(a))return;var h=s.indexOfName(a),p=s.getItemVisual(h,"style"),f=s.getItemVisual(h,"legendIcon"),d=Object(Ae["parse"])(p.fill);d&&0===d[3]&&(d[3]=.2,p=v["extend"](v["extend"]({},p),{fill:Object(Ae["stringify"])(d,"rgba")}));var g=this._createItem(n,a,o,i,e,t,{},p,f,u,r);g.on("click",bK(MK,null,a,r,c)).on("mouseover",bK(CK,null,a,r,c)).on("mouseout",bK(IK,null,a,r,c)),l.set(a,!0)}}),this);0}}),this),i&&this._createSelector(i,e,r,o,a)},e.prototype._createSelector=function(t,e,n,r,i){var o=this.getSelectorGroup();xK(t,(function(t){var r=t.type,i=new Rs({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===r?"legendAllSelect":"legendInverseSelect"})}});o.add(i);var a=e.getModel("selectorLabel"),s=e.getModel(["emphasis","selectorLabel"]);fu(i,{normal:a,emphasis:s},{defaultText:t.title}),Bl(i)}))},e.prototype._createItem=function(t,e,n,r,i,o,a,s,l,u,c){var h=t.visualDrawType,p=i.get("itemWidth"),f=i.get("itemHeight"),d=i.isSelected(e),g=r.get("symbolRotate"),y=r.get("symbolKeepAspect"),m=r.get("icon");l=m||l||"roundRect";var b=SK(l,r,a,s,h,d,c),x=new _K,_=r.getModel("textStyle");if(!v["isFunction"](t.getLegendIcon)||m&&"inherit"!==m){var w="inherit"===m&&t.getData().getVisual("symbol")?"inherit"===g?t.getData().getVisual("symbolRotate"):g:0;x.add(OK({itemWidth:p,itemHeight:f,icon:l,iconRotate:w,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}))}else x.add(t.getLegendIcon({itemWidth:p,itemHeight:f,icon:l,iconRotate:g,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}));var S="left"===o?p+5:-5,O=o,M=i.get("formatter"),A=e;v["isString"](M)&&M?A=M.replace("{name}",null!=e?e:""):v["isFunction"](M)&&(A=M(e));var C=r.get("inactiveColor");x.add(new Rs({style:gu(_,{text:A,x:S,y:f/2,fill:d?_.getTextColor():C,align:O,verticalAlign:"middle"})}));var I=new ms({shape:x.getBoundingRect(),invisible:!0}),T=r.getModel("tooltip");return T.get("show")&&ty({el:I,componentModel:i,itemName:e,itemTooltipOption:T.option}),x.add(I),x.eachChild((function(t){t.silent=!0})),I.silent=!u,this.getContentGroup().add(x),Bl(x),x.__legendDataIndex=n,x},e.prototype.layoutInner=function(t,e,n,r,i,o){var a=this.getContentGroup(),s=this.getSelectorGroup();nh(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),i){nh("horizontal",s,t.get("selectorItemGap",!0));var c=s.getBoundingRect(),h=[-c.x,-c.y],p=t.get("selectorButtonGap",!0),f=t.getOrient().index,d=0===f?"width":"height",g=0===f?"height":"width",v=0===f?"y":"x";"end"===o?h[f]+=l[d]+p:u[f]+=c[d]+p,h[1-f]+=l[g]/2-c[g]/2,s.x=h[0],s.y=h[1],a.x=u[0],a.y=u[1];var y={x:0,y:0};return y[d]=l[d]+p+c[d],y[g]=Math.max(l[g],c[g]),y[v]=Math.min(0,c[v]+h[1-f]),y}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(Wd);function SK(t,e,n,r,i,o,a){function s(t,e){"auto"===t.lineWidth&&(t.lineWidth=e.lineWidth>0?2:0),xK(t,(function(n,r){"inherit"===t[r]&&(t[r]=e[r])}))}var l=e.getModel("itemStyle"),u=l.getItemStyle(),c=0===t.lastIndexOf("empty",0)?"fill":"stroke",h=l.getShallow("decal");u.decal=h&&"inherit"!==h?fb(h,a):r.decal,"inherit"===u.fill&&(u.fill=r[i]),"inherit"===u.stroke&&(u.stroke=r[c]),"inherit"===u.opacity&&(u.opacity=("fill"===i?r:n).opacity),s(u,r);var p=e.getModel("lineStyle"),f=p.getLineStyle();if(s(f,n),"auto"===u.fill&&(u.fill=r.fill),"auto"===u.stroke&&(u.stroke=r.fill),"auto"===f.stroke&&(f.stroke=r.fill),!o){var d=e.get("inactiveBorderWidth"),g=u[c];u.lineWidth="auto"===d?r.lineWidth>0&&g?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),f.stroke=p.get("inactiveColor"),f.lineWidth=p.get("inactiveWidth")}return{itemStyle:u,lineStyle:f}}function OK(t){var e=t.icon||"roundRect",n=Om(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill,t.symbolKeepAspect);return n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n}function MK(t,e,n,r){IK(t,e,n,r),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),CK(t,e,n,r)}function AK(t){var e,n=t.getZr().storage.getDisplayList(),r=0,i=n.length;while(rn[i],d=[-h.x,-h.y];e||(d[r]=l[s]);var g=[0,0],y=[-p.x,-p.y],m=v["retrieve2"](t.get("pageButtonGap",!0),t.get("itemGap",!0));if(f){var b=t.get("pageButtonPosition",!0);"end"===b?y[r]+=n[i]-p[i]:g[r]+=p[i]+m}y[1-r]+=h[o]/2-p[o]/2,l.setPosition(d),u.setPosition(g),c.setPosition(y);var x={x:0,y:0};if(x[i]=f?n[i]:h[i],x[o]=Math.max(h[o],p[o]),x[a]=Math.min(0,p[a]+y[1-r]),u.__rectSize=n[i],f){var _={x:0,y:0};_[i]=Math.max(n[i]-p[i]-m,0),_[o]=x[o],u.setClipPath(new ms({shape:_})),u.__rectSize=_[i]}else c.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var w=this._getPageInfo(t);return null!=w.pageIndex&&nu(l,{x:w.contentPosition[0],y:w.contentPosition[1]},f?t:null),this._updatePageInfoView(t,w),x},e.prototype._pageGo=function(t,e,n){var r=this._getPageInfo(e)[t];null!=r&&n.dispatchAction({type:"legendScroll",scrollDataIndex:r,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;v["each"](["pagePrev","pageNext"],(function(r){var i=r+"DataIndex",o=null!=e[i],a=n.childOfName(r);a&&(a.setStyle("fill",o?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=o?"pointer":"default")}));var r=n.childOfName("pageText"),i=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;r&&i&&r.setStyle("text",v["isString"](i)?i.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):i({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),r=this._containerGroup.__rectSize,i=t.getOrient().index,o=zK[i],a=BK[i],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],c=l.length,h=c?1:0,p={contentPosition:[n.x,n.y],pageCount:h,pageIndex:h-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return p;var f=m(u);p.contentPosition[i]=-f.s;for(var d=s+1,g=f,v=f,y=null;d<=c;++d)y=m(l[d]),(!y&&v.e>g.s+r||y&&!b(y,g.s))&&(g=v.i>g.i?v:y,g&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=g.i),++p.pageCount)),v=y;for(d=s-1,g=f,v=f,y=null;d>=-1;--d)y=m(l[d]),y&&b(v,y.s)||!(g.i=e&&t.s<=e+r}},e.prototype._findTargetItemIndex=function(t){if(!this._showController)return 0;var e,n,r=this.getContentGroup();return r.eachChild((function(r,i){var o=r.__legendDataIndex;null==n&&null!=o&&(n=i),o===t&&(e=i)})),null!=e?e:n},e.type="legend.scroll",e}(TK),FK=VK;function HK(t){t.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))}function GK(t){p_(jK),t.registerComponentModel(RK),t.registerComponentView(FK),HK(t)}function WK(t){p_(jK),p_(GK)}var UK=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="dataZoom.inside",e.defaultOption=Wu(nq.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(nq),YK=UK,qK=Hi();function XK(t,e,n){qK(t).coordSysRecordMap.each((function(t){var r=t.dataZoomInfoMap.get(e.uid);r&&(r.getRange=n)}))}function $K(t,e){for(var n=qK(t).coordSysRecordMap,r=n.keys(),i=0;ir[n+e]&&(e=a),i=i&&o.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!i}}}function eJ(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function(t,e){var n=qK(e),r=n.coordSysRecordMap||(n.coordSysRecordMap=Object(v["createHashMap"])());r.each((function(t){t.dataZoomInfoMap=null})),t.eachComponent({mainType:"dataZoom",subType:"inside"},(function(t){var n=JY(t);Object(v["each"])(n.infoList,(function(n){var i=n.model.uid,o=r.get(i)||r.set(i,KK(e,n.model)),a=o.dataZoomInfoMap||(o.dataZoomInfoMap=Object(v["createHashMap"])());a.set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})}))})),r.each((function(t){var e,n=t.controller,i=t.dataZoomInfoMap;if(i){var o=i.keys()[0];null!=o&&(e=i.get(o))}if(e){var a=tJ(i);n.enable(a.controlType,a.opt),n.setPointerChecker(t.containsPoint),vy(t,"dispatchAction",e.model.get("throttle",!0),"fixRate")}else ZK(r,t)}))}))}var nJ=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return d(e,t),e.prototype.render=function(e,n,r){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),XK(r,e,{pan:Object(v["bind"])(rJ.pan,this),zoom:Object(v["bind"])(rJ.zoom,this),scrollMove:Object(v["bind"])(rJ.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){$K(this.api,this.dataZoomModel),this.range=null},e.type="dataZoom.inside",e}(aq),rJ={zoom:function(t,e,n,r){var i=this.range,o=i.slice(),a=t.axisModels[0];if(a){var s=oJ[e](null,[r.originX,r.originY],a,n,t),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/r.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var c=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return PN(0,o,[0,100],0,c.minSpan,c.maxSpan),this.range=o,i[0]!==o[0]||i[1]!==o[1]?o:void 0}},pan:iJ((function(t,e,n,r,i,o){var a=oJ[r]([o.oldX,o.oldY],[o.newX,o.newY],e,i,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:iJ((function(t,e,n,r,i,o){var a=oJ[r]([0,0],[o.scrollDelta,o.scrollDelta],e,i,n);return a.signal*(t[1]-t[0])*o.scrollDelta}))};function iJ(t){return function(e,n,r,i){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s){var l=t(a,s,e,n,r,i);return PN(l,a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}}var oJ={grid:function(t,e,n,r,i){var o=n.axis,a={},s=i.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,r,i){var o=n.axis,a={},s=i.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,r,i){var o=n.axis,a=i.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}},aJ=nJ;function sJ(t){mq(t),t.registerComponentModel(YK),t.registerComponentView(aJ),eJ(t)}var lJ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=Wu(nq.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e}(nq),uJ=lJ,cJ=ms,hJ=7,pJ=1,fJ=30,dJ=7,gJ="horizontal",vJ="vertical",yJ=5,mJ=["line","bar","candlestick","scatter"],bJ={easing:"cubicOut",duration:100,delay:0},xJ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return d(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=Object(v["bind"])(this._onBrush,this),this._onBrushEnd=Object(v["bind"])(this._onBrushEnd,this)},e.prototype.render=function(e,n,r,i){if(t.prototype.render.apply(this,arguments),vy(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();i&&"dataZoom"===i.type&&i.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){yy(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new Lr;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect"),r=n?dJ:0,i=this._findCoordRect(),o={width:e.getWidth(),height:e.getHeight()},a=this._orient===gJ?{right:o.width-i.x-i.width,top:o.height-fJ-hJ-r,width:i.width,height:fJ}:{right:hJ,top:i.y,width:fJ,height:i.height},s=uh(t.option);Object(v["each"])(["right","top","width","height"],(function(t){"ph"===s[t]&&(s[t]=a[t])}));var l=ih(s,o);this._location={x:l.x,y:l.y},this._size=[l.width,l.height],this._orient===vJ&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,r=this.dataZoomModel.getFirstTargetAxisModel(),i=r&&r.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==gJ||i?n===gJ&&i?{scaleY:a?1:-1,scaleX:-1}:n!==vJ||i?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]);t.x=e.x-s.x,t.y=e.y-s.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,r=t.get("brushSelect");n.add(new cJ({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var i=new cJ({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:Object(v["bind"])(this._onClickPanel,this)}),o=this.api.getZr();r?(i.on("mousedown",this._onBrushStart,this),i.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(i)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=this._shadowSize||[],r=t.series,i=r.getRawData(),o=r.getShadowDim?r.getShadowDim():t.otherDim;if(null!=o){var a=this._shadowPolygonPts,s=this._shadowPolylinePts;if(i!==this._shadowData||o!==this._shadowDim||e[0]!==n[0]||e[1]!==n[1]){var l=i.getDataExtent(o),u=.3*(l[1]-l[0]);l=[l[0]-u,l[1]+u];var c,h=[0,e[1]],p=[0,e[0]],f=[[e[0],0],[0,0]],d=[],g=p[1]/(i.count()-1),v=0,y=Math.round(i.count()/e[0]);i.each([o],(function(t,e){if(y>0&&e%y)v+=g;else{var n=null==t||isNaN(t)||""===t,r=n?0:qr(t,l,h,!0);n&&!c&&e?(f.push([f[f.length-1][0],0]),d.push([d[d.length-1][0],0])):!n&&c&&(f.push([v,0]),d.push([v,0])),f.push([v,r]),d.push([v,r]),v+=g,c=n}})),a=this._shadowPolygonPts=f,s=this._shadowPolylinePts=d}this._shadowData=i,this._shadowDim=o,this._shadowSize=[e[0],e[1]];for(var m=this.dataZoomModel,b=0;b<3;b++){var x=_(1===b);this._displayables.sliderGroup.add(x),this._displayables.dataShadowSegs.push(x)}}}function _(t){var e=m.getModel(t?"selectedDataBackground":"dataBackground"),n=new Lr,r=new Yg({shape:{points:a},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),i=new $g({shape:{points:s},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(r),n.add(i),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,r=this.ecModel;return t.eachTargetAxis((function(i,o){var a=t.getAxisProxy(i,o).getTargetSeriesModels();Object(v["each"])(a,(function(t){if(!n&&!(!0!==e&&Object(v["indexOf"])(mJ,t.get("type"))<0)){var a,s=r.getComponent(ZY(i),o).axis,l=_J(i),u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),n={thisAxis:s,series:t,thisDim:i,otherDim:l,otherAxisInverse:a}}}),this)}),this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],r=e.handleLabels=[null,null],i=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),c=e.filler=new cJ({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});i.add(c),i.add(new cJ({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:pJ,fill:"rgba(0,0,0,0)"}})),Object(v["each"])([0,1],(function(e){var o=a.get("handleIcon");!_m[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s=Om(o,-1,0,2,2,null,!0);s.attr({cursor:wJ(this._orient),draggable:!0,drift:Object(v["bind"])(this._onDragMove,this,e),ondragend:Object(v["bind"])(this._onDragEnd,this),onmouseover:Object(v["bind"])(this._showDataInfo,this,!0),onmouseout:Object(v["bind"])(this._showDataInfo,this,!1),z2:5});var l=s.getBoundingRect(),u=a.get("handleSize");this._handleHeight=Xr(u,this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,s.setStyle(a.getModel("handleStyle").getItemStyle()),s.style.strokeNoScale=!0,s.rectHover=!0,s.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),Bl(s);var c=a.get("handleColor");null!=c&&(s.style.fill=c),i.add(n[e]=s);var h=a.getModel("textStyle");t.add(r[e]=new Rs({silent:!0,invisible:!0,style:gu(h,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:h.getTextColor(),font:h.getFont()}),z2:10}))}),this);var h=c;if(u){var p=Xr(a.get("moveHandleSize"),o[1]),f=e.moveHandle=new ms({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:p}}),d=.8*p,g=e.moveHandleIcon=Om(a.get("moveHandleIcon"),-d/2,-d/2,d,d,"#fff",!0);g.silent=!0,g.y=o[1]+p/2-.5,f.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var y=Math.min(o[1]/2,Math.max(p,10));h=e.moveZone=new ms({invisible:!0,shape:{y:o[1]-y,height:p+y}}),h.on("mouseover",(function(){s.enterEmphasis(f)})).on("mouseout",(function(){s.leaveEmphasis(f)})),i.add(f),i.add(g),i.add(h)}h.attr({draggable:!0,cursor:wJ(this._orient),drift:Object(v["bind"])(this._onDragMove,this,"all"),ondragstart:Object(v["bind"])(this._showDataInfo,this,!0),ondragend:Object(v["bind"])(this._onDragEnd,this),onmouseover:Object(v["bind"])(this._showDataInfo,this,!0),onmouseout:Object(v["bind"])(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[qr(t[0],[0,100],e,!0),qr(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,r=this._handleEnds,i=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];PN(e,r,i,n.get("zoomLock")?"all":t,null!=o.minSpan?qr(o.minSpan,a,i,!0):null,null!=o.maxSpan?qr(o.maxSpan,a,i,!0):null);var s=this._range,l=this._range=Zr([qr(r[0],i,a,!0),qr(r[1],i,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,r=Zr(n.slice()),i=this._size;Object(v["each"])([0,1],(function(t){var r=e.handles[t],o=this._handleHeight;r.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:i[1]/2-o/2})}),this),e.filler.setShape({x:r[0],y:0,width:r[1]-r[0],height:i[1]});var o={x:r[0],width:r[1]-r[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,r[0],r[1],i[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var r=this._handleEnds,i=(r[0]+r[1])/2,o=this._updateInterval("all",n[0]-i);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new $n(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape,r=+new Date;if(!(r-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),o=[0,100];this._range=Zr([qr(n.x,i,o,!0),qr(n.x+n.width,i,o,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(ft(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,r=this.dataZoomModel,i=n.brushRect;i||(i=n.brushRect=new cJ({silent:!0,style:r.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(i)),i.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),i.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?bJ:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=JY(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var r=this.api.getWidth(),i=this.api.getHeight();t={x:.2*r,y:.2*i,width:.6*r,height:.6*i}}return t},e.type="dataZoom.slider",e}(aq);function _J(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}function wJ(t){return"vertical"===t?"ns-resize":"ew-resize"}var SJ=xJ;function OJ(t){t.registerComponentModel(uJ),t.registerComponentView(SJ),mq(t)}function MJ(t){p_(sJ),p_(OJ)}var AJ={get:function(t,e,n){var r=v["clone"]((CJ[t]||{})[e]);return n&&v["isArray"](r)?r[r.length-1]:r}},CJ={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},IJ=AJ,TJ=GP.mapVisual,kJ=GP.eachVisual,DJ=v["isArray"],LJ=v["each"],jJ=Zr,PJ=qr,EJ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.stateList=["inRange","outOfRange"],n.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],n.layoutMode={type:"box",ignoreSize:!0},n.dataBound=[-1/0,1/0],n.targetVisuals={},n.controllerVisuals={},n}return d(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n)},e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&b$(n,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},e.prototype.resetVisual=function(t){var e=this.stateList;t=v["bind"](t,this),this.controllerVisuals=m$(this.option.controller,e,t),this.targetVisuals=m$(this.option.target,e,t)},e.prototype.getItemSymbol=function(){return null},e.prototype.getTargetSeriesIndices=function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries((function(t,n){e.push(n)})):e=xi(t),e},e.prototype.eachTargetSeries=function(t,e){v["each"](this.getTargetSeriesIndices(),(function(n){var r=this.ecModel.getSeriesByIndex(n);r&&t.call(e,r)}),this)},e.prototype.isTargetSeries=function(t){var e=!1;return this.eachTargetSeries((function(n){n===t&&(e=!0)})),e},e.prototype.formatValueText=function(t,e,n){var r,i=this.option,o=i.precision,a=this.dataBound,s=i.formatter;n=n||["<",">"],v["isArray"](t)&&(t=t.slice(),r=!0);var l=e?t:r?[u(t[0]),u(t[1])]:u(t);return v["isString"](s)?s.replace("{value}",r?l[0]:l).replace("{value2}",r?l[1]:l):v["isFunction"](s)?r?s(t[0],t[1]):s(t):r?t[0]===a[0]?n[0]+" "+l[1]:t[1]===a[1]?n[1]+" "+l[0]:l[0]+" - "+l[1]:l;function u(t){return t===a[0]?"min":t===a[1]?"max":(+t).toFixed(Math.min(o,20))}},e.prototype.resetExtent=function(){var t=this.option,e=jJ([t.min,t.max]);this._dataExtent=e},e.prototype.getDataDimensionIndex=function(t){var e=this.option.dimension;if(null!=e)return t.getDimensionIndex(e);for(var n=t.dimensions,r=n.length-1;r>=0;r--){var i=n[r],o=t.getDimensionInfo(i);if(!o.isCalculationCoord)return o.storeDimIndex}},e.prototype.getExtent=function(){return this._dataExtent.slice()},e.prototype.completeVisualOption=function(){var t=this.ecModel,e=this.option,n={inRange:e.inRange,outOfRange:e.outOfRange},r=e.target||(e.target={}),i=e.controller||(e.controller={});v["merge"](r,n),v["merge"](i,n);var o=this.isCategory();function a(n){DJ(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")}}function s(t,e,n){var r=t[e],i=t[n];r&&!i&&(i=t[n]={},LJ(r,(function(t,e){if(GP.isValidType(e)){var n=IJ.get(e,"inactive",o);null!=n&&(i[e]=n,"color"!==e||i.hasOwnProperty("opacity")||i.hasOwnProperty("colorAlpha")||(i.opacity=[0,0]))}})))}function l(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,r=this.get("inactiveColor"),i=this.getItemSymbol(),a=i||"roundRect";LJ(this.stateList,(function(i){var s=this.itemSize,l=t[i];l||(l=t[i]={color:o?r:[r]}),null==l.symbol&&(l.symbol=e&&v["clone"](e)||(o?a:[a])),null==l.symbolSize&&(l.symbolSize=n&&v["clone"](n)||(o?s[0]:[s[0],s[0]])),l.symbol=TJ(l.symbol,(function(t){return"none"===t?a:t}));var u=l.symbolSize;if(null!=u){var c=-1/0;kJ(u,(function(t){t>c&&(c=t)})),l.symbolSize=TJ(u,(function(t){return PJ(t,[0,c],[0,s[0]],!0)}))}}),this)}a.call(this,r),a.call(this,i),s.call(this,r,"inRange","outOfRange"),l.call(this,i)},e.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},e.prototype.isCategory=function(){return!!this.option.categories},e.prototype.setSelected=function(t){},e.prototype.getSelected=function(){return null},e.prototype.getValueState=function(t){return null},e.prototype.getVisualMeta=function(t){return null},e.type="visualMap",e.dependencies=["series"],e.defaultOption={show:!0,z:4,seriesIndex:"all",min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,textStyle:{color:"#333"}},e}(dh),RJ=EJ,NJ=[20,140],zJ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual((function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()})),this._resetRange()},e.prototype.resetItemSize=function(){t.prototype.resetItemSize.apply(this,arguments);var e=this.itemSize;(null==e[0]||isNaN(e[0]))&&(e[0]=NJ[0]),(null==e[1]||isNaN(e[1]))&&(e[1]=NJ[1])},e.prototype._resetRange=function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):v["isArray"](e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},e.prototype.completeVisualOption=function(){t.prototype.completeVisualOption.apply(this,arguments),v["each"](this.stateList,(function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=e[1]/3)}),this)},e.prototype.setSelected=function(t){this.option.range=t.slice(),this._resetRange()},e.prototype.getSelected=function(){var t=this.getExtent(),e=Zr((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=n[1]||t<=e[1])?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[];return this.eachTargetSeries((function(n){var r=[],i=n.getData();i.each(this.getDataDimensionIndex(i),(function(e,n){t[0]<=e&&e<=t[1]&&r.push(n)}),this),e.push({seriesId:n.id,dataIndex:r})}),this),e},e.prototype.getVisualMeta=function(t){var e=BJ(this,"outOfRange",this.getExtent()),n=BJ(this,"inRange",this.option.range.slice()),r=[];function i(e,n){r.push({value:e,color:t(e,n)})}for(var o=0,a=0,s=n.length,l=e.length;at[1])break;r.push({color:this.getControllerVisual(a,"color",e),offset:o/n})}return r.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),r},e.prototype._createBarPoints=function(t,e){var n=this.visualMapModel.itemSize;return[[n[0]-e[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-e[1],t[1]]]},e.prototype._createBarGroup=function(t){var e=this._orient,n=this.visualMapModel.get("inverse");return new Lr("horizontal"!==e||n?"horizontal"===e&&n?{scaleX:"bottom"===t?-1:1,rotation:-Math.PI/2}:"vertical"!==e||n?{scaleX:"left"===t?1:-1}:{scaleX:"left"===t?1:-1,scaleY:-1}:{scaleX:"bottom"===t?1:-1,rotation:Math.PI/2})},e.prototype._updateHandle=function(t,e){if(this._useHandle){var n=this._shapes,r=this.visualMapModel,i=n.handleThumbs,o=n.handleLabels,a=r.itemSize,s=r.getExtent();qJ([0,1],(function(l){var u=i[l];u.setStyle("fill",e.handlesColor[l]),u.y=t[l];var c=YJ(t[l],[0,a[1]],s,!0),h=this.getControllerVisual(c,"symbolSize");u.scaleX=u.scaleY=h/a[0],u.x=a[0]-h/2;var p=Hv(n.handleLabelPoints[l],Fv(u,this.group));o[l].setStyle({x:p[0],y:p[1],text:r.formatValueText(this._dataInterval[l]),verticalAlign:"middle",align:"vertical"===this._orient?this._applyTransform("left",n.mainGroup):"center"})}),this)}},e.prototype._showIndicator=function(t,e,n,r){var i=this.visualMapModel,o=i.getExtent(),a=i.itemSize,s=[0,a[1]],l=this._shapes,u=l.indicator;if(u){u.attr("invisible",!1);var c={convertOpacityToAlpha:!0},h=this.getControllerVisual(t,"color",c),p=this.getControllerVisual(t,"symbolSize"),f=YJ(t,o,s,!0),d=a[0]-p/2,g={x:u.x,y:u.y};u.y=f,u.x=d;var v=Hv(l.indicatorLabelPoint,Fv(u,this.group)),y=l.indicatorLabel;y.attr("invisible",!1);var m=this._applyTransform("left",l.mainGroup),b=this._orient,x="horizontal"===b;y.setStyle({text:(n||"")+i.formatValueText(e),verticalAlign:x?m:"middle",align:x?"center":m});var _={x:d,y:f,style:{fill:h}},w={style:{x:v[0],y:v[1]}};if(i.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var S={duration:100,easing:"cubicInOut",additive:!0};u.x=g.x,u.y=g.y,u.animateTo(_,S),y.animateTo(w,S)}else u.attr(_),y.attr(w);this._firstShowIndicator=!1;var O=this._shapes.handleLabels;if(O)for(var M=0;Mi[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var c=this._hoverLinkDataIndices,h=[];(e||eQ(n))&&(h=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var p=Vi(c,h);this._dispatchHighDown("downplay",UJ(p[0],n)),this._dispatchHighDown("highlight",UJ(p[1],n))}},e.prototype._hoverLinkFromSeriesMouseOver=function(t){var e=t.target,n=this.visualMapModel;if(e&&null!=Ns(e).dataIndex){var r=Ns(e),i=this.ecModel.getSeriesByIndex(r.seriesIndex);if(n.isTargetSeries(i)){var o=i.getData(r.dataType),a=o.getStore().get(n.getDataDimensionIndex(o),r.dataIndex);isNaN(a)||this._showIndicator(a,a)}}},e.prototype._hideIndicator=function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0);var e=this._shapes.handleLabels;if(e)for(var n=0;n=0&&(i.dimension=o,r.push(i))}})),t.getData().setVisual("visualMeta",r)}}];function sQ(t,e,n,r){for(var i=e.targetVisuals[r],o=GP.prepareVisualTypes(i),a={color:om(t.getData(),"color")},s=0,l=o.length;s0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"})),t.registerAction(iQ,oQ),Object(v["each"])(aQ,(function(e){t.registerVisual(t.PRIORITY.VISUAL.COMPONENT,e)})),t.registerPreprocessor(uQ))}function fQ(t){t.registerComponentModel(VJ),t.registerComponentView(rQ),pQ(t)}var dQ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._pieceList=[],n}return d(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var r=this._mode=this._determineMode();this._pieceList=[],gQ[this._mode].call(this,this._pieceList),this._resetSelected(e,n);var i=this.option.categories;this.resetVisual((function(t,e){"categories"===r?(t.mappingMethod="category",t.categories=v["clone"](i)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=v["map"](this._pieceList,(function(t){return t=v["clone"](t),"inRange"!==e&&(t.visual=null),t})))}))},e.prototype.completeVisualOption=function(){var e=this.option,n={},r=GP.listVisualTypes(),i=this.isCategory();function o(t,e,n){return t&&t[e]&&t[e].hasOwnProperty(n)}v["each"](e.pieces,(function(t){v["each"](r,(function(e){t.hasOwnProperty(e)&&(n[e]=1)}))})),v["each"](n,(function(t,n){var r=!1;v["each"](this.stateList,(function(t){r=r||o(e,t,n)||o(e.target,t,n)}),this),!r&&v["each"](this.stateList,(function(t){(e[t]||(e[t]={}))[n]=IJ.get(n,"inRange"===t?"active":"inactive",i)}))}),this),t.prototype.completeVisualOption.apply(this,arguments)},e.prototype._resetSelected=function(t,e){var n=this.option,r=this._pieceList,i=(e?n:t).selected||{};if(n.selected=i,v["each"](r,(function(t,e){var n=this.getSelectedMapKey(t);i.hasOwnProperty(n)||(i[n]=!0)}),this),"single"===n.selectedMode){var o=!1;v["each"](r,(function(t,e){var n=this.getSelectedMapKey(t);i[n]&&(o?i[n]=!1:o=!0)}),this)}},e.prototype.getItemSymbol=function(){return this.get("itemSymbol")},e.prototype.getSelectedMapKey=function(t){return"categories"===this._mode?t.value+"":t.index+""},e.prototype.getPieceList=function(){return this._pieceList},e.prototype._determineMode=function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},e.prototype.setSelected=function(t){this.option.selected=v["clone"](t)},e.prototype.getValueState=function(t){var e=GP.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[],n=this._pieceList;return this.eachTargetSeries((function(r){var i=[],o=r.getData();o.each(this.getDataDimensionIndex(o),(function(e,r){var o=GP.findPieceIndex(e,n);o===t&&i.push(r)}),this),e.push({seriesId:r.id,dataIndex:i})}),this),e},e.prototype.getRepresentValue=function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var n=t.interval||[];e=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return e},e.prototype.getVisualMeta=function(t){if(!this.isCategory()){var e=[],n=["",""],r=this,i=this._pieceList.slice();if(i.length){var o=i[0].interval[0];o!==-1/0&&i.unshift({interval:[-1/0,o]}),o=i[i.length-1].interval[1],o!==1/0&&i.push({interval:[o,1/0]})}else i.push({interval:[-1/0,1/0]});var a=-1/0;return v["each"](i,(function(t){var e=t.interval;e&&(e[0]>a&&s([a,e[0]],"outOfRange"),s(e.slice()),a=e[1])}),this),{stops:e,outerColors:n}}function s(i,o){var a=r.getRepresentValue({interval:i});o||(o=r.getValueState(a));var s=t(a,o);i[0]===-1/0?n[0]=s:i[1]===1/0?n[1]=s:e.push({value:i[0],color:s},{value:i[1],color:s})}},e.type="visualMap.piecewise",e.defaultOption=Wu(RJ.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),e}(RJ),gQ={splitNumber:function(t){var e=this.option,n=Math.min(e.precision,20),r=this.getExtent(),i=e.splitNumber;i=Math.max(parseInt(i,10),1),e.splitNumber=i;var o=(r[1]-r[0])/i;while(+o.toFixed(n)!==o&&n<5)n++;e.precision=n,o=+o.toFixed(n),e.minOpen&&t.push({interval:[-1/0,r[0]],close:[0,0]});for(var a=0,s=r[0];a","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,n)}),this)}};function vQ(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}var yQ=dQ,mQ=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return d(e,t),e.prototype.doRender=function(){var t=this.group;t.removeAll();var e=this.visualMapModel,n=e.get("textGap"),r=e.textStyleModel,i=r.getFont(),o=r.getTextColor(),a=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,c=v["retrieve"](e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,c,a),v["each"](l.viewPieceList,(function(r){var l=r.piece,u=new Lr;u.onclick=v["bind"](this._onItemClick,this,l),this._enableHoverLink(u,r.indexInModelPieceList);var h=e.getRepresentValue(l);if(this._createItemSymbol(u,h,[0,0,s[0],s[1]]),c){var p=this.visualMapModel.getValueState(h);u.add(new Rs({style:{x:"right"===a?-n:s[0]+n,y:s[1]/2,text:l.text,verticalAlign:"middle",align:a,font:i,fill:o,opacity:"outOfRange"===p?.5:1}}))}t.add(u)}),this),u&&this._renderEndsText(t,u[1],s,c,a),nh(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},e.prototype._enableHoverLink=function(t,e){var n=this;t.on("mouseover",(function(){return r("highlight")})).on("mouseout",(function(){return r("downplay")}));var r=function(t){var r=n.visualMapModel;r.option.hoverLink&&n.api.dispatchAction({type:t,batch:UJ(r.findTargetDataIndices(e),r)})}},e.prototype._getItemAlign=function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return WJ(t,this.api,t.itemSize);var n=e.align;return n&&"auto"!==n||(n="left"),n},e.prototype._renderEndsText=function(t,e,n,r,i){if(e){var o=new Lr,a=this.visualMapModel.textStyleModel;o.add(new Rs({style:gu(a,{x:r?"right"===i?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:r?i:"center",text:e})})),t.add(o)}},e.prototype._getViewData=function(){var t=this.visualMapModel,e=v["map"](t.getPieceList(),(function(t,e){return{piece:t,indexInModelPieceList:e}})),n=t.get("text"),r=t.get("orient"),i=t.get("inverse");return("horizontal"===r?i:!i)?e.reverse():n&&(n=n.slice().reverse()),{viewPieceList:e,endsText:n}},e.prototype._createItemSymbol=function(t,e,n){t.add(Om(this.getControllerVisual(e,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(e,"color")))},e.prototype._onItemClick=function(t){var e=this.visualMapModel,n=e.option,r=n.selectedMode;if(r){var i=v["clone"](n.selected),o=e.getSelectedMapKey(t);"single"===r||!0===r?(i[o]=!0,v["each"](i,(function(t,e){i[e]=e===o}))):i[o]=!i[o],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:i})}},e.type="visualMap.piecewise",e}(HJ),bQ=mQ;function xQ(t){t.registerComponentModel(yQ),t.registerComponentView(bQ),pQ(t)}function _Q(t){p_(fQ),p_(xQ)}var wQ={label:{enabled:!0},decal:{show:!1}},SQ=Hi(),OQ={};function MQ(t,e){var n=t.getModel("aria");if(n.get("enabled")){var r=v["clone"](wQ);v["merge"](r.label,t.getLocaleModel().get("aria"),!1),v["merge"](n.option,r,!1),i(),o()}function i(){var e=n.getModel("decal"),r=e.get("show");if(r){var i=v["createHashMap"]();t.eachSeries((function(t){if(!t.isColorBySeries()){var e=i.get(t.type);e||(e={},i.set(t.type,e)),SQ(t).scope=e}})),t.eachRawSeries((function(e){if(!t.isSeriesFiltered(e))if(v["isFunction"](e.enableAriaDecal))e.enableAriaDecal();else{var n=e.getData();if(e.isColorBySeries()){var r=Hh(e.ecModel,e.name,OQ,t.getSeriesCount()),i=n.getVisual("decal");n.setVisual("decal",u(i,r))}else{var o=e.getRawData(),a={},s=SQ(e).scope;n.each((function(t){var e=n.getRawIndex(t);a[e]=t}));var l=o.count();o.each((function(t){var r=a[t],i=o.getName(t)||t+"",c=Hh(e.ecModel,i,s,l),h=n.getItemVisual(r,"decal");n.setItemVisual(r,"decal",u(h,c))}))}}function u(t,e){var n=t?v["extend"](v["extend"]({},e),t):e;return n.dirty=!0,n}}))}}function o(){var r=t.getLocaleModel().get("aria"),i=n.getModel("label");if(i.option=v["defaults"](i.option,r),i.get("enabled")){var o=e.getZr().dom;if(i.get("description"))o.setAttribute("aria-label",i.get("description"));else{var u,c=t.getSeriesCount(),h=i.get(["data","maxCount"])||10,p=i.get(["series","maxCount"])||10,f=Math.min(c,p);if(!(c<1)){var d=s();if(d){var g=i.get(["general","withTitle"]);u=a(g,{title:d})}else u=i.get(["general","withoutTitle"]);var y=[],m=c>1?i.get(["series","multiple","prefix"]):i.get(["series","single","prefix"]);u+=a(m,{seriesCount:c}),t.eachSeries((function(t,e){if(e1?i.get(["series","multiple",o]):i.get(["series","single",o]),n=a(n,{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:l(t.subType)});var s=t.getData();if(s.count()>h){var u=i.get(["data","partialData"]);n+=a(u,{displayCnt:h})}else n+=i.get(["data","allData"]);for(var p=i.get(["data","separator","middle"]),d=i.get(["data","separator","end"]),g=[],v=0;v":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},TQ=function(){function t(t){var e=this._condVal=Object(v["isString"])(t)?new RegExp(t):Object(v["isRegExp"])(t)?t:null;if(null==e){var n="";0,Zh(n)}}return t.prototype.evaluate=function(t){var e=typeof t;return Object(v["isString"])(e)?this._condVal.test(t):!!Object(v["isNumber"])(e)&&this._condVal.test(t+"")},t}(),kQ=function(){function t(){}return t.prototype.evaluate=function(){return this.value},t}(),DQ=function(){function t(){}return t.prototype.evaluate=function(){for(var t=this.children,e=0;e2&&l.push(e),e=[t,n]}function d(t,n,r,i){$Q(t,r)&&$Q(n,i)||e.push(t,n,r,i,r,i)}function g(t,n,r,i,o,a){var s=Math.abs(n-t),l=4*Math.tan(s/4)/3,u=nO:C2&&l.push(e),l}function KQ(t,e,n,r,i,o,a,s,l,u){if($Q(t,n)&&$Q(e,r)&&$Q(i,a)&&$Q(o,s))l.push(a,s);else{var c=2/u,h=c*c,p=a-t,f=s-e,d=Math.sqrt(p*p+f*f);p/=d,f/=d;var g=n-t,v=r-e,y=i-a,m=o-s,b=g*g+v*v,x=y*y+m*m;if(b=0&&O=0)l.push(a,s);else{var M=[],A=[];pe(t,n,i,a,.5,M),pe(e,r,o,s,.5,A),KQ(M[0],A[0],M[1],A[1],M[2],A[2],M[3],A[3],l,u),KQ(M[4],A[4],M[5],A[5],M[6],A[6],M[7],A[7],l,u)}}}}function JQ(t,e){var n=ZQ(t),r=[];e=e||1;for(var i=0;i0)for(u=0;uMath.abs(u),h=QQ([l,u],c?0:1,e),p=(c?s:u)/h.length,f=0;fi,a=QQ([r,i],o?0:1,e),s=o?"width":"height",l=o?"height":"width",u=o?"x":"y",c=o?"y":"x",h=t[s]/a.length,p=0;p1?null:new $n(g*l+t,g*u+e)}function i0(t,e,n){var r=new $n;$n.sub(r,n,e),r.normalize();var i=new $n;$n.sub(i,t,e);var o=i.dot(r);return o}function o0(t,e){var n=t[t.length-1];n&&n[0]===e[0]&&n[1]===e[1]||t.push(e)}function a0(t,e,n){for(var r=t.length,i=[],o=0;oa?(u.x=c.x=s+o/2,u.y=l,c.y=l+a):(u.y=c.y=l+a/2,u.x=s,c.x=s+o),a0(e,u,c)}function l0(t,e,n,r){if(1===n)r.push(e);else{var i=Math.floor(n/2),o=t(e);l0(t,o[0],i,r),l0(t,o[1],n-i,r)}return r}function u0(t,e){for(var n=[],r=0;r0)for(var _=r/n,w=-r/2;w<=r/2;w+=_){var S=Math.sin(w),O=Math.cos(w),M=0;for(b=0;b0;u/=2){var c=0,h=0;(t&u)>0&&(c=1),(e&u)>0&&(h=1),l+=u*u*(3*c^h),0===h&&(1===c&&(t=u-1-t,e=u-1-e),s=t,t=e,e=s)}return l}function I0(t){var e=1/0,n=1/0,r=-1/0,i=-1/0,o=Object(v["map"])(t,(function(t){var o=t.getBoundingRect(),a=t.getComputedTransform(),s=o.x+o.width/2+(a?a[4]:0),l=o.y+o.height/2+(a?a[5]:0);return e=Math.min(s,e),n=Math.min(l,n),r=Math.max(s,r),i=Math.max(l,i),[s,l]})),a=Object(v["map"])(o,(function(o,a){return{cp:o,z:C0(o[0],o[1],e,n,r,i),path:t[a]}}));return a.sort((function(t,e){return t.z-e.z})).map((function(t){return t.path}))}function T0(t){return p0(t.path,t.count)}function k0(){return{fromIndividuals:[],toIndividuals:[],count:0}}function D0(t,e,n){var r=[];function i(t){for(var e=0;e=0;i--)if(!n[i].many.length){var l=n[s].many;if(l.length<=1){if(!s)return n;s=0}o=l.length;var u=Math.ceil(o/2);n[i].many=l.slice(u,o),n[s].many=l.slice(0,u),s++}return n}var E0={clone:function(t){for(var e=[],n=1-Math.pow(1-t.path.style.opacity,1/t.count),r=0;r0){var s,l,u=r.getModel("universalTransition").get("delay"),c=Object.assign({setToFinal:!0},a);j0(t)&&(s=t,l=e),j0(e)&&(s=e,l=t);for(var h=s?s===t:t.length>e.length,p=s?P0(l,s):P0(h?e:t,[h?t:e]),f=0,d=0;dz0))for(var r=n.getIndices(),i=V0(n),o=0;o0&&i.group.traverse((function(t){t instanceof es&&!t.animators.length&&t.animateFrom({style:{opacity:0}},o)}))}))}function X0(t){var e=t.getModel("universalTransition").get("seriesKey");return e||t.id}function $0(t){return Object(v["isArray"])(t)?t.sort().join(","):t}function Z0(t){if(t.hostModel)return t.hostModel.getModel("universalTransition").get("divideShape")}function K0(t,e){var n=Object(v["createHashMap"])(),r=Object(v["createHashMap"])(),i=Object(v["createHashMap"])();return Object(v["each"])(t.oldSeries,(function(e,n){var o=t.oldData[n],a=X0(e),s=$0(a);r.set(s,o),Object(v["isArray"])(a)&&Object(v["each"])(a,(function(t){i.set(t,{data:o,key:s})}))})),Object(v["each"])(e.updatedSeries,(function(t){if(t.isUniversalTransitionEnabled()&&t.isAnimationEnabled()){var e=t.getData(),o=X0(t),a=$0(o),s=r.get(a);if(s)n.set(a,{oldSeries:[{divide:Z0(s),data:s}],newSeries:[{divide:Z0(e),data:e}]});else if(Object(v["isArray"])(o)){0;var l=[];Object(v["each"])(o,(function(t){var e=r.get(t);e&&l.push({divide:Z0(e),data:e})})),l.length&&n.set(a,{oldSeries:l,newSeries:[{data:e,divide:Z0(e)}]})}else{var u=i.get(o);if(u){var c=n.get(u.key);c||(c={oldSeries:[{data:u.data,divide:Z0(u.data)}],newSeries:[]},n.set(u.key,c)),c.newSeries.push({data:e,divide:Z0(e)})}}}})),n}function J0(t,e){for(var n=0;n=0&&i.push({data:e.oldData[n],divide:Z0(e.oldData[n]),dim:t.dimension})})),Object(v["each"])(xi(t.to),(function(t){var e=J0(n.updatedSeries,t);if(e>=0){var r=n.updatedSeries[e].getData();o.push({data:r,divide:Z0(r),dim:t.dimension})}})),i.length>0&&o.length>0&&q0(i,o,r)}function t1(t){t.registerUpdateLifecycle("series:beforeupdate",(function(t,e,n){Object(v["each"])(xi(n.seriesTransition),(function(t){Object(v["each"])(xi(t.to),(function(t){for(var e=n.updatedSeries,r=0;r
'};function n(t,e,n){return tn?n:t}function r(t){return 100*(-1+t)}function i(t,n,i){var o;return o="translate3d"===e.positionUsing?{transform:"translate3d("+r(t)+"%,0,0)"}:"translate"===e.positionUsing?{transform:"translate("+r(t)+"%,0)"}:{"margin-left":r(t)+"%"},o.transition="all "+n+"ms "+i,o}t.configure=function(t){var n,r;for(n in t)r=t[n],void 0!==r&&t.hasOwnProperty(n)&&(e[n]=r);return this},t.status=null,t.set=function(r){var s=t.isStarted();r=n(r,e.minimum,1),t.status=1===r?null:r;var l=t.render(!s),u=l.querySelector(e.barSelector),c=e.speed,h=e.easing;return l.offsetWidth,o((function(n){""===e.positionUsing&&(e.positionUsing=t.getPositioningCSS()),a(u,i(r,c,h)),1===r?(a(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){a(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),c)}),c)):setTimeout(n,c)})),this},t.isStarted=function(){return"number"===typeof t.status},t.start=function(){t.status||t.set(0);var n=function(){setTimeout((function(){t.status&&(t.trickle(),n())}),e.trickleSpeed)};return e.trickle&&n(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var r=t.status;return r?("number"!==typeof e&&(e=(1-r)*n(Math.random()*r,.1,.95)),r=n(r+e,0,.994),t.set(r)):t.start()},t.trickle=function(){return t.inc(Math.random()*e.trickleRate)},function(){var e=0,n=0;t.promise=function(r){return r&&"resolved"!==r.state()?(0===n&&t.start(),e++,n++,r.always((function(){n--,0===n?(e=0,t.done()):t.set((e-n)/e)})),this):this}}(),t.render=function(n){if(t.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var i=document.createElement("div");i.id="nprogress",i.innerHTML=e.template;var o,s=i.querySelector(e.barSelector),u=n?"-100":r(t.status||0),c=document.querySelector(e.parent);return a(s,{transition:"all 0 linear",transform:"translate3d("+u+"%,0,0)"}),e.showSpinner||(o=i.querySelector(e.spinnerSelector),o&&h(o)),c!=document.body&&l(c,"nprogress-custom-parent"),c.appendChild(i),i},t.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(e.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&h(t)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var o=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),a=function(){var t=["Webkit","O","Moz","ms"],e={};function n(t){return t.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()}))}function r(e){var n=document.body.style;if(e in n)return e;var r,i=t.length,o=e.charAt(0).toUpperCase()+e.slice(1);while(i--)if(r=t[i]+o,r in n)return r;return e}function i(t){return t=n(t),e[t]||(e[t]=r(t))}function o(t,e,n){e=i(e),t.style[e]=n}return function(t,e){var n,r,i=arguments;if(2==i.length)for(n in e)r=e[n],void 0!==r&&e.hasOwnProperty(n)&&o(t,n,r);else o(t,i[1],i[2])}}();function s(t,e){var n="string"==typeof t?t:c(t);return n.indexOf(" "+e+" ")>=0}function l(t,e){var n=c(t),r=n+e;s(n,e)||(t.className=r.substring(1))}function u(t,e){var n,r=c(t);s(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function c(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function h(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return t}))},"32a6":function(t,e,n){var r=n("241e"),i=n("c3a1");n("ce7e")("keys",(function(){return function(t){return i(r(t))}}))},"32e9":function(t,e,n){var r=n("86cc"),i=n("4630");t.exports=n("9e1e")?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"32fc":function(t,e,n){var r=n("e53d").document;t.exports=r&&r.documentElement},"335c":function(t,e,n){var r=n("6b4c");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},"33a4":function(t,e,n){var r=n("84f2"),i=n("2b4c")("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},"355d":function(t,e){e.f={}.propertyIsEnumerable},"35e8":function(t,e,n){var r=n("d9f6"),i=n("aebd");t.exports=n("8e60")?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"36c3":function(t,e,n){var r=n("335c"),i=n("25eb");t.exports=function(t){return r(i(t))}},3702:function(t,e,n){var r=n("481b"),i=n("5168")("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},3846:function(t,e,n){n("9e1e")&&"g"!=/./g.flags&&n("86cc").f(RegExp.prototype,"flags",{configurable:!0,get:n("0bfb")})},"38fd":function(t,e,n){var r=n("69a8"),i=n("4bf8"),o=n("613b")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},3934:function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=r.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return function(){return!0}}()},"3a38":function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},"3b2b":function(t,e,n){var r=n("7726"),i=n("5dbc"),o=n("86cc").f,a=n("9093").f,s=n("aae3"),l=n("0bfb"),u=r.RegExp,c=u,h=u.prototype,p=/a/g,f=/a/g,d=new u(p)!==p;if(n("9e1e")&&(!d||n("79e5")((function(){return f[n("2b4c")("match")]=!1,u(p)!=p||u(f)==f||"/a/i"!=u(p,"i")})))){u=function(t,e){var n=this instanceof u,r=s(t),o=void 0===e;return!n&&r&&t.constructor===u&&o?t:i(d?new c(r&&!o?t.source:t,e):c((r=t instanceof u)?t.source:t,r&&o?l.call(t):e),n?this:h,u)};for(var g=function(t){t in u||o(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})},v=a(c),y=0;v.length>y;)g(v[y++]);h.constructor=u,u.prototype=h,n("2aba")(r,"RegExp",u)}n("7a56")("RegExp")},"3b8d":function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n("795b"),i=n.n(r);function o(t,e,n,r,o,a,s){try{var l=t[a](s),u=l.value}catch(c){return void n(c)}l.done?e(u):i.a.resolve(u).then(r,o)}function a(t){return function(){var e=this,n=arguments;return new i.a((function(r,i){var a=t.apply(e,n);function s(t){o(a,r,i,s,l,"next",t)}function l(t){o(a,r,i,s,l,"throw",t)}s(void 0)}))}}},"3c11":function(t,e,n){"use strict";var r=n("63b6"),i=n("584a"),o=n("e53d"),a=n("f201"),s=n("cd78");r(r.P+r.R,"Promise",{finally:function(t){var e=a(this,i.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return s(e,t()).then((function(){return n}))}:t,n?function(n){return s(e,t()).then((function(){throw n}))}:t)}})},"3c4e":function(t,e,n){"use strict";var r=function(t){return i(t)&&!o(t)};function i(t){return!!t&&"object"===typeof t}function o(t){var e=Object.prototype.toString.call(t);return"[object RegExp]"===e||"[object Date]"===e||l(t)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(t){return t.$$typeof===s}function u(t){return Array.isArray(t)?[]:{}}function c(t,e){var n=e&&!0===e.clone;return n&&r(t)?f(u(t),t,e):t}function h(t,e,n){var i=t.slice();return e.forEach((function(e,o){"undefined"===typeof i[o]?i[o]=c(e,n):r(e)?i[o]=f(t[o],e,n):-1===t.indexOf(e)&&i.push(c(e,n))})),i}function p(t,e,n){var i={};return r(t)&&Object.keys(t).forEach((function(e){i[e]=c(t[e],n)})),Object.keys(e).forEach((function(o){r(e[o])&&t[o]?i[o]=f(t[o],e[o],n):i[o]=c(e[o],n)})),i}function f(t,e,n){var r=Array.isArray(e),i=Array.isArray(t),o=n||{arrayMerge:h},a=r===i;if(a){if(r){var s=o.arrayMerge||h;return s(t,e,n)}return p(t,e,n)}return c(e,n)}f.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return f(t,n,e)}))};var d=f;t.exports=d},"3f6b":function(t,e,n){t.exports={default:n("51b6"),__esModule:!0}},"40c3":function(t,e,n){var r=n("6b4c"),i=n("5168")("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=a(e=Object(t),i))?n:o?r(e):"Object"==(s=r(e))&&"function"==typeof e.callee?"Arguments":s}},4178:function(t,e,n){var r,i,o,a=n("d864"),s=n("3024"),l=n("32fc"),u=n("1ec9"),c=n("e53d"),h=c.process,p=c.setImmediate,f=c.clearImmediate,d=c.MessageChannel,g=c.Dispatch,v=0,y={},m="onreadystatechange",b=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},x=function(t){b.call(t.data)};p&&f||(p=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return y[++v]=function(){s("function"==typeof t?t:Function(t),e)},r(v),v},f=function(t){delete y[t]},"process"==n("6b4c")(h)?r=function(t){h.nextTick(a(b,t,1))}:g&&g.now?r=function(t){g.now(a(b,t,1))}:d?(i=new d,o=i.port2,i.port1.onmessage=x,r=a(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(r=function(t){c.postMessage(t+"","*")},c.addEventListener("message",x,!1)):r=m in u("script")?function(t){l.appendChild(u("script"))[m]=function(){l.removeChild(this),b.call(t)}}:function(t){setTimeout(a(b,t,1),0)}),t.exports={set:p,clear:f}},"41a0":function(t,e,n){"use strict";var r=n("2aeb"),i=n("4630"),o=n("7f20"),a={};n("32e9")(a,n("2b4c")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(a,{next:i(1,n)}),o(t,e+" Iterator")}},"41b2":function(t,e,n){"use strict";e.__esModule=!0;var r=n("3f6b"),i=o(r);function o(t){return t&&t.__esModule?t:{default:t}}e.default=i.default||function(t){for(var e=1;e255?255:t}function a(t){return t=Math.round(t),t<0?0:t>360?360:t}function s(t){return t<0?0:t>1?1:t}function l(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?o(parseFloat(e)/100*255):o(parseInt(e,10))}function u(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?s(parseFloat(e)/100):s(parseFloat(e))}function c(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function h(t,e,n){return t+(e-t)*n}function p(t,e,n,r,i){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t}function f(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var d=new r["a"](20),g=null;function v(t,e){g&&f(g,e),g=d.put(t,g||e.slice())}function y(t,e){if(t){e=e||[];var n=d.get(t);if(n)return f(e,n);t+="";var r=t.replace(/ /g,"").toLowerCase();if(r in i)return f(e,i[r]),v(t,e),e;var o=r.length;if("#"!==r.charAt(0)){var a=r.indexOf("("),s=r.indexOf(")");if(-1!==a&&s+1===o){var c=r.substr(0,a),h=r.substr(a+1,s-(a+1)).split(","),g=1;switch(c){case"rgba":if(4!==h.length)return 3===h.length?p(e,+h[0],+h[1],+h[2],1):p(e,0,0,0,1);g=u(h.pop());case"rgb":return 3!==h.length?void p(e,0,0,0,1):(p(e,l(h[0]),l(h[1]),l(h[2]),g),v(t,e),e);case"hsla":return 4!==h.length?void p(e,0,0,0,1):(h[3]=u(h[3]),m(h,e),v(t,e),e);case"hsl":return 3!==h.length?void p(e,0,0,0,1):(m(h,e),v(t,e),e);default:return}}p(e,0,0,0,1)}else{if(4===o||5===o){var y=parseInt(r.slice(1,4),16);return y>=0&&y<=4095?(p(e,(3840&y)>>4|(3840&y)>>8,240&y|(240&y)>>4,15&y|(15&y)<<4,5===o?parseInt(r.slice(4),16)/15:1),v(t,e),e):void p(e,0,0,0,1)}if(7===o||9===o){y=parseInt(r.slice(1,7),16);return y>=0&&y<=16777215?(p(e,(16711680&y)>>16,(65280&y)>>8,255&y,9===o?parseInt(r.slice(7),16)/255:1),v(t,e),e):void p(e,0,0,0,1)}}}}function m(t,e){var n=(parseFloat(t[0])%360+360)%360/360,r=u(t[1]),i=u(t[2]),a=i<=.5?i*(r+1):i+r-i*r,s=2*i-a;return e=e||[],p(e,o(255*c(s,a,n+1/3)),o(255*c(s,a,n)),o(255*c(s,a,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function b(t){if(t){var e,n,r=t[0]/255,i=t[1]/255,o=t[2]/255,a=Math.min(r,i,o),s=Math.max(r,i,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var c=((s-r)/6+l/2)/l,h=((s-i)/6+l/2)/l,p=((s-o)/6+l/2)/l;r===s?e=p-h:i===s?e=1/3+c-p:o===s&&(e=2/3+h-c),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,n,u];return null!=t[3]&&f.push(t[3]),f}}function x(t,e){var n=y(t);if(n){for(var r=0;r<3;r++)n[r]=e<0?n[r]*(1-e)|0:(255-n[r])*e+n[r]|0,n[r]>255?n[r]=255:n[r]<0&&(n[r]=0);return I(n,4===n.length?"rgba":"rgb")}}function _(t){var e=y(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function w(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var r=t*(e.length-1),i=Math.floor(r),a=Math.ceil(r),l=e[i],u=e[a],c=r-i;return n[0]=o(h(l[0],u[0],c)),n[1]=o(h(l[1],u[1],c)),n[2]=o(h(l[2],u[2],c)),n[3]=s(h(l[3],u[3],c)),n}}var S=w;function O(t,e,n){if(e&&e.length&&t>=0&&t<=1){var r=t*(e.length-1),i=Math.floor(r),a=Math.ceil(r),l=y(e[i]),u=y(e[a]),c=r-i,p=I([o(h(l[0],u[0],c)),o(h(l[1],u[1],c)),o(h(l[2],u[2],c)),s(h(l[3],u[3],c))],"rgba");return n?{color:p,leftIndex:i,rightIndex:a,value:r}:p}}var M=O;function A(t,e,n,r){var i=y(t);if(t)return i=b(i),null!=e&&(i[0]=a(e)),null!=n&&(i[1]=u(n)),null!=r&&(i[2]=u(r)),I(m(i),"rgba")}function C(t,e){var n=y(t);if(n&&null!=e)return n[3]=s(e),I(n,"rgba")}function I(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function T(t,e){var n=y(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}function k(){return I([Math.round(255*Math.random()),Math.round(255*Math.random()),Math.round(255*Math.random())],"rgb")}},4362:function(t,e,n){e.nextTick=function(t){var e=Array.prototype.slice.call(arguments);e.shift(),setTimeout((function(){t.apply(null,e)}),0)},e.platform=e.arch=e.execPath=e.title="browser",e.pid=1,e.browser=!0,e.env={},e.argv=[],e.binding=function(t){throw new Error("No such module. (Possibly not yet loaded)")},function(){var t,r="/";e.cwd=function(){return r},e.chdir=function(e){t||(t=n("df7c")),r=t.resolve(e,r)}}(),e.exit=e.kill=e.umask=e.dlopen=e.uptime=e.memoryUsage=e.uvCounters=function(){},e.features={}},"43fc":function(t,e,n){"use strict";var r=n("63b6"),i=n("656e"),o=n("4439");r(r.S,"Promise",{try:function(t){var e=i.f(this),n=o(t);return(n.e?e.reject:e.resolve)(n.v),e.promise}})},4439:function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},"454f":function(t,e,n){n("46a7");var r=n("584a").Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},"456d":function(t,e,n){var r=n("4bf8"),i=n("0d58");n("5eda")("keys",(function(){return function(t){return i(r(t))}}))},4581:function(t,e){t.exports=null},4588:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},"45f2":function(t,e,n){var r=n("d9f6").f,i=n("07e3"),o=n("5168")("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},4630:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"467f":function(t,e,n){"use strict";var r=n("7917");t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}},"46a7":function(t,e,n){var r=n("63b6");r(r.S+r.F*!n("8e60"),"Object",{defineProperty:n("d9f6").f})},"47ee":function(t,e,n){var r=n("c3a1"),i=n("9aa9"),o=n("355d");t.exports=function(t){var e=r(t),n=i.f;if(n){var a,s=n(t),l=o.f,u=0;while(s.length>u)l.call(t,a=s[u++])&&e.push(a)}return e}},"481b":function(t,e){t.exports={}},4917:function(t,e,n){"use strict";var r=n("cb7c"),i=n("9def"),o=n("0390"),a=n("5f1b");n("214f")("match",1,(function(t,e,n,s){return[function(n){var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=s(n,t,this);if(e.done)return e.value;var l=r(t),u=String(this);if(!l.global)return a(l,u);var c=l.unicode;l.lastIndex=0;var h,p=[],f=0;while(null!==(h=a(l,u))){var d=String(h[0]);p[f]=d,""===d&&(l.lastIndex=o(u,i(l.lastIndex),c)),f++}return 0===f?null:p}]}))},"4a59":function(t,e,n){var r=n("9b43"),i=n("1fa8"),o=n("33a4"),a=n("cb7c"),s=n("9def"),l=n("27ee"),u={},c={};e=t.exports=function(t,e,n,h,p){var f,d,g,v,y=p?function(){return t}:l(t),m=r(n,h,e?2:1),b=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(f=s(t.length);f>b;b++)if(v=e?m(a(d=t[b])[0],d[1]):m(t[b]),v===u||v===c)return v}else for(g=y.call(t);!(d=g.next()).done;)if(v=i(g,m,d.value,e),v===u||v===c)return v};e.BREAK=u,e.RETURN=c},"4a7b":function(t,e,n){"use strict";var r=n("c532");t.exports=function(t,e){e=e||{};var n={};function i(t,e){return r.isPlainObject(t)&&r.isPlainObject(e)?r.merge(t,e):r.isPlainObject(e)?r.merge({},e):r.isArray(e)?e.slice():e}function o(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(t[n],e[n])}function a(t){if(!r.isUndefined(e[t]))return i(void 0,e[t])}function s(n){return r.isUndefined(e[n])?r.isUndefined(t[n])?void 0:i(void 0,t[n]):i(void 0,e[n])}function l(n){return n in e?i(t[n],e[n]):n in t?i(void 0,t[n]):void 0}var u={url:a,method:a,data:a,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l};return r.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=u[t]||o,i=e(t);r.isUndefined(i)&&e!==l||(n[t]=i)})),n}},"4aa6":function(t,e,n){t.exports=n("dc62")},"4bf8":function(t,e,n){var r=n("be13");t.exports=function(t){return Object(r(t))}},"4c3d":function(t,e,n){"use strict";(function(e){var r=n("c532"),i=n("c8af"),o=n("7917"),a=n("cafa"),s=n("e467"),l={"Content-Type":"application/x-www-form-urlencoded"};function u(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}function c(){var t;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof e&&"[object process]"===Object.prototype.toString.call(e))&&(t=n("b50d")),t}function h(t,e,n){if(r.isString(t))try{return(e||JSON.parse)(t),r.trim(t)}catch(i){if("SyntaxError"!==i.name)throw i}return(n||JSON.stringify)(t)}var p={transitional:a,adapter:c(),transformRequest:[function(t,e){if(i(e,"Accept"),i(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t))return t;if(r.isArrayBufferView(t))return t.buffer;if(r.isURLSearchParams(t))return u(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString();var n,o=r.isObject(t),a=e&&e["Content-Type"];if((n=r.isFileList(t))||o&&"multipart/form-data"===a){var l=this.env&&this.env.FormData;return s(n?{"files[]":t}:t,l&&new l)}return o||"application/json"===a?(u(e,"application/json"),h(t)):t}],transformResponse:[function(t){var e=this.transitional||p.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,a=!n&&"json"===this.responseType;if(a||i&&r.isString(t)&&t.length)try{return JSON.parse(t)}catch(s){if(a){if("SyntaxError"===s.name)throw o.from(s,o.ERR_BAD_RESPONSE,this,null,this.response);throw s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n("4581")},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(t){p.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){p.headers[t]=r.merge(l)})),t.exports=p}).call(this,n("4362"))},"4c95":function(t,e,n){"use strict";var r=n("e53d"),i=n("584a"),o=n("d9f6"),a=n("8e60"),s=n("5168")("species");t.exports=function(t){var e="function"==typeof i[t]?i[t]:r[t];a&&e&&!e[s]&&o.f(e,s,{configurable:!0,get:function(){return this}})}},"4d16":function(t,e,n){t.exports=n("25b0")},"4ee1":function(t,e,n){var r=n("5168")("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(a){}return n}},"4f7f":function(t,e,n){"use strict";var r=n("c26b"),i=n("b39a"),o="Set";t.exports=n("e0b8")(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return r.def(i(this,o),t=0===t?0:t,t)}},r)},"50ed":function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},5147:function(t,e,n){var r=n("2b4c")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(i){}}return!0}},5168:function(t,e,n){var r=n("dbdb")("wks"),i=n("62a0"),o=n("e53d").Symbol,a="function"==typeof o,s=t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))};s.store=r},"51b6":function(t,e,n){n("a3c3"),t.exports=n("584a").Object.assign},"520a":function(t,e,n){"use strict";var r=n("0bfb"),i=RegExp.prototype.exec,o=String.prototype.replace,a=i,s="lastIndex",l=function(){var t=/a/,e=/b*/g;return i.call(t,"a"),i.call(e,"a"),0!==t[s]||0!==e[s]}(),u=void 0!==/()??/.exec("")[1],c=l||u;c&&(a=function(t){var e,n,a,c,h=this;return u&&(n=new RegExp("^"+h.source+"$(?!\\s)",r.call(h))),l&&(e=h[s]),a=i.call(h,t),l&&a&&(h[s]=h.global?a.index+a[0].length:e),u&&a&&a.length>1&&o.call(a[0],n,(function(){for(c=1;c1?arguments[1]:void 0,v=void 0!==g,y=0,m=c(p);if(v&&(g=r(g,d>2?arguments[2]:void 0,2)),void 0==m||f==Array&&s(m))for(e=l(p.length),n=new f(e);e>y;y++)u(n,y,v?g(p[y],y):p[y]);else for(h=m.call(p),n=new f;!(i=h.next()).done;y++)u(n,y,v?a(h,g,[i.value,y],!0):i.value);return n.length=y,n}})},"551c":function(t,e,n){"use strict";var r,i,o,a,s=n("2d00"),l=n("7726"),u=n("9b43"),c=n("23c6"),h=n("5ca1"),p=n("d3f4"),f=n("d8e8"),d=n("f605"),g=n("4a59"),v=n("ebd6"),y=n("1991").set,m=n("8079")(),b=n("a5b8"),x=n("9c80"),_=n("a25f"),w=n("bcaa"),S="Promise",O=l.TypeError,M=l.process,A=M&&M.versions,C=A&&A.v8||"",I=l[S],T="process"==c(M),k=function(){},D=i=b.f,L=!!function(){try{var t=I.resolve(1),e=(t.constructor={})[n("2b4c")("species")]=function(t){t(k,k)};return(T||"function"==typeof PromiseRejectionEvent)&&t.then(k)instanceof e&&0!==C.indexOf("6.6")&&-1===_.indexOf("Chrome/66")}catch(r){}}(),j=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},P=function(t,e){if(!t._n){t._n=!0;var n=t._c;m((function(){var r=t._v,i=1==t._s,o=0,a=function(e){var n,o,a,s=i?e.ok:e.fail,l=e.resolve,u=e.reject,c=e.domain;try{s?(i||(2==t._h&&N(t),t._h=1),!0===s?n=r:(c&&c.enter(),n=s(r),c&&(c.exit(),a=!0)),n===e.promise?u(O("Promise-chain cycle")):(o=j(n))?o.call(n,l,u):l(n)):u(r)}catch(h){c&&!a&&c.exit(),u(h)}};while(n.length>o)a(n[o++]);t._c=[],t._n=!1,e&&!t._h&&E(t)}))}},E=function(t){y.call(l,(function(){var e,n,r,i=t._v,o=R(t);if(o&&(e=x((function(){T?M.emit("unhandledRejection",i,t):(n=l.onunhandledrejection)?n({promise:t,reason:i}):(r=l.console)&&r.error&&r.error("Unhandled promise rejection",i)})),t._h=T||R(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},R=function(t){return 1!==t._h&&0===(t._a||t._c).length},N=function(t){y.call(l,(function(){var e;T?M.emit("rejectionHandled",t):(e=l.onrejectionhandled)&&e({promise:t,reason:t._v})}))},z=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),P(e,!0))},B=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw O("Promise can't be resolved itself");(e=j(t))?m((function(){var r={_w:n,_d:!1};try{e.call(t,u(B,r,1),u(z,r,1))}catch(i){z.call(r,i)}})):(n._v=t,n._s=1,P(n,!1))}catch(r){z.call({_w:n,_d:!1},r)}}};L||(I=function(t){d(this,I,S,"_h"),f(t),r.call(this);try{t(u(B,this,1),u(z,this,1))}catch(e){z.call(this,e)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n("dcbc")(I.prototype,{then:function(t,e){var n=D(v(this,I));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=T?M.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&P(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=u(B,t,1),this.reject=u(z,t,1)},b.f=D=function(t){return t===I||t===a?new o(t):i(t)}),h(h.G+h.W+h.F*!L,{Promise:I}),n("7f20")(I,S),n("7a56")(S),a=n("8378")[S],h(h.S+h.F*!L,S,{reject:function(t){var e=D(this),n=e.reject;return n(t),e.promise}}),h(h.S+h.F*(s||!L),S,{resolve:function(t){return w(s&&this===a?I:this,t)}}),h(h.S+h.F*!(L&&n("5cc5")((function(t){I.all(t)["catch"](k)}))),S,{all:function(t){var e=this,n=D(e),r=n.resolve,i=n.reject,o=x((function(){var n=[],o=0,a=1;g(t,!1,(function(t){var s=o++,l=!1;n.push(void 0),a++,e.resolve(t).then((function(t){l||(l=!0,n[s]=t,--a||r(n))}),i)})),--a||r(n)}));return o.e&&i(o.v),n.promise},race:function(t){var e=this,n=D(e),r=n.reject,i=x((function(){g(t,!1,(function(t){e.resolve(t).then(n.resolve,r)}))}));return i.e&&r(i.v),n.promise}})},5537:function(t,e,n){var r=n("8378"),i=n("7726"),o="__core-js_shared__",a=i[o]||(i[o]={});(t.exports=function(t,e){return a[t]||(a[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n("2d00")?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},5559:function(t,e,n){var r=n("dbdb")("keys"),i=n("62a0");t.exports=function(t){return r[t]||(r[t]=i(t))}},"584a":function(t,e){var n=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},"597f":function(t,e){t.exports=function(t,e,n,r){var i,o=0;function a(){var a=this,s=Number(new Date)-o,l=arguments;function u(){o=Number(new Date),n.apply(a,l)}function c(){i=void 0}r&&!i&&u(),i&&clearTimeout(i),void 0===r&&s>t?u():!0!==e&&(i=setTimeout(r?c:u,void 0===r?t-s:t))}return"boolean"!==typeof e&&(r=n,n=e,e=void 0),a}},"5b4e":function(t,e,n){var r=n("36c3"),i=n("b447"),o=n("0fc9");t.exports=function(t){return function(e,n,a){var s,l=r(e),u=i(l.length),c=o(a,u);if(t&&n!=n){while(u>c)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}}},"5bba":function(t,e,n){n("9d98");var r=n("584a").Object;t.exports=function(t,e){return r.defineProperties(t,e)}},"5c95":function(t,e,n){var r=n("35e8");t.exports=function(t,e,n){for(var i in e)n&&t[i]?t[i]=e[i]:r(t,i,e[i]);return t}},"5ca1":function(t,e,n){var r=n("7726"),i=n("8378"),o=n("32e9"),a=n("2aba"),s=n("9b43"),l="prototype",u=function(t,e,n){var c,h,p,f,d=t&u.F,g=t&u.G,v=t&u.S,y=t&u.P,m=t&u.B,b=g?r:v?r[e]||(r[e]={}):(r[e]||{})[l],x=g?i:i[e]||(i[e]={}),_=x[l]||(x[l]={});for(c in g&&(n=e),n)h=!d&&b&&void 0!==b[c],p=(h?b:n)[c],f=m&&h?s(p,r):y&&"function"==typeof p?s(Function.call,p):p,b&&a(b,c,p,t&u.U),x[c]!=p&&o(x,c,f),y&&_[c]!=p&&(_[c]=p)};r.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},"5cc5":function(t,e,n){var r=n("2b4c")("iterator"),i=!1;try{var o=[7][r]();o["return"]=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(a){}return n}},"5cce":function(t,e){t.exports={version:"0.27.2"}},"5d58":function(t,e,n){t.exports=n("d8d6")},"5dbc":function(t,e,n){var r=n("d3f4"),i=n("8b97").set;t.exports=function(t,e,n){var o,a=e.constructor;return a!==n&&"function"==typeof a&&(o=a.prototype)!==n.prototype&&r(o)&&i&&i(t,o),t}},"5df3":function(t,e,n){"use strict";var r=n("02f4")(!0);n("01f9")(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})}))},"5e83":function(t,e,n){t.exports=n("8580")},"5eda":function(t,e,n){var r=n("5ca1"),i=n("8378"),o=n("79e5");t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o((function(){n(1)})),"Object",a)}},"5f02":function(t,e,n){"use strict";var r=n("c532");t.exports=function(t){return r.isObject(t)&&!0===t.isAxiosError}},"5f1b":function(t,e,n){"use strict";var r=n("23c6"),i=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var o=n.call(t,e);if("object"!==typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},"613b":function(t,e,n){var r=n("5537")("keys"),i=n("ca5a");t.exports=function(t){return r[t]||(r[t]=i(t))}},"626a":function(t,e,n){var r=n("2d95");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},"62a0":function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},"63b6":function(t,e,n){var r=n("e53d"),i=n("584a"),o=n("d864"),a=n("35e8"),s=n("07e3"),l="prototype",u=function(t,e,n){var c,h,p,f=t&u.F,d=t&u.G,g=t&u.S,v=t&u.P,y=t&u.B,m=t&u.W,b=d?i:i[e]||(i[e]={}),x=b[l],_=d?r:g?r[e]:(r[e]||{})[l];for(c in d&&(n=e),n)h=!f&&_&&void 0!==_[c],h&&s(b,c)||(p=h?_[c]:n[c],b[c]=d&&"function"!=typeof _[c]?n[c]:y&&h?o(p,r):m&&_[c]==p?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e[l]=t[l],e}(p):v&&"function"==typeof p?o(Function.call,p):p,v&&((b.virtual||(b.virtual={}))[c]=p,t&u.R&&x&&!x[c]&&a(x,c,p)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},"656e":function(t,e,n){"use strict";var r=n("79aa");function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new i(t)}},6718:function(t,e,n){var r=n("e53d"),i=n("584a"),o=n("b8e3"),a=n("ccb9"),s=n("d9f6").f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},6762:function(t,e,n){"use strict";var r=n("5ca1"),i=n("c366")(!0);r(r.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n("9c6c")("includes")},"67ab":function(t,e,n){var r=n("ca5a")("meta"),i=n("d3f4"),o=n("69a8"),a=n("86cc").f,s=0,l=Object.isExtensible||function(){return!0},u=!n("79e5")((function(){return l(Object.preventExtensions({}))})),c=function(t){a(t,r,{value:{i:"O"+ ++s,w:{}}})},h=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,r)){if(!l(t))return"F";if(!e)return"E";c(t)}return t[r].i},p=function(t,e){if(!o(t,r)){if(!l(t))return!0;if(!e)return!1;c(t)}return t[r].w},f=function(t){return u&&d.NEED&&l(t)&&!o(t,r)&&c(t),t},d=t.exports={KEY:r,NEED:!1,fastKey:h,getWeak:p,onFreeze:f}},"67bb":function(t,e,n){t.exports=n("f921")},6821:function(t,e,n){var r=n("626a"),i=n("be13");t.exports=function(t){return r(i(t))}},"696e":function(t,e,n){n("c207"),n("1654"),n("6c1c"),n("24c5"),n("3c11"),n("43fc"),t.exports=n("584a").Promise},"69a8":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},"69d3":function(t,e,n){n("6718")("asyncIterator")},"6a99":function(t,e,n){var r=n("d3f4");t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},"6abf":function(t,e,n){var r=n("e6f3"),i=n("1691").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},"6b4c":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"6b54":function(t,e,n){"use strict";n("3846");var r=n("cb7c"),i=n("0bfb"),o=n("9e1e"),a="toString",s=/./[a],l=function(t){n("2aba")(RegExp.prototype,a,t,!0)};n("79e5")((function(){return"/a/b"!=s.call({source:"a",flags:"b"})}))?l((function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):s.name!=a&&l((function(){return s.call(this)}))},"6c1c":function(t,e,n){n("c367");for(var r=n("e53d"),i=n("35e8"),o=n("481b"),a=n("5168")("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;l0},t.prototype.connect_=function(){r&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){r&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e,r=u.some((function(t){return!!~n.indexOf(t)}));r&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),p=function(t,e){for(var n=0,r=Object.keys(e);n0},t}(),I="undefined"!==typeof WeakMap?new WeakMap:new n,T=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=h.getInstance(),r=new C(e,n,this);I.set(this,r)}return t}();["observe","unobserve","disconnect"].forEach((function(t){T.prototype[t]=function(){var e;return(e=I.get(this))[t].apply(e,arguments)}}));var k=function(){return"undefined"!==typeof i.ResizeObserver?i.ResizeObserver:T}();e["default"]=k}.call(this,n("c8ba"))},"71c1":function(t,e,n){var r=n("3a38"),i=n("25eb");t.exports=function(t){return function(e,n){var o,a,s=String(i(e)),l=r(n),u=s.length;return l<0||l>=u?t?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?t?s.charAt(l):o:t?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"726e":function(t,e,n){"use strict";n.d(e,"c",(function(){return r})),n.d(e,"b",(function(){return i})),n.d(e,"a",(function(){return o})),n.d(e,"d",(function(){return h})),n.d(e,"e",(function(){return p}));var r=12,i="sans-serif",o=r+"px "+i,a=20,s=100,l="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function u(t){var e={};if("undefined"===typeof JSON)return e;for(var n=0;n=0)u=l*n.length;else for(var p=0;pc){var f,d=l(arguments[c++]),g=h?i(d).concat(h(d)):i(d),v=g.length,y=0;while(v>y)f=g[y++],r&&!p.call(d,f)||(n[f]=d[f])}return n}:u},"75fc":function(t,e,n){"use strict";var r=n("a745"),i=n.n(r),o=n("db2a");function a(t){if(i()(t))return Object(o["a"])(t)}var s=n("67bb"),l=n.n(s),u=n("5d58"),c=n.n(u),h=n("774e"),p=n.n(h);function f(t){if("undefined"!==typeof l.a&&null!=t[c.a]||null!=t["@@iterator"])return p()(t)}var d=n("e630");function g(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function v(t){return a(t)||f(t)||Object(d["a"])(t)||g()}n.d(e,"a",(function(){return v}))},7618:function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n("67bb"),i=n.n(r),o=n("5d58"),a=n.n(o);function s(t){return s="function"==typeof i.a&&"symbol"==typeof a.a?function(t){return typeof t}:function(t){return t&&"function"==typeof i.a&&t.constructor===i.a&&t!==i.a.prototype?"symbol":typeof t},s(t)}},"765d":function(t,e,n){n("6718")("observable")},"768b":function(t,e,n){"use strict";var r=n("a745"),i=n.n(r);function o(t){if(i()(t))return t}var a=n("67bb"),s=n.n(a),l=n("5d58"),u=n.n(l);function c(t,e){var n=null==t?null:"undefined"!==typeof s.a&&t[u.a]||t["@@iterator"];if(null!=n){var r,i,o=[],a=!0,l=!1;try{for(n=n.call(t);!(a=(r=n.next()).done);a=!0)if(o.push(r.value),e&&o.length===e)break}catch(c){l=!0,i=c}finally{try{a||null==n["return"]||n["return"]()}finally{if(l)throw i}}return o}}var h=n("e630");function p(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(t,e){return o(t)||c(t,e)||Object(h["a"])(t,e)||p()}n.d(e,"a",(function(){return f}))},7726:function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"774e":function(t,e,n){t.exports=n("d2d5")},"77f1":function(t,e,n){var r=n("4588"),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},7917:function(t,e,n){"use strict";var r=n("c532");function i(t,e,n,r,i){Error.call(this),this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}r.inherits(i,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var o=i.prototype,a={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(t){a[t]={value:t}})),Object.defineProperties(i,a),Object.defineProperty(o,"isAxiosError",{value:!0}),i.from=function(t,e,n,a,s,l){var u=Object.create(o);return r.toFlatObject(t,u,(function(t){return t!==Error.prototype})),i.call(u,t.message,e,n,a,s),u.name=t.name,l&&Object.assign(u,l),u},t.exports=i},"794b":function(t,e,n){t.exports=!n("8e60")&&!n("294c")((function(){return 7!=Object.defineProperty(n("1ec9")("div"),"a",{get:function(){return 7}}).a}))},"795b":function(t,e,n){t.exports=n("696e")},"79aa":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},"79e5":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"7a29":function(t,e,n){"use strict";(function(t){n.d(e,"p",(function(){return s})),n.d(e,"j",(function(){return u})),n.d(e,"q",(function(){return h})),n.d(e,"e",(function(){return p})),n.d(e,"a",(function(){return f})),n.d(e,"b",(function(){return d})),n.d(e,"i",(function(){return g})),n.d(e,"h",(function(){return v})),n.d(e,"l",(function(){return y})),n.d(e,"n",(function(){return b})),n.d(e,"m",(function(){return x})),n.d(e,"o",(function(){return _})),n.d(e,"k",(function(){return w})),n.d(e,"d",(function(){return S})),n.d(e,"f",(function(){return O})),n.d(e,"g",(function(){return M})),n.d(e,"c",(function(){return A}));var r=n("6d8b"),i=n("41ef"),o=n("22d1"),a=Math.round;function s(t){var e;if(t&&"transparent"!==t){if("string"===typeof t&&t.indexOf("rgba")>-1){var n=Object(i["parse"])(t);n&&(t="rgb("+n[0]+","+n[1]+","+n[2]+")",e=n[3])}}else t="none";return{color:t,opacity:null==e?1:e}}var l=1e-4;function u(t){return t-l}function c(t){return a(1e3*t)/1e3}function h(t){return a(1e4*t)/1e4}function p(t){return"matrix("+c(t[0])+","+c(t[1])+","+c(t[2])+","+c(t[3])+","+h(t[4])+","+h(t[5])+")"}var f={left:"start",right:"end",center:"middle",middle:"middle"};function d(t,e,n){return"top"===n?t+=e/2:"bottom"===n&&(t-=e/2),t}function g(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}function v(t){var e=t.style,n=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),n[0],n[1]].join(",")}function y(t){return t&&!!t.image}function m(t){return t&&!!t.svgElement}function b(t){return y(t)||m(t)}function x(t){return"linear"===t.type}function _(t){return"radial"===t.type}function w(t){return t&&("linear"===t.type||"radial"===t.type)}function S(t){return"url(#"+t+")"}function O(t){var e=t.getGlobalScale(),n=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(n)/Math.log(10)),1)}function M(t){var e=t.x||0,n=t.y||0,i=(t.rotation||0)*r["RADIAN_TO_DEGREE"],o=Object(r["retrieve2"])(t.scaleX,1),s=Object(r["retrieve2"])(t.scaleY,1),l=t.skewX||0,u=t.skewY||0,c=[];return(e||n)&&c.push("translate("+e+"px,"+n+"px)"),i&&c.push("rotate("+i+")"),1===o&&1===s||c.push("scale("+o+","+s+")"),(l||u)&&c.push("skew("+a(l*r["RADIAN_TO_DEGREE"])+"deg, "+a(u*r["RADIAN_TO_DEGREE"])+"deg)"),c.join(" ")}var A=function(){return o["a"].hasGlobalWindow&&Object(r["isFunction"])(window.btoa)?function(t){return window.btoa(unescape(t))}:"undefined"!==typeof t?function(e){return t.from(e).toString("base64")}:function(t){return null}}()}).call(this,n("b639").Buffer)},"7a56":function(t,e,n){"use strict";var r=n("7726"),i=n("86cc"),o=n("9e1e"),a=n("2b4c")("species");t.exports=function(t){var e=r[t];o&&e&&!e[a]&&i.f(e,a,{configurable:!0,get:function(){return this}})}},"7aac":function(t,e,n){"use strict";var r=n("c532");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b3e":function(t,e,n){"use strict";var r,i=n("a3de"); +/** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +function o(t,e){if(!i.canUseDOM||e&&!("addEventListener"in document))return!1;var n="on"+t,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"===typeof a[n]}return!o&&r&&"wheel"===t&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}i.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),t.exports=o},"7cd6":function(t,e,n){var r=n("40c3"),i=n("5168")("iterator"),o=n("481b");t.exports=n("584a").getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[r(t)]}},"7e90":function(t,e,n){var r=n("d9f6"),i=n("e4ae"),o=n("c3a1");t.exports=n("8e60")?Object.defineProperties:function(t,e){i(t);var n,a=o(e),s=a.length,l=0;while(s>l)r.f(t,n=a[l++],e[n]);return t}},"7f20":function(t,e,n){var r=n("86cc").f,i=n("69a8"),o=n("2b4c")("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},"7f7f":function(t,e,n){var r=n("86cc").f,i=Function.prototype,o=/^\s*function ([^ (]*)/,a="name";a in i||n("9e1e")&&r(i,a,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},8079:function(t,e,n){var r=n("7726"),i=n("1991").set,o=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,l="process"==n("2d95")(a);t.exports=function(){var t,e,n,u=function(){var r,i;l&&(r=a.domain)&&r.exit();while(t){i=t.fn,t=t.next;try{i()}catch(o){throw t?n():e=void 0,o}}e=void 0,r&&r.enter()};if(l)n=function(){a.nextTick(u)};else if(!o||r.navigator&&r.navigator.standalone)if(s&&s.resolve){var c=s.resolve(void 0);n=function(){c.then(u)}}else n=function(){i.call(r,u)};else{var h=!0,p=document.createTextNode("");new o(u).observe(p,{characterData:!0}),n=function(){p.data=h=!h}}return function(r){var i={fn:r,next:void 0};e&&(e.next=i),t||(t=i,n()),e=i}}},8378:function(t,e){var n=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},"83b9":function(t,e,n){"use strict";var r=n("d925"),i=n("e683");t.exports=function(t,e){return t&&!r(e)?i(t,e):e}},8436:function(t,e){t.exports=function(){}},"848b":function(t,e,n){"use strict";var r=n("5cce").version,i=n("7917"),o={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){o[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var a={};function s(t,e,n){if("object"!==typeof t)throw new i("options must be an object",i.ERR_BAD_OPTION_VALUE);var r=Object.keys(t),o=r.length;while(o-- >0){var a=r[o],s=e[a];if(s){var l=t[a],u=void 0===l||s(l,a,t);if(!0!==u)throw new i("option "+a+" must be "+u,i.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new i("Unknown option "+a,i.ERR_BAD_OPTION)}}o.transitional=function(t,e,n){function o(t,e){return"[Axios v"+r+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,s){if(!1===t)throw new i(o(r," has been removed"+(e?" in "+e:"")),i.ERR_DEPRECATED);return e&&!a[r]&&(a[r]=!0,console.warn(o(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,s)}},t.exports={assertOptions:s,validators:o}},"84f2":function(t,e){t.exports={}},8580:function(t,e,n){n("ee6d"),t.exports=n("584a").Object.getOwnPropertyDescriptors},"85f2":function(t,e,n){t.exports=n("454f")},"86cc":function(t,e,n){var r=n("cb7c"),i=n("c69a"),o=n("6a99"),a=Object.defineProperty;e.f=n("9e1e")?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},"8aae":function(t,e,n){n("32a6"),t.exports=n("584a").Object.keys},"8b97":function(t,e,n){var r=n("d3f4"),i=n("cb7c"),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{r=n("9b43")(Function.call,n("11e9").f(Object.prototype,"__proto__").set,2),r(t,[]),e=!(t instanceof Array)}catch(i){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:o}},"8c4f":function(t,e,n){"use strict"; +/*! + * vue-router v3.0.2 + * (c) 2018 Evan You + * @license MIT + */function r(t,e){0}function i(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function o(t,e){for(var n in e)t[n]=e[n];return t}var a={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,i=e.parent,a=e.data;a.routerView=!0;var l=i.$createElement,u=n.name,c=i.$route,h=i._routerViewCache||(i._routerViewCache={}),p=0,f=!1;while(i&&i._routerRoot!==i)i.$vnode&&i.$vnode.data.routerView&&p++,i._inactive&&(f=!0),i=i.$parent;if(a.routerViewDepth=p,f)return l(h[u],a,r);var d=c.matched[p];if(!d)return h[u]=null,l();var g=h[u]=d.components[u];a.registerRouteInstance=function(t,e){var n=d.instances[u];(e&&n!==t||!e&&n===t)&&(d.instances[u]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){d.instances[u]=e.componentInstance};var v=a.props=s(c,d.props&&d.props[u]);if(v){v=a.props=o({},v);var y=a.attrs=a.attrs||{};for(var m in v)g.props&&m in g.props||(y[m]=v[m],delete v[m])}return l(g,a,r)}};function s(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}var l=/[!'()*]/g,u=function(t){return"%"+t.charCodeAt(0).toString(16)},c=/%2C/g,h=function(t){return encodeURIComponent(t).replace(l,u).replace(c,",")},p=decodeURIComponent;function f(t,e,n){void 0===e&&(e={});var r,i=n||d;try{r=i(t||"")}catch(a){r={}}for(var o in e)r[o]=e[o];return r}function d(t){var e={};return t=t.trim().replace(/^(\?|#|&)/,""),t?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=p(n.shift()),i=n.length>0?p(n.join("=")):null;void 0===e[r]?e[r]=i:Array.isArray(e[r])?e[r].push(i):e[r]=[e[r],i]})),e):e}function g(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return h(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(h(e)):r.push(h(e)+"="+h(t)))})),r.join("&")}return h(e)+"="+h(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var v=/\/?$/;function y(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try{o=m(o)}catch(s){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:o,params:e.params||{},fullPath:_(e,i),matched:t?x(t):[]};return n&&(a.redirectedFrom=_(n,i)),Object.freeze(a)}function m(t){if(Array.isArray(t))return t.map(m);if(t&&"object"===typeof t){var e={};for(var n in t)e[n]=m(t[n]);return e}return t}var b=y(null,{path:"/"});function x(t){var e=[];while(t)e.unshift(t),t=t.parent;return e}function _(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;void 0===i&&(i="");var o=e||g;return(n||"/")+o(r)+i}function w(t,e){return e===b?t===e:!!e&&(t.path&&e.path?t.path.replace(v,"")===e.path.replace(v,"")&&t.hash===e.hash&&S(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&S(t.query,e.query)&&S(t.params,e.params)))}function S(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every((function(n){var r=t[n],i=e[n];return"object"===typeof r&&"object"===typeof i?S(r,i):String(r)===String(i)}))}function O(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&M(t.query,e.query)}function M(t,e){for(var n in e)if(!(n in t))return!1;return!0}var A,C=[String,Object],I=[String,Array],T={name:"RouterLink",props:{to:{type:C,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:I,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),a=i.location,s=i.route,l=i.href,u={},c=n.options.linkActiveClass,h=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,f=null==h?"router-link-exact-active":h,d=null==this.activeClass?p:this.activeClass,g=null==this.exactActiveClass?f:this.exactActiveClass,v=a.path?y(null,a,null,n):s;u[g]=w(r,v),u[d]=this.exact?u[g]:O(r,v);var m=function(t){k(t)&&(e.replace?n.replace(a):n.push(a))},b={click:k};Array.isArray(this.event)?this.event.forEach((function(t){b[t]=m})):b[this.event]=m;var x={class:u};if("a"===this.tag)x.on=b,x.attrs={href:l};else{var _=D(this.$slots.default);if(_){_.isStatic=!1;var S=_.data=o({},_.data);S.on=b;var M=_.data.attrs=o({},_.data.attrs);M.href=l}else x.on=b}return t(this.tag,x,this.$slots.default)}};function k(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)&&!t.defaultPrevented&&(void 0===t.button||0===t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function D(t){if(t)for(var e,n=0;n=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}function R(t){return t.replace(/\/\//g,"/")}var N=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},z=rt,B=W,V=U,F=X,H=nt,G=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function W(t,e){var n,r=[],i=0,o=0,a="",s=e&&e.delimiter||"/";while(null!=(n=G.exec(t))){var l=n[0],u=n[1],c=n.index;if(a+=t.slice(o,c),o=c+l.length,u)a+=u[1];else{var h=t[o],p=n[2],f=n[3],d=n[4],g=n[5],v=n[6],y=n[7];a&&(r.push(a),a="");var m=null!=p&&null!=h&&h!==p,b="+"===v||"*"===v,x="?"===v||"*"===v,_=n[2]||s,w=d||g;r.push({name:f||i++,prefix:p||"",delimiter:_,optional:x,repeat:b,partial:m,asterisk:!!y,pattern:w?Z(w):y?".*":"[^"+$(_)+"]+?"})}}return o-1&&(s.params[p]=n.params[p]);if(u)return s.path=ot(u.path,s.params,'named route "'+l+'"'),c(u,s,a)}else if(s.path){s.params={};for(var f=0;f=t.length?n():t[i]?e(t[i],(function(){r(i+1)})):r(i+1)};r(0)}function Pt(t){return function(e,n,r){var o=!1,a=0,s=null;Et(t,(function(t,e,n,l){if("function"===typeof t&&void 0===t.cid){o=!0,a++;var u,c=Bt((function(e){zt(e)&&(e=e.default),t.resolved="function"===typeof e?e:A.extend(e),n.components[l]=e,a--,a<=0&&r()})),h=Bt((function(t){var e="Failed to resolve async component "+l+": "+t;s||(s=i(t)?t:new Error(e),r(s))}));try{u=t(c,h)}catch(f){h(f)}if(u)if("function"===typeof u.then)u.then(c,h);else{var p=u.component;p&&"function"===typeof p.then&&p.then(c,h)}}})),o||r()}}function Et(t,e){return Rt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Rt(t){return Array.prototype.concat.apply([],t)}var Nt="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function zt(t){return t.__esModule||Nt&&"Module"===t[Symbol.toStringTag]}function Bt(t){var e=!1;return function(){var n=[],r=arguments.length;while(r--)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Vt=function(t,e){this.router=t,this.base=Ft(e),this.current=b,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function Ft(t){if(!t)if(j){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/",t=t.replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function Ht(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n=0?e.slice(0,n):e;return r+"#"+t}function ie(t){Mt?Dt(re(t)):window.location.hash=t}function oe(t){Mt?Lt(re(t)):window.location.replace(re(t))}var ae=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){e.index=n,e.updateRoute(r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Vt),se=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ht(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Mt&&!1!==t.fallback,this.fallback&&(e="hash"),j||(e="abstract"),this.mode=e,e){case"history":this.history=new Kt(this,t.base);break;case"hash":this.history=new Qt(this,t.base,this.fallback);break;case"abstract":this.history=new ae(this,t.base);break;default:0}},le={currentRoute:{configurable:!0}};function ue(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function ce(t,e,n){var r="hash"===n?"#"+e:e;return t?R(t+"/"+r):r}se.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},le.currentRoute.get=function(){return this.history&&this.history.current},se.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof Kt)n.transitionTo(n.getCurrentLocation());else if(n instanceof Qt){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},se.prototype.beforeEach=function(t){return ue(this.beforeHooks,t)},se.prototype.beforeResolve=function(t){return ue(this.resolveHooks,t)},se.prototype.afterEach=function(t){return ue(this.afterHooks,t)},se.prototype.onReady=function(t,e){this.history.onReady(t,e)},se.prototype.onError=function(t){this.history.onError(t)},se.prototype.push=function(t,e,n){this.history.push(t,e,n)},se.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},se.prototype.go=function(t){this.history.go(t)},se.prototype.back=function(){this.go(-1)},se.prototype.forward=function(){this.go(1)},se.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},se.prototype.resolve=function(t,e,n){var r=ct(t,e||this.history.current,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath,a=this.history.base,s=ce(a,o,this.mode);return{location:r,route:i,href:s,normalizedTo:r,resolved:i}},se.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==b&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(se.prototype,le),se.install=L,se.version="3.0.2",j&&window.Vue&&window.Vue.use(se),e["a"]=se},"8df4":function(t,e,n){"use strict";var r=n("fb60");function i(t){if("function"!==typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,r=n._listeners.length;for(e=0;en},ie64:function(){return b.ie()&&p},firefox:function(){return m()||r},opera:function(){return m()||i},webkit:function(){return m()||o},safari:function(){return b.webkit()},chrome:function(){return m()||a},windows:function(){return m()||u},osx:function(){return m()||l},linux:function(){return m()||c},iphone:function(){return m()||f},mobile:function(){return m()||f||d||h||v},nativeApp:function(){return m()||g},android:function(){return m()||h},ipad:function(){return m()||d}};t.exports=b},"8f60":function(t,e,n){"use strict";var r=n("a159"),i=n("aebd"),o=n("45f2"),a={};n("35e8")(a,n("5168")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(a,{next:i(1,n)}),o(t,e+" Iterator")}},9003:function(t,e,n){var r=n("6b4c");t.exports=Array.isArray||function(t){return"Array"==r(t)}},9093:function(t,e,n){var r=n("ce10"),i=n("e11e").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},9138:function(t,e,n){t.exports=n("35e8")},9152:function(t,e){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +e.read=function(t,e,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,c=-7,h=n?i-1:0,p=n?-1:1,f=t[e+h];for(h+=p,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+t[e+h],h+=p,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+t[e+h],h+=p,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,r),o-=u}return(f?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,d=r?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=c):(a=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-a))<1&&(a--,l*=2),e+=a+h>=1?p/l:p*Math.pow(2,1-h),e*l>=2&&(a++,l/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(e*l-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[n+f]=255&s,f+=d,s/=256,i-=8);for(a=a<0;t[n+f]=255&a,f+=d,a/=256,u-=8);t[n+f-d]|=128*g}},"92fa":function(t,e){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function r(t,e){return function(){t&&t.apply(this,arguments),e&&e.apply(this,arguments)}}t.exports=function(t){return t.reduce((function(t,e){var i,o,a,s,l;for(a in e)if(i=t[a],o=e[a],i&&n.test(a))if("class"===a&&("string"===typeof i&&(l=i,t[a]=i={},i[l]=!0),"string"===typeof o&&(l=o,e[a]=o={},o[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(s in o)i[s]=r(i[s],o[s]);else if(Array.isArray(i))t[a]=i.concat(o);else if(Array.isArray(o))t[a]=[i].concat(o);else for(s in o)i[s]=o[s];else t[a]=e[a];return t}),{})}},9306:function(t,e,n){"use strict";var r=n("8e60"),i=n("c3a1"),o=n("9aa9"),a=n("355d"),s=n("241e"),l=n("335c"),u=Object.assign;t.exports=!u||n("294c")((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=u({},t)[n]||Object.keys(u({},e)).join("")!=r}))?function(t,e){var n=s(t),u=arguments.length,c=1,h=o.f,p=a.f;while(u>c){var f,d=l(arguments[c++]),g=h?i(d).concat(h(d)):i(d),v=g.length,y=0;while(v>y)f=g[y++],r&&!p.call(d,f)||(n[f]=d[f])}return n}:u},9427:function(t,e,n){var r=n("63b6");r(r.S,"Object",{create:n("a159")})},9619:function(t,e,n){var r=n("597f"),i=n("0e15");t.exports={throttle:r,debounce:i}},"96cf":function(t,e){!function(e){"use strict";var n,r=Object.prototype,i=r.hasOwnProperty,o="function"===typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",u="object"===typeof t,c=e.regeneratorRuntime;if(c)u&&(t.exports=c);else{c=e.regeneratorRuntime=u?t.exports:{},c.wrap=x;var h="suspendedStart",p="suspendedYield",f="executing",d="completed",g={},v={};v[a]=function(){return this};var y=Object.getPrototypeOf,m=y&&y(y(L([])));m&&m!==r&&i.call(m,a)&&(v=m);var b=O.prototype=w.prototype=Object.create(v);S.prototype=b.constructor=O,O.constructor=S,O[l]=S.displayName="GeneratorFunction",c.isGeneratorFunction=function(t){var e="function"===typeof t&&t.constructor;return!!e&&(e===S||"GeneratorFunction"===(e.displayName||e.name))},c.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,O):(t.__proto__=O,l in t||(t[l]="GeneratorFunction")),t.prototype=Object.create(b),t},c.awrap=function(t){return{__await:t}},M(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(t,e,n,r){var i=new A(x(t,e,n,r));return c.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},M(b),b[l]="Generator",b[a]=function(){return this},b.toString=function(){return"[object Generator]"},c.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){while(e.length){var r=e.pop();if(r in t)return n.value=r,n.done=!1,n}return n.done=!0,n}},c.values=L,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(k),!t)for(var e in this)"t"===e.charAt(0)&&i.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=n)},stop:function(){this.done=!0;var t=this.tryEntries[0],e=t.completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function r(r,i){return s.type="throw",s.arg=t,e.next=r,i&&(e.method="next",e.arg=n),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var l=i.call(a,"catchLoc"),u=i.call(a,"finallyLoc");if(l&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),k(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:L(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=n),g}}}function x(t,e,n,r){var i=e&&e.prototype instanceof w?e:w,o=Object.create(i.prototype),a=new D(r||[]);return o._invoke=C(t,n,a),o}function _(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}function w(){}function S(){}function O(){}function M(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function A(t){function e(n,r,o,a){var s=_(t[n],t,r);if("throw"!==s.type){var l=s.arg,u=l.value;return u&&"object"===typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then((function(t){e("next",t,o,a)}),(function(t){e("throw",t,o,a)})):Promise.resolve(u).then((function(t){l.value=t,o(l)}),a)}a(s.arg)}var n;function r(t,r){function i(){return new Promise((function(n,i){e(t,r,n,i)}))}return n=n?n.then(i,i):i()}this._invoke=r}function C(t,e,n){var r=h;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===d){if("throw"===i)throw o;return j()}n.method=i,n.arg=o;while(1){var a=n.delegate;if(a){var s=I(a,n);if(s){if(s===g)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===h)throw r=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=f;var l=_(t,e,n);if("normal"===l.type){if(r=n.done?d:p,l.arg===g)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r=d,n.method="throw",n.arg=l.arg)}}}function I(t,e){var r=t.iterator[e.method];if(r===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=n,I(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=_(r,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,g;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=n),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function k(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function D(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function L(t){if(t){var e=t[a];if(e)return e.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function e(){while(++r1)return this.getValueByKeyPath(key,options);if(templateContext&&"object"===typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handler.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random)&&!(lkey in Random)&&!(okey in Random))return placeholder;for(var i=0;i1&&(i=e.context.path.slice(0),i.pop(),i=this.normalizePath(i.concat(r))),t=r[r.length-1];for(var o=e.context.root,a=e.context.templateRoot,s=1;s1/(t+e)*t?!n:n):Math.random()>=.5},bool:function(t,e,n){return this.boolean(t,e,n)},natural:function(t,e){return t="undefined"!==typeof t?parseInt(t,10):0,e="undefined"!==typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},integer:function(t,e){return t="undefined"!==typeof t?parseInt(t,10):-9007199254740992,e="undefined"!==typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},int:function(t,e){return this.integer(t,e)},float:function(t,e,n,r){n=void 0===n?0:n,n=Math.max(Math.min(n,17),0),r=void 0===r?17:r,r=Math.max(Math.min(r,17),0);for(var i=this.integer(t,e)+".",o=0,a=this.natural(n,r);o1&&r--,o=6*r<1?e+6*(n-e)*r:2*r<1?n:3*r<2?e+(n-e)*(2/3-r)*6:e,i[u]=255*o;return i},hsl2hsv:function(t){var e,n,r=t[0],i=t[1]/100,o=t[2]/100;return o*=2,i*=o<=1?o:2-o,n=(o+i)/2,e=2*i/(o+i),[r,100*e,100*n]},hsv2rgb:function(t){var e=t[0]/60,n=t[1]/100,r=t[2]/100,i=Math.floor(e)%6,o=e-Math.floor(e),a=255*r*(1-n),s=255*r*(1-n*o),l=255*r*(1-n*(1-o));switch(r*=255,i){case 0:return[r,l,a];case 1:return[s,r,a];case 2:return[a,r,l];case 3:return[a,s,r];case 4:return[l,a,r];case 5:return[r,a,s]}},hsv2hsl:function(t){var e,n,r=t[0],i=t[1]/100,o=t[2]/100;return n=(2-i)*o,e=i*o,e/=n<=1?n:2-n,n/=2,[r,100*e,100*n]},rgb2hex:function(t,e,n){return"#"+((256+t<<8|e)<<8|n).toString(16).slice(1)},hex2rgb:function(t){return t="0x"+t.slice(1).replace(t.length>4?t:/./g,"$&$&")|0,[t>>16,t>>8&255,255&t]}}},function(t,e){t.exports={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}}},function(t,e,n){var r=n(6),i=n(14);function o(t,e,n,i){return void 0===n?r.natural(t,e):void 0===i?n:r.natural(parseInt(n,10),parseInt(i,10))}t.exports={paragraph:function(t,e){for(var n=o(3,7,t,e),r=[],i=0;i1&&(e=[].slice.call(arguments,0));var n=t.options,r=n.context.templatePath.join("."),i=t.cache[r]=t.cache[r]||{index:0,array:e};return i.array[i.index++%i.array.length]}}},function(t,e){t.exports={first:function(){var t=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(t)},last:function(){var t=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(t)},name:function(t){return this.first()+" "+(t?this.first()+" ":"")+this.last()},cfirst:function(){var t="王 李 张 刘 陈 杨 赵 黄 周 吴 徐 孙 胡 朱 高 林 何 郭 马 罗 梁 宋 郑 谢 韩 唐 冯 于 董 萧 程 曹 袁 邓 许 傅 沈 曾 彭 吕 苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 余 潘 杜 戴 夏 锺 汪 田 任 姜 范 方 石 姚 谭 廖 邹 熊 金 陆 郝 孔 白 崔 康 毛 邱 秦 江 史 顾 侯 邵 孟 龙 万 段 雷 钱 汤 尹 黎 易 常 武 乔 贺 赖 龚 文".split(" ");return this.pick(t)},clast:function(){var t="伟 芳 娜 秀英 敏 静 丽 强 磊 军 洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 平 刚 桂英".split(" ");return this.pick(t)},cname:function(){return this.cfirst()+this.clast()}}},function(t,e){t.exports={url:function(t,e){return(t||this.protocol())+"://"+(e||this.domain())+"/"+this.word()},protocol:function(){return this.pick("http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "))},domain:function(t){return this.word()+"."+(t||this.tld())},tld:function(){return this.pick("com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" "))},email:function(t){return this.character("lower")+"."+this.word()+"@"+(t||this.word()+"."+this.tld())},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)}}},function(t,e,n){var r=n(18),i=["东北","华北","华东","华中","华南","西南","西北"];t.exports={region:function(){return this.pick(i)},province:function(){return this.pick(r).name},city:function(t){var e=this.pick(r),n=this.pick(e.children);return t?[e.name,n.name].join(" "):n.name},county:function(t){var e=this.pick(r),n=this.pick(e.children),i=this.pick(n.children)||{name:"-"};return t?[e.name,n.name,i.name].join(" "):i.name},zip:function(t){for(var e="",n=0;n<(t||6);n++)e+=this.natural(0,9);return e}}},function(t,e){var n={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",471005:"其它区",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};function r(t){for(var e,n={},r=0;ri;i++)o=t.charAt(i),"\n"===o?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return tr!==e&&(tr>e&&(tr=0,er={line:1,column:1,seenCR:!1}),n(er,tr,e),tr=e),er}function x(t){nr>Jn||(Jn>nr&&(nr=Jn,rr=[]),rr.push(t))}function _(t){var e=0;for(t.sort();eJn?(r=t.charAt(Jn),Jn++):(r=null,0===ir&&x(Dn)),null!==r?(Qn=e,n=Ln(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}function ft(){var e,n,r;return e=Jn,92===t.charCodeAt(Jn)?(n=jn,Jn++):(n=null,0===ir&&x(Pn)),null!==n?(En.test(t.charAt(Jn))?(r=t.charAt(Jn),Jn++):(r=null,0===ir&&x(Rn)),null!==r?(Qn=e,n=Nn(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}function dt(){var e,n,r,i;if(e=Jn,t.substr(Jn,2)===zn?(n=zn,Jn+=2):(n=null,0===ir&&x(Bn)),null!==n){if(r=[],Vn.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Fn)),null!==i)for(;null!==i;)r.push(i),Vn.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Fn));else r=St;null!==r?(Qn=e,n=Hn(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function gt(){var e,n,r,i;if(e=Jn,t.substr(Jn,2)===Gn?(n=Gn,Jn+=2):(n=null,0===ir&&x(Wn)),null!==n){if(r=[],Un.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Yn)),null!==i)for(;null!==i;)r.push(i),Un.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Yn));else r=St;null!==r?(Qn=e,n=qn(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function vt(){var e,n,r,i;if(e=Jn,t.substr(Jn,2)===Xn?(n=Xn,Jn+=2):(n=null,0===ir&&x($n)),null!==n){if(r=[],Un.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Yn)),null!==i)for(;null!==i;)r.push(i),Un.test(t.charAt(Jn))?(i=t.charAt(Jn),Jn++):(i=null,0===ir&&x(Yn));else r=St;null!==r?(Qn=e,n=Zn(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)}else Jn=e,e=St;return e}function yt(){var e,n;return e=Jn,t.substr(Jn,2)===zn?(n=zn,Jn+=2):(n=null,0===ir&&x(Bn)),null!==n&&(Qn=e,n=Kn()),null===n?(Jn=e,e=n):e=n,e}function mt(){var e,n,r;return e=Jn,92===t.charCodeAt(Jn)?(n=jn,Jn++):(n=null,0===ir&&x(Pn)),null!==n?(t.length>Jn?(r=t.charAt(Jn),Jn++):(r=null,0===ir&&x(Dn)),null!==r?(Qn=e,n=Ee(r),null===n?(Jn=e,e=n):e=n):(Jn=e,e=St)):(Jn=e,e=St),e}var bt,xt=arguments.length>1?arguments[1]:{},_t={regexp:w},wt=w,St=null,Ot="",Mt="|",At='"|"',Ct=function(t,e){return e?new r(t,e[1]):t},It=function(t,e,n){return new i([t].concat(e).concat([n]))},Tt="^",kt='"^"',Dt=function(){return new n("start")},Lt="$",jt='"$"',Pt=function(){return new n("end")},Et=function(t,e){return new s(t,e)},Rt="Quantifier",Nt=function(t,e){return e&&(t.greedy=!1),t},zt="{",Bt='"{"',Vt=",",Ft='","',Ht="}",Gt='"}"',Wt=function(t,e){return new l(t,e)},Ut=",}",Yt='",}"',qt=function(t){return new l(t,1/0)},Xt=function(t){return new l(t,t)},$t="+",Zt='"+"',Kt=function(){return new l(1,1/0)},Jt="*",Qt='"*"',te=function(){return new l(0,1/0)},ee="?",ne='"?"',re=function(){return new l(0,1)},ie=/^[0-9]/,oe="[0-9]",ae=function(t){return+t.join("")},se="(",le='"("',ue=")",ce='")"',he=function(t){return t},pe=function(t){return new a(t)},fe="?:",de='"?:"',ge=function(t){return new o("non-capture-group",t)},ve="?=",ye='"?="',me=function(t){return new o("positive-lookahead",t)},be="?!",xe='"?!"',_e=function(t){return new o("negative-lookahead",t)},we="CharacterSet",Se="[",Oe='"["',Me="]",Ae='"]"',Ce=function(t,e){return new u(!!t,e)},Ie="CharacterRange",Te="-",ke='"-"',De=function(t,e){return new c(t,e)},Le="Character",je=/^[^\\\]]/,Pe="[^\\\\\\]]",Ee=function(t){return new h(t)},Re=".",Ne='"."',ze=function(){return new n("any-character")},Be="Literal",Ve=/^[^|\\\/.[()?+*$\^]/,Fe="[^|\\\\\\/.[()?+*$\\^]",He="\\b",Ge='"\\\\b"',We=function(){return new n("backspace")},Ue=function(){return new n("word-boundary")},Ye="\\B",qe='"\\\\B"',Xe=function(){return new n("non-word-boundary")},$e="\\d",Ze='"\\\\d"',Ke=function(){return new n("digit")},Je="\\D",Qe='"\\\\D"',tn=function(){return new n("non-digit")},en="\\f",nn='"\\\\f"',rn=function(){return new n("form-feed")},on="\\n",an='"\\\\n"',sn=function(){return new n("line-feed")},ln="\\r",un='"\\\\r"',cn=function(){return new n("carriage-return")},hn="\\s",pn='"\\\\s"',fn=function(){return new n("white-space")},dn="\\S",gn='"\\\\S"',vn=function(){return new n("non-white-space")},yn="\\t",mn='"\\\\t"',bn=function(){return new n("tab")},xn="\\v",_n='"\\\\v"',wn=function(){return new n("vertical-tab")},Sn="\\w",On='"\\\\w"',Mn=function(){return new n("word")},An="\\W",Cn='"\\\\W"',In=function(){return new n("non-word")},Tn="\\c",kn='"\\\\c"',Dn="any character",Ln=function(t){return new v(t)},jn="\\",Pn='"\\\\"',En=/^[1-9]/,Rn="[1-9]",Nn=function(t){return new g(t)},zn="\\0",Bn='"\\\\0"',Vn=/^[0-7]/,Fn="[0-7]",Hn=function(t){return new d(t.join(""))},Gn="\\x",Wn='"\\\\x"',Un=/^[0-9a-fA-F]/,Yn="[0-9a-fA-F]",qn=function(t){return new f(t.join(""))},Xn="\\u",$n='"\\\\u"',Zn=function(t){return new p(t.join(""))},Kn=function(){return new n("null-character")},Jn=0,Qn=0,tr=0,er={line:1,column:1,seenCR:!1},nr=0,rr=[],ir=0;if("startRule"in xt){if(!(xt.startRule in _t))throw new Error("Can't start parsing from rule \""+xt.startRule+'".');wt=_t[xt.startRule]}if(n.offset=m,n.text=y,bt=wt(),null!==bt&&Jn===t.length)return bt;throw _(rr),Qn=Math.max(Jn,nr),new e(rr,Qnr)return!0;var a={path:e,type:t,actual:n,expected:r,action:"is greater than",message:o};return a.message=l.message(a),i.push(a),!1},lessThan:function(t,e,n,r,i,o){if(n=r)return!0;var a={path:e,type:t,actual:n,expected:r,action:"is greater than or equal to",message:o};return a.message=l.message(a),i.push(a),!1},lessThanOrEqualTo:function(t,e,n,r,i,o){if(n<=r)return!0;var a={path:e,type:t,actual:n,expected:r,action:"is less than or equal to",message:o};return a.message=l.message(a),i.push(a),!1}};a.Diff=s,a.Assert=l,t.exports=a},function(t,e,n){t.exports=n(28)},function(t,e,n){var r=n(3);window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(f){window.Event=function(t,e,n,r){var i=document.createEvent("CustomEvent");return i.initCustomEvent(t,e,n,r),i}}var i={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},o="readystatechange loadstart progress abort error load timeout loadend".split(" "),a="timeout withCredentials".split(" "),s="readyState responseURL status statusText responseType response responseText responseXML".split(" "),l={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};function u(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}function c(){var t=function(){var t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,e=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,n=location.href,r=e.exec(n.toLowerCase())||[];return t.test(r[1])}();return window.ActiveXObject?!t&&e()||n():e();function e(){try{return new window._XMLHttpRequest}catch(t){}}function n(){try{return new window._ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}}function h(t){for(var e in u.Mock._mocked){var n=u.Mock._mocked[e];if((!n.rurl||i(n.rurl,t.url))&&(!n.rtype||i(n.rtype,t.type.toLowerCase())))return n}function i(t,e){return"string"===r.type(t)?t===e:"regexp"===r.type(t)?t.test(e):void 0}}function p(t,e){return r.isFunction(t.template)?t.template(e):u.Mock.mock(t.template)}u._settings={timeout:"10-100"},u.setup=function(t){return r.extend(u._settings,t),u._settings},r.extend(u,i),r.extend(u.prototype,i),u.prototype.mock=!0,u.prototype.match=!1,r.extend(u.prototype,{open:function(t,e,n,i,l){var p=this;r.extend(this.custom,{method:t,url:e,async:"boolean"!==typeof n||n,username:i,password:l,options:{url:e,type:t}}),this.custom.timeout=function(t){if("number"===typeof t)return t;if("string"===typeof t&&!~t.indexOf("-"))return parseInt(t,10);if("string"===typeof t&&~t.indexOf("-")){var e=t.split("-"),n=parseInt(e[0],10),r=parseInt(e[1],10);return Math.round(Math.random()*(r-n))+n}}(u._settings.timeout);var f=h(this.custom.options);function d(t){for(var e=0;e0?i(r(t),9007199254740991):0}},"9e1e":function(t,e,n){t.exports=!n("79e5")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},a159:function(t,e,n){var r=n("e4ae"),i=n("7e90"),o=n("1691"),a=n("5559")("IE_PROTO"),s=function(){},l="prototype",u=function(){var t,e=n("1ec9")("iframe"),r=o.length,i="<",a=">";e.style.display="none",n("32fc").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+a+"document.F=Object"+i+"/script"+a),t.close(),u=t.F;while(r--)delete u[l][o[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s[l]=r(t),n=new s,s[l]=null,n[a]=t):n=u(),void 0===e?n:i(n,e)}},a15e:function(t,e,n){"use strict";n.r(e);var r=n("41b2"),i=n.n(r),o=n("1098"),a=n.n(o),s=/%[sdj%]/g,l=function(){};function u(){for(var t=arguments.length,e=Array(t),n=0;n=o)return t;switch(t){case"%s":return String(e[r++]);case"%d":return Number(e[r++]);case"%j":try{return JSON.stringify(e[r++])}catch(n){return"[Circular]"}break;default:return t}})),l=e[r];r()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},S={integer:function(t){return S.number(t)&&parseInt(t,10)===t},float:function(t){return S.number(t)&&!S.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch(e){return!1}},date:function(t){return"function"===typeof t.getTime&&"function"===typeof t.getMonth&&"function"===typeof t.getYear},number:function(t){return!isNaN(t)&&"number"===typeof t},object:function(t){return"object"===("undefined"===typeof t?"undefined":a()(t))&&!S.array(t)},method:function(t){return"function"===typeof t},email:function(t){return"string"===typeof t&&!!t.match(w.email)&&t.length<255},url:function(t){return"string"===typeof t&&!!t.match(w.url)},hex:function(t){return"string"===typeof t&&!!t.match(w.hex)}};function O(t,e,n,r,i){if(t.required&&void 0===e)b(t,e,n,r,i);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;o.indexOf(s)>-1?S[s](e)||r.push(u(i.messages.types[s],t.fullField,t.type)):s&&("undefined"===typeof e?"undefined":a()(e))!==t.type&&r.push(u(i.messages.types[s],t.fullField,t.type))}}var M=O;function A(t,e,n,r,i){var o="number"===typeof t.len,a="number"===typeof t.min,s="number"===typeof t.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=e,h=null,p="number"===typeof e,f="string"===typeof e,d=Array.isArray(e);if(p?h="number":f?h="string":d&&(h="array"),!h)return!1;d&&(c=e.length),f&&(c=e.replace(l,"_").length),o?c!==t.len&&r.push(u(i.messages[h].len,t.fullField,t.len)):a&&!s&&ct.max?r.push(u(i.messages[h].max,t.fullField,t.max)):a&&s&&(ct.max)&&r.push(u(i.messages[h].range,t.fullField,t.min,t.max))}var C=A,I="enum";function T(t,e,n,r,i){t[I]=Array.isArray(t[I])?t[I]:[],-1===t[I].indexOf(e)&&r.push(u(i.messages[I],t.fullField,t[I].join(", ")))}var k=T;function D(t,e,n,r,i){if(t.pattern)if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(e)||r.push(u(i.messages.pattern.mismatch,t.fullField,e,t.pattern));else if("string"===typeof t.pattern){var o=new RegExp(t.pattern);o.test(e)||r.push(u(i.messages.pattern.mismatch,t.fullField,e,t.pattern))}}var L=D,j={required:b,whitespace:_,type:M,range:C,enum:k,pattern:L};function P(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e,"string")&&!t.required)return n();j.required(t,e,r,o,i,"string"),h(e,"string")||(j.type(t,e,r,o,i),j.range(t,e,r,o,i),j.pattern(t,e,r,o,i),!0===t.whitespace&&j.whitespace(t,e,r,o,i))}n(o)}var E=P;function R(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&j.type(t,e,r,o,i)}n(o)}var N=R;function z(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&(j.type(t,e,r,o,i),j.range(t,e,r,o,i))}n(o)}var B=z;function V(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&j.type(t,e,r,o,i)}n(o)}var F=V;function H(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),h(e)||j.type(t,e,r,o,i)}n(o)}var G=H;function W(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&(j.type(t,e,r,o,i),j.range(t,e,r,o,i))}n(o)}var U=W;function Y(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&(j.type(t,e,r,o,i),j.range(t,e,r,o,i))}n(o)}var q=Y;function X(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e,"array")&&!t.required)return n();j.required(t,e,r,o,i,"array"),h(e,"array")||(j.type(t,e,r,o,i),j.range(t,e,r,o,i))}n(o)}var $=X;function Z(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),void 0!==e&&j.type(t,e,r,o,i)}n(o)}var K=Z,J="enum";function Q(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();j.required(t,e,r,o,i),e&&j[J](t,e,r,o,i)}n(o)}var tt=Q;function et(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e,"string")&&!t.required)return n();j.required(t,e,r,o,i),h(e,"string")||j.pattern(t,e,r,o,i)}n(o)}var nt=et;function rt(t,e,n,r,i){var o=[],a=t.required||!t.required&&r.hasOwnProperty(t.field);if(a){if(h(e)&&!t.required)return n();if(j.required(t,e,r,o,i),!h(e)){var s=void 0;s="number"===typeof e?new Date(e):e,j.type(t,s,r,o,i),s&&j.range(t,s.getTime(),r,o,i)}}n(o)}var it=rt;function ot(t,e,n,r,i){var o=[],s=Array.isArray(e)?"array":"undefined"===typeof e?"undefined":a()(e);j.required(t,e,r,o,i,s),n(o)}var at=ot;function st(t,e,n,r,i){var o=t.type,a=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(h(e,o)&&!t.required)return n();j.required(t,e,r,a,i,o),h(e,o)||j.type(t,e,r,a,i)}n(a)}var lt=st,ut={string:E,method:N,number:B,boolean:F,regexp:G,integer:U,float:q,array:$,object:K,enum:tt,pattern:nt,date:it,url:lt,hex:lt,email:lt,required:at};function ct(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var ht=ct();function pt(t){this.rules=null,this._messages=ht,this.define(t)}pt.prototype={messages:function(t){return t&&(this._messages=y(ct(),t)),this._messages},define:function(t){if(!t)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof t?"undefined":a()(t))||Array.isArray(t))throw new Error("Rules must be an object");this.rules={};var e=void 0,n=void 0;for(e in t)t.hasOwnProperty(e)&&(n=t[e],this.rules[e]=Array.isArray(n)?n:[n])},validate:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments[2],o=t,s=n,c=r;if("function"===typeof s&&(c=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var h=this.messages();h===ht&&(h=ct()),y(h,s.messages),s.messages=h}else s.messages=this.messages();var p=void 0,f=void 0,d={},m=s.keys||Object.keys(this.rules);m.forEach((function(n){p=e.rules[n],f=o[n],p.forEach((function(r){var a=r;"function"===typeof a.transform&&(o===t&&(o=i()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:i()({},a),a.validator=e.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=e.getType(a),a.validator&&(d[n]=d[n]||[],d[n].push({rule:a,value:f,source:o,field:n}))}))}));var b={};g(d,s,(function(t,e){var n=t.rule,r=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(t,e){return i()({},e,{fullField:n.fullField+"."+t})}function c(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],c=a;if(Array.isArray(c)||(c=[c]),c.length&&l("async-validator:",c),c.length&&n.message&&(c=[].concat(n.message)),c=c.map(v(n)),s.first&&c.length)return b[n.field]=1,e(c);if(r){if(n.required&&!t.value)return c=n.message?[].concat(n.message).map(v(n)):s.error?[s.error(n,u(s.messages.required,n.field))]:[],e(c);var h={};if(n.defaultField)for(var p in t.value)t.value.hasOwnProperty(p)&&(h[p]=n.defaultField);for(var f in h=i()({},h,t.rule.fields),h)if(h.hasOwnProperty(f)){var d=Array.isArray(h[f])?h[f]:[h[f]];h[f]=d.map(o.bind(null,f))}var g=new pt(h);g.messages(s.messages),t.rule.options&&(t.rule.options.messages=s.messages,t.rule.options.error=s.error),g.validate(t.value,t.rule.options||s,(function(t){e(t&&t.length?c.concat(t):t)}))}else e(c)}r=r&&(n.required||!n.required&&t.value),n.field=t.field;var h=n.validator(n,t.value,c,t.source,s);h&&h.then&&h.then((function(){return c()}),(function(t){return c(t)}))}),(function(t){x(t)}))}else c&&c();function x(t){var e=void 0,n=void 0,r=[],i={};function o(t){Array.isArray(t)?r=r.concat.apply(r,t):r.push(t)}for(e=0;eb;b++)if(v=e?m(a(d=t[b])[0],d[1]):m(t[b]),v===u||v===c)return v}else for(g=y.call(t);!(d=g.next()).done;)if(v=i(g,m,d.value,e),v===u||v===c)return v};e.BREAK=u,e.RETURN=c},a25f:function(t,e,n){var r=n("7726"),i=r.navigator;t.exports=i&&i.userAgent||""},a3c3:function(t,e,n){var r=n("63b6");r(r.S+r.F,"Object",{assign:n("9306")})},a3de:function(t,e,n){"use strict";var r=!("undefined"===typeof window||!window.document||!window.document.createElement),i={canUseDOM:r,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};t.exports=i},a481:function(t,e,n){"use strict";var r=n("cb7c"),i=n("4bf8"),o=n("9def"),a=n("4588"),s=n("0390"),l=n("5f1b"),u=Math.max,c=Math.min,h=Math.floor,p=/\$([$&`']|\d\d?|<[^>]*>)/g,f=/\$([$&`']|\d\d?)/g,d=function(t){return void 0===t?t:String(t)};n("214f")("replace",2,(function(t,e,n,g){return[function(r,i){var o=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,o,i):n.call(String(o),r,i)},function(t,e){var i=g(n,t,this,e);if(i.done)return i.value;var h=r(t),p=String(this),f="function"===typeof e;f||(e=String(e));var y=h.global;if(y){var m=h.unicode;h.lastIndex=0}var b=[];while(1){var x=l(h,p);if(null===x)break;if(b.push(x),!y)break;var _=String(x[0]);""===_&&(h.lastIndex=s(p,o(h.lastIndex),m))}for(var w="",S=0,O=0;O=S&&(w+=p.slice(S,A)+D,S=A+M.length)}return w+p.slice(S)}];function v(t,e,r,o,a,s){var l=r+t.length,u=o.length,c=f;return void 0!==a&&(a=i(a),c=p),n.call(s,c,(function(n,i){var s;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(l);case"<":s=a[i.slice(1,-1)];break;default:var c=+i;if(0===c)return n;if(c>u){var p=h(c/10);return 0===p?n:p<=u?void 0===o[p-1]?i.charAt(1):o[p-1]+i.charAt(1):n}s=o[c-1]}return void 0===s?"":s}))}}))},a4bb:function(t,e,n){t.exports=n("8aae")},a5b8:function(t,e,n){"use strict";var r=n("d8e8");function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)}t.exports.f=function(t){return new i(t)}},a5d8:function(t,e,n){},a745:function(t,e,n){t.exports=n("f410")},a78e:function(t,e,n){var r,i; +/*! + * JavaScript Cookie v2.2.0 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */(function(o){var a=!1;if(r=o,i="function"===typeof r?r.call(e,n,e,t):r,void 0===i||(t.exports=i),a=!0,t.exports=o(),a=!0,!a){var s=window.Cookies,l=window.Cookies=o();l.noConflict=function(){return window.Cookies=s,l}}})((function(){function t(){for(var t=0,e={};t1){if(o=t({path:"/"},r.defaults,o),"number"===typeof o.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*o.expires),o.expires=s}o.expires=o.expires?o.expires.toUTCString():"";try{a=JSON.stringify(i),/^[\{\[]/.test(a)&&(i=a)}catch(v){}i=n.write?n.write(i,e):encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape);var l="";for(var u in o)o[u]&&(l+="; "+u,!0!==o[u]&&(l+="="+o[u]));return document.cookie=e+"="+i+l}e||(a={});for(var c=document.cookie?document.cookie.split("; "):[],h=/(%[0-9A-Z]{2})+/g,p=0;p0?i(r(t),9007199254740991):0}},b50d:function(t,e,n){"use strict";var r=n("c532"),i=n("467f"),o=n("7aac"),a=n("30b5"),s=n("83b9"),l=n("c345"),u=n("3934"),c=n("cafa"),h=n("7917"),p=n("fb60"),f=n("b68a");t.exports=function(t){return new Promise((function(e,n){var d,g=t.data,v=t.headers,y=t.responseType;function m(){t.cancelToken&&t.cancelToken.unsubscribe(d),t.signal&&t.signal.removeEventListener("abort",d)}r.isFormData(g)&&r.isStandardBrowserEnv()&&delete v["Content-Type"];var b=new XMLHttpRequest;if(t.auth){var x=t.auth.username||"",_=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";v.Authorization="Basic "+btoa(x+":"+_)}var w=s(t.baseURL,t.url);function S(){if(b){var r="getAllResponseHeaders"in b?l(b.getAllResponseHeaders()):null,o=y&&"text"!==y&&"json"!==y?b.response:b.responseText,a={data:o,status:b.status,statusText:b.statusText,headers:r,config:t,request:b};i((function(t){e(t),m()}),(function(t){n(t),m()}),a),b=null}}if(b.open(t.method.toUpperCase(),a(w,t.params,t.paramsSerializer),!0),b.timeout=t.timeout,"onloadend"in b?b.onloadend=S:b.onreadystatechange=function(){b&&4===b.readyState&&(0!==b.status||b.responseURL&&0===b.responseURL.indexOf("file:"))&&setTimeout(S)},b.onabort=function(){b&&(n(new h("Request aborted",h.ECONNABORTED,t,b)),b=null)},b.onerror=function(){n(new h("Network Error",h.ERR_NETWORK,t,b,b)),b=null},b.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||c;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(new h(e,r.clarifyTimeoutError?h.ETIMEDOUT:h.ECONNABORTED,t,b)),b=null},r.isStandardBrowserEnv()){var O=(t.withCredentials||u(w))&&t.xsrfCookieName?o.read(t.xsrfCookieName):void 0;O&&(v[t.xsrfHeaderName]=O)}"setRequestHeader"in b&&r.forEach(v,(function(t,e){"undefined"===typeof g&&"content-type"===e.toLowerCase()?delete v[e]:b.setRequestHeader(e,t)})),r.isUndefined(t.withCredentials)||(b.withCredentials=!!t.withCredentials),y&&"json"!==y&&(b.responseType=t.responseType),"function"===typeof t.onDownloadProgress&&b.addEventListener("progress",t.onDownloadProgress),"function"===typeof t.onUploadProgress&&b.upload&&b.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(d=function(t){b&&(n(!t||t&&t.type?new p:t),b.abort(),b=null)},t.cancelToken&&t.cancelToken.subscribe(d),t.signal&&(t.signal.aborted?d():t.signal.addEventListener("abort",d))),g||(g=null);var M=f(w);M&&-1===["http","https","file"].indexOf(M)?n(new h("Unsupported protocol "+M+":",h.ERR_BAD_REQUEST,t)):b.send(g)}))}},b639:function(t,e,n){"use strict";(function(t){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var r=n("1fb5"),i=n("9152"),o=n("e3db");function a(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"===typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(e){return!1}}function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function l(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function b(t){return+t!=t&&(t=0),u.alloc(+t)}function x(t,e){if(u.isBuffer(t))return t.length;if("undefined"!==typeof ArrayBuffer&&"function"===typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!==typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Q(t).length;default:if(r)return Z(t).length;e=(""+e).toLowerCase(),r=!0}}function _(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";t||(t="utf8");while(1)switch(t){case"hex":return N(this,e,n);case"utf8":case"utf-8":return L(this,e,n);case"ascii":return E(this,e,n);case"latin1":case"binary":return R(this,e,n);case"base64":return D(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function w(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function S(t,e,n,r,i){if(0===t.length)return-1;if("string"===typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"===typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:O(t,e,n,r,i);if("number"===typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"===typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):O(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function O(t,e,n,r,i){var o,a=1,s=t.length,l=e.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,l/=2,n/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var c=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){for(var h=!0,p=0;pi&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:u>223?3:u>191?2:1;if(i+h<=n)switch(h){case 1:u<128&&(c=u);break;case 2:o=t[i+1],128===(192&o)&&(l=(31&u)<<6|63&o,l>127&&(c=l));break;case 3:o=t[i+1],a=t[i+2],128===(192&o)&&128===(192&a)&&(l=(15&u)<<12|(63&o)<<6|63&a,l>2047&&(l<55296||l>57343)&&(c=l));break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128===(192&o)&&128===(192&a)&&128===(192&s)&&(l=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s,l>65535&&l<1114112&&(c=l))}null===c?(c=65533,h=1):c>65535&&(c-=65536,r.push(c>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=h}return P(r)}e.Buffer=u,e.SlowBuffer=b,e.INSPECT_MAX_BYTES=50,u.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:a(),e.kMaxLength=s(),u.poolSize=8192,u._augment=function(t){return t.__proto__=u.prototype,t},u.from=function(t,e,n){return c(null,t,e,n)},u.TYPED_ARRAY_SUPPORT&&(u.prototype.__proto__=Uint8Array.prototype,u.__proto__=Uint8Array,"undefined"!==typeof Symbol&&Symbol.species&&u[Symbol.species]===u&&Object.defineProperty(u,Symbol.species,{value:null,configurable:!0})),u.alloc=function(t,e,n){return p(null,t,e,n)},u.allocUnsafe=function(t){return f(null,t)},u.allocUnsafeSlow=function(t){return f(null,t)},u.isBuffer=function(t){return!(null==t||!t._isBuffer)},u.compare=function(t,e){if(!u.isBuffer(t)||!u.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,o=Math.min(n,r);i0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var o=i-r,a=n-e,s=Math.min(o,a),l=this.slice(r,i),c=t.slice(e,n),h=0;hi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return M(this,t,e,n);case"utf8":case"utf-8":return A(this,t,e,n);case"ascii":return C(this,t,e,n);case"latin1":case"binary":return I(this,t,e,n);case"base64":return T(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var j=4096;function P(t){var e=t.length;if(e<=j)return String.fromCharCode.apply(String,t);var n="",r=0;while(rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function V(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function F(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function H(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function G(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function W(t,e,n,r,o){return o||G(t,e,n,4,34028234663852886e22,-34028234663852886e22),i.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,o){return o||G(t,e,n,8,17976931348623157e292,-17976931348623157e292),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r,t<0&&(t=0)):t>r&&(t=r),e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),e0&&(i*=256))r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||B(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||B(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||B(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||B(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||B(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||B(t,e,this.length);var r=this[t],i=1,o=0;while(++o=i&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||B(t,e,this.length);var r=e,i=1,o=this[t+--r];while(r>0&&(i*=256))o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||B(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||B(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||B(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||B(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||B(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||B(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||B(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||B(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||B(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){var i=Math.pow(2,8*n)-1;V(this,t,e,n,i,0)}var o=1,a=0;this[e]=255&t;while(++a=0&&(a*=256))this[e+o]=t/a&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):F(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):F(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):H(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);V(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;this[e]=255&t;while(++o>0)-s&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);V(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;this[e+o]=255&t;while(--o>=0&&(a*=256))t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):F(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):F(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):H(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||V(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return W(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return W(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"===typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function K(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r)}return o}function Q(t){return r.toByteArray(q(t))}function tt(t,e,n,r){for(var i=0;i=e.length||i>=t.length)break;e[i+n]=t[i]}return i}function et(t){return t!==t}}).call(this,n("c8ba"))},b68a:function(t,e,n){"use strict";t.exports=function(t){var e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}},b8e3:function(t,e){t.exports=!0},ba99:function(t,e,n){var r=n("6abf"),i=n("9aa9"),o=n("e4ae"),a=n("e53d").Reflect;t.exports=a&&a.ownKeys||function(t){var e=r.f(o(t)),n=i.f;return n?e.concat(n(t)):e}},bc13:function(t,e,n){var r=n("e53d"),i=r.navigator;t.exports=i&&i.userAgent||""},bc3a:function(t,e,n){t.exports=n("cee4")},bcaa:function(t,e,n){var r=n("cb7c"),i=n("d3f4"),o=n("a5b8");t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t),a=n.resolve;return a(e),n.promise}},bd11:function(t,e){t.exports=g,t.exports.parse=o,t.exports.compile=a,t.exports.tokensToFunction=s,t.exports.tokensToRegExp=d;var n="/",r="./",i=new RegExp(["(\\\\.)","(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?"].join("|"),"g");function o(t,e){var o,a=[],s=0,c=0,h="",p=e&&e.delimiter||n,f=e&&e.delimiters||r,d=!1;while(null!==(o=i.exec(t))){var g=o[0],v=o[1],y=o.index;if(h+=t.slice(c,y),c=y+g.length,v)h+=v[1],d=!0;else{var m="",b=t[c],x=o[2],_=o[3],w=o[4],S=o[5];if(!d&&h.length){var O=h.length-1;f.indexOf(h[O])>-1&&(m=h[O],h=h.slice(0,O))}h&&(a.push(h),h="",d=!1);var M=""!==m&&void 0!==b&&b!==m,A="+"===S||"*"===S,C="?"===S||"*"===S,I=m||p,T=_||w;a.push({name:x||s++,prefix:m,delimiter:I,optional:C,repeat:A,partial:M,pattern:T?u(T):"[^"+l(I)+"]+?"})}}return(h||c-1;else{var y=v.repeat?"(?:"+v.pattern+")(?:"+l(v.delimiter)+"(?:"+v.pattern+"))*":v.pattern;e&&e.push(v),v.optional?v.partial?f+=l(v.prefix)+"("+y+")?":f+="(?:"+l(v.prefix)+"("+y+"))?":f+=l(v.prefix)+"("+y+")"}}return s?(o||(f+="(?:"+u+")?"),f+="$"===p?"$":"(?="+p+")"):(o||(f+="(?:"+u+"(?="+p+"))?"),d||(f+="(?="+u+"|"+p+")")),new RegExp(f,c(i))}function g(t,e,n){return t instanceof RegExp?h(t,e):Array.isArray(t)?p(t,e,n):f(t,e,n)}},bd86:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n("85f2"),i=n.n(r);function o(t,e,n){return e in t?i()(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}},be13:function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},bf0b:function(t,e,n){var r=n("355d"),i=n("aebd"),o=n("36c3"),a=n("1bc3"),s=n("07e3"),l=n("794b"),u=Object.getOwnPropertyDescriptor;e.f=n("8e60")?u:function(t,e){if(t=o(t),e=a(e,!0),l)try{return u(t,e)}catch(n){}if(s(t,e))return i(!r.f.call(t,e),t[e])}},bf90:function(t,e,n){var r=n("36c3"),i=n("bf0b").f;n("ce7e")("getOwnPropertyDescriptor",(function(){return function(t,e){return i(r(t),e)}}))},c098:function(t,e,n){t.exports=n("d4af")},c207:function(t,e){},c26b:function(t,e,n){"use strict";var r=n("86cc").f,i=n("2aeb"),o=n("dcbc"),a=n("9b43"),s=n("f605"),l=n("4a59"),u=n("01f9"),c=n("d53b"),h=n("7a56"),p=n("9e1e"),f=n("67ab").fastKey,d=n("b39a"),g=p?"_s":"size",v=function(t,e){var n,r=f(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};t.exports={getConstructor:function(t,e,n,u){var c=t((function(t,r){s(t,c,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=r&&l(r,n,t[u],t)}));return o(c.prototype,{clear:function(){for(var t=d(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[g]=0},delete:function(t){var n=d(this,e),r=v(n,t);if(r){var i=r.n,o=r.p;delete n._i[r.i],r.r=!0,o&&(o.n=i),i&&(i.p=o),n._f==r&&(n._f=i),n._l==r&&(n._l=o),n[g]--}return!!r},forEach:function(t){d(this,e);var n,r=a(t,arguments.length>1?arguments[1]:void 0,3);while(n=n?n.n:this._f){r(n.v,n.k,this);while(n&&n.r)n=n.p}},has:function(t){return!!v(d(this,e),t)}}),p&&r(c.prototype,"size",{get:function(){return d(this,e)[g]}}),c},def:function(t,e,n){var r,i,o=v(t,e);return o?o.v=n:(t._l=o={i:i=f(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=o),r&&(r.n=o),t[g]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,n){u(t,e,(function(t,n){this._t=d(t,e),this._k=n,this._l=void 0}),(function(){var t=this,e=t._k,n=t._l;while(n&&n.r)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?c(0,"keys"==e?n.k:"values"==e?n.v:[n.k,n.v]):(t._t=void 0,c(1))}),n?"entries":"values",!n,!0),h(e)}}},c345:function(t,e,n){"use strict";var r=n("c532"),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,o,a={};return t?(r.forEach(t.split("\n"),(function(t){if(o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e){if(a[e]&&i.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},c366:function(t,e,n){var r=n("6821"),i=n("9def"),o=n("77f1");t.exports=function(t){return function(e,n,a){var s,l=r(e),u=i(l.length),c=o(a,u);if(t&&n!=n){while(u>c)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in l)&&l[c]===n)return t||c||0;return!t&&-1}}},c367:function(t,e,n){"use strict";var r=n("8436"),i=n("50ed"),o=n("481b"),a=n("36c3");t.exports=n("30f1")(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},c3a1:function(t,e,n){var r=n("e6f3"),i=n("1691");t.exports=Object.keys||function(t){return r(t,i)}},c401:function(t,e,n){"use strict";var r=n("c532"),i=n("4c3d");t.exports=function(t,e,n){var o=this||i;return r.forEach(n,(function(n){t=n.call(o,t,e)})),t}},c532:function(t,e,n){"use strict";var r=n("1d2b"),i=Object.prototype.toString,o=function(t){return function(e){var n=i.call(e);return t[n]||(t[n]=n.slice(8,-1).toLowerCase())}}(Object.create(null));function a(t){return t=t.toLowerCase(),function(e){return o(e)===t}}function s(t){return Array.isArray(t)}function l(t){return"undefined"===typeof t}function u(t){return null!==t&&!l(t)&&null!==t.constructor&&!l(t.constructor)&&"function"===typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var c=a("ArrayBuffer");function h(t){var e;return e="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&c(t.buffer),e}function p(t){return"string"===typeof t}function f(t){return"number"===typeof t}function d(t){return null!==t&&"object"===typeof t}function g(t){if("object"!==o(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}var v=a("Date"),y=a("File"),m=a("Blob"),b=a("FileList");function x(t){return"[object Function]"===i.call(t)}function _(t){return d(t)&&x(t.pipe)}function w(t){var e="[object FormData]";return t&&("function"===typeof FormData&&t instanceof FormData||i.call(t)===e||x(t.toString)&&t.toString()===e)}var S=a("URLSearchParams");function O(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function M(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function A(t,e){if(null!==t&&"undefined"!==typeof t)if("object"!==typeof t&&(t=[t]),s(t))for(var n=0,r=t.length;n0)o=r[i],a[o]||(e[o]=t[o],a[o]=!0);t=Object.getPrototypeOf(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e}function L(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n}function j(t){if(!t)return null;var e=t.length;if(l(e))return null;var n=new Array(e);while(e-- >0)n[e]=t[e];return n}var P=function(t){return function(e){return t&&e instanceof t}}("undefined"!==typeof Uint8Array&&Object.getPrototypeOf(Uint8Array));t.exports={isArray:s,isArrayBuffer:c,isBuffer:u,isFormData:w,isArrayBufferView:h,isString:p,isNumber:f,isObject:d,isPlainObject:g,isUndefined:l,isDate:v,isFile:y,isBlob:m,isFunction:x,isStream:_,isURLSearchParams:S,isStandardBrowserEnv:M,forEach:A,merge:C,extend:I,trim:O,stripBOM:T,inherits:k,toFlatObject:D,kindOf:o,kindOfTest:a,endsWith:L,toArray:j,isTypedArray:P,isFileList:b}},c5f6:function(t,e,n){"use strict";var r=n("7726"),i=n("69a8"),o=n("2d95"),a=n("5dbc"),s=n("6a99"),l=n("79e5"),u=n("9093").f,c=n("11e9").f,h=n("86cc").f,p=n("aa77").trim,f="Number",d=r[f],g=d,v=d.prototype,y=o(n("2aeb")(v))==f,m="trim"in String.prototype,b=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():p(e,3);var n,r,i,o=e.charCodeAt(0);if(43===o||45===o){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+e}for(var a,l=e.slice(2),u=0,c=l.length;ui)return NaN;return parseInt(l,r)}}return+e};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof d&&(y?l((function(){v.valueOf.call(n)})):o(n)!=f)?a(new g(b(e)),n,d):b(e)};for(var x,_=n("9e1e")?u(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;_.length>w;w++)i(g,x=_[w])&&!i(d,x)&&h(d,x,c(g,x));d.prototype=v,v.constructor=d,n("2aba")(r,f,d)}},c69a:function(t,e,n){t.exports=!n("9e1e")&&!n("79e5")((function(){return 7!=Object.defineProperty(n("230e")("div"),"a",{get:function(){return 7}}).a}))},c80c:function(t,e,n){"use strict";n.d(e,"a",(function(){return v}));var r=n("7618"),i=n("67bb"),o=n.n(i),a=n("85f2"),s=n.n(a),l=n("4aa6"),u=n.n(l),c=n("061b"),h=n.n(c),p=n("4d16"),f=n.n(p),d=n("795b"),g=n.n(d);function v(){ +/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ +v=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,i="function"==typeof o.a?o.a:{},a=i.iterator||"@@iterator",l=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function p(t,e,n){return s()(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{p({},"")}catch(P){p=function(t,e,n){return t[e]=n}}function d(t,e,n,r){var i=e&&e.prototype instanceof b?e:b,o=u()(i.prototype),a=new D(r||[]);return o._invoke=function(t,e,n){var r="suspendedStart";return function(i,o){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw o;return j()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=I(a,n);if(s){if(s===m)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=y(t,e,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}(t,n,a),o}function y(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(P){return{type:"throw",arg:P}}}t.wrap=d;var m={};function b(){}function x(){}function _(){}var w={};p(w,a,(function(){return this}));var S=h.a,O=S&&S(S(L([])));O&&O!==e&&n.call(O,a)&&(w=O);var M=_.prototype=b.prototype=u()(w);function A(t){["next","throw","return"].forEach((function(e){p(t,e,(function(t){return this._invoke(e,t)}))}))}function C(t,e){function i(o,a,s,l){var u=y(t[o],t,a);if("throw"!==u.type){var c=u.arg,h=c.value;return h&&"object"==Object(r["a"])(h)&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,l)}),(function(t){i("throw",t,s,l)})):e.resolve(h).then((function(t){c.value=t,s(c)}),(function(t){return i("throw",t,s,l)}))}l(u.arg)}var o;this._invoke=function(t,n){function r(){return new e((function(e,r){i(t,n,e,r)}))}return o=o?o.then(r,r):r()}}function I(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator["return"]&&(e.method="return",e.arg=void 0,I(t,e),"throw"===e.method))return m;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var r=y(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,m;var i=r.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,m):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function k(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function D(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function L(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,i=function e(){for(;++r=0;--i){var o=this.tryEntries[i],a=o.completion;if("root"===o.tryLoc)return r("end");if(o.tryLoc<=this.prev){var s=n.call(o,"catchLoc"),l=n.call(o,"finallyLoc");if(s&&l){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),k(n),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:L(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),m}},t}},c8af:function(t,e,n){"use strict";var r=n("c532");t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},ca5a:function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},cadf:function(t,e,n){"use strict";var r=n("9c6c"),i=n("d53b"),o=n("84f2"),a=n("6821");t.exports=n("01f9")(Array,"Array",(function(t,e){this._t=a(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},cafa:function(t,e,n){"use strict";t.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},cb7c:function(t,e,n){var r=n("d3f4");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},ccb9:function(t,e,n){e.f=n("5168")},cd1c:function(t,e,n){var r=n("e853");t.exports=function(t,e){return new(r(t))(e)}},cd78:function(t,e,n){var r=n("e4ae"),i=n("f772"),o=n("656e");t.exports=function(t,e){if(r(t),i(e)&&e.constructor===t)return e;var n=o.f(t),a=n.resolve;return a(e),n.promise}},ce10:function(t,e,n){var r=n("69a8"),i=n("6821"),o=n("c366")(!1),a=n("613b")("IE_PROTO");t.exports=function(t,e){var n,s=i(t),l=0,u=[];for(n in s)n!=a&&r(s,n)&&u.push(n);while(e.length>l)r(s,n=e[l++])&&(~o(u,n)||u.push(n));return u}},ce7e:function(t,e,n){var r=n("63b6"),i=n("584a"),o=n("294c");t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*o((function(){n(1)})),"Object",a)}},cee4:function(t,e,n){"use strict";var r=n("c532"),i=n("1d2b"),o=n("0a06"),a=n("4a7b"),s=n("4c3d");function l(t){var e=new o(t),n=i(o.prototype.request,e);return r.extend(n,o.prototype,e),r.extend(n,e),n.create=function(e){return l(a(t,e))},n}var u=l(s);u.Axios=o,u.CanceledError=n("fb60"),u.CancelToken=n("8df4"),u.isCancel=n("2e67"),u.VERSION=n("5cce").version,u.toFormData=n("e467"),u.AxiosError=n("7917"),u.Cancel=u.CanceledError,u.all=function(t){return Promise.all(t)},u.spread=n("0df6"),u.isAxiosError=n("5f02"),t.exports=u,t.exports.default=u},d2c8:function(t,e,n){var r=n("aae3"),i=n("be13");t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(i(t))}},d2d5:function(t,e,n){n("1654"),n("549b"),t.exports=n("584a").Array.from},d3f4:function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},d4af:function(t,e,n){"use strict";var r=n("8eb7"),i=n("7b3e"),o=10,a=40,s=800;function l(t){var e=0,n=0,r=0,i=0;return"detail"in t&&(n=t.detail),"wheelDelta"in t&&(n=-t.wheelDelta/120),"wheelDeltaY"in t&&(n=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=n,n=0),r=e*o,i=n*o,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(r=t.deltaX),(r||i)&&t.deltaMode&&(1==t.deltaMode?(r*=a,i*=a):(r*=s,i*=s)),r&&!e&&(e=r<1?-1:1),i&&!n&&(n=i<1?-1:1),{spinX:e,spinY:n,pixelX:r,pixelY:i}}l.getEventType=function(){return r.firefox()?"DOMMouseScroll":i("wheel")?"wheel":"mousewheel"},t.exports=l},d51b:function(t,e,n){"use strict";var r=function(){function t(t){this.value=t}return t}(),i=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new r(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),o=function(){function t(t){this._list=new i,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,o=null;if(null==i[t]){var a=n.len(),s=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var l=n.head;n.remove(l),delete i[l.key],o=l.value,this._lastRemovedEntry=l}s?s.value=e:s=new r(e),s.key=t,n.insertEntry(s),i[t]=s}return o},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}();e["a"]=o},d53b:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},d847:function(t,e,n){t.exports=n("5bba")},d864:function(t,e,n){var r=n("79aa");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},d8d6:function(t,e,n){n("1654"),n("6c1c"),t.exports=n("ccb9").f("iterator")},d8e8:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},d925:function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}},d9f6:function(t,e,n){var r=n("e4ae"),i=n("794b"),o=n("1bc3"),a=Object.defineProperty;e.f=n("8e60")?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},db2a:function(t,e,n){"use strict";function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t){"string"!==typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}function i(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!r;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(e=a+"/"+e,r="/"===a.charAt(0))}return e=n(i(e.split("/"),(function(t){return!!t})),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),a="/"===o(t,-1);return t=n(i(t.split("/"),(function(t){return!!t})),!r).join("/"),t||r||(t="."),t&&a&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(i(t,(function(t,e){if("string"!==typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0;n--)if(""!==t[n])break;return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),o=r(n.split("/")),a=Math.min(i.length,o.length),s=a,l=0;l=1;--o)if(e=t.charCodeAt(o),47===e){if(!i){r=o;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=r(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!==typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,o=0,a=t.length-1;a>=0;--a){var s=t.charCodeAt(a);if(47!==s)-1===r&&(i=!1,r=a+1),46===s?-1===e?e=a:1!==o&&(o=1):-1!==e&&(o=-1);else if(!i){n=a+1;break}}return-1===e||-1===r||0===o||1===o&&e===r-1&&e===n+1?"":t.slice(e,r)};var o="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n("4362"))},e017:function(t,e,n){(function(e){(function(e,n){t.exports=n()})(0,(function(){"use strict";var t=function(t){var e=t.id,n=t.viewBox,r=t.content;this.id=e,this.viewBox=n,this.content=r};t.prototype.stringify=function(){return this.content},t.prototype.toString=function(){return this.stringify()},t.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach((function(e){return delete t[e]}))};var n=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n};"undefined"!==typeof window?window:"undefined"!==typeof e||"undefined"!==typeof self&&self;function r(t,e){return e={exports:{}},t(e,e.exports),e.exports}var i=r((function(t,e){(function(e,n){t.exports=n()})(0,(function(){function t(t){var e=t&&"object"===typeof t;return e&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(t){return Array.isArray(t)?[]:{}}function n(n,r){var i=r&&!0===r.clone;return i&&t(n)?o(e(n),n,r):n}function r(e,r,i){var a=e.slice();return r.forEach((function(r,s){"undefined"===typeof a[s]?a[s]=n(r,i):t(r)?a[s]=o(e[s],r,i):-1===e.indexOf(r)&&a.push(n(r,i))})),a}function i(e,r,i){var a={};return t(e)&&Object.keys(e).forEach((function(t){a[t]=n(e[t],i)})),Object.keys(r).forEach((function(s){t(r[s])&&e[s]?a[s]=o(e[s],r[s],i):a[s]=n(r[s],i)})),a}function o(t,e,o){var a=Array.isArray(e),s=o||{arrayMerge:r},l=s.arrayMerge||r;return a?Array.isArray(t)?l(t,e,o):n(e,o):i(t,e,o)}return o.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return o(t,n,e)}))},o}))})),o=r((function(t,e){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};e.default=n,t.exports=e.default})),a=function(t){return Object.keys(t).map((function(e){var n=t[e].toString().replace(/"/g,""");return e+'="'+n+'"'})).join(" ")},s=o.svg,l=o.xlink,u={};u[s.name]=s.uri,u[l.name]=l.uri;var c=function(t,e){void 0===t&&(t="");var n=i(u,e||{}),r=a(n);return""+t+""},h=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={isMounted:{}};return r.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"===typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return n(c(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,r),e}(t);return h}))}).call(this,n("c8ba"))},e0b8:function(t,e,n){"use strict";var r=n("7726"),i=n("5ca1"),o=n("2aba"),a=n("dcbc"),s=n("67ab"),l=n("4a59"),u=n("f605"),c=n("d3f4"),h=n("79e5"),p=n("5cc5"),f=n("7f20"),d=n("5dbc");t.exports=function(t,e,n,g,v,y){var m=r[t],b=m,x=v?"set":"add",_=b&&b.prototype,w={},S=function(t){var e=_[t];o(_,t,"delete"==t||"has"==t?function(t){return!(y&&!c(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return y&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof b&&(y||_.forEach&&!h((function(){(new b).entries().next()})))){var O=new b,M=O[x](y?{}:-0,1)!=O,A=h((function(){O.has(1)})),C=p((function(t){new b(t)})),I=!y&&h((function(){var t=new b,e=5;while(e--)t[x](e,e);return!t.has(-0)}));C||(b=e((function(e,n){u(e,b,t);var r=d(new m,e,b);return void 0!=n&&l(n,v,r[x],r),r})),b.prototype=_,_.constructor=b),(A||I)&&(S("delete"),S("has"),v&&S("get")),(I||M)&&S(x),y&&_.clear&&delete _.clear}else b=g.getConstructor(e,t,v,x),a(b.prototype,n),s.NEED=!0;return f(b,t),w[t]=b,i(i.G+i.W+i.F*(b!=m),w),y||g.setStrong(b,t,v),b}},e11e:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},e265:function(t,e,n){t.exports=n("ed33")},e3db:function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},e467:function(t,e,n){"use strict";(function(e){var r=n("c532");function i(t,n){n=n||new FormData;var i=[];function o(t){return null===t?"":r.isDate(t)?t.toISOString():r.isArrayBuffer(t)||r.isTypedArray(t)?"function"===typeof Blob?new Blob([t]):e.from(t):t}function a(t,e){if(r.isPlainObject(t)||r.isArray(t)){if(-1!==i.indexOf(t))throw Error("Circular reference detected in "+e);i.push(t),r.forEach(t,(function(t,i){if(!r.isUndefined(t)){var s,l=e?e+"."+i:i;if(t&&!e&&"object"===typeof t)if(r.endsWith(i,"{}"))t=JSON.stringify(t);else if(r.endsWith(i,"[]")&&(s=r.toArray(t)))return void s.forEach((function(t){!r.isUndefined(t)&&n.append(l,o(t))}));a(t,l)}})),i.pop()}else n.append(e,o(t))}return a(t),n}t.exports=i}).call(this,n("b639").Buffer)},e4ae:function(t,e,n){var r=n("f772");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},e53d:function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},e630:function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n("774e"),i=n.n(r),o=n("db2a");function a(t,e){if(t){if("string"===typeof t)return Object(o["a"])(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?i()(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(o["a"])(t,e):void 0}}},e683:function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},e6f3:function(t,e,n){var r=n("07e3"),i=n("36c3"),o=n("5b4e")(!1),a=n("5559")("IE_PROTO");t.exports=function(t,e){var n,s=i(t),l=0,u=[];for(n in s)n!=a&&r(s,n)&&u.push(n);while(e.length>l)r(s,n=e[l++])&&(~o(u,n)||u.push(n));return u}},e853:function(t,e,n){var r=n("d3f4"),i=n("1169"),o=n("2b4c")("species");t.exports=function(t){var e;return i(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!i(e.prototype)||(e=void 0),r(e)&&(e=e[o],null===e&&(e=void 0))),void 0===e?Array:e}},ead6:function(t,e,n){var r=n("f772"),i=n("e4ae"),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{r=n("d864")(Function.call,n("bf0b").f(Object.prototype,"__proto__").set,2),r(t,[]),e=!(t instanceof Array)}catch(i){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:o}},ebd6:function(t,e,n){var r=n("cb7c"),i=n("d8e8"),o=n("2b4c")("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[o])?e:i(n)}},ebfd:function(t,e,n){var r=n("62a0")("meta"),i=n("f772"),o=n("07e3"),a=n("d9f6").f,s=0,l=Object.isExtensible||function(){return!0},u=!n("294c")((function(){return l(Object.preventExtensions({}))})),c=function(t){a(t,r,{value:{i:"O"+ ++s,w:{}}})},h=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,r)){if(!l(t))return"F";if(!e)return"E";c(t)}return t[r].i},p=function(t,e){if(!o(t,r)){if(!l(t))return!0;if(!e)return!1;c(t)}return t[r].w},f=function(t){return u&&d.NEED&&l(t)&&!o(t,r)&&c(t),t},d=t.exports={KEY:r,NEED:!1,fastKey:h,getWeak:p,onFreeze:f}},ed33:function(t,e,n){n("014b"),t.exports=n("584a").Object.getOwnPropertySymbols},ee6d:function(t,e,n){var r=n("63b6"),i=n("ba99"),o=n("36c3"),a=n("bf0b"),s=n("20fd");r(r.S,"Object",{getOwnPropertyDescriptors:function(t){var e,n,r=o(t),l=a.f,u=i(r),c={},h=0;while(u.length>h)n=l(r,e=u[h++]),void 0!==n&&s(c,e,n);return c}})},f1ae:function(t,e,n){"use strict";var r=n("86cc"),i=n("4630");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},f201:function(t,e,n){var r=n("e4ae"),i=n("79aa"),o=n("5168")("species");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[o])?e:i(n)}},f410:function(t,e,n){n("1af6"),t.exports=n("584a").Array.isArray},f559:function(t,e,n){"use strict";var r=n("5ca1"),i=n("9def"),o=n("d2c8"),a="startsWith",s=""[a];r(r.P+r.F*n("5147")(a),"String",{startsWith:function(t){var e=o(this,t,a),n=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return s?s.call(e,r,n):e.slice(n,n+r.length)===r}})},f5df:function(t,e,n){},f605:function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},f6b4:function(t,e,n){"use strict";var r=n("c532");function i(){this.handlers=[]}i.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},i.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=i},f751:function(t,e,n){var r=n("5ca1");r(r.S+r.F,"Object",{assign:n("7333")})},f772:function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},f893:function(t,e,n){t.exports={default:n("f921"),__esModule:!0}},f921:function(t,e,n){n("014b"),n("c207"),n("69d3"),n("765d"),t.exports=n("584a").Symbol},fa5b:function(t,e,n){t.exports=n("5537")("native-function-to-string",Function.toString)},fa99:function(t,e,n){n("0293"),t.exports=n("584a").Object.getPrototypeOf},fab2:function(t,e,n){var r=n("7726").document;t.exports=r&&r.documentElement},fb60:function(t,e,n){"use strict";var r=n("7917"),i=n("c532");function o(t){r.call(this,null==t?"canceled":t,r.ERR_CANCELED),this.name="CanceledError"}i.inherits(o,r,{__CANCEL__:!0}),t.exports=o},fde4:function(t,e,n){n("bf90");var r=n("584a").Object;t.exports=function(t,e){return r.getOwnPropertyDescriptor(t,e)}},fdef:function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"}}]); \ No newline at end of file diff --git a/hippo4j-core/pom.xml b/hippo4j-core/pom.xml new file mode 100644 index 00000000..21c7ba2e --- /dev/null +++ b/hippo4j-core/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-all + ${revision} + + hippo4j-core + + + + org.projectlombok + lombok + + + + cn.hippo4j + hippo4j-common + ${revision} + + + + cn.hippo4j + hippo4j-message + + + + com.aliyun + alibaba-dingtalk-service-sdk + + + + log4j + log4j + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/config/BootstrapPropertiesInterface.java b/hippo4j-core/src/main/java/cn/hippo4j/core/config/BootstrapPropertiesInterface.java new file mode 100644 index 00000000..f297be67 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/config/BootstrapPropertiesInterface.java @@ -0,0 +1,87 @@ +/* + * 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. + */ + +package cn.hippo4j.core.config; + +/** + * Bootstrap properties interface. + */ +public interface BootstrapPropertiesInterface { + + /** + * Get enable. + * + * @return + */ + default Boolean getEnable() { + return null; + } + + /** + * Get username. + * + * @return + */ + default String getUsername() { + return null; + } + + /** + * Get password. + * + * @return + */ + default String getPassword() { + return null; + } + + /** + * Get namespace. + * + * @return + */ + default String getNamespace() { + return null; + } + + /** + * Get item id. + * + * @return + */ + default String getItemId() { + return null; + } + + /** + * Get server addr. + * + * @return + */ + default String getServerAddr() { + return null; + } + + /** + * Get banner. + * + * @return + */ + default Boolean getBanner() { + return null; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/config/ConfigEmptyException.java b/hippo4j-core/src/main/java/cn/hippo4j/core/config/ConfigEmptyException.java new file mode 100644 index 00000000..80584c1f --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/config/ConfigEmptyException.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.core.config; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * Config empty exception. + */ +@Data +@AllArgsConstructor +public class ConfigEmptyException extends RuntimeException { + + /** + * Description + */ + private String description; + + /** + * Action + */ + private String action; +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/config/UtilAutoConfiguration.java b/hippo4j-core/src/main/java/cn/hippo4j/core/config/UtilAutoConfiguration.java new file mode 100644 index 00000000..5c01b9a9 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/config/UtilAutoConfiguration.java @@ -0,0 +1,37 @@ +/* + * 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. + */ + +package cn.hippo4j.core.config; + +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hippo4j.core.toolkit.inet.InetUtilsProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +/** + * Util auto configuration. + */ +@EnableConfigurationProperties(InetUtilsProperties.class) +public class UtilAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public InetUtils hippo4JInetUtils(InetUtilsProperties inetUtilsProperties) { + return new InetUtils(inetUtilsProperties); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java new file mode 100644 index 00000000..101a4e54 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/BeforeCheckConfiguration.java @@ -0,0 +1,89 @@ +/* + * 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. + */ + +package cn.hippo4j.core.enable; + +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.config.BootstrapPropertiesInterface; +import cn.hippo4j.core.config.ConfigEmptyException; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.Objects; + +/** + * Before check configuration. + */ +@Configuration +@AllArgsConstructor +public class BeforeCheckConfiguration { + + private final String bootstrapPropertiesClassName = "cn.hippo4j.starter.config.BootstrapProperties"; + + @Bean + public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolBeforeCheckBean(@Autowired(required = false) BootstrapPropertiesInterface properties, + ConfigurableEnvironment environment) { + boolean checkFlag = properties != null && Objects.equals(bootstrapPropertiesClassName, properties.getClass().getName()) && properties.getEnable(); + if (checkFlag) { + String username = properties.getUsername(); + if (StringUtil.isBlank(username)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool username is empty.", + "Please check whether the [spring.dynamic.thread-pool.username] configuration is empty or an empty string."); + } + String password = properties.getPassword(); + if (StringUtil.isBlank(password)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool password is empty.", + "Please check whether the [spring.dynamic.thread-pool.password] configuration is empty or an empty string."); + } + String namespace = properties.getNamespace(); + if (StringUtil.isBlank(namespace)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool namespace is empty.", + "Please check whether the [spring.dynamic.thread-pool.namespace] configuration is empty or an empty string."); + } + String itemId = properties.getItemId(); + if (StringUtil.isBlank(itemId)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool item id is empty.", + "Please check whether the [spring.dynamic.thread-pool.item-id] configuration is empty or an empty string."); + } + String serverAddr = properties.getServerAddr(); + if (StringUtil.isBlank(serverAddr)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool server addr is empty.", + "Please check whether the [spring.dynamic.thread-pool.server-addr] configuration is empty or an empty string."); + } + String applicationName = environment.getProperty("spring.application.name"); + if (StringUtil.isBlank(applicationName)) { + throw new ConfigEmptyException( + "Web server failed to start. The dynamic thread pool application name is empty.", + "Please check whether the [spring.application.name] configuration is empty or an empty string."); + } + } + + return new BeforeCheckConfiguration.BeforeCheck(); + } + + public class BeforeCheck { + + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/enable/EnableDynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/EnableDynamicThreadPool.java new file mode 100644 index 00000000..75b2a640 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/EnableDynamicThreadPool.java @@ -0,0 +1,33 @@ +/* + * 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. + */ + +package cn.hippo4j.core.enable; + +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +/** + * Annotation to activate dynamic threadPool related configuration. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Import({BeforeCheckConfiguration.class, MarkerConfiguration.class}) +public @interface EnableDynamicThreadPool { + +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/enable/MarkerConfiguration.java b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/MarkerConfiguration.java new file mode 100644 index 00000000..de7c762e --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/enable/MarkerConfiguration.java @@ -0,0 +1,37 @@ +/* + * 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. + */ + +package cn.hippo4j.core.enable; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Marker configuration. + */ +@Configuration +public class MarkerConfiguration { + + @Bean + public Marker dynamicThreadPoolMarkerBean() { + return new Marker(); + } + + public class Marker { + + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java new file mode 100644 index 00000000..90f36547 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPool.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Dynamic thread pool. + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface DynamicThreadPool { + +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolExecutor.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolExecutor.java new file mode 100644 index 00000000..2249fabc --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolExecutor.java @@ -0,0 +1,123 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; +import cn.hippo4j.core.proxy.RejectedProxyUtil; +import cn.hippo4j.core.toolkit.SystemClock; +import lombok.Getter; +import lombok.NonNull; +import lombok.Setter; +import org.springframework.core.task.TaskDecorator; + +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Enhanced dynamic and monitored thread pool. + */ +public class DynamicThreadPoolExecutor extends AbstractDynamicExecutorSupport { + + @Getter + @Setter + private Long executeTimeOut; + + @Getter + @Setter + private TaskDecorator taskDecorator; + + @Getter + @Setter + private RejectedExecutionHandler redundancyHandler; + + @Getter + private final String threadPoolId; + + @Getter + private final AtomicLong rejectCount = new AtomicLong(); + + private final ThreadLocal startTimeThreadLocal = new ThreadLocal<>(); + + public DynamicThreadPoolExecutor(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + TimeUnit unit, + long executeTimeOut, + boolean waitForTasksToCompleteOnShutdown, + long awaitTerminationMillis, + @NonNull BlockingQueue blockingQueue, + @NonNull String threadPoolId, + @NonNull ThreadFactory threadFactory, + @NonNull RejectedExecutionHandler rejectedExecutionHandler) { + super(corePoolSize, maximumPoolSize, keepAliveTime, unit, waitForTasksToCompleteOnShutdown, awaitTerminationMillis, blockingQueue, threadPoolId, threadFactory, rejectedExecutionHandler); + this.threadPoolId = threadPoolId; + this.executeTimeOut = executeTimeOut; + // Number of dynamic proxy denial policies. + RejectedExecutionHandler rejectedProxy = RejectedProxyUtil.createProxy(rejectedExecutionHandler, threadPoolId, rejectCount); + setRejectedExecutionHandler(rejectedProxy); + // Redundant fields to avoid reflecting the acquired fields when sending change information. + redundancyHandler = rejectedExecutionHandler; + } + + @Override + public void execute(@NonNull Runnable command) { + if (taskDecorator != null) { + command = taskDecorator.decorate(command); + } + super.execute(command); + } + + @Override + protected void beforeExecute(Thread t, Runnable r) { + if (executeTimeOut == null || executeTimeOut <= 0) { + return; + } + startTimeThreadLocal.set(SystemClock.now()); + } + + @Override + protected void afterExecute(Runnable r, Throwable t) { + Long startTime; + if ((startTime = startTimeThreadLocal.get()) == null) { + return; + } + try { + long endTime = SystemClock.now(); + long executeTime; + boolean executeTimeAlarm = (executeTime = (endTime - startTime)) > executeTimeOut; + if (executeTimeAlarm && ApplicationContextHolder.getInstance() != null) { + ThreadPoolNotifyAlarmHandler notifyAlarmHandler = ApplicationContextHolder.getBean(ThreadPoolNotifyAlarmHandler.class); + if (notifyAlarmHandler != null) { + notifyAlarmHandler.asyncSendExecuteTimeOutAlarm(threadPoolId, executeTime, executeTimeOut, this); + } + } + } finally { + startTimeThreadLocal.remove(); + } + } + + @Override + protected ExecutorService initializeExecutor() { + return this; + } + + public Long getRejectCountNum() { + return rejectCount.get(); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolWrapper.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolWrapper.java new file mode 100644 index 00000000..a8827549 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/DynamicThreadPoolWrapper.java @@ -0,0 +1,74 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor; + +import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; +import cn.hippo4j.core.executor.support.CommonDynamicThreadPool; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.DisposableBean; + +import java.util.concurrent.Callable; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Dynamic thread-pool wrapper. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolWrapper implements DisposableBean { + + private String tenantId, itemId, threadPoolId; + + private boolean subscribeFlag, initFlag; + + private ThreadPoolExecutor executor; + + public DynamicThreadPoolWrapper(String threadPoolId) { + this(threadPoolId, CommonDynamicThreadPool.getInstance(threadPoolId)); + } + + public DynamicThreadPoolWrapper(String threadPoolId, ThreadPoolExecutor threadPoolExecutor) { + this.threadPoolId = threadPoolId; + this.executor = threadPoolExecutor; + } + + public void execute(Runnable command) { + executor.execute(command); + } + + public Future submit(Runnable task) { + return executor.submit(task); + } + + public Future submit(Callable task) { + return executor.submit(task); + } + + @Override + public void destroy() throws Exception { + if (executor != null && executor instanceof AbstractDynamicExecutorSupport) { + ((AbstractDynamicExecutorSupport) executor).destroy(); + } + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java new file mode 100644 index 00000000..20d9086e --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/ThreadPoolNotifyAlarmHandler.java @@ -0,0 +1,266 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor; + +import cn.hippo4j.common.toolkit.CalculateUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.core.toolkit.IdentifyUtil; +import cn.hippo4j.core.toolkit.TraceContextUtil; +import cn.hippo4j.message.service.Hippo4jSendMessageService; +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import cn.hippo4j.message.request.AlarmNotifyRequest; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hutool.core.util.StrUtil; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.CommandLineRunner; + +import java.util.List; +import java.util.Objects; +import java.util.concurrent.*; + +/** + * Thread-pool alarm notify. + */ +@Slf4j +@RequiredArgsConstructor +public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner { + + @NonNull + private final Hippo4jSendMessageService hippoSendMessageService; + + @Value("${spring.profiles.active:UNKNOWN}") + private String active; + + @Value("${spring.dynamic.thread-pool.item-id:}") + private String itemId; + + @Value("${spring.application.name:UNKNOWN}") + private String applicationName; + + @Value("${spring.dynamic.thread-pool.check-state-interval:5}") + private Integer checkStateInterval; + + private final ScheduledExecutorService ALARM_NOTIFY_EXECUTOR = new ScheduledThreadPoolExecutor( + 1, + r -> new Thread(r, "client.alarm.notify")); + + private final ExecutorService EXECUTE_TIMEOUT_EXECUTOR = ThreadPoolBuilder.builder() + .poolThreadSize(2, 4) + .threadFactory("client.execute.timeout.alarm") + .allowCoreThreadTimeOut(true) + .keepAliveTime(60L, TimeUnit.SECONDS) + .workQueue(new LinkedBlockingQueue(4096)) + .rejected(new ThreadPoolExecutor.AbortPolicy()) + .build(); + + @Override + public void run(String... args) throws Exception { + ALARM_NOTIFY_EXECUTOR.scheduleWithFixedDelay(this, 0, checkStateInterval, TimeUnit.SECONDS); + } + + @Override + public void run() { + List listThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); + listThreadPoolId.forEach(threadPoolId -> { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + if (threadPoolNotifyAlarm != null && threadPoolNotifyAlarm.getAlarm()) { + DynamicThreadPoolWrapper wrapper = GlobalThreadPoolManage.getExecutorService(threadPoolId); + ThreadPoolExecutor executor = wrapper.getExecutor(); + checkPoolCapacityAlarm(threadPoolId, executor); + checkPoolActivityAlarm(threadPoolId, executor); + } + }); + } + + /** + * Check thread pool capacity alarm. + * + * @param threadPoolId + * @param threadPoolExecutor + */ + public void checkPoolCapacityAlarm(String threadPoolId, ThreadPoolExecutor threadPoolExecutor) { + if (hippoSendMessageService == null) { + return; + } + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + BlockingQueue blockingQueue = threadPoolExecutor.getQueue(); + int queueSize = blockingQueue.size(); + int capacity = queueSize + blockingQueue.remainingCapacity(); + int divide = CalculateUtil.divide(queueSize, capacity); + boolean isSend = threadPoolNotifyAlarm.getAlarm() + && divide > threadPoolNotifyAlarm.getCapacityAlarm(); + if (isSend) { + AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); + alarmNotifyRequest.setThreadPoolId(threadPoolId); + hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.CAPACITY, alarmNotifyRequest); + } + } + + /** + * Check thread pool activity alarm. + * + * @param threadPoolId + * @param threadPoolExecutor + */ + public void checkPoolActivityAlarm(String threadPoolId, ThreadPoolExecutor threadPoolExecutor) { + int activeCount = threadPoolExecutor.getActiveCount(); + int maximumPoolSize = threadPoolExecutor.getMaximumPoolSize(); + int divide = CalculateUtil.divide(activeCount, maximumPoolSize); + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + boolean isSend = threadPoolNotifyAlarm.getAlarm() + && divide > threadPoolNotifyAlarm.getActiveAlarm(); + if (isSend) { + AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); + alarmNotifyRequest.setThreadPoolId(threadPoolId); + hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.ACTIVITY, alarmNotifyRequest); + } + } + + /** + * Check pool rejected alarm. + * + * @param threadPoolId + */ + public void checkPoolRejectedAlarm(String threadPoolId) { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + if (Objects.isNull(threadPoolNotifyAlarm) || !threadPoolNotifyAlarm.getAlarm()) { + return; + } + ThreadPoolExecutor threadPoolExecutor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); + checkPoolRejectedAlarm(threadPoolId, threadPoolExecutor); + } + + /** + * Check pool rejected alarm. + * + * @param threadPoolId + * @param threadPoolExecutor + */ + public void checkPoolRejectedAlarm(String threadPoolId, ThreadPoolExecutor threadPoolExecutor) { + if (threadPoolExecutor instanceof DynamicThreadPoolExecutor) { + AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); + alarmNotifyRequest.setThreadPoolId(threadPoolId); + hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.REJECT, alarmNotifyRequest); + } + } + + /** + * Async send execute time out alarm. + * + * @param threadPoolId + * @param executeTime + * @param executeTimeOut + * @param threadPoolExecutor + */ + public void asyncSendExecuteTimeOutAlarm(String threadPoolId, long executeTime, long executeTimeOut, ThreadPoolExecutor threadPoolExecutor) { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + if (Objects.isNull(threadPoolNotifyAlarm) || !threadPoolNotifyAlarm.getAlarm()) { + return; + } + if (threadPoolExecutor instanceof DynamicThreadPoolExecutor) { + try { + AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); + alarmNotifyRequest.setThreadPoolId(threadPoolId); + alarmNotifyRequest.setExecuteTime(executeTime); + alarmNotifyRequest.setExecuteTimeOut(executeTimeOut); + String executeTimeoutTrace = TraceContextUtil.getAndRemove(); + if (StringUtil.isNotBlank(executeTimeoutTrace)) { + alarmNotifyRequest.setExecuteTimeoutTrace(executeTimeoutTrace); + } + Runnable task = () -> hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.TIMEOUT, alarmNotifyRequest); + EXECUTE_TIMEOUT_EXECUTOR.execute(task); + } catch (Throwable ex) { + log.error("Send thread pool execution timeout alarm error.", ex); + } + } + } + + /** + * Send pool config change. + * + * @param request + */ + public void sendPoolConfigChange(ChangeParameterNotifyRequest request) { + request.setActive(active.toUpperCase()); + String appName = StrUtil.isBlank(itemId) ? applicationName : itemId; + request.setAppName(appName); + request.setIdentify(IdentifyUtil.getIdentify()); + hippoSendMessageService.sendChangeMessage(request); + } + + /** + * Build alarm notify req. + * + * @param threadPoolExecutor + * @return + */ + public AlarmNotifyRequest buildAlarmNotifyReq(ThreadPoolExecutor threadPoolExecutor) { + AlarmNotifyRequest request = new AlarmNotifyRequest(); + String appName = StrUtil.isBlank(itemId) ? applicationName : itemId; + request.setAppName(appName); + // 核心线程数 + int corePoolSize = threadPoolExecutor.getCorePoolSize(); + // 最大线程数 + int maximumPoolSize = threadPoolExecutor.getMaximumPoolSize(); + // 线程池当前线程数 (有锁) + int poolSize = threadPoolExecutor.getPoolSize(); + // 活跃线程数 (有锁) + int activeCount = threadPoolExecutor.getActiveCount(); + // 同时进入池中的最大线程数 (有锁) + int largestPoolSize = threadPoolExecutor.getLargestPoolSize(); + // 线程池中执行任务总数量 (有锁) + long completedTaskCount = threadPoolExecutor.getCompletedTaskCount(); + request.setActive(active.toUpperCase()); + request.setIdentify(IdentifyUtil.getIdentify()); + request.setCorePoolSize(corePoolSize); + request.setMaximumPoolSize(maximumPoolSize); + request.setPoolSize(poolSize); + request.setActiveCount(activeCount); + request.setLargestPoolSize(largestPoolSize); + request.setCompletedTaskCount(completedTaskCount); + BlockingQueue queue = threadPoolExecutor.getQueue(); + // 队列元素个数 + int queueSize = queue.size(); + // 队列类型 + String queueType = queue.getClass().getSimpleName(); + // 队列剩余容量 + int remainingCapacity = queue.remainingCapacity(); + // 队列容量 + int queueCapacity = queueSize + remainingCapacity; + request.setQueueName(queueType); + request.setCapacity(queueCapacity); + request.setQueueSize(queueSize); + request.setRemainingCapacity(remainingCapacity); + RejectedExecutionHandler rejectedExecutionHandler = threadPoolExecutor instanceof DynamicThreadPoolExecutor + ? ((DynamicThreadPoolExecutor) threadPoolExecutor).getRedundancyHandler() + : threadPoolExecutor.getRejectedExecutionHandler(); + request.setRejectedExecutionHandlerName(rejectedExecutionHandler.getClass().getSimpleName()); + long rejectCount = threadPoolExecutor instanceof DynamicThreadPoolExecutor + ? ((DynamicThreadPoolExecutor) threadPoolExecutor).getRejectCountNum() + : -1L; + request.setRejectCountNum(rejectCount); + return request; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalNotifyAlarmManage.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalNotifyAlarmManage.java new file mode 100644 index 00000000..5f680e44 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalNotifyAlarmManage.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.manage; + +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Global notify alarm manage. + */ +public class GlobalNotifyAlarmManage { + + private static final Map NOTIFY_ALARM_MAP = new ConcurrentHashMap(); + + public static ThreadPoolNotifyAlarm get(String key) { + return NOTIFY_ALARM_MAP.get(key); + } + + public static void put(String key, ThreadPoolNotifyAlarm val) { + NOTIFY_ALARM_MAP.put(key, val); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java new file mode 100644 index 00000000..17c428b1 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/manage/GlobalThreadPoolManage.java @@ -0,0 +1,140 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.manage; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.support.DynamicThreadPoolService; +import com.google.common.collect.Lists; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Global thread-pool manage. + */ +public class GlobalThreadPoolManage { + + /** + * Dynamic thread pool parameter container. + */ + private static final Map POOL_PARAMETER = new ConcurrentHashMap(); + + /** + * Dynamic thread pool wrapper. + */ + private static final Map EXECUTOR_MAP = new ConcurrentHashMap(); + + /** + * Get the dynamic thread pool wrapper class. + * + * @param threadPoolId + * @return + */ + public static DynamicThreadPoolWrapper getExecutorService(String threadPoolId) { + return EXECUTOR_MAP.get(threadPoolId); + } + + /** + * Get the dynamic thread pool wrapper class. + * + * @param threadPoolId + * @return + */ + public static ThreadPoolExecutor getExecutor(String threadPoolId) { + return Optional.ofNullable(EXECUTOR_MAP.get(threadPoolId)).map(each -> each.getExecutor()).orElse(null); + } + + /** + * Get dynamic thread pool parameters. + * + * @param threadPoolId + * @return + */ + public static ThreadPoolParameter getPoolParameter(String threadPoolId) { + return POOL_PARAMETER.get(threadPoolId); + } + + /** + * Register dynamic thread pool wrapper and parameters. + * + * @param threadPoolId + * @param threadPoolParameter + * @param executor + */ + public static void register(String threadPoolId, ThreadPoolParameter threadPoolParameter, DynamicThreadPoolWrapper executor) { + registerPool(threadPoolId, executor); + registerPoolParameter(threadPoolId, threadPoolParameter); + } + + /** + * Register dynamic thread pool. + * + * @param threadPoolId + * @param executor + */ + public static void registerPool(String threadPoolId, DynamicThreadPoolWrapper executor) { + EXECUTOR_MAP.put(threadPoolId, executor); + } + + /** + * Register dynamic thread pool parameters. + * + * @param threadPoolId + * @param poolParameter + */ + public static void registerPoolParameter(String threadPoolId, ThreadPoolParameter poolParameter) { + POOL_PARAMETER.put(threadPoolId, poolParameter); + } + + /** + * Dynamically register thread pool records and notification records. + * + * @param registerWrapper + */ + public static ThreadPoolExecutor dynamicRegister(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolService dynamicThreadPoolService = ApplicationContextHolder.getBean(DynamicThreadPoolService.class); + return dynamicThreadPoolService.registerDynamicThreadPool(registerWrapper); + } + + /** + * Get the dynamic thread pool identifier collection. + * + * @return + */ + public static List listThreadPoolId() { + return Lists.newArrayList(EXECUTOR_MAP.keySet()); + } + + /** + * Get the number of dynamic thread pools. + *

+ * The data may be inaccurate when the project is initially + * launched because registration is done asynchronously. + * + * @return + */ + public static Integer getThreadPoolNum() { + return listThreadPoolId().size(); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java new file mode 100644 index 00000000..d584b1d6 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/AbstractThreadPoolRuntime.java @@ -0,0 +1,112 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.state; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.common.toolkit.CalculateUtil; +import cn.hutool.core.date.DateUtil; + +import java.util.Date; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Abstract threadPool runtime info. + */ +public abstract class AbstractThreadPoolRuntime { + + /** + * Supplement. + * + * @param threadPoolRunStateInfo + * @return + */ + public abstract ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo threadPoolRunStateInfo); + + /** + * Get pool run state. + * + * @param threadPoolId + * @return + */ + public ThreadPoolRunStateInfo getPoolRunState(String threadPoolId) { + DynamicThreadPoolWrapper executorService = GlobalThreadPoolManage.getExecutorService(threadPoolId); + ThreadPoolExecutor pool = executorService.getExecutor(); + return getPoolRunState(threadPoolId, pool); + } + + /** + * Get pool run state. + * + * @param threadPoolId + * @param executor + * @return + */ + public ThreadPoolRunStateInfo getPoolRunState(String threadPoolId, Executor executor) { + ThreadPoolRunStateInfo stateInfo = new ThreadPoolRunStateInfo(); + ThreadPoolExecutor pool = (ThreadPoolExecutor) executor; + // 核心线程数 + int corePoolSize = pool.getCorePoolSize(); + // 最大线程数 + int maximumPoolSize = pool.getMaximumPoolSize(); + // 线程池当前线程数 (有锁) + int poolSize = pool.getPoolSize(); + // 活跃线程数 (有锁) + int activeCount = pool.getActiveCount(); + // 同时进入池中的最大线程数 (有锁) + int largestPoolSize = pool.getLargestPoolSize(); + // 线程池中执行任务总数量 (有锁) + long completedTaskCount = pool.getCompletedTaskCount(); + // 当前负载 + String currentLoad = CalculateUtil.divide(activeCount, maximumPoolSize) + ""; + // 峰值负载 + String peakLoad = CalculateUtil.divide(largestPoolSize, maximumPoolSize) + ""; + BlockingQueue queue = pool.getQueue(); + // 队列元素个数 + int queueSize = queue.size(); + // 队列类型 + String queueType = queue.getClass().getSimpleName(); + // 队列剩余容量 + int remainingCapacity = queue.remainingCapacity(); + // 队列容量 + int queueCapacity = queueSize + remainingCapacity; + stateInfo.setCoreSize(corePoolSize); + stateInfo.setTpId(threadPoolId); + stateInfo.setPoolSize(poolSize); + stateInfo.setMaximumSize(maximumPoolSize); + stateInfo.setActiveSize(activeCount); + stateInfo.setCurrentLoad(currentLoad); + stateInfo.setPeakLoad(peakLoad); + stateInfo.setQueueType(queueType); + stateInfo.setQueueSize(queueSize); + stateInfo.setQueueCapacity(queueCapacity); + stateInfo.setQueueRemainingCapacity(remainingCapacity); + stateInfo.setLargestPoolSize(largestPoolSize); + stateInfo.setCompletedTaskCount(completedTaskCount); + long rejectCount = + pool instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) pool).getRejectCountNum() : -1L; + stateInfo.setRejectCount(rejectCount); + stateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); + stateInfo.setTimestamp(System.currentTimeMillis()); + return supplement(stateInfo); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java new file mode 100644 index 00000000..521143fb --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolRunStateHandler.java @@ -0,0 +1,82 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.state; + +import cn.hippo4j.common.model.ManyThreadPoolRunStateInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.ByteConvertUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.system.RuntimeInfo; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.core.toolkit.IdentifyUtil.CLIENT_IDENTIFICATION_VALUE; + +/** + * Thread pool run state service. + */ +@Slf4j +@AllArgsConstructor +public class ThreadPoolRunStateHandler extends AbstractThreadPoolRuntime { + + private final InetUtils hippo4JInetUtils; + + private final ConfigurableEnvironment environment; + + @Override + public ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo poolRunStateInfo) { + RuntimeInfo runtimeInfo = new RuntimeInfo(); + String memoryProportion = StrUtil.builder( + "已分配: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), + " / 最大可用: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory())).toString(); + poolRunStateInfo.setCurrentLoad(poolRunStateInfo.getCurrentLoad() + "%"); + poolRunStateInfo.setPeakLoad(poolRunStateInfo.getPeakLoad() + "%"); + String ipAddress = hippo4JInetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + poolRunStateInfo.setHost(ipAddress); + poolRunStateInfo.setMemoryProportion(memoryProportion); + poolRunStateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); + String threadPoolId = poolRunStateInfo.getTpId(); + DynamicThreadPoolWrapper executorService = GlobalThreadPoolManage.getExecutorService(threadPoolId); + ThreadPoolExecutor pool = executorService.getExecutor(); + String rejectedName; + if (pool instanceof AbstractDynamicExecutorSupport) { + rejectedName = ((DynamicThreadPoolExecutor) pool).getRedundancyHandler().getClass().getSimpleName(); + } else { + rejectedName = pool.getRejectedExecutionHandler().getClass().getSimpleName(); + } + poolRunStateInfo.setRejectedName(rejectedName); + ManyThreadPoolRunStateInfo manyThreadPoolRunStateInfo = BeanUtil.toBean(poolRunStateInfo, ManyThreadPoolRunStateInfo.class); + manyThreadPoolRunStateInfo.setIdentify(CLIENT_IDENTIFICATION_VALUE); + String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); + manyThreadPoolRunStateInfo.setActive(active.toUpperCase()); + String threadPoolState = ThreadPoolStatusHandler.getThreadPoolState(pool); + manyThreadPoolRunStateInfo.setState(threadPoolState); + return manyThreadPoolRunStateInfo; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java new file mode 100644 index 00000000..9f25413a --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/state/ThreadPoolStatusHandler.java @@ -0,0 +1,71 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.state; + +import cn.hutool.core.util.ReflectUtil; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Method; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * ThreadPool status handler. + */ +@Slf4j +public class ThreadPoolStatusHandler { + + private static final String RUNNING = "Running"; + + private static final String TERMINATED = "Terminated"; + + private static final String SHUTTING_DOWN = "Shutting down"; + + private static final AtomicBoolean EXCEPTION_FLAG = new AtomicBoolean(Boolean.TRUE); + + /** + * Get thread pool state. + * + * @param executor + * @return + */ + public static String getThreadPoolState(ThreadPoolExecutor executor) { + if (EXCEPTION_FLAG.get()) { + try { + Method runStateLessThan = ReflectUtil.getMethodByName(ThreadPoolExecutor.class, "runStateLessThan"); + cn.hippo4j.common.toolkit.ReflectUtil.setAccessible(runStateLessThan); + AtomicInteger ctl = (AtomicInteger) ReflectUtil.getFieldValue(executor, "ctl"); + int shutdown = (int) ReflectUtil.getFieldValue(executor, "SHUTDOWN"); + boolean runStateLessThanBool = ReflectUtil.invoke(executor, runStateLessThan, ctl.get(), shutdown); + if (runStateLessThanBool) { + return RUNNING; + } + Method runStateAtLeast = ReflectUtil.getMethodByName(ThreadPoolExecutor.class, "runStateAtLeast"); + cn.hippo4j.common.toolkit.ReflectUtil.setAccessible(runStateAtLeast); + int terminated = (int) ReflectUtil.getFieldValue(executor, "TERMINATED"); + String resultStatus = ReflectUtil.invoke(executor, runStateAtLeast, ctl.get(), terminated) ? TERMINATED : SHUTTING_DOWN; + return resultStatus; + } catch (Exception ex) { + log.error("Failed to get thread pool status.", ex); + EXCEPTION_FLAG.set(Boolean.FALSE); + } + } + return "UNKNOWN"; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java new file mode 100644 index 00000000..61f34eec --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractBuildThreadPoolTemplate.java @@ -0,0 +1,155 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.common.toolkit.Assert; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import lombok.Data; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.task.TaskDecorator; + +import java.util.concurrent.*; + +/** + * Abstract build threadPool template. + */ +@Slf4j +public class AbstractBuildThreadPoolTemplate { + + /** + * Thread pool construction initialization parameters. + * + * @return + */ + protected static ThreadPoolInitParam initParam() { + throw new UnsupportedOperationException(); + } + + public static ThreadPoolExecutor buildPool() { + ThreadPoolInitParam initParam = initParam(); + return buildPool(initParam); + } + + public static ThreadPoolExecutor buildPool(ThreadPoolInitParam initParam) { + Assert.notNull(initParam); + ThreadPoolExecutor executorService; + try { + executorService = new ThreadPoolExecutorTemplate(initParam.getCorePoolNum(), + initParam.getMaxPoolNum(), + initParam.getKeepAliveTime(), + initParam.getTimeUnit(), + initParam.getWorkQueue(), + initParam.getThreadFactory(), + initParam.rejectedExecutionHandler); + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException("Error creating thread pool parameter.", ex); + } + executorService.allowCoreThreadTimeOut(initParam.allowCoreThreadTimeOut); + return executorService; + } + + public static ThreadPoolExecutor buildFastPool() { + ThreadPoolInitParam initParam = initParam(); + return buildFastPool(initParam); + } + + public static ThreadPoolExecutor buildFastPool(ThreadPoolInitParam initParam) { + TaskQueue taskQueue = new TaskQueue(initParam.getCapacity()); + FastThreadPoolExecutor fastThreadPoolExecutor; + try { + fastThreadPoolExecutor = new FastThreadPoolExecutor(initParam.getCorePoolNum(), + initParam.getMaxPoolNum(), + initParam.getKeepAliveTime(), + initParam.getTimeUnit(), + taskQueue, + initParam.getThreadFactory(), + initParam.rejectedExecutionHandler); + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException("Error creating thread pool parameter.", ex); + } + taskQueue.setExecutor(fastThreadPoolExecutor); + fastThreadPoolExecutor.allowCoreThreadTimeOut(initParam.allowCoreThreadTimeOut); + return fastThreadPoolExecutor; + } + + public static DynamicThreadPoolExecutor buildDynamicPool(ThreadPoolInitParam initParam) { + Assert.notNull(initParam); + DynamicThreadPoolExecutor dynamicThreadPoolExecutor; + try { + dynamicThreadPoolExecutor = new DynamicThreadPoolExecutor( + initParam.getCorePoolNum(), + initParam.getMaxPoolNum(), + initParam.getKeepAliveTime(), + initParam.getTimeUnit(), + initParam.getExecuteTimeOut(), + initParam.getWaitForTasksToCompleteOnShutdown(), + initParam.getAwaitTerminationMillis(), + initParam.getWorkQueue(), + initParam.getThreadPoolId(), + initParam.getThreadFactory(), + initParam.getRejectedExecutionHandler()); + } catch (IllegalArgumentException ex) { + throw new IllegalArgumentException(String.format("Error creating thread pool parameter. threadPool id: %s", initParam.getThreadPoolId()), ex); + } + dynamicThreadPoolExecutor.setTaskDecorator(initParam.getTaskDecorator()); + dynamicThreadPoolExecutor.allowCoreThreadTimeOut(initParam.allowCoreThreadTimeOut); + return dynamicThreadPoolExecutor; + } + + @Data + @Accessors(chain = true) + public static class ThreadPoolInitParam { + + private Integer corePoolNum; + + private Integer maxPoolNum; + + private Long keepAliveTime; + + private TimeUnit timeUnit; + + private Long executeTimeOut; + + private Integer capacity; + + private BlockingQueue workQueue; + + private RejectedExecutionHandler rejectedExecutionHandler; + + private ThreadFactory threadFactory; + + private String threadPoolId; + + private TaskDecorator taskDecorator; + + private Long awaitTerminationMillis; + + private Boolean waitForTasksToCompleteOnShutdown; + + private Boolean allowCoreThreadTimeOut = false; + + public ThreadPoolInitParam(String threadNamePrefix, boolean isDaemon) { + this.threadPoolId = threadNamePrefix; + this.threadFactory = ThreadFactoryBuilder.builder() + .prefix(threadNamePrefix) + .daemon(isDaemon) + .build(); + } + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicExecutorConfigurationSupport.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractDynamicExecutorSupport.java similarity index 62% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicExecutorConfigurationSupport.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractDynamicExecutorSupport.java index d15ca71b..cff8087c 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicExecutorConfigurationSupport.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/AbstractDynamicExecutorSupport.java @@ -1,4 +1,21 @@ -package cn.hippo4j.starter.core; +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; @@ -8,32 +25,28 @@ import java.util.concurrent.*; /** * Dynamic executor configuration support. - * - * @author chen.ma - * @date 2021/11/28 12:17 */ @Slf4j -public abstract class DynamicExecutorConfigurationSupport extends ThreadPoolExecutor - implements InitializingBean, DisposableBean { +public abstract class AbstractDynamicExecutorSupport extends ThreadPoolExecutor implements InitializingBean, DisposableBean { private String threadPoolId; private ExecutorService executor; - private long awaitTerminationMillis = 0; + public long awaitTerminationMillis; - private boolean waitForTasksToCompleteOnShutdown = false; + public boolean waitForTasksToCompleteOnShutdown; - public DynamicExecutorConfigurationSupport(int corePoolSize, - int maximumPoolSize, - long keepAliveTime, - TimeUnit unit, - boolean waitForTasksToCompleteOnShutdown, - long awaitTerminationMillis, - BlockingQueue workQueue, - String threadPoolId, - ThreadFactory threadFactory, - RejectedExecutionHandler handler) { + public AbstractDynamicExecutorSupport(int corePoolSize, + int maximumPoolSize, + long keepAliveTime, + TimeUnit unit, + boolean waitForTasksToCompleteOnShutdown, + long awaitTerminationMillis, + BlockingQueue workQueue, + String threadPoolId, + ThreadFactory threadFactory, + RejectedExecutionHandler handler) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); this.threadPoolId = threadPoolId; this.waitForTasksToCompleteOnShutdown = waitForTasksToCompleteOnShutdown; @@ -81,6 +94,17 @@ public abstract class DynamicExecutorConfigurationSupport extends ThreadPoolExec this.executor = initializeExecutor(); } + /** + * Set support param. + * + * @param awaitTerminationMillis + * @param waitForTasksToCompleteOnShutdown + */ + public void setSupportParam(long awaitTerminationMillis, boolean waitForTasksToCompleteOnShutdown) { + this.awaitTerminationMillis = awaitTerminationMillis; + this.waitForTasksToCompleteOnShutdown = waitForTasksToCompleteOnShutdown; + } + /** * Perform a shutdown on the underlying ExecutorService. * @@ -127,17 +151,16 @@ public abstract class DynamicExecutorConfigurationSupport extends ThreadPoolExec if (!executor.awaitTermination(this.awaitTerminationMillis, TimeUnit.MILLISECONDS)) { if (log.isWarnEnabled()) { log.warn("Timed out while waiting for executor" + - (this.threadPoolId != null ? " '" + this.threadPoolId + "'" : "") + " to terminate"); + (this.threadPoolId != null ? " '" + this.threadPoolId + "'" : "") + " to terminate."); } } } catch (InterruptedException ex) { if (log.isWarnEnabled()) { log.warn("Interrupted while waiting for executor" + - (this.threadPoolId != null ? " '" + this.threadPoolId + "'" : "") + " to terminate"); + (this.threadPoolId != null ? " '" + this.threadPoolId + "'" : "") + " to terminate."); } Thread.currentThread().interrupt(); } } } - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/CommonDynamicThreadPool.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/CommonDynamicThreadPool.java new file mode 100644 index 00000000..186dd47c --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/CommonDynamicThreadPool.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; + +import java.util.concurrent.TimeUnit; + +/** + * Common dynamic thread-pool. + */ +public class CommonDynamicThreadPool { + + public static DynamicThreadPoolExecutor getInstance(String threadPoolId) { + DynamicThreadPoolExecutor dynamicThreadPoolExecutor = (DynamicThreadPoolExecutor) ThreadPoolBuilder.builder() + .dynamicPool() + .threadFactory(threadPoolId) + .poolThreadSize(2, 4) + .keepAliveTime(60L, TimeUnit.SECONDS) + .workQueue(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, 1024) + .build(); + return dynamicThreadPoolExecutor; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/DynamicThreadPoolService.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/DynamicThreadPoolService.java new file mode 100644 index 00000000..b967a08c --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/DynamicThreadPoolService.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Dynamic thread-pool service. + */ +public interface DynamicThreadPoolService { + + /** + * Registering dynamic thread pools at runtime. + * + * @param registerWrapper + * @return + */ + ThreadPoolExecutor registerDynamicThreadPool(DynamicThreadPoolRegisterWrapper registerWrapper); +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/FastThreadPoolExecutor.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/FastThreadPoolExecutor.java similarity index 66% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/FastThreadPoolExecutor.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/FastThreadPoolExecutor.java index ff6d6f83..31835191 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/FastThreadPoolExecutor.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/FastThreadPoolExecutor.java @@ -1,4 +1,21 @@ -package cn.hippo4j.starter.toolkit.thread; +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; import lombok.extern.slf4j.Slf4j; @@ -9,10 +26,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; /** - * Fast threadPool executor. - * - * @author chen.ma - * @date 2021/7/5 21:00 + * Fast thread-pool executor. */ @Slf4j public class FastThreadPoolExecutor extends ThreadPoolExecutorTemplate { @@ -48,7 +62,7 @@ public class FastThreadPoolExecutor extends ThreadPoolExecutorTemplate { try { if (!queue.retryOffer(command, 0, TimeUnit.MILLISECONDS)) { submittedTaskCount.decrementAndGet(); - throw new RejectedExecutionException("队列容量已满.", rx); + throw new RejectedExecutionException("The blocking queue capacity is full.", rx); } } catch (InterruptedException x) { submittedTaskCount.decrementAndGet(); @@ -59,5 +73,4 @@ public class FastThreadPoolExecutor extends ThreadPoolExecutorTemplate { throw t; } } - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/QueueTypeEnum.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java similarity index 51% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/QueueTypeEnum.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java index 57717d48..f605d6ea 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/QueueTypeEnum.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java @@ -1,19 +1,34 @@ -package cn.hippo4j.starter.toolkit.thread; +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; -import cn.hippo4j.starter.spi.DynamicTpServiceLoader; -import cn.hippo4j.starter.spi.CustomBlockingQueue; +import cn.hippo4j.core.spi.CustomBlockingQueue; +import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; import java.util.Arrays; import java.util.Collection; import java.util.Objects; import java.util.Optional; import java.util.concurrent.*; +import java.util.stream.Stream; /** * Queue type enum. - * - * @author chen.ma - * @date 2021/6/25 12:30 */ public enum QueueTypeEnum { @@ -48,9 +63,9 @@ public enum QueueTypeEnum { PRIORITY_BLOCKING_QUEUE(6, "PriorityBlockingQueue"), /** - * {@link "io.dynamic.threadpool.starter.toolkit.thread.ResizableCapacityLinkedBlockIngQueue"} + * {@link ResizableCapacityLinkedBlockingQueue} */ - RESIZABLE_LINKED_BLOCKING_QUEUE(9, "ResizableCapacityLinkedBlockIngQueue"); + RESIZABLE_LINKED_BLOCKING_QUEUE(9, "ResizableCapacityLinkedBlockingQueue"); public Integer type; @@ -62,7 +77,38 @@ public enum QueueTypeEnum { } static { - DynamicTpServiceLoader.register(CustomBlockingQueue.class); + DynamicThreadPoolServiceLoader.register(CustomBlockingQueue.class); + } + + public static BlockingQueue createBlockingQueue(String blockingQueueName, Integer capacity) { + BlockingQueue blockingQueue = null; + QueueTypeEnum queueTypeEnum = Stream.of(QueueTypeEnum.values()) + .filter(each -> Objects.equals(each.name, blockingQueueName)) + .findFirst() + .orElse(null); + if (queueTypeEnum != null) { + blockingQueue = createBlockingQueue(queueTypeEnum.type, capacity); + if (Objects.equals(blockingQueue.getClass().getSimpleName(), blockingQueueName)) { + return blockingQueue; + } + } + Collection customBlockingQueues = DynamicThreadPoolServiceLoader + .getSingletonServiceInstances(CustomBlockingQueue.class); + blockingQueue = Optional.ofNullable(blockingQueue) + .orElseGet( + () -> customBlockingQueues.stream() + .filter(each -> Objects.equals(blockingQueueName, each.getName())) + .map(each -> each.generateBlockingQueue()) + .findFirst() + .orElseGet(() -> { + int temCapacity = capacity; + if (capacity == null || capacity <= 0) { + temCapacity = 1024; + } + + return new LinkedBlockingQueue(temCapacity); + })); + return blockingQueue; } public static BlockingQueue createBlockingQueue(int type, Integer capacity) { @@ -80,17 +126,15 @@ public enum QueueTypeEnum { } else if (Objects.equals(type, PRIORITY_BLOCKING_QUEUE.type)) { blockingQueue = new PriorityBlockingQueue(capacity); } else if (Objects.equals(type, RESIZABLE_LINKED_BLOCKING_QUEUE.type)) { - blockingQueue = new ResizableCapacityLinkedBlockIngQueue(capacity); + blockingQueue = new ResizableCapacityLinkedBlockingQueue(capacity); } - - Collection customBlockingQueues = DynamicTpServiceLoader + Collection customBlockingQueues = DynamicThreadPoolServiceLoader .getSingletonServiceInstances(CustomBlockingQueue.class); blockingQueue = Optional.ofNullable(blockingQueue).orElseGet(() -> customBlockingQueues.stream() .filter(each -> Objects.equals(type, each.getType())) .map(each -> each.generateBlockingQueue()) .findFirst() .orElse(new LinkedBlockingQueue(capacity))); - return blockingQueue; } @@ -98,8 +142,6 @@ public enum QueueTypeEnum { Optional queueTypeEnum = Arrays.stream(QueueTypeEnum.values()) .filter(each -> each.type == type) .findFirst(); - return queueTypeEnum.map(each -> each.name).orElse(""); } - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedPolicies.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedPolicies.java new file mode 100644 index 00000000..931d06da --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedPolicies.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Rejected policies. + */ +@Slf4j +public class RejectedPolicies { + + public static class RunsOldestTaskPolicy implements RejectedExecutionHandler { + + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + if (executor.isShutdown()) { + return; + } + BlockingQueue workQueue = executor.getQueue(); + Runnable firstWork = workQueue.poll(); + boolean newTaskAdd = workQueue.offer(r); + if (firstWork != null) { + firstWork.run(); + } + if (!newTaskAdd) { + executor.execute(r); + } + } + } + + public static class SyncPutQueuePolicy implements RejectedExecutionHandler { + + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + if (executor.isShutdown()) { + return; + } + try { + executor.getQueue().put(r); + } catch (InterruptedException e) { + log.error("Adding Queue task to thread pool failed.", e); + } + } + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java new file mode 100644 index 00000000..ac8e8e43 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java @@ -0,0 +1,100 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.core.spi.CustomRejectedExecutionHandler; +import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; + +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.stream.Stream; + +/** + * Reject policy type Enum. + */ +public enum RejectedTypeEnum { + + CALLER_RUNS_POLICY(1, "CallerRunsPolicy", new ThreadPoolExecutor.CallerRunsPolicy()), + + ABORT_POLICY(2, "AbortPolicy", new ThreadPoolExecutor.AbortPolicy()), + + DISCARD_POLICY(3, "DiscardPolicy", new ThreadPoolExecutor.DiscardPolicy()), + + DISCARD_OLDEST_POLICY(4, "DiscardOldestPolicy", new ThreadPoolExecutor.DiscardOldestPolicy()), + + RUNS_OLDEST_TASK_POLICY(5, "RunsOldestTaskPolicy", new RejectedPolicies.RunsOldestTaskPolicy()), + + SYNC_PUT_QUEUE_POLICY(6, "SyncPutQueuePolicy", new RejectedPolicies.SyncPutQueuePolicy()); + + public Integer type; + + public String name; + + public RejectedExecutionHandler rejectedHandler; + + RejectedTypeEnum(Integer type, String name, RejectedExecutionHandler rejectedHandler) { + this.type = type; + this.name = name; + this.rejectedHandler = rejectedHandler; + } + + static { + DynamicThreadPoolServiceLoader.register(CustomRejectedExecutionHandler.class); + } + + public static RejectedExecutionHandler createPolicy(String name) { + RejectedTypeEnum rejectedTypeEnum = Stream.of(RejectedTypeEnum.values()) + .filter(each -> Objects.equals(each.name, name)) + .findFirst() + .orElse(null); + if (rejectedTypeEnum != null) { + return rejectedTypeEnum.rejectedHandler; + } + Collection customRejectedExecutionHandlers = DynamicThreadPoolServiceLoader + .getSingletonServiceInstances(CustomRejectedExecutionHandler.class); + Optional customRejected = customRejectedExecutionHandlers.stream() + .filter(each -> Objects.equals(name, each.getName())) + .map(each -> each.generateRejected()) + .findFirst(); + return customRejected.orElse(ABORT_POLICY.rejectedHandler); + } + + public static RejectedExecutionHandler createPolicy(int type) { + Optional rejectedTypeEnum = Stream.of(RejectedTypeEnum.values()) + .filter(each -> Objects.equals(type, each.type)) + .map(each -> each.rejectedHandler) + .findFirst(); + RejectedExecutionHandler resultRejected = rejectedTypeEnum.orElseGet(() -> { + Collection customRejectedExecutionHandlers = DynamicThreadPoolServiceLoader + .getSingletonServiceInstances(CustomRejectedExecutionHandler.class); + Optional customRejected = customRejectedExecutionHandlers.stream() + .filter(each -> Objects.equals(type, each.getType())) + .map(each -> each.generateRejected()) + .findFirst(); + return customRejected.orElse(ABORT_POLICY.rejectedHandler); + }); + return resultRejected; + } + + public static String getRejectedNameByType(int type) { + return createPolicy(type).getClass().getSimpleName(); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java new file mode 100644 index 00000000..77fccccb --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hutool.core.util.ReflectUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Resizable capacity linked-blocking-queue. Options Rabbitmq VariableLinkedBlockingQueue + */ +@Slf4j +public class ResizableCapacityLinkedBlockingQueue extends LinkedBlockingQueue { + + public ResizableCapacityLinkedBlockingQueue(int capacity) { + super(capacity); + } + + public synchronized boolean setCapacity(Integer capacity) { + boolean successFlag = true; + try { + int oldCapacity = (int) ReflectUtil.getFieldValue(this, "capacity"); + AtomicInteger count = (AtomicInteger) ReflectUtil.getFieldValue(this, "count"); + int size = count.get(); + + ReflectUtil.setFieldValue(this, "capacity", capacity); + if (capacity > size && size >= oldCapacity) { + ReflectUtil.invoke(this, "signalNotFull"); + } + } catch (Exception ex) { + log.error("Dynamic modification of blocking queue size failed.", ex); + successFlag = false; + } + return successFlag; + } + +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/TaskQueue.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/TaskQueue.java new file mode 100644 index 00000000..479387c4 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/TaskQueue.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; + +/** + * Task queue. + */ +public class TaskQueue extends LinkedBlockingQueue { + + private static final long serialVersionUID = -2635853580887179627L; + + private FastThreadPoolExecutor executor; + + public TaskQueue(int capacity) { + super(capacity); + } + + public void setExecutor(FastThreadPoolExecutor exec) { + executor = exec; + } + + @Override + public boolean offer(Runnable runnable) { + int currentPoolThreadSize = executor.getPoolSize(); + // If a core thread is idle, add the task to the blocking queue, and the core thread will process the task. + if (executor.getSubmittedTaskCount() < currentPoolThreadSize) { + return super.offer(runnable); + } + + // The current number of threads in the thread pool is less than the maximum number of threads, and returns false. + // According to the thread pool source code, non-core threads will be created. + if (currentPoolThreadSize < executor.getMaximumPoolSize()) { + return false; + } + + // If the current thread pool number is greater than the maximum number of threads, the task is added to the blocking queue. + return super.offer(runnable); + } + + public boolean retryOffer(Runnable o, long timeout, TimeUnit unit) throws InterruptedException { + if (executor.isShutdown()) { + throw new RejectedExecutionException("Actuator closed!"); + } + return super.offer(o, timeout, unit); + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadFactoryBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java similarity index 66% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadFactoryBuilder.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java index 1eab3f90..6e56dc07 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadFactoryBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java @@ -1,86 +1,60 @@ -package cn.hippo4j.starter.toolkit.thread; +/* + * 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. + */ + +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.common.design.builder.Builder; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicLong; /** - * ThreadFactory builder. - * - * @author chen.ma - * @date 2021/7/5 21:53 + * Thread-factory builder. */ public class ThreadFactoryBuilder implements Builder { private static final long serialVersionUID = 1L; - /** - * 用于线程创建的线程工厂类 - */ private ThreadFactory backingThreadFactory; - /** - * 线程名的前缀 - */ private String namePrefix; - /** - * 是否守护线程,默认false - */ private Boolean daemon; - /** - * 线程优先级 - */ private Integer priority; - /** - * 未捕获异常处理器 - */ private Thread.UncaughtExceptionHandler uncaughtExceptionHandler; - /** - * 设置用于创建基础线程的线程工厂 - * - * @param backingThreadFactory 用于创建基础线程的线程工厂 - * @return this - */ public ThreadFactoryBuilder threadFactory(ThreadFactory backingThreadFactory) { this.backingThreadFactory = backingThreadFactory; return this; } - /** - * 设置线程名前缀, 例如设置前缀为 mb-thread- 则线程名为 mb-thread-1 之类 - * - * @param namePrefix 线程名前缀 - * @return this - */ public ThreadFactoryBuilder prefix(String namePrefix) { this.namePrefix = namePrefix; return this; } - /** - * 设置是否守护线程 - * - * @param daemon 是否守护线程 - * @return this - */ public ThreadFactoryBuilder daemon(boolean daemon) { this.daemon = daemon; return this; } - /** - * 设置线程优先级 - * - * @param priority 优先级 - * @return this - * @see Thread#MIN_PRIORITY - * @see Thread#NORM_PRIORITY - * @see Thread#MAX_PRIORITY - */ public ThreadFactoryBuilder priority(int priority) { if (priority < Thread.MIN_PRIORITY) { throw new IllegalArgumentException(String.format("Thread priority ({}) must be >= {}", priority, Thread.MIN_PRIORITY)); @@ -92,40 +66,19 @@ public class ThreadFactoryBuilder implements Builder { return this; } - /** - * 设置未捕获异常的处理方式 - * - * @param uncaughtExceptionHandler {@link Thread.UncaughtExceptionHandler} - */ public void uncaughtExceptionHandler(Thread.UncaughtExceptionHandler uncaughtExceptionHandler) { this.uncaughtExceptionHandler = uncaughtExceptionHandler; } - /** - * 构建 - * - * @return - */ public static ThreadFactoryBuilder builder() { return new ThreadFactoryBuilder(); } - /** - * 构建 {@link ThreadFactory} - * - * @return {@link ThreadFactory} - */ @Override public ThreadFactory build() { return build(this); } - /** - * 构建 - * - * @param builder {@link ThreadFactoryBuilder} - * @return {@link ThreadFactory} - */ private static ThreadFactory build(ThreadFactoryBuilder builder) { final ThreadFactory backingThreadFactory = (null != builder.backingThreadFactory) ? builder.backingThreadFactory @@ -152,5 +105,4 @@ public class ThreadFactoryBuilder implements Builder { return thread; }; } - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java similarity index 76% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolBuilder.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java index a711af66..ce51e17f 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java @@ -1,8 +1,24 @@ -package cn.hippo4j.starter.toolkit.thread; +/* + * 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. + */ +package cn.hippo4j.core.executor.support; +import cn.hippo4j.common.design.builder.Builder; import cn.hippo4j.common.toolkit.Assert; -import cn.hippo4j.starter.alarm.ThreadPoolAlarm; import org.springframework.core.task.TaskDecorator; import java.math.BigDecimal; @@ -10,113 +26,46 @@ import java.util.Optional; import java.util.concurrent.*; /** - * ThreadPool builder. - * - * @author chen.ma - * @date 2021/6/28 17:29 + * Thread-pool builder. */ public class ThreadPoolBuilder implements Builder { - /** - * 是否创建快速消费线程池 - */ private boolean isFastPool; - /** - * 是否动态线程池 - */ private boolean isDynamicPool; - /** - * 核心线程数量 - */ private int corePoolSize = calculateCoreNum(); - /** - * 最大线程数量 - */ private int maxPoolSize = corePoolSize + (corePoolSize >> 1); - /** - * 线程存活时间 - */ private long keepAliveTime = 30000L; - /** - * 线程存活时间单位 - */ private TimeUnit timeUnit = TimeUnit.MILLISECONDS; - /** - * 队列最大容量 - */ + private long executeTimeOut = 10000L; + private int capacity = 512; - /** - * 队列类型枚举 - */ private QueueTypeEnum queueType; - /** - * 阻塞队列 - */ private BlockingQueue workQueue = new LinkedBlockingQueue(capacity); - /** - * 线程池任务满时拒绝任务策略 - */ private RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.AbortPolicy(); - /** - * 是否守护线程 - */ private boolean isDaemon = false; - /** - * 线程名称前缀 - */ private String threadNamePrefix; - /** - * 线程池 ID - */ private String threadPoolId; - /** - * 是否告警 - */ - private boolean isAlarm = false; - - /** - * 容量告警 - */ - private Integer capacityAlarm; - - /** - * 活跃度告警 - */ - private Integer livenessAlarm; - - /** - * 线程任务装饰器 - */ private TaskDecorator taskDecorator; - /** - * 等待终止毫秒 - */ private Long awaitTerminationMillis = 5000L; - /** - * 等待任务在关机时完成 - */ private Boolean waitForTasksToCompleteOnShutdown = true; - /** - * 计算公式:CPU 核数 / (1 - 阻塞系数 0.8) - * - * @return 线程池核心线程数 - */ + private Boolean allowCoreThreadTimeOut = false; + private Integer calculateCoreNum() { int cpuCoreNum = Runtime.getRuntime().availableProcessors(); return new BigDecimal(cpuCoreNum).divide(new BigDecimal("0.2")).intValue(); @@ -153,6 +102,21 @@ public class ThreadPoolBuilder implements Builder { return this; } + public ThreadPoolBuilder singlePool() { + int singleNum = 1; + this.corePoolSize = singleNum; + this.maxPoolSize = singleNum; + return this; + } + + public ThreadPoolBuilder singlePool(String threadNamePrefix) { + int singleNum = 1; + this.corePoolSize = singleNum; + this.maxPoolSize = singleNum; + this.threadNamePrefix = threadNamePrefix; + return this; + } + public ThreadPoolBuilder poolThreadSize(int corePoolSize, int maxPoolSize) { this.corePoolSize = corePoolSize; this.maxPoolSize = maxPoolSize; @@ -169,6 +133,11 @@ public class ThreadPoolBuilder implements Builder { return this; } + public ThreadPoolBuilder executeTimeOut(long executeTimeOut) { + this.executeTimeOut = executeTimeOut; + return this; + } + public ThreadPoolBuilder keepAliveTime(long keepAliveTime, TimeUnit timeUnit) { this.keepAliveTime = keepAliveTime; this.timeUnit = timeUnit; @@ -206,13 +175,6 @@ public class ThreadPoolBuilder implements Builder { return this; } - public ThreadPoolBuilder alarmConfig(int isAlarm, int capacityAlarm, int livenessAlarm) { - this.isAlarm = isAlarm == 0 ? true : false; - this.capacityAlarm = capacityAlarm; - this.livenessAlarm = livenessAlarm; - return this; - } - public ThreadPoolBuilder taskDecorator(TaskDecorator taskDecorator) { this.taskDecorator = taskDecorator; return this; @@ -234,11 +196,11 @@ public class ThreadPoolBuilder implements Builder { return this; } - /** - * 构建 - * - * @return - */ + public ThreadPoolBuilder allowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) { + this.allowCoreThreadTimeOut = allowCoreThreadTimeOut; + return this; + } + @Override public ThreadPoolExecutor build() { if (isDynamicPool) { @@ -247,81 +209,47 @@ public class ThreadPoolBuilder implements Builder { return isFastPool ? buildFastPool(this) : buildPool(this); } - /** - * 创建 - * - * @return - */ public static ThreadPoolBuilder builder() { return new ThreadPoolBuilder(); } - /** - * 构建普通线程池 - * - * @param builder - * @return - */ private static ThreadPoolExecutor buildPool(ThreadPoolBuilder builder) { return AbstractBuildThreadPoolTemplate.buildPool(buildInitParam(builder)); } - /** - * 构建快速消费线程池 - * - * @param builder - * @return - */ private static ThreadPoolExecutor buildFastPool(ThreadPoolBuilder builder) { return AbstractBuildThreadPoolTemplate.buildFastPool(buildInitParam(builder)); } - /** - * 构建动态线程池 - * - * @param builder - * @return - */ private static ThreadPoolExecutor buildDynamicPool(ThreadPoolBuilder builder) { return AbstractBuildThreadPoolTemplate.buildDynamicPool(buildInitParam(builder)); } - /** - * 构建初始化参数 - * - * @param builder - * @return - */ private static AbstractBuildThreadPoolTemplate.ThreadPoolInitParam buildInitParam(ThreadPoolBuilder builder) { Assert.notEmpty(builder.threadNamePrefix, "The thread name prefix cannot be empty or an empty string."); AbstractBuildThreadPoolTemplate.ThreadPoolInitParam initParam = new AbstractBuildThreadPoolTemplate.ThreadPoolInitParam(builder.threadNamePrefix, builder.isDaemon); - initParam.setCorePoolNum(builder.corePoolSize) .setMaxPoolNum(builder.maxPoolSize) .setKeepAliveTime(builder.keepAliveTime) .setCapacity(builder.capacity) + .setExecuteTimeOut(builder.executeTimeOut) .setRejectedExecutionHandler(builder.rejectedExecutionHandler) .setTimeUnit(builder.timeUnit) + .setAllowCoreThreadTimeOut(builder.allowCoreThreadTimeOut) .setTaskDecorator(builder.taskDecorator); - if (builder.isDynamicPool) { String threadPoolId = Optional.ofNullable(builder.threadPoolId).orElse(builder.threadNamePrefix); initParam.setThreadPoolId(threadPoolId); - ThreadPoolAlarm threadPoolAlarm = new ThreadPoolAlarm(builder.isAlarm, builder.livenessAlarm, builder.capacityAlarm); - initParam.setThreadPoolAlarm(threadPoolAlarm); initParam.setWaitForTasksToCompleteOnShutdown(builder.waitForTasksToCompleteOnShutdown); initParam.setAwaitTerminationMillis(builder.awaitTerminationMillis); } - if (!builder.isFastPool) { if (builder.queueType != null) { builder.workQueue = QueueTypeEnum.createBlockingQueue(builder.queueType.type, builder.capacity); } initParam.setWorkQueue(builder.workQueue); } - return initParam; } - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolExecutorTemplate.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolExecutorTemplate.java similarity index 65% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolExecutorTemplate.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolExecutorTemplate.java index 36227191..c60ecc4d 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ThreadPoolExecutorTemplate.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolExecutorTemplate.java @@ -1,14 +1,28 @@ -package cn.hippo4j.starter.toolkit.thread; +/* + * 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. + */ -import cn.hippo4j.starter.toolkit.ArrayUtil; +package cn.hippo4j.core.executor.support; + +import cn.hippo4j.common.toolkit.ArrayUtil; import java.util.concurrent.*; /** * ThreadPool executor template. - * - * @author chen.ma - * @date 2021/7/5 21:59 */ public class ThreadPoolExecutorTemplate extends ThreadPoolExecutor { @@ -23,7 +37,7 @@ public class ThreadPoolExecutorTemplate extends ThreadPoolExecutor { } private Exception clientTrace() { - return new Exception("tread task root stack trace"); + return new Exception("Tread task root stack trace."); } @Override @@ -62,5 +76,4 @@ public class ThreadPoolExecutorTemplate extends ThreadPoolExecutor { } }; } - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapter.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapter.java new file mode 100644 index 00000000..b16f3d74 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapter.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support.adpter; + +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; + +import java.util.concurrent.Executor; + +/** + * Dynamic thread pool adapter. + */ +public interface DynamicThreadPoolAdapter { + + /** + * Match. + * + * @param executor + * @return + */ + boolean match(Object executor); + + /** + * Unwrap. + * + * @param executor + * @return + */ + DynamicThreadPoolExecutor unwrap(Object executor); + + /** + * Replace. + * + * @param executor + * @param dynamicThreadPoolExecutor + */ + void replace(Object executor, Executor dynamicThreadPoolExecutor); +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapterChoose.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapterChoose.java new file mode 100644 index 00000000..c203ee5d --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/DynamicThreadPoolAdapterChoose.java @@ -0,0 +1,71 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support.adpter; + +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.Executor; + +/** + * Dynamic thread pool adapter choose. + */ +public class DynamicThreadPoolAdapterChoose { + + private static List DYNAMIC_THREAD_POOL_ADAPTERS = new ArrayList<>(); + + static { + DYNAMIC_THREAD_POOL_ADAPTERS.add(new TransmittableThreadLocalExecutorAdapter()); + DYNAMIC_THREAD_POOL_ADAPTERS.add(new TransmittableThreadLocalExecutorServiceAdapter()); + } + + /** + * Match. + * + * @param executor + * @return + */ + public static boolean match(Object executor) { + return DYNAMIC_THREAD_POOL_ADAPTERS.stream().anyMatch(each -> each.match(executor)); + } + + /** + * Unwrap. + * + * @param executor + * @return + */ + public static DynamicThreadPoolExecutor unwrap(Object executor) { + Optional dynamicThreadPoolAdapterOptional = DYNAMIC_THREAD_POOL_ADAPTERS.stream().filter(each -> each.match(executor)).findFirst(); + return dynamicThreadPoolAdapterOptional.map(each -> each.unwrap(executor)).orElse(null); + } + + /** + * Replace. + * + * @param executor + */ + public static void replace(Object executor, Executor dynamicThreadPoolExecutor) { + Optional dynamicThreadPoolAdapterOptional = DYNAMIC_THREAD_POOL_ADAPTERS.stream().filter(each -> each.match(executor)).findFirst(); + if (dynamicThreadPoolAdapterOptional.isPresent()) { + dynamicThreadPoolAdapterOptional.get().replace(executor, dynamicThreadPoolExecutor); + } + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorAdapter.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorAdapter.java new file mode 100644 index 00000000..f51c809c --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorAdapter.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support.adpter; + +import cn.hippo4j.common.toolkit.ReflectUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; + +import java.util.Objects; +import java.util.concurrent.Executor; + +/** + * Transmittable thread local executor adapter. + */ +public class TransmittableThreadLocalExecutorAdapter implements DynamicThreadPoolAdapter { + + private static String MATCH_CLASS_NAME = "ExecutorTtlWrapper"; + + private static String FIELD_NAME = "executor"; + + @Override + public boolean match(Object executor) { + return Objects.equals(MATCH_CLASS_NAME, executor.getClass().getSimpleName()); + } + + @Override + public DynamicThreadPoolExecutor unwrap(Object executor) { + Object unwrap = ReflectUtil.getFieldValue(executor, FIELD_NAME); + if (unwrap != null && unwrap instanceof DynamicThreadPoolExecutor) { + return (DynamicThreadPoolExecutor) unwrap; + } + return null; + } + + @Override + public void replace(Object executor, Executor dynamicThreadPoolExecutor) { + ReflectUtil.setFieldValue(executor, FIELD_NAME, dynamicThreadPoolExecutor); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorServiceAdapter.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorServiceAdapter.java new file mode 100644 index 00000000..575c9725 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/TransmittableThreadLocalExecutorServiceAdapter.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.core.executor.support.adpter; + +import cn.hippo4j.common.toolkit.ReflectUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; + +import java.util.Objects; +import java.util.concurrent.Executor; + +/** + * Transmittable thread local executor service adapter. + */ +public class TransmittableThreadLocalExecutorServiceAdapter implements DynamicThreadPoolAdapter { + + private static String MATCH_CLASS_NAME = "ExecutorServiceTtlWrapper"; + + private static String FIELD_NAME = "executorService"; + + @Override + public boolean match(Object executor) { + return Objects.equals(MATCH_CLASS_NAME, executor.getClass().getSimpleName()); + } + + @Override + public DynamicThreadPoolExecutor unwrap(Object executor) { + Object unwrap = ReflectUtil.getFieldValue(executor, FIELD_NAME); + if (unwrap != null && unwrap instanceof DynamicThreadPoolExecutor) { + return (DynamicThreadPoolExecutor) unwrap; + } + return null; + } + + @Override + public void replace(Object executor, Executor dynamicThreadPoolExecutor) { + ReflectUtil.setFieldValue(executor, FIELD_NAME, dynamicThreadPoolExecutor); + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/DynamicThreadPoolBannerHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/handler/DynamicThreadPoolBannerHandler.java similarity index 62% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/DynamicThreadPoolBannerHandler.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/handler/DynamicThreadPoolBannerHandler.java index eff7ab6e..9e524637 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/DynamicThreadPoolBannerHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/handler/DynamicThreadPoolBannerHandler.java @@ -1,7 +1,23 @@ -package cn.hippo4j.starter.handler; +/* + * 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. + */ -import cn.hippo4j.starter.config.BootstrapProperties; -import lombok.NonNull; +package cn.hippo4j.core.handler; + +import cn.hippo4j.core.config.BootstrapPropertiesInterface; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.InitializingBean; @@ -10,23 +26,19 @@ import org.springframework.boot.ansi.AnsiOutput; import org.springframework.boot.ansi.AnsiStyle; /** - * Dynamic thread pool print banner. - * - * @author chen.ma - * @date 2021/6/20 16:34 + * Dynamic thread-pool print banner. */ @Slf4j @RequiredArgsConstructor public class DynamicThreadPoolBannerHandler implements InitializingBean { - @NonNull - private final BootstrapProperties properties; + private final BootstrapPropertiesInterface properties; private final String DYNAMIC_THREAD_POOL = " :: Dynamic ThreadPool :: "; - private final String HIPPO4J_GITHUB = "GitHub: https://github.com/acmenlt/dynamic-threadpool"; + private final String HIPPO4J_GITHUB = "GitHub: https://github.com/opengoofy/hippo4j"; - private final String HIPPO4J_SITE = "Site: https://www.hippox.cn"; + private final String HIPPO4J_SITE = "Site: https://hippo4j.cn"; private final int STRAP_LINE_SIZE = 50; @@ -41,16 +53,13 @@ public class DynamicThreadPoolBannerHandler implements InitializingBean { "| |) | || | ' \\/ _` | ' \\| / _| | | | _/\n" + "|___/ \\_, |_||_\\__,_|_|_|_|_\\__| |_| |_| \n" + " |__/ \n"; - - if (properties.isBanner()) { + if (properties.getBanner()) { String version = getVersion(); version = (version != null) ? " (v" + version + ")" : "no version."; - StringBuilder padding = new StringBuilder(); while (padding.length() < STRAP_LINE_SIZE - (version.length() + DYNAMIC_THREAD_POOL.length())) { padding.append(" "); } - System.out.println(AnsiOutput.toString(banner, AnsiColor.GREEN, DYNAMIC_THREAD_POOL, AnsiColor.DEFAULT, padding.toString(), AnsiStyle.FAINT, version, "\n\n", HIPPO4J_GITHUB, "\n", HIPPO4J_SITE, "\n")); @@ -61,5 +70,4 @@ public class DynamicThreadPoolBannerHandler implements InitializingBean { final Package pkg = DynamicThreadPoolBannerHandler.class.getPackage(); return pkg != null ? pkg.getImplementationVersion() : ""; } - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandler.java new file mode 100644 index 00000000..7871e1b5 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandler.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.core.proxy; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; +import lombok.AllArgsConstructor; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Rejected proxy invocation handler. + */ +@AllArgsConstructor +public class RejectedProxyInvocationHandler implements InvocationHandler { + + private final Object target; + + private final String threadPoolId; + + private final AtomicLong rejectCount; + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + rejectCount.incrementAndGet(); + if (ApplicationContextHolder.getInstance() != null) { + ThreadPoolNotifyAlarmHandler alarmHandler = ApplicationContextHolder.getBean(ThreadPoolNotifyAlarmHandler.class); + alarmHandler.checkPoolRejectedAlarm(threadPoolId); + } + try { + return method.invoke(target, args); + } catch (InvocationTargetException ex) { + throw ex.getCause(); + } + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyUtil.java new file mode 100644 index 00000000..432ddbad --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyUtil.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.core.proxy; + +import java.lang.reflect.Proxy; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Rejected proxy util. + */ +public class RejectedProxyUtil { + + /** + * Proxy rejected execution. + * + * @param rejectedExecutionHandler + * @param threadPoolId + * @param rejectedNum + * @return + */ + public static RejectedExecutionHandler createProxy(RejectedExecutionHandler rejectedExecutionHandler, String threadPoolId, AtomicLong rejectedNum) { + RejectedExecutionHandler rejectedProxy = (RejectedExecutionHandler) Proxy + .newProxyInstance( + rejectedExecutionHandler.getClass().getClassLoader(), + new Class[]{RejectedExecutionHandler.class}, + new RejectedProxyInvocationHandler(rejectedExecutionHandler, threadPoolId, rejectedNum)); + return rejectedProxy; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomBlockingQueue.java b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomBlockingQueue.java new file mode 100644 index 00000000..893ee11f --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomBlockingQueue.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +package cn.hippo4j.core.spi; + +import java.util.concurrent.BlockingQueue; + +/** + * Custom blocking-queue. + */ +public interface CustomBlockingQueue { + + /** + * Gets the custom blocking queue type. + * + * @return + */ + Integer getType(); + + /** + * Adapt hippo4j core blocking queue. + * + * @return + */ + default String getName() { + return ""; + } + + /** + * Get custom blocking queue. + * + * @return + */ + BlockingQueue generateBlockingQueue(); +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java new file mode 100644 index 00000000..8cdb7f8b --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +package cn.hippo4j.core.spi; + +import java.util.concurrent.RejectedExecutionHandler; + +/** + * Custom rejected execution handler. + */ +public interface CustomRejectedExecutionHandler { + + /** + * Get custom reject policy type. + * + * @return + */ + Integer getType(); + + /** + * Adapt hippo-4j core rejected execution handler. + * + * @return + */ + default String getName() { + return ""; + } + + /** + * Get custom reject policy. + * + * @return + */ + RejectedExecutionHandler generateRejected(); +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/DynamicTpServiceLoader.java b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java similarity index 50% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/DynamicTpServiceLoader.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java index f9e8e40f..e0a817bb 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/DynamicTpServiceLoader.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java @@ -1,25 +1,51 @@ -package cn.hippo4j.starter.spi; +/* + * 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. + */ + +package cn.hippo4j.core.spi; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** - * Dynamic threadPool service loader. - * - * @author chen.ma - * @date 2021/7/10 23:45 + * Dynamic thread-pool service loader. */ -public class DynamicTpServiceLoader { +public class DynamicThreadPoolServiceLoader { private static final Map, Collection> SERVICES = new ConcurrentHashMap(); + /** + * Register. + * + * @param serviceInterface + */ public static void register(final Class serviceInterface) { if (!SERVICES.containsKey(serviceInterface)) { SERVICES.put(serviceInterface, load(serviceInterface)); } } + /** + * Load. + * + * @param serviceInterface + * @param + * @return + */ private static Collection load(final Class serviceInterface) { Collection result = new LinkedList<>(); for (T each : ServiceLoader.load(serviceInterface)) { @@ -28,14 +54,34 @@ public class DynamicTpServiceLoader { return result; } + /** + * Get singleton service instances. + * + * @param service + * @param + * @return + */ public static Collection getSingletonServiceInstances(final Class service) { return (Collection) SERVICES.getOrDefault(service, Collections.emptyList()); } + /** + * New service instances. + * + * @param service + * @param + * @return + */ public static Collection newServiceInstances(final Class service) { return SERVICES.containsKey(service) ? SERVICES.get(service).stream().map(each -> (T) newServiceInstance(each.getClass())).collect(Collectors.toList()) : Collections.emptyList(); } + /** + * New service instance. + * + * @param clazz + * @return + */ private static Object newServiceInstance(final Class clazz) { try { return clazz.newInstance(); @@ -43,5 +89,4 @@ public class DynamicTpServiceLoader { throw new ServiceLoaderInstantiationException(clazz, ex); } } - } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java new file mode 100644 index 00000000..c5806119 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +package cn.hippo4j.core.spi; + +/** + * Service loader instantiation exception. + */ +public class ServiceLoaderInstantiationException extends RuntimeException { + + public ServiceLoaderInstantiationException(final Class clazz, final Exception cause) { + super(String.format("Can not find public default constructor for SPI class `%s`", clazz.getName()), cause); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java new file mode 100644 index 00000000..fec00c8d --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/IdentifyUtil.java @@ -0,0 +1,95 @@ +/* + * 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. + */ + +package cn.hippo4j.core.toolkit; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.ThreadUtil; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.ArrayList; + +import static cn.hippo4j.common.constant.Constants.GROUP_KEY_DELIMITER; +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; + +/** + * Identify util. + */ +public class IdentifyUtil { + + private static String IDENTIFY; + + public static final String CLIENT_IDENTIFICATION_VALUE = IdUtil.simpleUUID(); + + /** + * Generate identify. + * + * @param environment + * @param hippo4JInetUtils + * @return + */ + public static synchronized String generate(ConfigurableEnvironment environment, InetUtils hippo4JInetUtils) { + if (StrUtil.isNotBlank(IDENTIFY)) { + return IDENTIFY; + } + String ip = hippo4JInetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + String port = environment.getProperty("server.port", "8080"); + String identification = StrUtil.builder(ip, + ":", + port, + IDENTIFY_SLICER_SYMBOL, + CLIENT_IDENTIFICATION_VALUE).toString(); + IDENTIFY = identification; + return identification; + } + + /** + * Get identify. + * + * @return + */ + public static String getIdentify() { + while (StrUtil.isBlank(IDENTIFY)) { + ConfigurableEnvironment environment = ApplicationContextHolder.getBean(ConfigurableEnvironment.class); + InetUtils inetUtils = ApplicationContextHolder.getBean(InetUtils.class); + if (environment != null && inetUtils != null) { + String identify = generate(environment, inetUtils); + return identify; + } + ThreadUtil.sleep(500); + } + return IDENTIFY; + } + + /** + * Get thread pool identify. + * + * @param threadPoolId + * @param itemId + * @param namespace + * @return + */ + public static String getThreadPoolIdentify(String threadPoolId, String itemId, String namespace) { + ArrayList params = Lists.newArrayList(threadPoolId, itemId, namespace, getIdentify()); + return Joiner.on(GROUP_KEY_DELIMITER).join(params); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/SystemClock.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/SystemClock.java new file mode 100644 index 00000000..473148b3 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/SystemClock.java @@ -0,0 +1,66 @@ +/* + * 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. + */ + +package cn.hippo4j.core.toolkit; + +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +/** + * System clock. + */ +public class SystemClock { + + private final int period; + + private final AtomicLong now; + + private static final String THREAD_NAME = "system.clock"; + + private static class InstanceHolder { + + private static final SystemClock INSTANCE = new SystemClock(1); + } + + private SystemClock(int period) { + this.period = period; + this.now = new AtomicLong(System.currentTimeMillis()); + scheduleClockUpdating(); + } + + private static SystemClock instance() { + return InstanceHolder.INSTANCE; + } + + private void scheduleClockUpdating() { + ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1, runnable -> { + Thread thread = new Thread(runnable, THREAD_NAME); + thread.setDaemon(true); + return thread; + }); + scheduler.scheduleAtFixedRate(() -> now.set(System.currentTimeMillis()), period, period, TimeUnit.MILLISECONDS); + } + + private long currentTimeMillis() { + return now.get(); + } + + public static long now() { + return instance().currentTimeMillis(); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/TraceContextUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/TraceContextUtil.java new file mode 100644 index 00000000..e87ce031 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/TraceContextUtil.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.core.toolkit; + +import org.slf4j.MDC; + +import static cn.hippo4j.common.constant.Constants.EXECUTE_TIMEOUT_TRACE; + +/** + * Trace context util. + */ +public class TraceContextUtil { + + /** + * Execute timeout trace key. + */ + private static String EXECUTE_TIMEOUT_TRACE_KEY = EXECUTE_TIMEOUT_TRACE; + + /** + * Get and remove. + * + * @return + */ + public static String getAndRemove() { + String val = MDC.get(EXECUTE_TIMEOUT_TRACE_KEY); + MDC.remove(EXECUTE_TIMEOUT_TRACE_KEY); + return val; + } + + /** + * Set execute timeout trace key. + * + * @param key + */ + public static void setExecuteTimeoutTraceKey(String key) { + EXECUTE_TIMEOUT_TRACE_KEY = key; + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/DynamicThreadPoolAnnotationUtil.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/DynamicThreadPoolAnnotationUtil.java new file mode 100644 index 00000000..d11b2fd3 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/DynamicThreadPoolAnnotationUtil.java @@ -0,0 +1,62 @@ +/* + * 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. + */ + +package cn.hippo4j.core.toolkit.inet; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.annotation.Annotation; +import java.util.Optional; + +/** + * {@link DynamicThreadPoolAnnotationUtil} 是为了适配低版本 SpringBoot. + * + *

Spring version >= 5.2.0 下述方法才是有效的, 等同于 SpringBoot version 2.2.0.RELEASE + * {@link ListableBeanFactory#findAnnotationOnBean(java.lang.String, java.lang.Class)} + * + *

但这不是一个优雅的实现方式, 因为其中用到了很多强类型转换, 不确定后续 Spring 升级是否会受影响. + * 不过, 可以确定的是 Spring version < 5.3.14 是没问题的, 等同于 SpringBoot version < 2.6.2 + * + * @author chen.ma + * @date 2022/1/5 21:15 + */ +public class DynamicThreadPoolAnnotationUtil { + + /** + * 根据 {@param beanName} 查询注解 {@param annotationType} 是否存在. + * + * @param beanName + * @param annotationType + * @param + * @return + */ + public static A findAnnotationOnBean(String beanName, Class annotationType) { + AbstractApplicationContext context = (AbstractApplicationContext) ApplicationContextHolder.getInstance(); + ConfigurableListableBeanFactory beanFactory = context.getBeanFactory(); + A annotation = Optional.ofNullable(beanFactory) + .map(each -> (RootBeanDefinition) beanFactory.getMergedBeanDefinition(beanName)) + .map(definition -> definition.getResolvedFactoryMethod()) + .map(factoryMethod -> AnnotationUtils.getAnnotation(factoryMethod, annotationType)) + .orElse(null); + return annotation; + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtils.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtils.java similarity index 88% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtils.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtils.java index 2844c1b8..cc7e5c68 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtils.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtils.java @@ -1,6 +1,23 @@ -package cn.hippo4j.starter.toolkit.inet; +/* + * 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. + */ -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; +package cn.hippo4j.core.toolkit.inet; + +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -19,9 +36,6 @@ import java.util.concurrent.TimeUnit; /** * Inet utils. - * - * @author Spencer Gibb - * @date 2021/11/12 21:33 */ public class InetUtils implements Closeable { @@ -60,7 +74,7 @@ public class InetUtils implements Closeable { try { int lowest = Integer.MAX_VALUE; for (Enumeration nics = NetworkInterface - .getNetworkInterfaces(); nics.hasMoreElements(); ) { + .getNetworkInterfaces(); nics.hasMoreElements();) { NetworkInterface ifc = nics.nextElement(); if (ifc.isUp()) { this.log.trace("Testing interface: " + ifc.getDisplayName()); @@ -69,7 +83,6 @@ public class InetUtils implements Closeable { } else if (result != null) { continue; } - // @formatter:off if (!ignoreInterface(ifc.getDisplayName())) { for (Enumeration addrs = ifc @@ -90,22 +103,18 @@ public class InetUtils implements Closeable { } catch (IOException ex) { this.log.error("Cannot get first non-loopback address", ex); } - if (result != null) { return result; } - try { return InetAddress.getLocalHost(); } catch (UnknownHostException e) { this.log.warn("Unable to retrieve localhost"); } - return null; } boolean isPreferredAddress(InetAddress address) { - if (this.properties.isUseOnlySiteLocalInterfaces()) { final boolean siteLocalAddress = address.isSiteLocalAddress(); if (!siteLocalAddress) { @@ -211,7 +220,5 @@ public class InetUtils implements Closeable { public void setHostname(String hostname) { this.hostname = hostname; } - } - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtilsProperties.java b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtilsProperties.java similarity index 77% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtilsProperties.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtilsProperties.java index baddab66..446a6024 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/inet/InetUtilsProperties.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/toolkit/inet/InetUtilsProperties.java @@ -1,4 +1,21 @@ -package cn.hippo4j.starter.toolkit.inet; +/* + * 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. + */ + +package cn.hippo4j.core.toolkit.inet; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -9,9 +26,6 @@ import java.util.List; /** * Inet utils properties. - * - * @author chen.ma - * @date 2021/11/12 21:34 */ @ConfigurationProperties(InetUtilsProperties.PREFIX) public class InetUtilsProperties { @@ -104,5 +118,4 @@ public class InetUtilsProperties { public void setPreferredNetworks(List preferredNetworks) { this.preferredNetworks = preferredNetworks; } - } diff --git a/hippo4j-discovery/.gitignore b/hippo4j-discovery/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-discovery/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-discovery/pom.xml b/hippo4j-discovery/pom.xml index 8a2df2d1..59a84cff 100644 --- a/hippo4j-discovery/pom.xml +++ b/hippo4j-discovery/pom.xml @@ -2,18 +2,13 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-discovery - ${project.artifactId} - ${project.artifactId} - true @@ -32,6 +27,7 @@ cn.hippo4j hippo4j-common + ${revision} @@ -48,5 +44,4 @@ - diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/config/RegistryConfiguration.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/config/RegistryConfiguration.java index 5e86c336..cae2e40d 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/config/RegistryConfiguration.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/config/RegistryConfiguration.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.discovery.config; import cn.hippo4j.discovery.core.BaseInstanceRegistry; @@ -8,9 +25,6 @@ import javax.annotation.PostConstruct; /** * Registry configuration. - * - * @author chen.ma - * @date 2021/8/12 21:48 */ @Configuration @AllArgsConstructor @@ -22,5 +36,4 @@ public class RegistryConfiguration { public void registryInit() { baseInstanceRegistry.postInit(); } - } diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/controller/ApplicationController.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/controller/ApplicationController.java index 4aec2e9e..a72b197a 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/controller/ApplicationController.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/controller/ApplicationController.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.discovery.controller; import cn.hippo4j.common.model.InstanceInfo; @@ -6,8 +23,7 @@ import cn.hippo4j.common.web.base.Results; import cn.hippo4j.common.web.exception.ErrorCodeEnum; import cn.hippo4j.discovery.core.InstanceRegistry; import cn.hippo4j.discovery.core.Lease; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -17,45 +33,40 @@ import static cn.hippo4j.common.constant.Constants.BASE_PATH; /** * Application controller. - * - * @author chen.ma - * @date 2021/8/8 22:24 */ @Slf4j @RestController -@RequiredArgsConstructor +@AllArgsConstructor @RequestMapping(BASE_PATH + "/apps") public class ApplicationController { - @NonNull - private final InstanceRegistry instanceRegistry; + private final InstanceRegistry instanceRegistry; @GetMapping("/{appName}") - public Result applications(@PathVariable String appName) { + public Result>> applications(@PathVariable String appName) { List> resultInstanceList = instanceRegistry.listInstance(appName); return Results.success(resultInstanceList); } @PostMapping("/register") - public Result addInstance(@RequestBody InstanceInfo instanceInfo) { + public Result addInstance(@RequestBody InstanceInfo instanceInfo) { instanceRegistry.register(instanceInfo); return Results.success(); } @PostMapping("/renew") - public Result renew(@RequestBody InstanceInfo.InstanceRenew instanceRenew) { + public Result renew(@RequestBody InstanceInfo.InstanceRenew instanceRenew) { boolean isSuccess = instanceRegistry.renew(instanceRenew); if (!isSuccess) { - log.warn("Not Found (Renew) :: {} - {}", instanceRenew.getAppName(), instanceRenew.getInstanceId()); + log.warn("Not Found (Renew): {} - {}", instanceRenew.getAppName(), instanceRenew.getInstanceId()); return Results.failure(ErrorCodeEnum.NOT_FOUND); } return Results.success(); } @PostMapping("/remove") - public Result remove(@RequestBody InstanceInfo instanceInfo) { - instanceRegistry.remove(instanceInfo); + public Result remove(@RequestBody InstanceInfo instanceInfo) { + instanceRegistry.remove(instanceInfo); return Results.success(); } - } diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java index 857c7229..33dcdf3c 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/BaseInstanceRegistry.java @@ -1,20 +1,41 @@ +/* + * 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. + */ + package cn.hippo4j.discovery.core; +import cn.hippo4j.common.design.observer.AbstractSubjectCenter; import cn.hippo4j.common.model.InstanceInfo; import cn.hippo4j.common.model.InstanceInfo.InstanceStatus; -import com.google.common.cache.CacheBuilder; import com.google.common.collect.Lists; import com.google.common.util.concurrent.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.*; -import java.util.concurrent.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantReadWriteLock; import static cn.hippo4j.common.constant.Constants.EVICTION_INTERVAL_TIMER_IN_MS; import static cn.hippo4j.common.constant.Constants.SCHEDULED_THREAD_CORE_NUM; @@ -22,40 +43,15 @@ import static cn.hippo4j.common.constant.Constants.SCHEDULED_THREAD_CORE_NUM; /** * Base instance registry. * - * @author chen.ma - * @date 2021/8/8 22:46 + *

Reference from Eureka. Service registration, service offline, service renewal. */ @Slf4j @Service public class BaseInstanceRegistry implements InstanceRegistry { - private final int CONTAINER_SIZE = 1024; - - private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); - - private final Lock read = readWriteLock.readLock(); - - protected final Object lock = new Object(); - - private final ConcurrentHashMap>> registry = new ConcurrentHashMap(CONTAINER_SIZE); - - protected volatile int expectedNumberOfClientsSendingRenews; - - private final CircularQueue> recentRegisteredQueue; + private final int containerSize = 1024; - private final CircularQueue> recentCanceledQueue; - - private ConcurrentLinkedQueue recentlyChangedQueue = new ConcurrentLinkedQueue(); - - protected final ConcurrentMap overriddenInstanceStatusMap = CacheBuilder - .newBuilder().initialCapacity(512) - .expireAfterAccess(1, TimeUnit.HOURS) - .build().asMap(); - - public BaseInstanceRegistry() { - this.recentRegisteredQueue = new CircularQueue(CONTAINER_SIZE); - this.recentCanceledQueue = new CircularQueue(CONTAINER_SIZE); - } + private final ConcurrentHashMap>> registry = new ConcurrentHashMap(containerSize); @Override public List> listInstance(String appName) { @@ -63,7 +59,6 @@ public class BaseInstanceRegistry implements InstanceRegistry { if (CollectionUtils.isEmpty(appNameLeaseMap)) { return Lists.newArrayList(); } - List> appNameLeaseList = Lists.newArrayList(); appNameLeaseMap.values().forEach(each -> appNameLeaseList.add(each)); return appNameLeaseList; @@ -71,160 +66,62 @@ public class BaseInstanceRegistry implements InstanceRegistry { @Override public void register(InstanceInfo registrant) { - read.lock(); - try { - Map> registerMap = registry.get(registrant.getAppName()); + Map> registerMap = registry.get(registrant.getAppName()); + if (registerMap == null) { + ConcurrentHashMap> registerNewMap = new ConcurrentHashMap(12); + registerMap = registry.putIfAbsent(registrant.getAppName(), registerNewMap); if (registerMap == null) { - ConcurrentHashMap> registerNewMap = new ConcurrentHashMap(12); - registerMap = registry.putIfAbsent(registrant.getAppName(), registerNewMap); - if (registerMap == null) { - registerMap = registerNewMap; - } - } - - Lease existingLease = registerMap.get(registrant.getInstanceId()); - if (existingLease != null && (existingLease.getHolder() != null)) { - Long existingLastDirtyTimestamp = existingLease.getHolder().getLastDirtyTimestamp(); - Long registrationLastDirtyTimestamp = registrant.getLastDirtyTimestamp(); - - if (existingLastDirtyTimestamp > registrationLastDirtyTimestamp) { - registrant = existingLease.getHolder(); - } + registerMap = registerNewMap; } - - Lease lease = new Lease(registrant); - if (existingLease != null) { - lease.setServiceUpTimestamp(existingLease.getServiceUpTimestamp()); - } - registerMap.put(registrant.getInstanceId(), lease); - - recentRegisteredQueue.add(new Pair( - System.currentTimeMillis(), - registrant.getAppName() + "(" + registrant.getInstanceId() + ")")); - - InstanceStatus overriddenStatusFromMap = overriddenInstanceStatusMap.get(registrant.getInstanceId()); - if (overriddenStatusFromMap != null) { - log.info("Storing overridden status :: {} from map", overriddenStatusFromMap); - registrant.setOverriddenStatus(overriddenStatusFromMap); - } - - if (InstanceStatus.UP.equals(registrant.getStatus())) { - lease.serviceUp(); + } + Lease existingLease = registerMap.get(registrant.getInstanceId()); + if (existingLease != null && (existingLease.getHolder() != null)) { + Long existingLastDirtyTimestamp = existingLease.getHolder().getLastDirtyTimestamp(); + Long registrationLastDirtyTimestamp = registrant.getLastDirtyTimestamp(); + if (existingLastDirtyTimestamp > registrationLastDirtyTimestamp) { + registrant = existingLease.getHolder(); } - - registrant.setActionType(InstanceInfo.ActionType.ADDED); - recentlyChangedQueue.add(new RecentlyChangedItem(lease)); - registrant.setLastUpdatedTimestamp(); - } finally { - read.unlock(); } + Lease lease = new Lease(registrant); + if (existingLease != null) { + lease.setServiceUpTimestamp(existingLease.getServiceUpTimestamp()); + } + registerMap.put(registrant.getInstanceId(), lease); + if (InstanceStatus.UP.equals(registrant.getStatus())) { + lease.serviceUp(); + } + registrant.setActionType(InstanceInfo.ActionType.ADDED); + registrant.setLastUpdatedTimestamp(); } @Override public boolean renew(InstanceInfo.InstanceRenew instanceRenew) { String appName = instanceRenew.getAppName(); String instanceId = instanceRenew.getInstanceId(); - Map> registryMap = registry.get(appName); - Lease leaseToRenew = null; + Lease leaseToRenew; if (registryMap == null || (leaseToRenew = registryMap.get(instanceId)) == null) { return false; } - leaseToRenew.renew(); return true; } @Override public void remove(InstanceInfo info) { - ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock(); - writeLock.lock(); - try { - String appName = info.getAppName(); - String instanceId = info.getInstanceId(); - Map> leaseMap = registry.get(appName); - if (CollectionUtils.isEmpty(leaseMap)) { - log.warn("Failed to remove unhealthy node, no application found :: {}", appName); - return; - } - - Lease remove = leaseMap.remove(instanceId); - if (remove == null) { - log.warn("Failed to remove unhealthy node, no instance found :: {}", instanceId); - return; - } - - log.info("Remove unhealthy node, node ID :: {}", instanceId); - } finally { - writeLock.unlock(); - } - } - - static class CircularQueue extends AbstractQueue { - - private final ArrayBlockingQueue delegate; - - public CircularQueue(int capacity) { - this.delegate = new ArrayBlockingQueue(capacity); - } - - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public boolean offer(E e) { - while (!delegate.offer(e)) { - delegate.poll(); - } - return true; - } - - @Override - public E poll() { - return delegate.poll(); - } - - @Override - public E peek() { - return delegate.peek(); - } - - @Override - public void clear() { - delegate.clear(); - } - - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - } - - private static final class RecentlyChangedItem { - private long lastUpdateTime; - - private Lease leaseInfo; - - public RecentlyChangedItem(Lease lease) { - this.leaseInfo = lease; - lastUpdateTime = System.currentTimeMillis(); - } - - public long getLastUpdateTime() { - return this.lastUpdateTime; - } - - public Lease getLeaseInfo() { - return this.leaseInfo; - } + String appName = info.getAppName(); + String instanceId = info.getInstanceId(); + Map> leaseMap = registry.get(appName); + if (CollectionUtils.isEmpty(leaseMap)) { + log.warn("Failed to remove unhealthy node, no application found: {}", appName); + return; + } + Lease remove = leaseMap.remove(instanceId); + if (remove == null) { + log.warn("Failed to remove unhealthy node, no instance found: {}", instanceId); + return; + } + log.info("Remove unhealthy node, node ID: {}", instanceId); } public void evict(long additionalLeaseMs) { @@ -240,26 +137,21 @@ public class BaseInstanceRegistry implements InstanceRegistry { } } } - for (Lease expiredLease : expiredLeases) { String appName = expiredLease.getHolder().getAppName(); String id = expiredLease.getHolder().getInstanceId(); - internalCancel(appName, id, false); + String identify = expiredLease.getHolder().getIdentify(); + internalCancel(appName, id, identify); } } - protected boolean internalCancel(String appName, String id, boolean isReplication) { - read.lock(); - try { - Map> registerMap = registry.get(appName); - if (!CollectionUtils.isEmpty(registerMap)) { - registerMap.remove(id); - log.info("Clean up unhealthy nodes. Node id :: {}", id); - } - } finally { - read.unlock(); + protected boolean internalCancel(String appName, String id, String identify) { + Map> registerMap = registry.get(appName); + if (!CollectionUtils.isEmpty(registerMap)) { + registerMap.remove(id); + AbstractSubjectCenter.notify(AbstractSubjectCenter.SubjectType.CLEAR_CONFIG_CACHE, () -> identify); + log.info("Clean up unhealthy nodes. Node id: {}", id); } - return true; } @@ -284,7 +176,6 @@ public class BaseInstanceRegistry implements InstanceRegistry { if (lastNanos == 0L) { return 0L; } - long elapsedMs = TimeUnit.NANOSECONDS.toMillis(currNanos - lastNanos); long compensationTime = elapsedMs - EVICTION_INTERVAL_TIMER_IN_MS; return compensationTime <= 0L ? 0L : compensationTime; @@ -301,8 +192,7 @@ public class BaseInstanceRegistry implements InstanceRegistry { new ThreadFactoryBuilder() .setNameFormat("registry-eviction") .setDaemon(true) - .build() - ); + .build()); private final AtomicReference evictionTaskRef = new AtomicReference(); @@ -311,5 +201,4 @@ public class BaseInstanceRegistry implements InstanceRegistry { scheduledExecutorService.scheduleWithFixedDelay(evictionTaskRef.get(), EVICTION_INTERVAL_TIMER_IN_MS, EVICTION_INTERVAL_TIMER_IN_MS, TimeUnit.MILLISECONDS); } - } diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/ClientCloseHookRemoveNode.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/ClientCloseHookRemoveNode.java new file mode 100644 index 00000000..e389ed68 --- /dev/null +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/ClientCloseHookRemoveNode.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.discovery.core; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.JSONUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * Client close hook remove node. + */ +@Slf4j +@Component +@AllArgsConstructor +public class ClientCloseHookRemoveNode implements ClientCloseHookExecute { + + private final InstanceRegistry instanceRegistry; + + @Override + public void closeHook(ClientCloseHookReq requestParam) { + log.info("Remove Node, Execute client hook function. Request: {}", JSONUtil.toJSONString(requestParam)); + try { + InstanceInfo instanceInfo = new InstanceInfo(); + instanceInfo.setAppName(requestParam.getAppName()).setInstanceId(requestParam.getInstanceId()); + instanceRegistry.remove(instanceInfo); + } catch (Exception ex) { + log.error("Failed to delete node hook.", ex); + } + } +} diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/InstanceRegistry.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/InstanceRegistry.java index dc2f75af..b8ea48ac 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/InstanceRegistry.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/InstanceRegistry.java @@ -1,3 +1,20 @@ +/* + * 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. + */ + package cn.hippo4j.discovery.core; import cn.hippo4j.common.model.InstanceInfo; @@ -6,9 +23,6 @@ import java.util.List; /** * Instance registry. - * - * @author chen.ma - * @date 2021/8/8 22:31 */ public interface InstanceRegistry { @@ -41,5 +55,4 @@ public interface InstanceRegistry { * @param info */ void remove(T info); - } diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Lease.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Lease.java index e99fa083..9dfc48f9 100644 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Lease.java +++ b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Lease.java @@ -1,15 +1,42 @@ +/* + * 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. + */ + package cn.hippo4j.discovery.core; /** * Lease. - * - * @author chen.ma - * @date 2021/8/8 22:49 */ public class Lease { enum Action { - REGISTER, CANCEL, RENEW + /** + * REGISTER + */ + REGISTER, + + /** + * CANCEL + */ + CANCEL, + + /** + * RENEW + */ + RENEW } private T holder; @@ -83,5 +110,4 @@ public class Lease { public T getHolder() { return holder; } - } diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Pair.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Pair.java deleted file mode 100644 index 74f0c04d..00000000 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/Pair.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.hippo4j.discovery.core; - -/** - * Pair. - * - * @author chen.ma - * @date 2021/8/8 23:04 - */ -public class Pair { - - public E1 first() { - return first; - } - - public void setFirst(E1 first) { - this.first = first; - } - - public E2 second() { - return second; - } - - public void setSecond(E2 second) { - this.second = second; - } - - private E1 first; - - private E2 second; - - public Pair(E1 first, E2 second) { - this.first = first; - this.second = second; - } - -} diff --git a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/StatusOverrideResult.java b/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/StatusOverrideResult.java deleted file mode 100644 index 8db58cef..00000000 --- a/hippo4j-discovery/src/main/java/cn/hippo4j/discovery/core/StatusOverrideResult.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.hippo4j.discovery.core; - -import cn.hippo4j.common.model.InstanceInfo.InstanceStatus; - -/** - * Status override result. - * - * @author chen.ma - * @date 2021/8/8 23:11 - */ -public class StatusOverrideResult { - - public static StatusOverrideResult NO_MATCH = new StatusOverrideResult(false, null); - - public static StatusOverrideResult matchingStatus(InstanceStatus status) { - return new StatusOverrideResult(true, status); - } - - private final boolean matches; - - private final InstanceStatus status; - - private StatusOverrideResult(boolean matches, InstanceStatus status) { - this.matches = matches; - this.status = status; - } - - public boolean matches() { - return matches; - } - - public InstanceStatus status() { - return status; - } - -} diff --git a/hippo4j-example/.gitignore b/hippo4j-example/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-example/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml new file mode 100644 index 00000000..cffc3c06 --- /dev/null +++ b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-core-apollo-spring-boot-starter-example + + + true + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + cn.hippo4j + hippo4j-core-spring-boot-starter + ${revision} + + + + com.ctrip.framework.apollo + apollo-client + ${apollo.version} + + + + org.springframework.cloud + spring-cloud-context + 2.2.5.RELEASE + + + + org.slf4j + slf4j-api + 1.7.21 + + + + io.micrometer + micrometer-registry-prometheus + + + + org.springframework.boot + spring-boot-starter-actuator + + + diff --git a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/apollo/Hippo4jCoreApolloExampleApplication.java b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/apollo/Hippo4jCoreApolloExampleApplication.java new file mode 100644 index 00000000..45fd972c --- /dev/null +++ b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/apollo/Hippo4jCoreApolloExampleApplication.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.apollo; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.core") +public class Hippo4jCoreApolloExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jCoreApolloExampleApplication.class, args); + } + +} diff --git a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties new file mode 100644 index 00000000..454edce8 --- /dev/null +++ b/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties @@ -0,0 +1,48 @@ +# Configuration reference: https://hippo4j.cn/pages/2f674h +server.port=8091 +server.servlet.context-path=/example + +app.id=dynamic-threadpool-example +apollo.meta=http://127.0.0.1:8080 +apollo.autoUpdateInjectedSpringProperties=true +apollo.bootstrap.enabled=true +apollo.bootstrap.namespaces=application +apollo.bootstrap.eagerLoad.enabled=true + +spring.profiles.active=dev +spring.application.name=dynamic-threadpool-example + +management.metrics.export.prometheus.enabled=true +management.server.port=29998 +management.endpoints.web.exposure.include=* + +spring.dynamic.thread-pool.enable=true +spring.dynamic.thread-pool.banner=true +spring.dynamic.thread-pool.check-state-interval=3 + +spring.dynamic.thread-pool.notify-platforms[0].platform=WECHAT +spring.dynamic.thread-pool.notify-platforms[0].secret-key=ac0426a5-c712-474c-9bff-72b8b8f5caff +spring.dynamic.thread-pool.notify-platforms[1].platform=DING +spring.dynamic.thread-pool.notify-platforms[1].secret-key=56417ebba6a27ca352f0de77a2ae9da66d01f39610b5ee8a6033c60ef9071c55 +spring.dynamic.thread-pool.notify-platforms[2].platform=LARK +spring.dynamic.thread-pool.notify-platforms[2].secret-key=2cbf2808-3839-4c26-a04d-fd201dd51f9e + +spring.dynamic.thread-pool.apollo.namespace=application +spring.dynamic.thread-pool.config-file-type=properties + +spring.dynamic.thread-pool.executors[0].thread-pool-id=message-consume +spring.dynamic.thread-pool.executors[0].core-pool-size=3 +spring.dynamic.thread-pool.executors[0].maximum-pool-size=4 +spring.dynamic.thread-pool.executors[0].queue-capacity=4 +spring.dynamic.thread-pool.executors[0].execute-time-out=1000 +spring.dynamic.thread-pool.executors[0].blocking-queue=LinkedBlockingQueue +spring.dynamic.thread-pool.executors[0].rejected-handler=AbortPolicy +spring.dynamic.thread-pool.executors[0].keep-alive-time=1000 +spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[0].thread-name-prefix=message-consume +spring.dynamic.thread-pool.executors[0].notify.is-alarm=true +spring.dynamic.thread-pool.executors[0].notify.active-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.capacity-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.interval=8 +spring.dynamic.thread-pool.executors[0].notify.receives.WECHAT=xxx +spring.dynamic.thread-pool.executors[0].notify.receives.DING=xxx diff --git a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml new file mode 100644 index 00000000..a07fe309 --- /dev/null +++ b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml @@ -0,0 +1,80 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + + hippo4j-core-nacos-spring-boot-starter-example + ${project.artifactId} + + + true + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + cn.hippo4j + hippo4j-core-spring-boot-starter + ${revision} + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + 2.2.5.RELEASE + + + + io.micrometer + micrometer-registry-prometheus + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/nacos/Hippo4jCoreNacosExampleApplication.java b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/nacos/Hippo4jCoreNacosExampleApplication.java new file mode 100644 index 00000000..d6ca7941 --- /dev/null +++ b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/nacos/Hippo4jCoreNacosExampleApplication.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.nacos; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.core") +public class Hippo4jCoreNacosExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jCoreNacosExampleApplication.class, args); + } + +} diff --git a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties new file mode 100644 index 00000000..c6c6be70 --- /dev/null +++ b/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties @@ -0,0 +1,51 @@ +server.port=8089 +server.servlet.context-path=/example + +management.metrics.export.prometheus.enabled=true +management.server.port=29999 +management.endpoints.web.exposure.include=* + +spring.profiles.active=dev +spring.application.name=dynamic-threadpool-example + +spring.cloud.nacos.config.password=nacos +spring.cloud.nacos.config.server-addr=127.0.0.1:8848 +spring.cloud.nacos.config.username=nacos +spring.cloud.nacos.config.extension-configs[0].data-id=hippo4j-nacos.yaml +spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP +spring.cloud.nacos.config.extension-configs[0].refresh=true + +spring.dynamic.thread-pool.enable=true +spring.dynamic.thread-pool.banner=true +spring.dynamic.thread-pool.collect=true +spring.dynamic.thread-pool.collect-type=log,prometheus +spring.dynamic.thread-pool.check-state-interval=5 + +spring.dynamic.thread-pool.notify-platforms[0].platform=WECHAT +spring.dynamic.thread-pool.notify-platforms[0].secret-key=ac0426a5-c712-474c-9bff-72b8b8f5caff +spring.dynamic.thread-pool.notify-platforms[1].platform=DING +spring.dynamic.thread-pool.notify-platforms[1].secret-key=56417ebba6a27ca352f0de77a2ae9da66d01f39610b5ee8a6033c60ef9071c55 +spring.dynamic.thread-pool.notify-platforms[2].platform=LARK +spring.dynamic.thread-pool.notify-platforms[2].secret-key=2cbf2808-3839-4c26-a04d-fd201dd51f9e + +spring.dynamic.thread-pool.nacos.data-id=hippo4j-nacos.yaml +spring.dynamic.thread-pool.nacos.group=DEFAULT_GROUP +spring.dynamic.thread-pool.config-file-type=yml + +spring.dynamic.thread-pool.executors[0].thread-pool-id=message-consume +spring.dynamic.thread-pool.executors[0].core-pool-size=1 +spring.dynamic.thread-pool.executors[0].maximum-pool-size=1 +spring.dynamic.thread-pool.executors[0].queue-capacity=1 +spring.dynamic.thread-pool.executors[0].blocking-queue=LinkedBlockingQueue +spring.dynamic.thread-pool.executors[0].execute-time-out=1000 +spring.dynamic.thread-pool.executors[0].rejected-handler=AbortPolicy +spring.dynamic.thread-pool.executors[0].keep-alive-time=6691 +spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[0].thread-name-prefix=message-consume +spring.dynamic.thread-pool.executors[0].notify.is-alarm=true +spring.dynamic.thread-pool.executors[0].notify.active-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.capacity-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.interval=8 +spring.dynamic.thread-pool.executors[0].notify.receives.WECHAT=xxx +spring.dynamic.thread-pool.executors[0].notify.receives.DING=xxx +spring.dynamic.thread-pool.executors[0].notify.receives.LARK=xxx diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml new file mode 100644 index 00000000..09b82734 --- /dev/null +++ b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-core-zookeeper-spring-boot-starter-example + + + true + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-logging + + + + cn.hippo4j + hippo4j-core-spring-boot-starter + ${revision} + + + + org.apache.curator + curator-framework + 5.1.0 + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/zookeeper/Hippo4jCoreZookeeperExampleApplication.java b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/zookeeper/Hippo4jCoreZookeeperExampleApplication.java new file mode 100644 index 00000000..4f843676 --- /dev/null +++ b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/zookeeper/Hippo4jCoreZookeeperExampleApplication.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.zookeeper; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author Redick01 + * @date 2022/3/14 20:40 + */ +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.core") +public class Hippo4jCoreZookeeperExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jCoreZookeeperExampleApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/application.properties new file mode 100644 index 00000000..33d16c9e --- /dev/null +++ b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/application.properties @@ -0,0 +1,9 @@ +server.port=8888 + +spring.application.name=dynamic-threadpool-zookeeper-example + +spring.dynamic.thread-pool.config-file-type=properties +spring.dynamic.thread-pool.zookeeper.zk-connect-str=127.0.0.1:2181 +spring.dynamic.thread-pool.zookeeper.config-version=1.0.0 +spring.dynamic.thread-pool.zookeeper.root-node=/configserver/userproject +spring.dynamic.thread-pool.zookeeper.node=zookeeper-demo diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties new file mode 100644 index 00000000..20e8cc0b --- /dev/null +++ b/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties @@ -0,0 +1,40 @@ +# Export from zookeeper configuration group: [/configserver/userproject] - [1.0.0] - [zookeeper-demo]. + +spring.application.name=dynamic-threadpool-zookeeper-example +spring.dynamic.thread-pool.banner=true +spring.dynamic.thread-pool.check-state-interval=5 +spring.dynamic.thread-pool.collect=true +spring.dynamic.thread-pool.config-file-type=properties +spring.dynamic.thread-pool.enable=true +spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[0].blocking-queue=LinkedBlockingQueue +spring.dynamic.thread-pool.executors[0].core-pool-size=2 +spring.dynamic.thread-pool.executors[0].execute-time-out=1000 +spring.dynamic.thread-pool.executors[0].keep-alive-time=6691 +spring.dynamic.thread-pool.executors[0].maximum-pool-size=4 +spring.dynamic.thread-pool.executors[0].notify.active-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.capacity-alarm=80 +spring.dynamic.thread-pool.executors[0].notify.interval=8 +spring.dynamic.thread-pool.executors[0].notify.is-alarm=true +spring.dynamic.thread-pool.executors[0].notify.receives.DING=177****6993 +spring.dynamic.thread-pool.executors[0].queue-capacity=100 +spring.dynamic.thread-pool.executors[0].rejected-handler=AbortPolicy +spring.dynamic.thread-pool.executors[0].thread-name-prefix=message-consume +spring.dynamic.thread-pool.executors[0].thread-pool-id=message-consume +spring.dynamic.thread-pool.executors[1].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[1].blocking-queue=LinkedBlockingQueue +spring.dynamic.thread-pool.executors[1].core-pool-size=1 +spring.dynamic.thread-pool.executors[1].execute-time-out=1000 +spring.dynamic.thread-pool.executors[1].keep-alive-time=6691 +spring.dynamic.thread-pool.executors[1].maximum-pool-size=1 +spring.dynamic.thread-pool.executors[1].notify.active-alarm=80 +spring.dynamic.thread-pool.executors[1].notify.capacity-alarm=80 +spring.dynamic.thread-pool.executors[1].notify.interval=8 +spring.dynamic.thread-pool.executors[1].notify.is-alarm=true +spring.dynamic.thread-pool.executors[1].notify.receives.DING=177****6993 +spring.dynamic.thread-pool.executors[1].queue-capacity=1 +spring.dynamic.thread-pool.executors[1].rejected-handler=AbortPolicy +spring.dynamic.thread-pool.executors[1].thread-name-prefix=message-produce +spring.dynamic.thread-pool.executors[1].thread-pool-id=message-produce +spring.dynamic.thread-pool.notify-platforms[0].platform=DING +spring.dynamic.thread-pool.notify-platforms[0].secret-key=aab197577f6d8cc3aa8b52ee38adb6e16a46642a9c4986f5e45ca6946fdcea6f diff --git a/hippo4j-tools/log-record-tool/pom.xml b/hippo4j-example/hippo4j-example-core/pom.xml similarity index 59% rename from hippo4j-tools/log-record-tool/pom.xml rename to hippo4j-example/hippo4j-example-core/pom.xml index a68c1d67..50ed2a3d 100644 --- a/hippo4j-tools/log-record-tool/pom.xml +++ b/hippo4j-example/hippo4j-example-core/pom.xml @@ -2,18 +2,12 @@ 4.0.0 - cn.hippo4j - hippo4j-tools + hippo4j-example ${revision} - - log-record-tool - jar - - ${project.artifactId} - 操作日志记录工具类. + hippo4j-example-core true @@ -32,29 +26,13 @@ - org.aspectj - aspectjweaver - - - - org.projectlombok - lombok + cn.hippo4j + hippo4j-core com.alibaba transmittable-thread-local - - - com.google.guava - guava - - - - org.hibernate.validator - hibernate-validator - - diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/ThreadPoolConfig.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/ThreadPoolConfig.java new file mode 100644 index 00000000..14f21059 --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/ThreadPoolConfig.java @@ -0,0 +1,113 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.config; + +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.example.core.handler.TaskTraceBuilderHandler; +import cn.hippo4j.example.core.inittest.TaskDecoratorTest; +import com.alibaba.ttl.threadpool.TtlExecutors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_CONSUME; +import static cn.hippo4j.example.core.constant.GlobalTestConstant.MESSAGE_PRODUCE; + +/** + * Thread pool config. + * + * @author chen.ma + * @date 2021/6/20 17:16 + */ +@Slf4j +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageConsumeDynamicThreadPool() { + String threadPoolId = MESSAGE_CONSUME; + ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .executeTimeOut(800L) + .waitForTasksToCompleteOnShutdown(true) + .awaitTerminationMillis(5000L) + .taskDecorator(new TaskTraceBuilderHandler()) + .build(); + return customExecutor; + } + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor messageProduceDynamicThreadPool() { + String threadPoolId = MESSAGE_PRODUCE; + ThreadPoolExecutor produceExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .executeTimeOut(900L) + .waitForTasksToCompleteOnShutdown(true) + .awaitTerminationMillis(5000L) + /** + * 上下文传递,测试用例:{@link TaskDecoratorTest} + */ + .taskDecorator(new TaskDecoratorTest.ContextCopyingDecorator()) + .build(); + return produceExecutor; + } + + @Bean + @DynamicThreadPool + public Executor messageConsumeTtlDynamicThreadPool() { + String threadPoolId = MESSAGE_CONSUME; + ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .executeTimeOut(800L) + .waitForTasksToCompleteOnShutdown(true) + .awaitTerminationMillis(5000L) + .taskDecorator(new TaskTraceBuilderHandler()) + .build(); + Executor ttlExecutor = TtlExecutors.getTtlExecutor(customExecutor); + return ttlExecutor; + } + + @Bean + @DynamicThreadPool + public Executor messageConsumeTtlServiceDynamicThreadPool() { + String threadPoolId = MESSAGE_CONSUME; + ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .threadFactory(threadPoolId) + .threadPoolId(threadPoolId) + .executeTimeOut(800L) + .waitForTasksToCompleteOnShutdown(true) + .awaitTerminationMillis(5000L) + .taskDecorator(new TaskTraceBuilderHandler()) + .build(); + Executor ttlExecutor = TtlExecutors.getTtlExecutorService(customExecutor); + return ttlExecutor; + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/constant/GlobalTestConstant.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/constant/GlobalTestConstant.java new file mode 100644 index 00000000..f7137460 --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/constant/GlobalTestConstant.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.constant; + +/** + * Global test variables. + * + * @author chen.ma + * @date 2021/8/15 21:06 + */ +public class GlobalTestConstant { + + public static final String MESSAGE_PRODUCE = "message-produce"; + + public static final String MESSAGE_CONSUME = "message-consume"; + +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/dto/SendMessageDTO.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/dto/SendMessageDTO.java new file mode 100644 index 00000000..48371b45 --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/dto/SendMessageDTO.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * Send message dto. + */ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SendMessageDTO implements Serializable { + + private String uid; + + private String receiver; + + public SendMessageDTO uid(String uid) { + this.uid = uid; + return this; + } + + public SendMessageDTO receiver(String receiver) { + this.receiver = receiver; + return this; + } + + public static SendMessageDTO builder() { + return new SendMessageDTO(); + } + + public SendMessageDTO build() { + return this; + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/ErrorLogRejectedExecutionHandler.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/ErrorLogRejectedExecutionHandler.java new file mode 100644 index 00000000..67a63b5f --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/ErrorLogRejectedExecutionHandler.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.handler; + +import cn.hippo4j.core.spi.CustomRejectedExecutionHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 自定义拒绝策略. + * + * @author chen.ma + * @date 2022/1/4 22:19 + */ +public class ErrorLogRejectedExecutionHandler implements CustomRejectedExecutionHandler { + + @Override + public Integer getType() { + return 12; + } + + @Override + public RejectedExecutionHandler generateRejected() { + return new CustomErrorLogRejectedExecutionHandler(); + } + + public static class CustomErrorLogRejectedExecutionHandler implements RejectedExecutionHandler { + + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + Logger logger = LoggerFactory.getLogger(this.getClass()); + logger.error("线程池抛出拒绝策略."); + } + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/TaskTraceBuilderHandler.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/TaskTraceBuilderHandler.java new file mode 100644 index 00000000..e6f89c15 --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/handler/TaskTraceBuilderHandler.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.handler; + +import cn.hippo4j.common.toolkit.StringUtil; +import org.slf4j.MDC; +import org.springframework.core.task.TaskDecorator; + +import static cn.hippo4j.common.constant.Constants.EXECUTE_TIMEOUT_TRACE; + +/** + * Task trace builder handler. + * + * @author chen.ma + * @date 2022/3/2 20:46 + */ +public final class TaskTraceBuilderHandler implements TaskDecorator { + + @Override + public Runnable decorate(Runnable runnable) { + String executeTimeoutTrace = MDC.get(EXECUTE_TIMEOUT_TRACE); + Runnable taskRun = () -> { + if (StringUtil.isNotBlank(executeTimeoutTrace)) { + MDC.put(EXECUTE_TIMEOUT_TRACE, executeTimeoutTrace); + } + runnable.run(); + // 此处不用进行清理操作, 统一在线程任务执行后清理 + }; + return taskRun; + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java new file mode 100644 index 00000000..394b37cc --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/AlarmSendMessageTest.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.inittest; + +import cn.hippo4j.example.core.constant.GlobalTestConstant; +import cn.hutool.core.thread.ThreadUtil; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Test alarm send message. + * + * @author chen.ma + * @date 2021/8/15 21:03 + */ +@Slf4j +@Component +public class AlarmSendMessageTest { + + /** + * 测试报警通知. + * 如果需要运行此单测, 方法上添加 @PostConstruct + */ + @SuppressWarnings("all") + public void alarmSendMessageTest() { + ScheduledExecutorService scheduledThreadPool = Executors.newSingleThreadScheduledExecutor(); + scheduledThreadPool.scheduleWithFixedDelay(() -> { + DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); + ThreadPoolExecutor poolExecutor = poolWrapper.getExecutor(); + try { + poolExecutor.execute(() -> ThreadUtil.sleep(10240124)); + } catch (Exception ex) { + log.error("Throw reject policy.", ex.getMessage()); + } + }, 3, 1, TimeUnit.SECONDS); + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RegisterDynamicThreadPoolTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RegisterDynamicThreadPoolTest.java new file mode 100644 index 00000000..eae3e97e --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RegisterDynamicThreadPoolTest.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.inittest; + +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Register dynamic thread-pool test. + */ +@Slf4j +@Component +public class RegisterDynamicThreadPoolTest { + + @PostConstruct + public void registerDynamicThreadPool() { + String threadPoolId = "register-dynamic-thread-pool"; + DynamicThreadPoolRegisterParameter parameterInfo = new DynamicThreadPoolRegisterParameter(); + parameterInfo.setThreadPoolId(threadPoolId); + parameterInfo.setCorePoolSize(3); + parameterInfo.setMaximumPoolSize(14); + parameterInfo.setQueueType(9); + parameterInfo.setCapacity(110); + parameterInfo.setKeepAliveTime(110); + parameterInfo.setRejectedType(2); + parameterInfo.setIsAlarm(0); + parameterInfo.setCapacityAlarm(90); + parameterInfo.setLivenessAlarm(90); + parameterInfo.setAllowCoreThreadTimeOut(0); + DynamicThreadPoolRegisterWrapper registerWrapper = DynamicThreadPoolRegisterWrapper.builder() + .dynamicThreadPoolRegisterParameter(parameterInfo) + .build(); + ThreadPoolExecutor dynamicThreadPool = GlobalThreadPoolManage.dynamicRegister(registerWrapper); + log.info("Dynamic registration thread pool parameter details: {}", JSONUtil.toJSONString(dynamicThreadPool)); + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java new file mode 100644 index 00000000..3c48989f --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/RunStateHandlerTest.java @@ -0,0 +1,108 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.inittest; + +import cn.hutool.core.thread.ThreadUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static cn.hippo4j.common.constant.Constants.EXECUTE_TIMEOUT_TRACE; + +/** + * Test run time metrics. + * + * @author chen.ma + * @date 2021/8/15 21:00 + */ +@Slf4j +@Component +public class RunStateHandlerTest { + + @Resource + private ThreadPoolExecutor messageConsumeDynamicThreadPool; + + @Resource + private ThreadPoolExecutor messageProduceDynamicThreadPool; + + private final ThreadPoolExecutor runStateHandlerTestExecutor = new ThreadPoolExecutor( + 2, + 2, + 0L, + TimeUnit.MILLISECONDS, + new SynchronousQueue<>(), + r -> { + Thread t = new Thread(r); + t.setName("client.example.runStateHandler.test"); + t.setDaemon(true); + return t; + }, + new ThreadPoolExecutor.AbortPolicy()); + + @PostConstruct + @SuppressWarnings("all") + public void runStateHandlerTest() { + log.info("Test thread pool runtime state interface..."); + + // 启动动态线程池模拟运行任务 + runTask(messageConsumeDynamicThreadPool); + // 启动动态线程池模拟运行任务 + runTask(messageProduceDynamicThreadPool); + } + + private void runTask(ExecutorService executorService) { + // 模拟任务运行 + runStateHandlerTestExecutor.execute(() -> { + /** + * 当线程池任务执行超时, 向 MDC 放入 Trace 标识, 报警时打印出来. + */ + MDC.put(EXECUTE_TIMEOUT_TRACE, "https://github.com/opengoofy/hippo4j 感觉不错来个 Star."); + ThreadUtil.sleep(5000); + for (int i = 0; i < Integer.MAX_VALUE; i++) { + try { + executorService.execute(() -> { + try { + int maxRandom = 10; + int temp = 2; + Random random = new Random(); + // Assignment thread pool completedTaskCount + if (random.nextInt(maxRandom) % temp == 0) { + Thread.sleep(1000); + } else { + Thread.sleep(3000); + } + } catch (InterruptedException e) { + // ignore + } + }); + } catch (Exception ex) { + // ignore + } + ThreadUtil.sleep(500); + } + }); + } +} diff --git a/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java new file mode 100644 index 00000000..3de161f1 --- /dev/null +++ b/hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/inittest/TaskDecoratorTest.java @@ -0,0 +1,95 @@ +/* + * 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. + */ + +package cn.hippo4j.example.core.inittest; + +import cn.hippo4j.example.core.constant.GlobalTestConstant; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hutool.core.thread.ThreadUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.core.task.TaskDecorator; +import org.springframework.stereotype.Component; + +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * TaskDecorator test. + * + * @author chen.ma + * @date 2021/11/28 13:01 + */ +@Slf4j +@Component +public class TaskDecoratorTest { + + public static final String PLACEHOLDER = "site"; + + private final ThreadPoolExecutor taskDecoratorTestExecutor = new ThreadPoolExecutor( + 1, + 1, + 0L, + TimeUnit.MILLISECONDS, + new SynchronousQueue<>(), + r -> { + Thread t = new Thread(r); + t.setName("client.example.taskDecorator.test"); + t.setDaemon(true); + return t; + }, + new ThreadPoolExecutor.AbortPolicy()); + + /** + * 测试动态线程池传递 {@link TaskDecorator} + * 如果需要运行此单测, 方法上添加 @PostConstruct + */ + public void taskDecoratorTest() { + taskDecoratorTestExecutor.execute(() -> { + MDC.put(PLACEHOLDER, "查看官网: https://www.hippox.cn"); + ThreadUtil.sleep(5000); + DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); + ThreadPoolExecutor threadPoolExecutor = poolWrapper.getExecutor(); + threadPoolExecutor.execute(() -> { + /** + * 此处打印不为空, taskDecorator 即为生效. + * taskDecorator 配置查看 {@link ThreadPoolConfig#messageConsumeDynamicThreadPool()} + */ + log.info("通过 taskDecorator MDC 传递上下文: {}", MDC.get(PLACEHOLDER)); + }); + }); + } + + public static class ContextCopyingDecorator implements TaskDecorator { + + @Override + public Runnable decorate(Runnable runnable) { + String placeholderVal = MDC.get(PLACEHOLDER); + // other context... + return () -> { + try { + MDC.put(PLACEHOLDER, placeholderVal); + runnable.run(); + } finally { + MDC.clear(); + } + }; + } + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/pom.xml new file mode 100644 index 00000000..40bcca10 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-adapter-kafka-example + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-json + + + + org.projectlombok + lombok + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-kafka + ${project.version} + + + + cn.hippo4j + hippo4j-spring-boot-starter + ${project.version} + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + org.springframework.kafka + spring-kafka + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/Hippo4jAdapterKafkaExampleApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/Hippo4jAdapterKafkaExampleApplication.java new file mode 100644 index 00000000..e4c0e80a --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/Hippo4jAdapterKafkaExampleApplication.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.kafka.example; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@EnableDynamicThreadPool +public class Hippo4jAdapterKafkaExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jAdapterKafkaExampleApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/consumer/KafkaMessageConsumer.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/consumer/KafkaMessageConsumer.java new file mode 100644 index 00000000..43087cc9 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/consumer/KafkaMessageConsumer.java @@ -0,0 +1,43 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.kafka.example.consumer; + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.support.Acknowledgment; +import org.springframework.kafka.support.KafkaHeaders; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * Kafka message consumer. + */ +@Slf4j +@Component +public class KafkaMessageConsumer { + + @KafkaListener(topics = "kafka_message_hippo4j", groupId = "hippo4j") + public void onMessage(ConsumerRecord record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { + Optional message = Optional.ofNullable(record.value()); + message.ifPresent(each -> log.info(each.toString())); + ack.acknowledge(); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java new file mode 100644 index 00000000..04d01c71 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/produce/KafkaMessageProduce.java @@ -0,0 +1,56 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.kafka.example.produce; + +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.example.core.dto.SendMessageDTO; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +/** + * Kafka message produce. + */ +@Slf4j +@Component +@RestController +@AllArgsConstructor +public class KafkaMessageProduce { + + private final KafkaTemplate kafkaTemplate; + + private final String TOPIC = "kafka_message_hippo4j"; + + @GetMapping("/message/send") + public String sendMessage(Integer count) { + for (int i = 0; i < count; i++) { + String keys = UUID.randomUUID().toString(); + SendMessageDTO payload = SendMessageDTO.builder() + .receiver("156011xxx91") + .uid(keys) + .build(); + kafkaTemplate.send(TOPIC, JSONUtil.toJSONString(payload)); + } + return "success"; + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/resources/application.properties new file mode 100644 index 00000000..fe298e76 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/resources/application.properties @@ -0,0 +1,23 @@ +server.port=8092 + +spring.profiles.active=dev +spring.dynamic.thread-pool.server-addr=http://localhost:6691 +spring.dynamic.thread-pool.namespace=prescription +spring.dynamic.thread-pool.item-id=dynamic-threadpool-example +spring.dynamic.thread-pool.username=admin +spring.dynamic.thread-pool.password=123456 + +spring.kafka.bootstrap-servers=127.0.0.1:9092 +spring.kafka.producer.retries=0 +spring.kafka.producer.batch-size=16384 +spring.kafka.producer.buffer-memory=33554432 +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.acks=1 +spring.kafka.consumer.auto-offset-reset=latest +spring.kafka.consumer.enable-auto-commit=false +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.listener.concurrency=2 +spring.kafka.listener.ack-mode=manual_immediate +spring.kafka.listener.missing-topics-fatal=false diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/pom.xml new file mode 100644 index 00000000..ab8e038d --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-adapter-rabbitmq-example + + + true + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-json + + + + org.projectlombok + lombok + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-rabbitmq + ${project.version} + + + + cn.hippo4j + hippo4j-spring-boot-starter + ${project.version} + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + org.springframework.boot + spring-boot-starter-amqp + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/Hippo4jAdapterRabbitMQExampleApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/Hippo4jAdapterRabbitMQExampleApplication.java new file mode 100644 index 00000000..357de7cf --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/Hippo4jAdapterRabbitMQExampleApplication.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.springboot.starter.adapter.rabbitmq.example"}) +public class Hippo4jAdapterRabbitMQExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jAdapterRabbitMQExampleApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQTemplateConfig.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQTemplateConfig.java new file mode 100644 index 00000000..b517e05a --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQTemplateConfig.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.config; + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * RabbitMQ template config. + */ +@Configuration +public class RabbitMQTemplateConfig { + + @Bean + public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) { + RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter()); + return rabbitTemplate; + } + + @Bean + public MessageConverter jackson2JsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQThreadPoolConfig.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQThreadPoolConfig.java new file mode 100644 index 00000000..ca24ff83 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/config/RabbitMQThreadPoolConfig.java @@ -0,0 +1,59 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.config; + +import org.springframework.amqp.rabbit.config.AbstractRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.config.DirectRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +/** + * @author : wh + * @date : 2022/5/24 10:02 + * @description: + */ +@Configuration +public class RabbitMQThreadPoolConfig { + + @Bean + public ThreadPoolTaskExecutor rabbitListenerTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 指定线程的最大数量 + executor.setMaxPoolSize(5); + // 指定线程池维护线程的最少数量 + executor.setCorePoolSize(5); + // 指定等待处理的任务数 + executor.setQueueCapacity(1000); + executor.setThreadNamePrefix("RabbitListenerTaskExecutor-"); + return executor; + } + + @Bean + public AbstractRabbitListenerContainerFactory defaultRabbitListenerContainerFactory(ThreadPoolTaskExecutor rabbitListenerTaskExecutor, + MessageConverter messageConverter, AbstractConnectionFactory abstractConnectionFactory) { + DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory(); + factory.setConnectionFactory(abstractConnectionFactory); + factory.setMessageConverter(messageConverter); + factory.setConsumersPerQueue(10); + abstractConnectionFactory.setExecutor(rabbitListenerTaskExecutor); + return factory; + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/constants/SimpleMQConstant.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/constants/SimpleMQConstant.java new file mode 100644 index 00000000..3b3898a1 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/constants/SimpleMQConstant.java @@ -0,0 +1,26 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.constants; + +/** + * Simple MQ constant. + */ +public interface SimpleMQConstant { + + String QUEUE_NAME = "framework_message-center_queue"; +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/consumer/MessageConsumer.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/consumer/MessageConsumer.java new file mode 100644 index 00000000..b4ae7bd9 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/consumer/MessageConsumer.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.consumer; + +import cn.hippo4j.example.core.dto.SendMessageDTO; +import cn.hippo4j.springboot.starter.adapter.rabbitmq.example.constants.SimpleMQConstant; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * Message consume. + */ +@Slf4j +@Component +public class MessageConsumer { + + @RabbitHandler + @RabbitListener(queuesToDeclare = @Queue(SimpleMQConstant.QUEUE_NAME), containerFactory = "defaultRabbitListenerContainerFactory") + public void receiveObject(SendMessageDTO simple) throws Exception { + TimeUnit.SECONDS.sleep(1); + ObjectMapper objectMapper = new ObjectMapper(); + String message = objectMapper.writeValueAsString(simple); + log.info("consumer1 threadId {} Message: {}", Thread.currentThread().getName(), message); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java new file mode 100644 index 00000000..c0a66817 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/producer/MessageProduce.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq.example.producer; + +import cn.hippo4j.example.core.dto.SendMessageDTO; +import cn.hippo4j.springboot.starter.adapter.rabbitmq.example.constants.SimpleMQConstant; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +/** + * Message produce. + */ +@Slf4j +@Component +@RestController +@AllArgsConstructor +public class MessageProduce { + + private final RabbitTemplate rabbitTemplate; + + @GetMapping("/message/send") + public String sendMessage(Integer count) { + for (int i = 0; i < count; i++) { + String keys = UUID.randomUUID().toString(); + SendMessageDTO payload = SendMessageDTO.builder() + .receiver("156011xxx91") + .uid(keys) + .build(); + rabbitTemplate.convertAndSend(SimpleMQConstant.QUEUE_NAME, payload); + } + return "success"; + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/resources/application.properties new file mode 100644 index 00000000..8e74a212 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/resources/application.properties @@ -0,0 +1,15 @@ +server.port=8091 + +spring.profiles.active=dev +spring.dynamic.thread-pool.server-addr=http://localhost:6691 +spring.dynamic.thread-pool.namespace=prescription +spring.dynamic.thread-pool.item-id=dynamic-threadpool-example +spring.dynamic.thread-pool.username=admin +spring.dynamic.thread-pool.password=123456 + +# Please replace the local configuration. +spring.rabbitmq.host=127.0.0.1 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest +spring.rabbitmq.virtual-host=/ diff --git a/hippo4j-tools/open-change-tool/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/pom.xml similarity index 53% rename from hippo4j-tools/open-change-tool/pom.xml rename to hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/pom.xml index 1396ae92..cbabedf9 100644 --- a/hippo4j-tools/open-change-tool/pom.xml +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/pom.xml @@ -1,19 +1,13 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - cn.hippo4j - hippo4j-tools + hippo4j-example ${revision} - - open-change-tool - jar - - ${project.artifactId} - 监控 GitHub 项目 Star、Fork 变更, 有变化则发起通知. + hippo4j-spring-boot-starter-adapter-rocketmq-example true @@ -27,8 +21,12 @@ org.springframework.boot - spring-boot-starter-test - test + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-json @@ -37,19 +35,21 @@ - com.aliyun - alibaba-dingtalk-service-sdk + cn.hippo4j + hippo4j-spring-boot-starter-adapter-rocketmq + ${project.version} - com.dtflys.forest - forest-spring-boot-starter + cn.hippo4j + hippo4j-spring-boot-starter + ${project.version} - cn.hutool - hutool-all + cn.hippo4j + hippo4j-example-core + ${revision} - diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/Hippo4jAdapterRocketMQExampleApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/Hippo4jAdapterRocketMQExampleApplication.java new file mode 100644 index 00000000..00b4348c --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/Hippo4jAdapterRocketMQExampleApplication.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rocketmq.example; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.springboot.starter.adapter.rocketmq.example"}) +public class Hippo4jAdapterRocketMQExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jAdapterRocketMQExampleApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageConsume.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageConsume.java new file mode 100644 index 00000000..a4d0041f --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageConsume.java @@ -0,0 +1,37 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rocketmq.example; + +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Service; + +/** + * Message consume. + */ +@Slf4j +@Service +@RocketMQMessageListener(topic = "test-topic", consumerGroup = "my-consumer_test-topic", consumeThreadNumber = 2) +public class MessageConsume implements RocketMQListener { + + @Override + public void onMessage(String message) { + log.info("Message: {}", message); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageProduce.java new file mode 100644 index 00000000..475ecff8 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/MessageProduce.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rocketmq.example; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import java.util.Date; + +/** + * Message produce. + */ +@Slf4j +@Component +@RestController +@AllArgsConstructor +public class MessageProduce { + + private final RocketMQTemplate rocketMQTemplate; + + @GetMapping("/message/send") + public String sendMessage() { + rocketMQTemplate.convertAndSend("test-topic", new Date().toString()); + return "success"; + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/resources/application.properties new file mode 100644 index 00000000..2d106599 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/resources/application.properties @@ -0,0 +1,11 @@ +server.port=8099 + +spring.profiles.active=dev +spring.dynamic.thread-pool.server-addr=http://localhost:6691 +spring.dynamic.thread-pool.namespace=prescription +spring.dynamic.thread-pool.item-id=dynamic-threadpool-example +spring.dynamic.thread-pool.username=admin +spring.dynamic.thread-pool.password=123456 + +rocketmq.nameServer=127.0.0.1:9876 +rocketmq.producer.group=my-producer diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/pom.xml new file mode 100644 index 00000000..37faf900 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example + + + true + 2.2.6.RELEASE + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba.cloud + spring-cloud-starter-stream-rocketmq + ${spring-cloud-starter-stream-rocketmq.version} + + + + org.springframework.boot + spring-boot-starter-json + + + + org.projectlombok + lombok + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + ${project.version} + + + + cn.hippo4j + hippo4j-spring-boot-starter + ${project.version} + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/Hippo4jAdapterSpringCloudStreamRocketMQApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/Hippo4jAdapterSpringCloudStreamRocketMQApplication.java new file mode 100644 index 00000000..0392fab7 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/Hippo4jAdapterSpringCloudStreamRocketMQApplication.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.example; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Source; + +@Slf4j +@EnableDynamicThreadPool +@EnableBinding({Source.class, MySink.class}) +@SpringBootApplication +public class Hippo4jAdapterSpringCloudStreamRocketMQApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jAdapterSpringCloudStreamRocketMQApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageConsume.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageConsume.java new file mode 100644 index 00000000..6ba5d918 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageConsume.java @@ -0,0 +1,60 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.example; + +import cn.hippo4j.example.core.dto.SendMessageDTO; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * Message consume. + */ +@Slf4j +@Component +public class MessageConsume { + + @StreamListener(MySink.INPUT) + public void consumeMessage(@Payload SendMessageDTO message, @Headers Map headers) { + long startTime = System.currentTimeMillis(); + try { + // ignore + } finally { + log.info("Keys: {}, Msg id: {}, Execute time: {} ms, Message: {}", headers.get("rocketmq_KEYS"), headers.get("rocketmq_MESSAGE_ID"), System.currentTimeMillis() - startTime, + JSON.toJSONString(message)); + } + log.info("Input current thread name: {}", Thread.currentThread().getName()); + } + + @StreamListener(MySink.INPUT2) + public void consumeSaveMessage(@Payload SendMessageDTO message, @Headers Map headers) { + long startTime = System.currentTimeMillis(); + try { + // ignore + } finally { + log.info("Keys: {}, Msg id: {}, Execute time: {} ms, Message: {}", headers.get("rocketmq_KEYS"), headers.get("rocketmq_MESSAGE_ID"), System.currentTimeMillis() - startTime, + JSON.toJSONString(message)); + } + log.info("Input2 current thread name: {}", Thread.currentThread().getName()); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java new file mode 100644 index 00000000..83370a67 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MessageProduce.java @@ -0,0 +1,80 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.example; + +import cn.hippo4j.example.core.dto.SendMessageDTO; +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageConst; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +/** + * Message produce. + */ +@Slf4j +@RestController +@AllArgsConstructor +public class MessageProduce { + + private final MessageChannel output; + + public static final String MESSAGE_CENTER_SEND_MESSAGE_TAG = "framework_message-center_send-message_tag"; + + public static final String MESSAGE_CENTER_SAVE_MESSAGE_TAG = "framework_message-center_save-message_tag"; + + @GetMapping("/message/send") + public String sendMessage() { + int maxSendSize = 10; + for (int i = 0; i < maxSendSize; i++) { + sendMessage(MESSAGE_CENTER_SEND_MESSAGE_TAG); + sendMessage(MESSAGE_CENTER_SAVE_MESSAGE_TAG); + } + return "success"; + } + + private void sendMessage(String tags) { + String keys = UUID.randomUUID().toString(); + SendMessageDTO payload = SendMessageDTO.builder() + .receiver("156011xxx91") + .uid(keys) + .build(); + Message message = MessageBuilder + .withPayload(JSON.toJSONString(payload)) + .setHeader(MessageConst.PROPERTY_KEYS, keys) + .setHeader(MessageConst.PROPERTY_TAGS, tags) + .build(); + long startTime = System.currentTimeMillis(); + boolean sendResult = false; + try { + sendResult = output.send(message, 2000L); + } finally { + log.info("Send status: {}, Keys: {}, Execute time: {} ms, Message: {}", + sendResult, + keys, + System.currentTimeMillis() - startTime, + JSON.toJSONString(payload)); + } + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MySink.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MySink.java new file mode 100644 index 00000000..d3dd3180 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/MySink.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.example; + +import org.springframework.cloud.stream.annotation.Input; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.messaging.SubscribableChannel; + +/** + * My sink. + */ +public interface MySink extends Sink { + + /** + * Input channel name. + */ + String INPUT2 = "input2"; + + /** + * @return input channel. + */ + @Input(MySink.INPUT2) + SubscribableChannel input2(); +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/resources/application.properties new file mode 100644 index 00000000..42e6f4dc --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/resources/application.properties @@ -0,0 +1,33 @@ +server.port=8090 + +spring.profiles.active=dev +spring.dynamic.thread-pool.server-addr=http://localhost:6691 +spring.dynamic.thread-pool.namespace=prescription +spring.dynamic.thread-pool.item-id=dynamic-threadpool-example +spring.dynamic.thread-pool.username=admin +spring.dynamic.thread-pool.password=123456 + +# Please replace the local configuration. +spring.cloud.stream.rocketmq.binder.name-server=127.0.0.1:9876 + +# === produce === +spring.cloud.stream.bindings.output.content-type=application/json +spring.cloud.stream.bindings.output.destination=framework_message-center_topic +spring.cloud.stream.bindings.output.group=framework_message-center_send-message_pg + +# === consume === +spring.cloud.stream.bindings.input.content-type=application/json +spring.cloud.stream.bindings.input.destination=framework_message-center_topic +spring.cloud.stream.bindings.input.group=framework_message-center_send-message_cg +spring.cloud.stream.bindings.input.consumer.max-attempts=1 +spring.cloud.stream.bindings.input.consumer.concurrency=1 +spring.cloud.stream.rocketmq.bindings.input.consumer.tags=framework_message-center_send-message_tag +spring.cloud.stream.rocketmq.bindings.input.consumer.delay-level-when-next-consume=-1 + +spring.cloud.stream.bindings.input2.content-type=application/json +spring.cloud.stream.bindings.input2.destination=framework_message-center_topic +spring.cloud.stream.bindings.input2.group=framework_message-center_save-message_cg +spring.cloud.stream.bindings.input2.consumer.max-attempts=1 +spring.cloud.stream.bindings.input2.consumer.concurrency=1 +spring.cloud.stream.rocketmq.bindings.input2.consumer.tags=framework_message-center_save-message_tag +spring.cloud.stream.rocketmq.bindings.input2.consumer.delay-level-when-next-consume=-1 diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml new file mode 100644 index 00000000..838a0c6b --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-es-monitor-example + + + true + + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + cn.hippo4j + hippo4j-core-spring-boot-starter + ${revision} + + + + org.springframework.boot + spring-boot-starter-web + + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat-embed-core.version} + + + + cn.hippo4j + hippo4j-spring-boot-starter-monitor-es + ${revision} + + + + + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java new file mode 100644 index 00000000..83903493 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.example.es.monitor; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.monitor"}) +public class Hippo4JExampleEsMonitorApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4JExampleEsMonitorApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties new file mode 100644 index 00000000..76febf01 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/resources/application.properties @@ -0,0 +1,41 @@ +server.port=8088 + +server.servlet.context-path=/example + +spring.profiles.active=dev +spring.application.name=dynamic-threadpool-example + +es.thread-pool-state.host = ip1:port,ip2:port +es.thread-pool-state.scheme = http +es.thread-pool-state.userName = xxx +es.thread-pool-state.password = xxx +es.thread-pool-state.index.name = thread-pool-state + +spring.dynamic.thread-pool.item-id=test +spring.dynamic.thread-pool.enable=true +spring.dynamic.thread-pool.banner=false +spring.dynamic.thread-pool.collect=true +spring.dynamic.thread-pool.collect-type=es +spring.dynamic.thread-pool.notify-platforms[0].platform=DING +spring.dynamic.thread-pool.notify-platforms[0].token=xxx +spring.dynamic.thread-pool.notify-platforms[0].secret=xxx +spring.dynamic.thread-pool.apollo.namespace=threadpool.yaml +spring.dynamic.thread-pool.config-file-type=yaml +spring.dynamic.thread-pool.alarm=true +spring.dynamic.thread-pool.check-state-interval=3000 +spring.dynamic.thread-pool.capacity-alarm=80 +spring.dynamic.thread-pool.alarm-interval=8 +spring.dynamic.thread-pool.executors[0].thread-pool-id=message-consume +spring.dynamic.thread-pool.executors[0].core-pool-size=32 +spring.dynamic.thread-pool.executors[0].maximum-pool-size=32 +spring.dynamic.thread-pool.executors[0].queue-capacity=999 +spring.dynamic.thread-pool.executors[0].execute-time-out=1500 +spring.dynamic.thread-pool.executors[0].blocking-queue=ResizableCapacityLinkedBlockIngQueue +spring.dynamic.thread-pool.executors[0].rejected-handler=CallerRunsPolicy +spring.dynamic.thread-pool.executors[0].keep-alive-time=1024 +spring.dynamic.thread-pool.executors[0].allow-core-thread-time-out=true +spring.dynamic.thread-pool.executors[0].thread-name-prefix=untimely-thread-pool +spring.dynamic.thread-pool.executors[0].notify.is-alarm=true +spring.dynamic.thread-pool.executors[0].notify.capacity-alarm=20 +spring.dynamic.thread-pool.executors[0].notify.interval=2 +spring.dynamic.thread-pool.executors[0].notify.receive=xxx diff --git a/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml new file mode 100644 index 00000000..84572a63 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-example + + + true + + + + + cn.hippo4j + hippo4j-example-core + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter + ${revision} + + + + io.micrometer + micrometer-registry-prometheus + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-web + + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat-embed-core.version} + + + + + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + diff --git a/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/java/cn/hippo4j/example/server/Hippo4JServerExampleApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/java/cn/hippo4j/example/server/Hippo4JServerExampleApplication.java new file mode 100644 index 00000000..87871a8d --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/java/cn/hippo4j/example/server/Hippo4JServerExampleApplication.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.example.server; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableDynamicThreadPool +@SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.example.server"}) +public class Hippo4JServerExampleApplication { + + public static void main(String[] args) { + SpringApplication.run(Hippo4JServerExampleApplication.class, args); + } +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/META-INF/services/cn.hippo4j.core.spi.CustomRejectedExecutionHandler b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/META-INF/services/cn.hippo4j.core.spi.CustomRejectedExecutionHandler new file mode 100644 index 00000000..bf4970df --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/META-INF/services/cn.hippo4j.core.spi.CustomRejectedExecutionHandler @@ -0,0 +1 @@ +cn.hippo4j.example.core.handler.ErrorLogRejectedExecutionHandler \ No newline at end of file diff --git a/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/application.properties new file mode 100644 index 00000000..6647ba01 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/application.properties @@ -0,0 +1,22 @@ +server.port=8088 + +server.servlet.context-path=/example + +management.metrics.export.prometheus.enabled=true +management.server.port=29901 +management.endpoints.web.exposure.include=* + +spring.profiles.active=dev +spring.application.name=dynamic-threadpool-example + +spring.dynamic.thread-pool.server-addr=http://localhost:6691 +### Use netty to report thread pool monitoring data. The default is http. +# spring.dynamic.thread-pool.report-type=netty +# spring.dynamic.thread-pool.netty-server-port=8899 +spring.dynamic.thread-pool.namespace=prescription +spring.dynamic.thread-pool.item-id=dynamic-threadpool-example +spring.dynamic.thread-pool.username=admin +spring.dynamic.thread-pool.password=123456 + +# Enable server and prometheus monitoring at the same time +spring.dynamic.thread-pool.collect-type=server,prometheus diff --git a/hippo4j-example/pom.xml b/hippo4j-example/pom.xml index 58558dc1..c23f118e 100644 --- a/hippo4j-example/pom.xml +++ b/hippo4j-example/pom.xml @@ -2,67 +2,28 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-example - jar - - ${project.artifactId} - Demo project for Spring Boot + pom + + + hippo4j-example-core + hippo4j-spring-boot-starter-example + hippo4j-spring-boot-starter-es-monitor-example + hippo4j-core-nacos-spring-boot-starter-example + hippo4j-core-apollo-spring-boot-starter-example + hippo4j-core-zookeeper-spring-boot-starter-example + hippo4j-spring-boot-starter-adapter-kafka-example + hippo4j-spring-boot-starter-adapter-rabbitmq-example + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example + hippo4j-spring-boot-starter-adapter-rocketmq-example + true - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - cn.hippo4j - hippo4j-spring-boot-starter - ${revision} - - - - cn.hippo4j - open-change-tool - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - - diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/ExampleApplication.java b/hippo4j-example/src/main/java/cn/hippo4j/example/ExampleApplication.java deleted file mode 100644 index 03fbd16d..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/ExampleApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.hippo4j.example; - -import cn.hippo4j.starter.enable.EnableDynamicThreadPool; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@EnableDynamicThreadPool -public class ExampleApplication { - - public static void main(String[] args) { - SpringApplication.run(ExampleApplication.class, args); - } - -} diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/config/ThreadPoolConfig.java b/hippo4j-example/src/main/java/cn/hippo4j/example/config/ThreadPoolConfig.java deleted file mode 100644 index 2fc21b7e..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/config/ThreadPoolConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.hippo4j.example.config; - -import cn.hippo4j.example.inittest.TaskDecoratorTest; -import cn.hippo4j.starter.core.DynamicThreadPool; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.ThreadPoolExecutor; - -import static cn.hippo4j.example.constant.GlobalTestConstant.MESSAGE_CONSUME; -import static cn.hippo4j.example.constant.GlobalTestConstant.MESSAGE_PRODUCE; - -/** - * Thread pool config. - * - * @author chen.ma - * @date 2021/6/20 17:16 - */ -@Slf4j -@Configuration -public class ThreadPoolConfig { - - /** - * {@link DynamicThreadPoolWrapper} 完成 Server 端订阅配置功能. - * - * @return - */ - @Bean - public DynamicThreadPoolWrapper messageCenterDynamicThreadPool() { - ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() - .dynamicPool() - .threadFactory(MESSAGE_CONSUME) - .build(); - return new DynamicThreadPoolWrapper(MESSAGE_CONSUME, customExecutor); - } - - /** - * 通过 {@link DynamicThreadPool} 修饰 {@link DynamicThreadPoolExecutor} 完成 Server 端订阅配置功能. - *

- * 由动态线程池注解修饰后, IOC 容器中保存的是 {@link DynamicThreadPoolExecutor} - * - * @return - */ - @Bean - @DynamicThreadPool - public ThreadPoolExecutor dynamicThreadPoolExecutor() { - return ThreadPoolBuilder.builder() - .threadFactory(MESSAGE_PRODUCE) - .dynamicPool() - /** - * 测试线程任务装饰器. - * 如果需要查看详情, 跳转 {@link TaskDecoratorTest} - */ - .waitForTasksToCompleteOnShutdown(true) - .awaitTerminationMillis(5000) - .taskDecorator(new TaskDecoratorTest.ContextCopyingDecorator()) - .build(); - } - -} diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/constant/GlobalTestConstant.java b/hippo4j-example/src/main/java/cn/hippo4j/example/constant/GlobalTestConstant.java deleted file mode 100644 index 1f35e382..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/constant/GlobalTestConstant.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hippo4j.example.constant; - -/** - * Global test variables. - * - * @author chen.ma - * @date 2021/8/15 21:06 - */ -public class GlobalTestConstant { - - public static final String CUSTOM_POOL = "custom-pool"; - - public static final String MESSAGE_PRODUCE = "message-produce"; - - public static final String MESSAGE_CONSUME = "message-consume"; -} diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/AlarmSendMessageTest.java b/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/AlarmSendMessageTest.java deleted file mode 100644 index 3466f4f4..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/AlarmSendMessageTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.hippo4j.example.inittest; - -import cn.hippo4j.example.constant.GlobalTestConstant; -import cn.hutool.core.thread.ThreadUtil; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * Test alarm send message. - * - * @author chen.ma - * @date 2021/8/15 21:03 - */ -@Slf4j -@Component -public class AlarmSendMessageTest { - - // @PostConstruct - @SuppressWarnings("all") - public void alarmSendMessageTest() { - ScheduledExecutorService scheduledThreadPool = Executors.newSingleThreadScheduledExecutor(); - scheduledThreadPool.scheduleWithFixedDelay(() -> { - DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); - ThreadPoolExecutor poolExecutor = poolWrapper.getExecutor(); - try { - poolExecutor.execute(() -> ThreadUtil.sleep(10240124)); - } catch (Exception ex) { - log.error("Throw reject policy.", ex.getMessage()); - } - }, 3, 1, TimeUnit.SECONDS); - } - -} diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/RunStateHandlerTest.java b/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/RunStateHandlerTest.java deleted file mode 100644 index b02a3ebd..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/RunStateHandlerTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.hippo4j.example.inittest; - -import cn.hutool.core.thread.ThreadUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.Random; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * Test run time metrics. - * - * @author chen.ma - * @date 2021/8/15 21:00 - */ -@Slf4j -@Component -public class RunStateHandlerTest { - - @Resource - private ThreadPoolExecutor dynamicThreadPoolExecutor; - - // @PostConstruct - @SuppressWarnings("all") - public void runStateHandlerTest() { - log.info("Test thread pool runtime state interface, The rejection policy will be triggered after 30s..."); - - new Thread(() -> { - ThreadUtil.sleep(5000); - for (int i = 0; i < Integer.MAX_VALUE; i++) { - try { - dynamicThreadPoolExecutor.execute(() -> { - log.info("Thread pool name :: {}, Executing incoming blocking...", Thread.currentThread().getName()); - try { - int maxRandom = 10; - int temp = 2; - Random random = new Random(); - // Assignment thread pool completedTaskCount - if (random.nextInt(maxRandom) % temp == 0) { - Thread.sleep(10241024); - } else { - Thread.sleep(3000); - } - } catch (InterruptedException e) { - // ignore - } - }); - } catch (Exception ex) { - // ignore - } - - log.info(" >>> Number of dynamic thread pool tasks executed :: {}", i); - ThreadUtil.sleep(500); - } - - }).start(); - } - -} diff --git a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/TaskDecoratorTest.java b/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/TaskDecoratorTest.java deleted file mode 100644 index 89ac860a..00000000 --- a/hippo4j-example/src/main/java/cn/hippo4j/example/inittest/TaskDecoratorTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.hippo4j.example.inittest; - -import cn.hippo4j.example.constant.GlobalTestConstant; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import cn.hutool.core.thread.ThreadUtil; -import lombok.extern.slf4j.Slf4j; -import org.slf4j.MDC; -import org.springframework.core.task.TaskDecorator; -import org.springframework.stereotype.Component; - -import java.util.concurrent.ThreadPoolExecutor; - -/** - * TaskDecorator test. - * - * @author chen.ma - * @date 2021/11/28 13:01 - */ -@Slf4j -@Component -public class TaskDecoratorTest { - - public static final String PLACEHOLDER = "site"; - - // @PostConstruct - public void taskDecoratorTest() { - new Thread(() -> { - MDC.put(PLACEHOLDER, "查看官网: https://www.hippox.cn"); - ThreadUtil.sleep(5000); - DynamicThreadPoolWrapper poolWrapper = GlobalThreadPoolManage.getExecutorService(GlobalTestConstant.MESSAGE_PRODUCE); - ThreadPoolExecutor threadPoolExecutor = poolWrapper.getExecutor(); - threadPoolExecutor.execute(() -> { - /** - * 此处打印不为空, taskDecorator 即为生效. - * taskDecorator 配置查看 {@link ThreadPoolConfig#messageCenterDynamicThreadPool()} - */ - log.info("通过 taskDecorator MDC 传递上下文 :: {}", MDC.get(PLACEHOLDER)); - }); - }).start(); - - } - - public static class ContextCopyingDecorator implements TaskDecorator { - - @Override - public Runnable decorate(Runnable runnable) { - String placeholderVal = MDC.get(PLACEHOLDER); - // other context... - return () -> { - try { - MDC.put(PLACEHOLDER, placeholderVal); - runnable.run(); - } finally { - MDC.clear(); - } - }; - } - } - -} diff --git a/hippo4j-example/src/main/resources/application.yaml b/hippo4j-example/src/main/resources/application.yaml deleted file mode 100644 index 50bb7129..00000000 --- a/hippo4j-example/src/main/resources/application.yaml +++ /dev/null @@ -1,19 +0,0 @@ -server: - port: 8088 - servlet: - context-path: /example - -spring: - profiles: - active: dev - - # 应用配置 - application: - name: dynamic-threadpool-example - - # 动态线程池配置 - dynamic: - thread-pool: - server-addr: http://localhost:6691 - namespace: prescription - item-id: ${spring.application.name} diff --git a/hippo4j-example/src/test/java/cn/hippo4j/example/ExampleApplicationTests.java b/hippo4j-example/src/test/java/cn/hippo4j/example/ExampleApplicationTests.java deleted file mode 100644 index 54341810..00000000 --- a/hippo4j-example/src/test/java/cn/hippo4j/example/ExampleApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.hippo4j.example; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ExampleApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/hippo4j-spring-boot-starter/pom.xml b/hippo4j-message/pom.xml similarity index 72% rename from hippo4j-spring-boot-starter/pom.xml rename to hippo4j-message/pom.xml index 0750f22f..16e80419 100644 --- a/hippo4j-spring-boot-starter/pom.xml +++ b/hippo4j-message/pom.xml @@ -2,54 +2,18 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - - hippo4j-spring-boot-starter - jar - - ${project.artifactId} - ${project.artifactId} + hippo4j-message - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-web - - - - cn.hutool - hutool-all - - - - com.squareup.okhttp3 - logging-interceptor - - - - com.alibaba - fastjson - - cn.hippo4j hippo4j-common - - - - org.springframework.boot - spring-boot-configuration-processor - true + ${revision} @@ -60,15 +24,42 @@ com.aliyun alibaba-dingtalk-service-sdk + true + + + + log4j + log4j + + + + + + commons-codec + commons-codec com.google.guava guava + + + cn.hutool + hutool-all + + + + src/main/resources + + **/*.txt + **/*.json + + + org.apache.maven.plugins @@ -84,7 +75,6 @@ - org.apache.maven.plugins maven-javadoc-plugin @@ -99,5 +89,4 @@ - diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/api/NotifyConfigBuilder.java b/hippo4j-message/src/main/java/cn/hippo4j/message/api/NotifyConfigBuilder.java new file mode 100644 index 00000000..74dc94c5 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/api/NotifyConfigBuilder.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.message.api; + +import cn.hippo4j.message.dto.NotifyConfigDTO; + +import java.util.List; +import java.util.Map; + +/** + * Notify config builder. + */ +public interface NotifyConfigBuilder { + + /** + * Build notify. + * + * @return + */ + Map> buildNotify(); +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/config/MessageConfiguration.java b/hippo4j-message/src/main/java/cn/hippo4j/message/config/MessageConfiguration.java new file mode 100644 index 00000000..e495cfe4 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/config/MessageConfiguration.java @@ -0,0 +1,60 @@ +/* + * 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. + */ + +package cn.hippo4j.message.config; + +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.message.platform.DingSendMessageHandler; +import cn.hippo4j.message.platform.LarkSendMessageHandler; +import cn.hippo4j.message.platform.WeChatSendMessageHandler; +import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; +import cn.hippo4j.message.service.Hippo4jSendMessageService; +import cn.hippo4j.message.service.SendMessageHandler; +import org.springframework.context.annotation.Bean; + +/** + * Message configuration. + */ +public class MessageConfiguration { + + @Bean + public Hippo4jSendMessageService hippo4jSendMessageService(NotifyConfigBuilder serverNotifyConfigBuilder, + AlarmControlHandler alarmControlHandler) { + return new Hippo4jBaseSendMessageService(serverNotifyConfigBuilder, alarmControlHandler); + } + + @Bean + public AlarmControlHandler alarmControlHandler() { + return new AlarmControlHandler(); + } + + @Bean + public SendMessageHandler dingSendMessageHandler() { + return new DingSendMessageHandler(); + } + + @Bean + public SendMessageHandler larkSendMessageHandler() { + return new LarkSendMessageHandler(); + } + + @Bean + public SendMessageHandler weChatSendMessageHandler() { + return new WeChatSendMessageHandler(); + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/dto/AlarmControlDTO.java b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/AlarmControlDTO.java new file mode 100644 index 00000000..91901772 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/AlarmControlDTO.java @@ -0,0 +1,54 @@ +/* + * 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. + */ + +package cn.hippo4j.message.dto; + +import cn.hippo4j.message.enums.NotifyTypeEnum; +import lombok.Builder; +import lombok.Data; + +/** + * Alarm control DTO. + */ +@Data +@Builder +public class AlarmControlDTO { + + /** + * Thread pool id + */ + private String threadPool; + + /** + * Push alarm platform + */ + private String platform; + + /** + * Push Alert Type + */ + private NotifyTypeEnum typeEnum; + + /** + * Build thread pool alarm id + * + * @return + */ + public String buildPk() { + return threadPool + "+" + platform; + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/dto/NotifyConfigDTO.java b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/NotifyConfigDTO.java new file mode 100644 index 00000000..6b4370c2 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/NotifyConfigDTO.java @@ -0,0 +1,82 @@ +/* + * 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. + */ + +package cn.hippo4j.message.dto; + +import cn.hippo4j.message.enums.NotifyTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * Notify config DTO. + */ +@Data +@EqualsAndHashCode +@Accessors(chain = true) +public class NotifyConfigDTO { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Thread-pool id + */ + private String tpId; + + /** + * Platform + */ + private String platform; + + /** + * Type + */ + private String type; + + /** + * Secret key + */ + private String secretKey; + + /** + * Secret + */ + private String secret; + + /** + * Interval + */ + private Integer interval; + + /** + * Receives + */ + private String receives; + + /** + * Type enum + */ + private NotifyTypeEnum typeEnum; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/dto/ThreadPoolNotifyDTO.java b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/ThreadPoolNotifyDTO.java new file mode 100644 index 00000000..c0519b0f --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/dto/ThreadPoolNotifyDTO.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.message.dto; + +import lombok.Data; + +import java.util.List; + +/** + * Thread pool notify DTO. + */ +@Data +public class ThreadPoolNotifyDTO { + + /** + * Notify key + */ + private String notifyKey; + + /** + * Notify list + */ + private List notifyList; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyPlatformEnum.java b/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyPlatformEnum.java new file mode 100644 index 00000000..5ffbad3b --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyPlatformEnum.java @@ -0,0 +1,39 @@ +/* + * 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. + */ + +package cn.hippo4j.message.enums; + +/** + * Notify platform enum. + */ +public enum NotifyPlatformEnum { + + /** + * DING + */ + DING, + + /** + * LARK + */ + LARK, + + /** + * WECHAT + */ + WECHAT +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyTypeEnum.java b/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyTypeEnum.java new file mode 100644 index 00000000..cc9bc102 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/enums/NotifyTypeEnum.java @@ -0,0 +1,49 @@ +/* + * 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. + */ + +package cn.hippo4j.message.enums; + +/** + * Notify type enum. + */ +public enum NotifyTypeEnum { + + /** + * CHANGE + */ + CHANGE, + + /** + * CAPACITY + */ + CAPACITY, + + /** + * ACTIVITY + */ + ACTIVITY, + + /** + * REJECT + */ + REJECT, + + /** + * TIMEOUT + */ + TIMEOUT +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java new file mode 100644 index 00000000..ad2f2a33 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/DingSendMessageHandler.java @@ -0,0 +1,105 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform; + +import cn.hippo4j.common.toolkit.Singleton; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.enums.NotifyPlatformEnum; +import cn.hippo4j.message.platform.base.AbstractRobotSendMessageHandler; +import cn.hippo4j.message.platform.base.RobotMessageActualContent; +import cn.hippo4j.message.platform.base.RobotMessageExecuteDTO; +import cn.hippo4j.message.platform.constant.DingAlarmConstants; +import cn.hippo4j.common.toolkit.FileUtil; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiRobotSendRequest; +import com.google.common.collect.Lists; +import com.taobao.api.ApiException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Objects; + +import static cn.hippo4j.message.platform.constant.DingAlarmConstants.*; + +/** + * Send ding notification message. + */ +@Slf4j +public class DingSendMessageHandler extends AbstractRobotSendMessageHandler { + + @Override + public String getType() { + return NotifyPlatformEnum.DING.name(); + } + + @Override + protected RobotMessageActualContent buildMessageActualContent() { + String dingAlarmTxtKey = "message/robot/dynamic-thread-pool/ding-alarm.txt"; + String dingConfigTxtKey = "message/robot/dynamic-thread-pool/ding-config.txt"; + RobotMessageActualContent robotMessageActualContent = RobotMessageActualContent.builder() + .receiveSeparator(", @") + .changeSeparator(" -> ") + .replaceTxt(DING_ALARM_TIMOUT_REPLACE_TXT) + .traceReplaceTxt(DING_ALARM_TIMOUT_TRACE_REPLACE_TXT) + .alarmMessageContent(Singleton.get(dingAlarmTxtKey, () -> FileUtil.readUtf8String(dingAlarmTxtKey))) + .configMessageContent(Singleton.get(dingConfigTxtKey, () -> FileUtil.readUtf8String(dingConfigTxtKey))) + .build(); + return robotMessageActualContent; + } + + @Override + protected void execute(RobotMessageExecuteDTO robotMessageExecuteDTO) { + NotifyConfigDTO notifyConfig = robotMessageExecuteDTO.getNotifyConfig(); + String serverUrl = DingAlarmConstants.DING_ROBOT_SERVER_URL + notifyConfig.getSecretKey(); + String secret = notifyConfig.getSecret(); + if (StringUtil.isNotBlank(secret)) { + long timestamp = System.currentTimeMillis(); + String stringToSign = timestamp + "\n" + secret; + try { + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); + String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), StandardCharsets.UTF_8.name()); + serverUrl = serverUrl + "×tamp=" + timestamp + "&sign=" + sign; + } catch (Exception ex) { + log.error("Failed to sign the message sent by nailing.", ex); + } + } + DingTalkClient dingTalkClient = new DefaultDingTalkClient(serverUrl); + OapiRobotSendRequest request = new OapiRobotSendRequest(); + request.setMsgtype("markdown"); + OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown(); + markdown.setTitle(Objects.equals(notifyConfig.getType(), "CONFIG") ? DING_NOTICE_TITLE : DING_ALARM_TITLE); + markdown.setText(robotMessageExecuteDTO.getText()); + OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); + at.setAtMobiles(Lists.newArrayList(notifyConfig.getReceives().split(","))); + request.setAt(at); + request.setMarkdown(markdown); + try { + dingTalkClient.execute(request); + } catch (ApiException ex) { + log.error("Ding failed to send message", ex); + } + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java new file mode 100644 index 00000000..02c2a470 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/LarkSendMessageHandler.java @@ -0,0 +1,180 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform; + +import cn.hippo4j.common.toolkit.Singleton; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.enums.NotifyPlatformEnum; +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.service.SendMessageHandler; +import cn.hippo4j.message.request.AlarmNotifyRequest; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hutool.core.date.DateUtil; +import cn.hippo4j.common.toolkit.FileUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.Collectors; + +import static cn.hippo4j.message.platform.constant.LarkAlarmConstants.*; + +/** + * Send lark notification message. + */ +@Slf4j +@AllArgsConstructor +public class LarkSendMessageHandler implements SendMessageHandler { + + @Override + public String getType() { + return NotifyPlatformEnum.LARK.name(); + } + + @Override + @SneakyThrows + public void sendAlarmMessage(NotifyConfigDTO notifyConfig, AlarmNotifyRequest alarmNotifyRequest) { + String afterReceives = getReceives(notifyConfig.getReceives()); + String larkAlarmTimoutReplaceTxt; + String larkAlarmTxtKey = "message/robot/dynamic-thread-pool/lark-alarm.json"; + String larkAlarmTxt = Singleton.get(larkAlarmTxtKey, () -> FileUtil.readUtf8String(larkAlarmTxtKey)); + String larkAlarmTimoutReplaceJsonKey = "message/robot/dynamic-thread-pool/lark-alarm-timeout-replace.json"; + String larkAlarmTimoutReplaceJson = Singleton.get(larkAlarmTimoutReplaceJsonKey, () -> FileUtil.readUtf8String(larkAlarmTimoutReplaceJsonKey)); + if (Objects.equals(alarmNotifyRequest.getNotifyTypeEnum(), NotifyTypeEnum.TIMEOUT)) { + String executeTimeoutTrace = alarmNotifyRequest.getExecuteTimeoutTrace(); + String larkAlarmTimoutTraceReplaceJsonKey = "message/robot/dynamic-thread-pool/lark-alarm-trace-replace.json"; + String larkAlarmTimoutTraceReplaceJson = Singleton.get(larkAlarmTimoutTraceReplaceJsonKey, () -> FileUtil.readUtf8String(larkAlarmTimoutTraceReplaceJsonKey)); + if (StringUtil.isNotBlank(executeTimeoutTrace)) { + String larkAlarmTimoutTraceReplaceTxt = String.format(larkAlarmTimoutTraceReplaceJson, executeTimeoutTrace); + larkAlarmTimoutReplaceTxt = StrUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, larkAlarmTimoutTraceReplaceTxt); + } else { + larkAlarmTimoutReplaceTxt = StrUtil.replace(larkAlarmTimoutReplaceJson, larkAlarmTimoutTraceReplaceJson, ""); + } + larkAlarmTimoutReplaceTxt = String.format(larkAlarmTimoutReplaceTxt, alarmNotifyRequest.getExecuteTime(), alarmNotifyRequest.getExecuteTimeOut()); + larkAlarmTxt = StrUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, larkAlarmTimoutReplaceTxt); + } else { + larkAlarmTxt = StrUtil.replace(larkAlarmTxt, larkAlarmTimoutReplaceJson, ""); + } + + String text = String.format(larkAlarmTxt, + // 环境 + alarmNotifyRequest.getActive(), + // 报警类型 + alarmNotifyRequest.getNotifyTypeEnum(), + // 线程池ID + alarmNotifyRequest.getThreadPoolId(), + // 应用名称 + alarmNotifyRequest.getAppName(), + // 实例信息 + alarmNotifyRequest.getIdentify(), + // 核心线程数 + alarmNotifyRequest.getCorePoolSize(), + // 最大线程数 + alarmNotifyRequest.getMaximumPoolSize(), + // 当前线程数 + alarmNotifyRequest.getPoolSize(), + // 活跃线程数 + alarmNotifyRequest.getActiveCount(), + // 最大任务数 + alarmNotifyRequest.getLargestPoolSize(), + // 线程池任务总量 + alarmNotifyRequest.getCompletedTaskCount(), + // 队列类型名称 + alarmNotifyRequest.getQueueName(), + // 队列容量 + alarmNotifyRequest.getCapacity(), + // 队列元素个数 + alarmNotifyRequest.getQueueSize(), + // 队列剩余个数 + alarmNotifyRequest.getRemainingCapacity(), + // 拒绝策略名称 + alarmNotifyRequest.getRejectedExecutionHandlerName(), + // 拒绝策略次数 + alarmNotifyRequest.getRejectCountNum(), + // 告警手机号 + afterReceives, + // 当前时间 + DateUtil.now(), + // 报警频率 + notifyConfig.getInterval()); + execute(notifyConfig.getSecretKey(), text); + } + + @Override + @SneakyThrows + public void sendChangeMessage(NotifyConfigDTO notifyConfig, ChangeParameterNotifyRequest changeParameterNotifyRequest) { + String threadPoolId = changeParameterNotifyRequest.getThreadPoolId(); + String afterReceives = getReceives(notifyConfig.getReceives()); + String larkNoticeJsonKey = "message/robot/dynamic-thread-pool/lark-config.json"; + String larkNoticeJson = Singleton.get(larkNoticeJsonKey, () -> FileUtil.readUtf8String(larkNoticeJsonKey)); + String text = String.format(larkNoticeJson, + // 环境 + changeParameterNotifyRequest.getActive(), + // 线程池名称 + threadPoolId, + // 应用名称 + changeParameterNotifyRequest.getAppName(), + // 实例信息 + changeParameterNotifyRequest.getIdentify(), + // 核心线程数 + changeParameterNotifyRequest.getBeforeCorePoolSize() + " ➲ " + changeParameterNotifyRequest.getNowCorePoolSize(), + // 最大线程数 + changeParameterNotifyRequest.getBeforeMaximumPoolSize() + " ➲ " + changeParameterNotifyRequest.getNowMaximumPoolSize(), + // 核心线程超时 + changeParameterNotifyRequest.getBeforeAllowsCoreThreadTimeOut() + " ➲ " + changeParameterNotifyRequest.getNowAllowsCoreThreadTimeOut(), + // 线程存活时间 + changeParameterNotifyRequest.getBeforeKeepAliveTime() + " ➲ " + changeParameterNotifyRequest.getNowKeepAliveTime(), + // 阻塞队列 + changeParameterNotifyRequest.getBlockingQueueName(), + // 阻塞队列容量 + changeParameterNotifyRequest.getBeforeQueueCapacity() + " ➲ " + changeParameterNotifyRequest.getNowQueueCapacity(), + // 执行超时时间 + changeParameterNotifyRequest.getBeforeExecuteTimeOut() + " ➲ " + changeParameterNotifyRequest.getNowExecuteTimeOut(), + // 拒绝策略 + changeParameterNotifyRequest.getBeforeRejectedName(), + changeParameterNotifyRequest.getNowRejectedName(), + // 告警手机号 + afterReceives, + // 当前时间 + DateUtil.now()); + execute(notifyConfig.getSecretKey(), text); + } + + private String getReceives(String receives) { + if (StringUtil.isBlank(receives)) { + return ""; + } + return Arrays.stream(receives.split(",")) + .map(receive -> StrUtil.startWith(receive, LARK_OPENID_PREFIX) ? String.format(LARK_AT_FORMAT_OPENID, receive) : String.format(LARK_AT_FORMAT_USERNAME, receive)) + .collect(Collectors.joining(" ")); + } + + private void execute(String secretKey, String text) { + String serverUrl = LARK_BOT_URL + secretKey; + try { + HttpRequest.post(serverUrl).body(text).execute(); + } catch (Exception ex) { + log.error("Lark failed to send message", ex); + } + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java new file mode 100644 index 00000000..834488d6 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/WeChatSendMessageHandler.java @@ -0,0 +1,89 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform; + +import cn.hippo4j.common.toolkit.FileUtil; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.Singleton; +import cn.hippo4j.message.enums.NotifyPlatformEnum; +import cn.hippo4j.message.platform.base.AbstractRobotSendMessageHandler; +import cn.hippo4j.message.platform.base.RobotMessageActualContent; +import cn.hippo4j.message.platform.base.RobotMessageExecuteDTO; +import cn.hutool.http.HttpRequest; +import lombok.Data; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; + +import static cn.hippo4j.message.platform.constant.WeChatAlarmConstants.*; + +/** + * WeChat send message handler. + */ +@Slf4j +public class WeChatSendMessageHandler extends AbstractRobotSendMessageHandler { + + @Override + public String getType() { + return NotifyPlatformEnum.WECHAT.name(); + } + + @Override + protected RobotMessageActualContent buildMessageActualContent() { + String weChatAlarmTxtKey = "message/robot/dynamic-thread-pool/wechat-alarm.txt"; + String weChatConfigTxtKey = "message/robot/dynamic-thread-pool/wechat-config.txt"; + RobotMessageActualContent robotMessageActualContent = RobotMessageActualContent.builder() + .receiveSeparator("><@") + .changeSeparator(" ➲ ") + .replaceTxt(WE_CHAT_ALARM_TIMOUT_REPLACE_TXT) + .traceReplaceTxt(WE_CHAT_ALARM_TIMOUT_TRACE_REPLACE_TXT) + .alarmMessageContent(Singleton.get(weChatAlarmTxtKey, () -> FileUtil.readUtf8String(weChatAlarmTxtKey))) + .configMessageContent(Singleton.get(weChatConfigTxtKey, () -> FileUtil.readUtf8String(weChatConfigTxtKey))) + .build(); + return robotMessageActualContent; + } + + @Override + protected void execute(RobotMessageExecuteDTO robotMessageExecuteDTO) { + String serverUrl = WE_CHAT_SERVER_URL + robotMessageExecuteDTO.getNotifyConfig().getSecretKey(); + try { + WeChatReqDTO weChatReq = new WeChatReqDTO(); + weChatReq.setMsgtype("markdown"); + Markdown markdown = new Markdown(); + markdown.setContent(robotMessageExecuteDTO.getText()); + weChatReq.setMarkdown(markdown); + HttpRequest.post(serverUrl).body(JSONUtil.toJSONString(weChatReq)).execute(); + } catch (Exception ex) { + log.error("WeChat failed to send message", ex); + } + } + + @Data + @Accessors(chain = true) + public static class WeChatReqDTO { + + private String msgtype; + + private Markdown markdown; + } + + @Data + public static class Markdown { + + private String content; + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java new file mode 100644 index 00000000..12423ff3 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/AbstractRobotSendMessageHandler.java @@ -0,0 +1,164 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.base; + +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.request.AlarmNotifyRequest; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hippo4j.message.service.SendMessageHandler; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.base.Joiner; + +import java.util.Objects; + +/** + * Abstract robot send message handler. + */ +public abstract class AbstractRobotSendMessageHandler implements SendMessageHandler { + + /** + * Build message actual content. + * + * @return + */ + protected abstract RobotMessageActualContent buildMessageActualContent(); + + /** + * Execute. + * + * @param robotMessageExecuteDTO + */ + protected abstract void execute(RobotMessageExecuteDTO robotMessageExecuteDTO); + + /** + * Send alarm message. + * + * @param notifyConfig + * @param alarmNotifyRequest + */ + public void sendAlarmMessage(NotifyConfigDTO notifyConfig, AlarmNotifyRequest alarmNotifyRequest) { + RobotMessageActualContent robotMessageActualContent = buildMessageActualContent(); + String replaceTxt = robotMessageActualContent.getReplaceTxt(); + String traceReplaceTxt = robotMessageActualContent.getTraceReplaceTxt(); + String alarmContentTxt = robotMessageActualContent.getAlarmMessageContent(); + String alarmTimoutReplaceTxt; + if (Objects.equals(alarmNotifyRequest.getNotifyTypeEnum(), NotifyTypeEnum.TIMEOUT)) { + String executeTimeoutTrace = alarmNotifyRequest.getExecuteTimeoutTrace(); + if (StringUtil.isNotBlank(executeTimeoutTrace)) { + String alarmTimoutTraceReplaceTxt = String.format(traceReplaceTxt, executeTimeoutTrace); + alarmTimoutReplaceTxt = StrUtil.replace(replaceTxt, traceReplaceTxt, alarmTimoutTraceReplaceTxt); + } else { + alarmTimoutReplaceTxt = StrUtil.replace(replaceTxt, traceReplaceTxt, ""); + } + replaceTxt = String.format(alarmTimoutReplaceTxt, alarmNotifyRequest.getExecuteTime(), alarmNotifyRequest.getExecuteTimeOut()); + } else { + replaceTxt = ""; + } + alarmContentTxt = StrUtil.replace(alarmContentTxt, "${timout-content}", replaceTxt); + String text = String.format( + alarmContentTxt, + // 环境 + alarmNotifyRequest.getActive(), + // 报警类型 + alarmNotifyRequest.getNotifyTypeEnum(), + // 线程池ID + alarmNotifyRequest.getThreadPoolId(), + // 应用名称 + alarmNotifyRequest.getAppName(), + // 实例信息 + alarmNotifyRequest.getIdentify(), + // 核心线程数 + alarmNotifyRequest.getCorePoolSize(), + // 最大线程数 + alarmNotifyRequest.getMaximumPoolSize(), + // 当前线程数 + alarmNotifyRequest.getPoolSize(), + // 活跃线程数 + alarmNotifyRequest.getActiveCount(), + // 最大任务数 + alarmNotifyRequest.getLargestPoolSize(), + // 线程池任务总量 + alarmNotifyRequest.getCompletedTaskCount(), + // 队列类型名称 + alarmNotifyRequest.getQueueName(), + // 队列容量 + alarmNotifyRequest.getCapacity(), + // 队列元素个数 + alarmNotifyRequest.getQueueSize(), + // 队列剩余个数 + alarmNotifyRequest.getRemainingCapacity(), + // 拒绝策略名称 + alarmNotifyRequest.getRejectedExecutionHandlerName(), + // 拒绝策略次数 + alarmNotifyRequest.getRejectCountNum(), + // 告警手机号 + Joiner.on(robotMessageActualContent.getReceiveSeparator()).join(notifyConfig.getReceives().split(",")), + // 报警频率 + notifyConfig.getInterval(), + // 当前时间 + DateUtil.now()); + execute(RobotMessageExecuteDTO.builder().text(text).notifyConfig(notifyConfig).build()); + } + + /** + * Send change message. + * + * @param notifyConfig + * @param changeParameterNotifyRequest + */ + public void sendChangeMessage(NotifyConfigDTO notifyConfig, ChangeParameterNotifyRequest changeParameterNotifyRequest) { + RobotMessageActualContent robotMessageActualContent = buildMessageActualContent(); + String threadPoolId = changeParameterNotifyRequest.getThreadPoolId(); + String changeSeparator = robotMessageActualContent.getChangeSeparator(); + String text = String.format( + robotMessageActualContent.getConfigMessageContent(), + // 环境 + changeParameterNotifyRequest.getActive(), + // 线程池名称 + threadPoolId, + // 应用名称 + changeParameterNotifyRequest.getAppName(), + // 实例信息 + changeParameterNotifyRequest.getIdentify(), + // 核心线程数 + changeParameterNotifyRequest.getBeforeCorePoolSize() + changeSeparator + changeParameterNotifyRequest.getNowCorePoolSize(), + // 最大线程数 + changeParameterNotifyRequest.getBeforeMaximumPoolSize() + changeSeparator + changeParameterNotifyRequest.getNowMaximumPoolSize(), + // 核心线程超时 + changeParameterNotifyRequest.getBeforeAllowsCoreThreadTimeOut() + changeSeparator + changeParameterNotifyRequest.getNowAllowsCoreThreadTimeOut(), + // 线程存活时间 + changeParameterNotifyRequest.getBeforeKeepAliveTime() + changeSeparator + changeParameterNotifyRequest.getNowKeepAliveTime(), + // 执行超时时间 + changeParameterNotifyRequest.getBeforeExecuteTimeOut() + changeSeparator + changeParameterNotifyRequest.getNowExecuteTimeOut(), + // 阻塞队列 + changeParameterNotifyRequest.getBlockingQueueName(), + // 阻塞队列容量 + changeParameterNotifyRequest.getBeforeQueueCapacity() + changeSeparator + changeParameterNotifyRequest.getNowQueueCapacity(), + // 拒绝策略 + changeParameterNotifyRequest.getBeforeRejectedName(), + changeParameterNotifyRequest.getNowRejectedName(), + // 告警手机号 + Joiner.on(robotMessageActualContent.getReceiveSeparator()).join(notifyConfig.getReceives().split(",")), + // 当前时间 + DateUtil.now()); + execute(RobotMessageExecuteDTO.builder().text(text).notifyConfig(notifyConfig).build()); + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageActualContent.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageActualContent.java new file mode 100644 index 00000000..fb483206 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageActualContent.java @@ -0,0 +1,63 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.base; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Robot message actual content. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RobotMessageActualContent { + + /** + * Alarm message content + */ + private String alarmMessageContent; + + /** + * Config message content + */ + private String configMessageContent; + + /** + * Replace txt + */ + private String replaceTxt; + + /** + * Trace replace txt + */ + private String traceReplaceTxt; + + /** + * Receive separator + */ + private String receiveSeparator; + + /** + * Change separator + */ + private String changeSeparator; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageExecuteDTO.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageExecuteDTO.java new file mode 100644 index 00000000..29191d6f --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/base/RobotMessageExecuteDTO.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.base; + +import cn.hippo4j.message.dto.NotifyConfigDTO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Robot message execute DTO. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RobotMessageExecuteDTO { + + /** + * Text + */ + private String text; + + /** + * Notify config + */ + private NotifyConfigDTO notifyConfig; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/DingAlarmConstants.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/DingAlarmConstants.java new file mode 100644 index 00000000..9688fe98 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/DingAlarmConstants.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.constant; + +/** + * Ding alarm constants. + */ +public class DingAlarmConstants { + + /** + * DingTalk Robot Url + */ + public static final String DING_ROBOT_SERVER_URL = "https://oapi.dingtalk.com/robot/send?access_token="; + + /** + * Thread Pool Alert Notification Title + */ + public static final String DING_ALARM_TITLE = "动态线程池告警"; + + /** + * Thread pool parameter change notification title + */ + public static final String DING_NOTICE_TITLE = "动态线程池通知"; + + /** + * Trace info + */ + public static final String DING_ALARM_TIMOUT_TRACE_REPLACE_TXT = "链路信息:%s \n\n "; + + /** + * Replace task timeout template + */ + public static final String DING_ALARM_TIMOUT_REPLACE_TXT = + "任务执行时间:%d / ms \n\n " + + "超时时间:%d / ms \n\n " + + DING_ALARM_TIMOUT_TRACE_REPLACE_TXT + + " --- \n\n "; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/LarkAlarmConstants.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/LarkAlarmConstants.java new file mode 100644 index 00000000..a8e9c4a5 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/LarkAlarmConstants.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.constant; + +/** + * Lark alarm constants. + */ +public class LarkAlarmConstants { + + /** + * Lark bot url + */ + public static final String LARK_BOT_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/"; + + /** + * Lark at format. openid + * When openid is configured, the bot can @person + */ + public static final String LARK_AT_FORMAT_OPENID = ""; + + /** + * Lark at format. username + * When configuring username, only @username can be displayed in blue font, and it is reminded by @people without @ + */ + public static final String LARK_AT_FORMAT_USERNAME = "%s"; + + /** + * Lark openid prefix + */ + public static final String LARK_OPENID_PREFIX = "ou_"; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/WeChatAlarmConstants.java b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/WeChatAlarmConstants.java new file mode 100644 index 00000000..8d4f56f8 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/platform/constant/WeChatAlarmConstants.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package cn.hippo4j.message.platform.constant; + +/** + * We chat alarm constants. + */ +public class WeChatAlarmConstants { + + /** + * Enterprise Micro Robot Url + */ + public static final String WE_CHAT_SERVER_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key="; + + /** + * Trace info + */ + public static final String WE_CHAT_ALARM_TIMOUT_TRACE_REPLACE_TXT = "\n> 链路信息:%s "; + + /** + * Replace task timeout template + */ + public static final String WE_CHAT_ALARM_TIMOUT_REPLACE_TXT = + "\n> 任务执行时间:%s / ms \n" + + "> 超时时间:%s / ms " + + WE_CHAT_ALARM_TIMOUT_TRACE_REPLACE_TXT; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/AlarmNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/AlarmNotifyRequest.java new file mode 100644 index 00000000..3b57289f --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/AlarmNotifyRequest.java @@ -0,0 +1,131 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request; + +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.request.base.BaseNotifyRequest; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * Alarm notify request. + */ +@Data +@Accessors(chain = true) +public class AlarmNotifyRequest extends BaseNotifyRequest { + + /** + * Interval + */ + private Integer interval; + + /** + * Notify type enum + */ + private NotifyTypeEnum notifyTypeEnum; + + /** + * Active + */ + private String active; + + /** + * App name + */ + private String appName; + + /** + * Identify + */ + private String identify; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Pool size + */ + private Integer poolSize; + + /** + * Active count + */ + private Integer activeCount; + + /** + * Largest pool size + */ + private Integer largestPoolSize; + + /** + * Completed task count + */ + private Long completedTaskCount; + + /** + * Queue name + */ + private String queueName; + + /** + * Capacity + */ + private Integer capacity; + + /** + * Queue size + */ + private Integer queueSize; + + /** + * Remaining capacity + */ + private Integer remainingCapacity; + + /** + * Rejected execution handler name + */ + private String rejectedExecutionHandlerName; + + /** + * Reject count num + */ + private Long rejectCountNum; + + /** + * Execute time + */ + private Long executeTime; + + /** + * Execute timeout + */ + private Long executeTimeOut; + + /** + * Execute timeout trace + */ + private String executeTimeoutTrace; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/ChangeParameterNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/ChangeParameterNotifyRequest.java new file mode 100644 index 00000000..72e7b925 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/ChangeParameterNotifyRequest.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request; + +import cn.hippo4j.message.request.base.BaseNotifyRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Change parameter notify request. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ChangeParameterNotifyRequest extends BaseNotifyRequest { + + private String active; + + private String appName; + + private String identify; + + private Integer beforeCorePoolSize; + + private Integer nowCorePoolSize; + + private Integer beforeMaximumPoolSize; + + private Integer nowMaximumPoolSize; + + private Boolean beforeAllowsCoreThreadTimeOut; + + private Boolean nowAllowsCoreThreadTimeOut; + + private Long beforeKeepAliveTime; + + private Long nowKeepAliveTime; + + private Long beforeExecuteTimeOut; + + private Long nowExecuteTimeOut; + + private String blockingQueueName; + + private Integer beforeQueueCapacity; + + private Integer nowQueueCapacity; + + private String beforeRejectedName; + + private String nowRejectedName; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotAlarmNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotAlarmNotifyRequest.java new file mode 100644 index 00000000..4d0828c7 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotAlarmNotifyRequest.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request; + +import lombok.Data; + +/** + * Robot alarm notify request. + */ +@Data +public class RobotAlarmNotifyRequest extends AlarmNotifyRequest { + + /** + * Secret key + */ + private String secretKey; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotChangeParameterNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotChangeParameterNotifyRequest.java new file mode 100644 index 00000000..2b35b95b --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/RobotChangeParameterNotifyRequest.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request; + +import lombok.Data; + +/** + * Robot change parameter notify request. + */ +@Data +public class RobotChangeParameterNotifyRequest extends ChangeParameterNotifyRequest { + + /** + * Secret key + */ + private String secretKey; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/ThreadPoolNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/ThreadPoolNotifyRequest.java new file mode 100644 index 00000000..7b73175a --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/ThreadPoolNotifyRequest.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +/** + * Thread pool notify request. + */ +@Data +@AllArgsConstructor +public class ThreadPoolNotifyRequest { + + /** + * Group keys + */ + private List groupKeys; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/BaseNotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/BaseNotifyRequest.java new file mode 100644 index 00000000..5c96e994 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/BaseNotifyRequest.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request.base; + +import lombok.Data; + +/** + * Base notify request. + */ +@Data +public class BaseNotifyRequest implements NotifyRequest { + + /** + * Tenant id + */ + private String tenantId; + + /** + * Item id + */ + private String itemId; + + /** + * Thread pool id + */ + private String threadPoolId; + + /** + * Platform + */ + private String platform; + + /** + * Type + */ + private String type; + + /** + * Receives + */ + private String receives; +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/NotifyRequest.java b/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/NotifyRequest.java new file mode 100644 index 00000000..13e0da92 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/request/base/NotifyRequest.java @@ -0,0 +1,24 @@ +/* + * 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. + */ + +package cn.hippo4j.message.request.base; + +/** + * Notify request. + */ +public interface NotifyRequest { +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java new file mode 100644 index 00000000..6d33522f --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/AlarmControlHandler.java @@ -0,0 +1,88 @@ +/* + * 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. + */ + +package cn.hippo4j.message.service; + +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.message.dto.AlarmControlDTO; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.collect.Maps; + +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; + +/** + * Alarm control assembly. + */ +public class AlarmControlHandler { + + private final Map threadPoolLock = Maps.newHashMap(); + + private final Map> threadPoolAlarmCache = Maps.newConcurrentMap(); + + /** + * Control message push alarm frequency. + * + * @param alarmControl + * @return + */ + public boolean isSendAlarm(AlarmControlDTO alarmControl) { + String threadPoolKey = alarmControl.buildPk(); + Cache cache = threadPoolAlarmCache.get(threadPoolKey); + if (cache == null) { + return false; + } + String pkId = cache.getIfPresent(alarmControl.getTypeEnum().name()); + if (StrUtil.isBlank(pkId)) { + ReentrantLock lock = threadPoolLock.get(threadPoolKey); + lock.lock(); + try { + pkId = cache.getIfPresent(alarmControl.getTypeEnum().name()); + if (StrUtil.isBlank(pkId)) { + // Val meaningless. + cache.put(alarmControl.getTypeEnum().name(), IdUtil.simpleUUID()); + return true; + } + } finally { + lock.unlock(); + } + } + return false; + } + + /** + * Init cache and lock. + * + * @param threadPoolId + * @param platform + * @param interval + */ + public void initCacheAndLock(String threadPoolId, String platform, Integer interval) { + String threadPoolKey = StrUtil.builder(threadPoolId, Constants.GROUP_KEY_DELIMITER, platform).toString(); + Cache cache = CacheBuilder.newBuilder() + .expireAfterWrite(interval, TimeUnit.MINUTES) + .build(); + threadPoolAlarmCache.put(threadPoolKey, cache); + // Set the lock to prevent false sending of alarm information. + ReentrantLock reentrantLock = new ReentrantLock(); + threadPoolLock.put(threadPoolKey, reentrantLock); + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java new file mode 100644 index 00000000..f73de9c8 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jBaseSendMessageService.java @@ -0,0 +1,136 @@ +/* + * 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. + */ + +package cn.hippo4j.message.service; + +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.message.dto.AlarmControlDTO; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.request.AlarmNotifyRequest; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Maps; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.CommandLineRunner; + +import java.util.List; +import java.util.Map; + +/** + * Hippo-4j base send message service. + */ +@Slf4j +@RequiredArgsConstructor +public class Hippo4jBaseSendMessageService implements Hippo4jSendMessageService, CommandLineRunner { + + private final NotifyConfigBuilder notifyConfigBuilder; + + private final AlarmControlHandler alarmControlHandler; + + @Getter + public final Map> notifyConfigs = Maps.newHashMap(); + + private final Map sendMessageHandlers = Maps.newHashMap(); + + @Override + public void sendAlarmMessage(NotifyTypeEnum typeEnum, AlarmNotifyRequest alarmNotifyRequest) { + String threadPoolId = alarmNotifyRequest.getThreadPoolId(); + String buildKey = StrUtil.builder(threadPoolId, "+", "ALARM").toString(); + List notifyList = notifyConfigs.get(buildKey); + if (CollUtil.isEmpty(notifyList)) { + return; + } + notifyList.forEach(each -> { + try { + SendMessageHandler messageHandler = sendMessageHandlers.get(each.getPlatform()); + if (messageHandler == null) { + log.warn("Please configure alarm notification on the server. key: [{}]", threadPoolId); + return; + } + if (isSendAlarm(each.getTpId(), each.getPlatform(), typeEnum)) { + alarmNotifyRequest.setNotifyTypeEnum(typeEnum); + messageHandler.sendAlarmMessage(each, alarmNotifyRequest); + } + } catch (Exception ex) { + log.warn("Failed to send thread pool alarm notification. key: [{}]", threadPoolId, ex); + } + }); + } + + @Override + public void sendChangeMessage(ChangeParameterNotifyRequest changeParameterNotifyRequest) { + String threadPoolId = changeParameterNotifyRequest.getThreadPoolId(); + String buildKey = StrUtil.builder(threadPoolId, "+", "CONFIG").toString(); + List notifyList = notifyConfigs.get(buildKey); + if (CollUtil.isEmpty(notifyList)) { + log.warn("Please configure alarm notification on the server. key: [{}]", threadPoolId); + return; + } + notifyList.forEach(each -> { + try { + SendMessageHandler messageHandler = sendMessageHandlers.get(each.getPlatform()); + if (messageHandler == null) { + log.warn("Please configure alarm notification on the server. key: [{}]", threadPoolId); + return; + } + messageHandler.sendChangeMessage(each, changeParameterNotifyRequest); + } catch (Exception ex) { + log.warn("Failed to send thread pool change notification. key: [{}]", threadPoolId, ex); + } + }); + } + + /** + * Is send alarm. + * + * @param threadPoolId + * @param platform + * @param typeEnum + * @return + */ + private boolean isSendAlarm(String threadPoolId, String platform, NotifyTypeEnum typeEnum) { + AlarmControlDTO alarmControl = AlarmControlDTO.builder() + .threadPool(threadPoolId) + .platform(platform) + .typeEnum(typeEnum) + .build(); + return alarmControlHandler.isSendAlarm(alarmControl); + } + + @Override + public void run(String... args) throws Exception { + Map sendMessageHandlerMap = + ApplicationContextHolder.getBeansOfType(SendMessageHandler.class); + sendMessageHandlerMap.values().forEach(each -> sendMessageHandlers.put(each.getType(), each)); + Map> buildNotify = notifyConfigBuilder.buildNotify(); + notifyConfigs.putAll(buildNotify); + } + + /** + * Put platform. + * + * @param notifyConfigs + */ + public synchronized void putPlatform(Map> notifyConfigs) { + this.notifyConfigs.putAll(notifyConfigs); + } +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jSendMessageService.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jSendMessageService.java new file mode 100644 index 00000000..f3ef3445 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/Hippo4jSendMessageService.java @@ -0,0 +1,43 @@ +/* + * 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. + */ + +package cn.hippo4j.message.service; + +import cn.hippo4j.message.enums.NotifyTypeEnum; +import cn.hippo4j.message.request.AlarmNotifyRequest; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; + +/** + * Hippo-4j send message service. + */ +public interface Hippo4jSendMessageService { + + /** + * Send dynamic thread pool alert notifications. + * + * @param typeEnum + * @param alarmNotifyRequest + */ + void sendAlarmMessage(NotifyTypeEnum typeEnum, AlarmNotifyRequest alarmNotifyRequest); + + /** + * Send dynamic thread pool parameter change notification. + * + * @param changeParameterNotifyRequest + */ + void sendChangeMessage(ChangeParameterNotifyRequest changeParameterNotifyRequest); +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/SendMessageHandler.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/SendMessageHandler.java new file mode 100644 index 00000000..ecdfa7eb --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/SendMessageHandler.java @@ -0,0 +1,50 @@ +/* + * 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. + */ + +package cn.hippo4j.message.service; + +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.request.base.NotifyRequest; + +/** + * Send message handler. + */ +public interface SendMessageHandler { + + /** + * Get type. + * + * @return + */ + String getType(); + + /** + * Send alarm message. + * + * @param notifyConfig + * @param alarmNotifyRequest + */ + void sendAlarmMessage(NotifyConfigDTO notifyConfig, T alarmNotifyRequest); + + /** + * Send change message. + * + * @param notifyConfig + * @param changeParameterNotifyRequest + */ + void sendChangeMessage(NotifyConfigDTO notifyConfig, R changeParameterNotifyRequest); +} diff --git a/hippo4j-message/src/main/java/cn/hippo4j/message/service/ThreadPoolNotifyAlarm.java b/hippo4j-message/src/main/java/cn/hippo4j/message/service/ThreadPoolNotifyAlarm.java new file mode 100644 index 00000000..00ae2c63 --- /dev/null +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/ThreadPoolNotifyAlarm.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.message.service; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import java.util.Map; + +/** + * Thread pool notify alarm. + */ +@Data +@NoArgsConstructor +@RequiredArgsConstructor +public class ThreadPoolNotifyAlarm { + + /** + * Whether to enable thread pool running alarm + */ + @NonNull + private Boolean alarm; + + /** + * Active alarm + */ + @NonNull + private Integer activeAlarm; + + /** + * Capacity alarm + */ + @NonNull + private Integer capacityAlarm; + + /** + * Interval + */ + private Integer interval; + + /** + * Receive + */ + private String receive; + + /** + * Receives + * + *

Do not enable this configuration for the time being, it may be useful if you develop mailboxes in the future. + */ + @Deprecated + private Map receives; +} diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-alarm.txt b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-alarm.txt new file mode 100644 index 00000000..55064be3 --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-alarm.txt @@ -0,0 +1,49 @@ +**[警报] %s - 动态线程池运行告警(%s)** + + --- + +线程池ID:%s + +应用名称:%s + +应用实例:%s + + --- + +核心线程数:%d + +最大线程数:%d + +当前线程数:%d + +活跃线程数:%d + +同存最大线程数:%d + +线程池任务总量:%d + + --- + +队列类型:%s + +队列容量:%d + +队列元素个数:%d + +队列剩余个数:%d + + --- + + ${timout-content} + +拒绝策略:%s + +拒绝策略执行次数:%d + +OWNER:@%s + +提示:%d 分钟内此线程池不会重复告警(可配置) + + --- + +**播报时间:%s** diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-config.txt b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-config.txt new file mode 100644 index 00000000..dd4a902f --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/ding-config.txt @@ -0,0 +1,41 @@ +**[通知] %s - 动态线程池参数变更** + + --- + +线程池ID:%s + +应用名称:%s + +应用实例:%s + + --- + +核心线程数:%s + +最大线程数:%s + +核心线程超时:%s + +线程存活时间:%s + +执行超时时间:%s + + --- + +队列类型:%s + +队列容量:%s + +AGO 拒绝策略:%s + +NOW 拒绝策略:%s + + --- + +提示:动态线程池配置变更实时通知(无限制) + +OWNER:@%s + + --- + +**播报时间:%s** \ No newline at end of file diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-timeout-replace.json b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-timeout-replace.json new file mode 100644 index 00000000..14d038b4 --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-timeout-replace.json @@ -0,0 +1,30 @@ + + { + "fields": [ + { + "is_short": true, + "text": { + "content": "** 任务执行时间:** %s", + "tag": "lark_md" + } + }, + { + "is_short": true, + "text": { + "content": "** 超时时间:** %s", + "tag": "lark_md" + } + }, + { + "is_short": true, + "text": { + "content": "** 链路信息:** %s", + "tag": "lark_md" + } + } + ], + "tag": "div" + }, + { + "tag": "hr" + }, diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-trace-replace.json b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-trace-replace.json new file mode 100644 index 00000000..9f95a8b6 --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm-trace-replace.json @@ -0,0 +1,8 @@ + + { + "is_short": true, + "text": { + "content": "** 链路信息:** %s", + "tag": "lark_md" + } + } diff --git a/hippo4j-spring-boot-starter/src/main/resources/properties/lark/alarm.json b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm.json similarity index 85% rename from hippo4j-spring-boot-starter/src/main/resources/properties/lark/alarm.json rename to hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm.json index 23af7381..1c60f9a5 100644 --- a/hippo4j-spring-boot-starter/src/main/resources/properties/lark/alarm.json +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-alarm.json @@ -7,7 +7,7 @@ "header": { "template": "red", "title": { - "content": "[🔥警报] %s 动态线程池运行告警", + "content": "[🔥警报] %s 动态线程池运行告警(%s)", "tag": "plain_text" } }, @@ -34,13 +34,6 @@ "content": "** 应用实例:** %s", "tag": "lark_md" } - }, - { - "is_short": true, - "text": { - "content": "** 报警类型:** %s", - "tag": "lark_md" - } } ], "tag": "div" @@ -81,7 +74,7 @@ { "is_short": true, "text": { - "content": "** 最大任务数:** %s", + "content": "** 同存最大线程数:** %s", "tag": "lark_md" } }, @@ -134,6 +127,35 @@ { "tag": "hr" }, + { + "fields": [ + { + "is_short": true, + "text": { + "content": "** 任务执行时间:** %s", + "tag": "lark_md" + } + }, + { + "is_short": true, + "text": { + "content": "** 超时时间:** %s", + "tag": "lark_md" + } + }, + { + "is_short": true, + "text": { + "content": "** 链路信息:** %s", + "tag": "lark_md" + } + } + ], + "tag": "div" + }, + { + "tag": "hr" + }, { "fields": [ { @@ -181,5 +203,4 @@ } ] } -} - +} \ No newline at end of file diff --git a/hippo4j-spring-boot-starter/src/main/resources/properties/lark/notice.json b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-config.json similarity index 85% rename from hippo4j-spring-boot-starter/src/main/resources/properties/lark/notice.json rename to hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-config.json index 0d4bd4e2..eb0caeaa 100644 --- a/hippo4j-spring-boot-starter/src/main/resources/properties/lark/notice.json +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/lark-config.json @@ -1,7 +1,6 @@ { "msg_type": "interactive", "card": { - "config": { "wide_screen_mode": true }, @@ -61,7 +60,14 @@ { "is_short": true, "text": { - "content": "** 线程存活时间:** %s / SECONDS", + "content": "** 核心线程超时:** %s", + "tag": "lark_md" + } + }, + { + "is_short": true, + "text": { + "content": "** 线程存活时间:** %s", "tag": "lark_md" } } @@ -86,6 +92,13 @@ "content": "** 队列容量:** %s", "tag": "lark_md" } + }, + { + "is_short": true, + "text": { + "content": "** 执行超时时间:** %s", + "tag": "lark_md" + } } ], "tag": "div" @@ -105,7 +118,7 @@ { "is_short": true, "text": { - "content": "** NOW 拒绝策略执行次数:** %s", + "content": "** NOW 拒绝策略:** %s", "tag": "lark_md" } }, @@ -140,4 +153,4 @@ } ] } -} +} \ No newline at end of file diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-alarm.txt b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-alarm.txt new file mode 100644 index 00000000..56f7ace1 --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-alarm.txt @@ -0,0 +1,21 @@ +### [警报] %s - 动态线程池运行告警(%s) + +> 线程池ID:%s +> 应用名称:%s +> 应用实例:%s +> 核心线程数:%s +> 最大线程数:%s +> 当前线程数:%s +> 活跃线程数:%s +> 同存最大线程数:%s +> 线程池任务总量:%s +> 队列类型:%s +> 队列容量:%s +> 队列元素个数:%s +> 队列剩余个数:%s +> 拒绝策略:%s +> 拒绝策略执行次数:%s ${timout-content} +> OWNER:<@%s> +> 提示:%d 分钟内此线程池不会重复告警(可配置) + +**播报时间:%s** \ No newline at end of file diff --git a/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-config.txt b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-config.txt new file mode 100644 index 00000000..f583eb45 --- /dev/null +++ b/hippo4j-message/src/main/resources/message/robot/dynamic-thread-pool/wechat-config.txt @@ -0,0 +1,17 @@ +### [通知] %s - 动态线程池参数变更 +> 线程池ID:%s +> 应用名称:%s +> 应用实例:%s +> 核心线程数:%s +> 最大线程数:%s +> 核心线程超时:%s +> 线程存活时间:%s +> 执行超时时间:%s +> 队列类型:%s +> 队列容量:%s +> AGO 拒绝策略:%s +> NOW 拒绝策略:%s +> OWNER:<@%s> +> 提示:动态线程池配置变更实时通知(无限制) + +**播报时间:%s** \ No newline at end of file diff --git a/hippo4j-monitor/hippo4j-monitor-base/pom.xml b/hippo4j-monitor/hippo4j-monitor-base/pom.xml new file mode 100644 index 00000000..31dcabff --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-base/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-monitor + ${revision} + + hippo4j-monitor-base + + + + cn.hippo4j + hippo4j-core + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/AbstractDynamicThreadPoolMonitor.java b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/AbstractDynamicThreadPoolMonitor.java new file mode 100644 index 00000000..ec36de7e --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/AbstractDynamicThreadPoolMonitor.java @@ -0,0 +1,50 @@ +/* + * 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. + */ + +package com.example.monitor.base; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +/** + * Abstract dynamic thread-pool monitor. + */ +@RequiredArgsConstructor +public abstract class AbstractDynamicThreadPoolMonitor implements DynamicThreadPoolMonitor { + + private final ThreadPoolRunStateHandler threadPoolRunStateHandler; + + /** + * Execute collection thread pool running data. + * + * @param poolRunStateInfo + */ + protected abstract void execute(ThreadPoolRunStateInfo poolRunStateInfo); + + @Override + public void collect() { + List listDynamicThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); + for (String each : listDynamicThreadPoolId) { + ThreadPoolRunStateInfo poolRunState = threadPoolRunStateHandler.getPoolRunState(each); + execute(poolRunState); + } + } +} diff --git a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/DynamicThreadPoolMonitor.java b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/DynamicThreadPoolMonitor.java new file mode 100644 index 00000000..171df74e --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/DynamicThreadPoolMonitor.java @@ -0,0 +1,25 @@ +/* + * 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. + */ + +package com.example.monitor.base; + +/** + * Dynamic thread-pool monitor. + */ +public interface DynamicThreadPoolMonitor extends ThreadPoolMonitor { + +} diff --git a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/MonitorTypeEnum.java b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/MonitorTypeEnum.java new file mode 100644 index 00000000..08237364 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/MonitorTypeEnum.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package com.example.monitor.base; + +/** + * Monitor type enum. + */ +public enum MonitorTypeEnum { + + /** + * LOG + */ + LOG, + + /** + * PROMETHEUS + */ + PROMETHEUS, + + /** + * SERVER + */ + SERVER, + + /** + * ES + */ + ES +} diff --git a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/ThreadPoolMonitor.java b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/ThreadPoolMonitor.java new file mode 100644 index 00000000..dc3d0c26 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/ThreadPoolMonitor.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package com.example.monitor.base; + +/** + * Thread-pool monitor. + */ +public interface ThreadPoolMonitor { + + /** + * Get type. + * + * @return + */ + String getType(); + + /** + * Collect data. + */ + void collect(); +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/pom.xml b/hippo4j-monitor/hippo4j-monitor-es/pom.xml new file mode 100644 index 00000000..5becf5d8 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-monitor + ${revision} + + hippo4j-monitor-es + + + 6.8.17 + + + + + cn.hippo4j + hippo4j-monitor-base + ${revision} + + + + io.micrometer + micrometer-core + ${micrometer-core.version} + + + + org.elasticsearch + elasticsearch + ${elasticsearch.version} + + + + org.elasticsearch.client + transport + ${elasticsearch.version} + + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + ${elasticsearch.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java new file mode 100644 index 00000000..0d67adb2 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java @@ -0,0 +1,98 @@ +/* + * 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. + */ + +package cn.hippo4j.monitor.es; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import com.google.common.base.Throwables; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.Strings; +import org.springframework.core.env.Environment; + +import java.util.List; + +/** + * Create by yuyang + * 2022/8/4 16:26 + */ +@Slf4j +public class EsClientHolder { + + private static String host; + private static String scheme; + private static String userName; + private static String password; + + private static RestHighLevelClient client; + + private static RestHighLevelClient initRestClient() { + try { + Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); + host = environment.getProperty("es.thread-pool-state.host"); + scheme = environment.getProperty("es.thread-pool-state.schema"); + userName = environment.getProperty("es.thread-pool-state.userName"); + password = environment.getProperty("es.thread-pool-state.password"); + + List hosts = parseHosts(); + + if (Strings.isNullOrEmpty(userName) || Strings.isNullOrEmpty(password)) { + client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{}))); + } else { + client = new RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[]{})) + .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider()))); + } + + log.info("[ES RestHighLevelClient] success to connect es!host:{},scheme:{}", host, scheme); + return client; + } catch (Exception ex) { + log.error("[ES RestHighLevelClient] fail to connect es! cause:{}", Throwables.getStackTraceAsString(ex)); + } + return null; + } + + private static BasicCredentialsProvider getCredentialsProvider() { + if (!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { + final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(userName, password)); + return credentialsProvider; + } + return null; + } + + public static RestHighLevelClient getClient() { + return null == client ? initRestClient() : client; + } + + private static List parseHosts() { + String[] hostAndPorts = host.split(","); + List hosts = Lists.newArrayList(); + for (String hostAndPort : hostAndPorts) { + hostAndPort = hostAndPort.trim(); + hosts.add(new HttpHost(hostAndPort.split(":")[0], Integer.parseInt(hostAndPort.split(":")[1]), scheme)); + } + return hosts; + } + +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java new file mode 100644 index 00000000..e0c358bd --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java @@ -0,0 +1,149 @@ +/* + * 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. + */ + +package cn.hippo4j.monitor.es; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.monitor.es.model.EsThreadPoolRunStateInfo; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.io.FileUtil; +import com.example.monitor.base.AbstractDynamicThreadPoolMonitor; +import com.example.monitor.base.MonitorTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.elasticsearch.action.admin.indices.alias.Alias; +import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; +import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; +import org.elasticsearch.client.indices.GetIndexRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.index.IndexResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.xcontent.XContentType; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +@Slf4j +public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { + + public EsMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + super(threadPoolRunStateHandler); + } + + private AtomicBoolean isIndexExist = null; + + @Override + protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { + EsThreadPoolRunStateInfo esThreadPoolRunStateInfo = new EsThreadPoolRunStateInfo(); + BeanUtil.copyProperties(poolRunStateInfo, esThreadPoolRunStateInfo); + + Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); + String indexName = environment.getProperty("es.thread-pool-state.index.name", "thread-pool-state"); + String applicationName = environment.getProperty("spring.application.name", "application"); + + if (!this.isExists(indexName)) { + List rawMapping = FileUtil.readLines(new File(Thread.currentThread().getContextClassLoader().getResource("mapping.json").getPath()), StandardCharsets.UTF_8); + String mapping = String.join(" ", rawMapping); + // if index doesn't exsit, this function may try to create one, but recommend to create index manually. + this.createIndex(indexName, "_doc", mapping, null, null, null); + } + + esThreadPoolRunStateInfo.setApplicationName(applicationName); + esThreadPoolRunStateInfo.setId(indexName + "-" + System.currentTimeMillis()); + this.log2Es(esThreadPoolRunStateInfo, indexName); + } + + public void log2Es(EsThreadPoolRunStateInfo esThreadPoolRunStateInfo, String indexName) { + RestHighLevelClient client = EsClientHolder.getClient(); + + try { + IndexRequest request = new IndexRequest(indexName, "_doc"); + request.id(esThreadPoolRunStateInfo.getId()); + String stateJson = JSONUtil.toJSONString(esThreadPoolRunStateInfo); + request.source(stateJson, XContentType.JSON); + + IndexResponse response = client.index(request, RequestOptions.DEFAULT); + log.info("write thread-pool state to es, id is :{}", response.getId()); + } catch (Exception ex) { + log.error("es index error, the exception was thrown in create index. name:{},type:{},id:{}. {} ", + indexName, + "_doc", + esThreadPoolRunStateInfo.getId(), + ex); + } + } + + public synchronized boolean isExists(String index) { + // cache check result + if (Objects.isNull(isIndexExist)) { + boolean exists = false; + GetIndexRequest request = new GetIndexRequest(index); + try { + RestHighLevelClient client = EsClientHolder.getClient(); + exists = client.indices().exists(request, RequestOptions.DEFAULT); + } catch (IOException e) { + log.error("check es index fail"); + } + isIndexExist = new AtomicBoolean(exists); + } + return isIndexExist.get(); + } + + public void createIndex(String index, String type, String mapping, Integer shards, Integer replicas, String alias) { + RestHighLevelClient client = EsClientHolder.getClient(); + boolean acknowledged = false; + CreateIndexRequest request = new CreateIndexRequest(index); + if (StringUtils.hasText(mapping)) { + request.mapping(type, mapping, XContentType.JSON); + } + if (!Objects.isNull(shards) && !Objects.isNull(replicas)) { + request.settings(Settings.builder() + .put("index.number_of_shards", shards) // 5 + .put("index.number_of_replicas", replicas));// 1 + } + if (StringUtils.hasText(alias)) { + request.alias(new Alias(alias)); + } + try { + CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); + acknowledged = createIndexResponse.isAcknowledged(); + } catch (IOException e) { + log.error("create es index exception", e); + } + if (acknowledged) { + log.info("create es index success"); + isIndexExist.set(true); + } else { + log.error("create es index fail"); + throw new RuntimeException("cannot auto create thread-pool state es index"); + } + } + + @Override + public String getType() { + return MonitorTypeEnum.ES.name().toLowerCase(); + } +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java new file mode 100644 index 00000000..3fc0deb7 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.monitor.es.model; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import lombok.Getter; +import lombok.Setter; + +/** + * Create by yuyang + * 2022/8/4 17:17 + */ +@Getter +@Setter +public class EsThreadPoolRunStateInfo extends ThreadPoolRunStateInfo { + + private String Id; + + private String applicationName; + +} diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json b/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json new file mode 100644 index 00000000..83255022 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json @@ -0,0 +1,78 @@ + { + "_doc": { + "properties": { + "activeSize": { + "type": "long" + }, + "applicationName": { + "type": "keyword" + }, + "clientLastRefreshTime": { + "type": "text" + }, + "completedTaskCount": { + "type": "long" + }, + "coreSize": { + "type": "long" + }, + "currentLoad": { + "type": "text" + }, + "freeMemory": { + "type": "text" + }, + "host": { + "type": "keyword" + }, + "id": { + "type": "text" + }, + "largestPoolSize": { + "type": "long" + }, + "maximumSize": { + "type": "long" + }, + "memoryProportion": { + "type": "text" + }, + "peakLoad": { + "type": "text" + }, + "poolSize": { + "type": "long" + }, + "queueCapacity": { + "type": "long" + }, + "queueRemainingCapacity": { + "type": "long" + }, + "queueSize": { + "type": "long" + }, + "queueType": { + "type": "text" + }, + "rejectCount": { + "type": "long" + }, + "rejectedName": { + "type": "text" + }, + "simpleCurrentLoad": { + "type": "long" + }, + "simplePeakLoad": { + "type": "long" + }, + "timestamp": { + "type": "date" + }, + "tpId": { + "type": "keyword" + } + } + } + } \ No newline at end of file diff --git a/hippo4j-monitor/hippo4j-monitor-log/pom.xml b/hippo4j-monitor/hippo4j-monitor-log/pom.xml new file mode 100644 index 00000000..e1b346d1 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-log/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-monitor + ${revision} + + hippo4j-monitor-log + + + + cn.hippo4j + hippo4j-monitor-base + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java new file mode 100644 index 00000000..c60cf947 --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java @@ -0,0 +1,46 @@ +/* + * 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. + */ + +package cn.hippo4j.monitor.log; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import com.example.monitor.base.AbstractDynamicThreadPoolMonitor; +import com.example.monitor.base.MonitorTypeEnum; +import lombok.extern.slf4j.Slf4j; + +/** + * Log monitor handler. + */ +@Slf4j +public class LogMonitorHandler extends AbstractDynamicThreadPoolMonitor { + + public LogMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + super(threadPoolRunStateHandler); + } + + @Override + protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { + log.info("{}", JSONUtil.toJSONString(poolRunStateInfo)); + } + + @Override + public String getType() { + return MonitorTypeEnum.LOG.name().toLowerCase(); + } +} diff --git a/hippo4j-monitor/hippo4j-monitor-prometheus/pom.xml b/hippo4j-monitor/hippo4j-monitor-prometheus/pom.xml new file mode 100644 index 00000000..7ec3738c --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-prometheus/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-monitor + ${revision} + + hippo4j-monitor-prometheus + + + + cn.hippo4j + hippo4j-monitor-base + ${revision} + + + + io.micrometer + micrometer-core + ${micrometer-core.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-monitor/hippo4j-monitor-prometheus/src/main/java/cn/hippo4j/monitor/prometheus/PrometheusMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-prometheus/src/main/java/cn/hippo4j/monitor/prometheus/PrometheusMonitorHandler.java new file mode 100644 index 00000000..22e6fc6a --- /dev/null +++ b/hippo4j-monitor/hippo4j-monitor-prometheus/src/main/java/cn/hippo4j/monitor/prometheus/PrometheusMonitorHandler.java @@ -0,0 +1,90 @@ +/* + * 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. + */ + +package cn.hippo4j.monitor.prometheus; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hutool.core.bean.BeanUtil; +import com.example.monitor.base.AbstractDynamicThreadPoolMonitor; +import com.example.monitor.base.MonitorTypeEnum; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import io.micrometer.core.instrument.Metrics; +import io.micrometer.core.instrument.Tag; +import org.springframework.core.env.Environment; + +import java.util.Map; + +/** + * Prometheus monitor handler. + */ +public class PrometheusMonitorHandler extends AbstractDynamicThreadPoolMonitor { + + private final static String METRIC_NAME_PREFIX = "dynamic.thread-pool"; + + private final static String DYNAMIC_THREAD_POOL_ID_TAG = METRIC_NAME_PREFIX + ".id"; + + private final static String APPLICATION_NAME_TAG = "application.name"; + + private final Map RUN_STATE_CACHE = Maps.newConcurrentMap(); + + public PrometheusMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + super(threadPoolRunStateHandler); + } + + @Override + protected void execute(ThreadPoolRunStateInfo poolRunStateInfo) { + ThreadPoolRunStateInfo stateInfo = RUN_STATE_CACHE.get(poolRunStateInfo.getTpId()); + if (stateInfo == null) { + RUN_STATE_CACHE.put(poolRunStateInfo.getTpId(), poolRunStateInfo); + } else { + BeanUtil.copyProperties(poolRunStateInfo, stateInfo); + } + Environment environment = ApplicationContextHolder.getInstance().getEnvironment(); + String applicationName = environment.getProperty("spring.application.name", "application"); + Iterable tags = Lists.newArrayList( + Tag.of(DYNAMIC_THREAD_POOL_ID_TAG, poolRunStateInfo.getTpId()), + Tag.of(APPLICATION_NAME_TAG, applicationName)); + // load + Metrics.gauge(metricName("current.load"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getSimpleCurrentLoad); + Metrics.gauge(metricName("peak.load"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getSimplePeakLoad); + // thread pool + Metrics.gauge(metricName("core.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getCoreSize); + Metrics.gauge(metricName("maximum.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getMaximumSize); + Metrics.gauge(metricName("current.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getPoolSize); + Metrics.gauge(metricName("largest.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getLargestPoolSize); + Metrics.gauge(metricName("active.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getActiveSize); + // queue + Metrics.gauge(metricName("queue.size"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueSize); + Metrics.gauge(metricName("queue.capacity"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueCapacity); + Metrics.gauge(metricName("queue.remaining.capacity"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getQueueRemainingCapacity); + // other + Metrics.gauge(metricName("completed.task.count"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getCompletedTaskCount); + Metrics.gauge(metricName("reject.count"), tags, poolRunStateInfo, ThreadPoolRunStateInfo::getRejectCount); + } + + private String metricName(String name) { + return String.join(".", METRIC_NAME_PREFIX, name); + } + + @Override + public String getType() { + return MonitorTypeEnum.PROMETHEUS.name().toLowerCase(); + } +} diff --git a/hippo4j-monitor/pom.xml b/hippo4j-monitor/pom.xml new file mode 100644 index 00000000..bfbf1079 --- /dev/null +++ b/hippo4j-monitor/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-all + ${revision} + + hippo4j-monitor + pom + + + hippo4j-monitor-base + hippo4j-monitor-es + hippo4j-monitor-log + hippo4j-monitor-prometheus + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-server/.gitignore b/hippo4j-server/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-server/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-server/bin/startup.cmd b/hippo4j-server/bin/startup.cmd index 6fbf0cfd..32cdce53 100644 --- a/hippo4j-server/bin/startup.cmd +++ b/hippo4j-server/bin/startup.cmd @@ -15,15 +15,15 @@ set CUSTOM_SEARCH_LOCATIONS=%BASE_DIR%/conf/application.properties set SERVER=hippo4j-server echo "hippo4j is starting with standalone" -set "HIPPO4J_JVM_OPTS=-Xms1024m -Xmx1024m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages" +set "HIPPO4J_JVM_OPTS=-Xms1024m -Xmx1024m -Xmn512m -Dhippo4j.standalone=true -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages" set "HIPPO4J_OPTS=%HIPPO4J_OPTS% -Dhippo4j.home=%BASE_DIR%" set "HIPPO4J_OPTS=%HIPPO4J_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar" rem set hippo4j spring config location -set "HIPPO4J_CONFIG_OPTS=--spring.config.location=%CUSTOM_SEARCH_LOCATIONS%" -set "HIPPO4J_CONFIG_OPTS=%HIPPO4J_OPTS% --server.tomcat.basedir=%BASE_DIR%/bin" +set "HIPPO4J_CONFIG_OPTS=%HIPPO4J_CONFIG_OPTS% --spring.config.location=%CUSTOM_SEARCH_LOCATIONS%" +set "HIPPO4J_CONFIG_OPTS=%HIPPO4J_CONFIG_OPTS% --server.tomcat.basedir=%BASE_DIR%/bin" rem set hippo4j logback file location diff --git a/hippo4j-server/bin/startup.sh b/hippo4j-server/bin/startup.sh index a8af341a..07cbaac7 100644 --- a/hippo4j-server/bin/startup.sh +++ b/hippo4j-server/bin/startup.sh @@ -16,6 +16,7 @@ else fi JAVA_OPT="${JAVA_OPT} -Xms1024m -Xmx1024m -Xmn512m" +JAVA_OPT="${JAVA_OPT} -Dhippo4j.standalone=true" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" JAVA_OPT="${JAVA_OPT} -Dhippo4j.home=${BASE_DIR}" JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar" @@ -39,4 +40,4 @@ fi echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & nohup $JAVA ${JAVA_OPT} hippo4j.hippo4j >> ${BASE_DIR}/logs/start.out 2>&1 & -echo "hippo4j is starting,you can check the ${BASE_DIR}/logs/start.out" \ No newline at end of file +echo "hippo4j is starting,you can check the ${BASE_DIR}/logs/start.out" diff --git a/hippo4j-server/conf/application.properties b/hippo4j-server/conf/application.properties index b0846836..b8779e7c 100644 --- a/hippo4j-server/conf/application.properties +++ b/hippo4j-server/conf/application.properties @@ -16,13 +16,21 @@ server.tomcat.basedir= ### Custom Logging Tenant tenant=hippo4j +### Regularly clean up the historical running data of thread pool. unit: minute. +hippo4j.core.clean-history-data-period=30 +hippo4j.core.clean-history-data-enable=true + +### Use netty to report thread pool monitoring data. The default is http. +# hippo4j.core.monitor.report-type=netty #*************** Config Module Related Configurations ***************# -### Hikari Datasource -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/hippo_manager?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8 +### Data source customization section +spring.datasource.url=jdbc:mysql://localhost:3306/hippo4j_manager?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root + +### Hikari Datasource +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.pool-name=Hikari spring.datasource.hikari.connectionTimeout=30000 spring.datasource.hikari.idleTimeout=30000 @@ -34,7 +42,8 @@ spring.datasource.hikari.maximumPoolSize=15 spring.datasource.hikari.connection-test-query=SELECT 1 ### Mybatis-Plus Config -mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl +mybatis-plus.global-config.banner=false +# mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis-plus.global-config.db-config.logic-delete-field=delFlag mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 diff --git a/hippo4j-server/conf/hippo4j-logback.xml b/hippo4j-server/conf/hippo4j-logback.xml index f4cb67d9..80b844bf 100644 --- a/hippo4j-server/conf/hippo4j-logback.xml +++ b/hippo4j-server/conf/hippo4j-logback.xml @@ -1,19 +1,19 @@ - - - + + + - + - + ${FILE_LOG_PATTERN} - + ${logPath}/${appName}-info.log ${logPath}/${appName}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz @@ -26,7 +26,7 @@ - + ${logPath}/${appName}-error.log ${logPath}/${appName}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz @@ -41,8 +41,13 @@ + + + + + - - + + diff --git a/hippo4j-server/src/main/resources/hippo_manager.sql b/hippo4j-server/conf/hippo4j_manager.sql similarity index 59% rename from hippo4j-server/src/main/resources/hippo_manager.sql rename to hippo4j-server/conf/hippo4j_manager.sql index 93e1b9ff..7f25d307 100644 --- a/hippo4j-server/src/main/resources/hippo_manager.sql +++ b/hippo4j-server/conf/hippo4j_manager.sql @@ -1,9 +1,9 @@ -CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hippo_manager` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */; +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hippo4j_manager` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */; -USE `hippo_manager`; +USE `hippo4j_manager`; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = tenant */ /******************************************/ DROP TABLE IF EXISTS `tenant`, `tenant_info`; @@ -22,7 +22,7 @@ CREATE TABLE `tenant` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='租户表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = item */ /******************************************/ DROP TABLE IF EXISTS `item`, `item_info`; @@ -42,7 +42,7 @@ CREATE TABLE `item` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='项目表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = config */ /******************************************/ DROP TABLE IF EXISTS `config`, `config_info`; @@ -58,9 +58,10 @@ CREATE TABLE `config` ( `capacity` int(11) DEFAULT NULL COMMENT '队列大小', `rejected_type` int(11) DEFAULT NULL COMMENT '拒绝策略', `keep_alive_time` int(11) DEFAULT NULL COMMENT '线程存活时间', + `allow_core_thread_time_out` tinyint(1) DEFAULT NULL COMMENT '允许核心线程超时', `content` longtext COMMENT '线程池内容', `md5` varchar(32) NOT NULL COMMENT 'MD5', - `is_alarm` tinyint(1) DEFAULT NULL COMMENT '是否报警 0:报警 1:不报警', + `is_alarm` tinyint(1) DEFAULT NULL COMMENT '是否报警', `capacity_alarm` int(11) DEFAULT NULL COMMENT '容量报警', `liveness_alarm` int(11) DEFAULT NULL COMMENT '活跃度报警', `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -72,7 +73,56 @@ CREATE TABLE `config` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='线程池配置表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ +/* 表名称 = inst_config */ +/******************************************/ +DROP TABLE IF EXISTS `inst_config`; +CREATE TABLE `inst_config` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', + `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `content` longtext COMMENT '线程池内容', + `md5` varchar(32) NOT NULL COMMENT 'MD5', + `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `idx_config_instance` (`tenant_id`,`item_id`,`tp_id`,`instance_id`) USING BTREE, + KEY `idx_instance` (`instance_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='线程池配置实例表'; + +/******************************************/ +/* 数据库全名 = hippo4j_manager */ +/* 表名称 = his_run_data */ +/******************************************/ +DROP TABLE IF EXISTS `his_run_data`; +CREATE TABLE `his_run_data` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', + `tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID', + `item_id` varchar(256) DEFAULT NULL COMMENT '项目ID', + `tp_id` varchar(56) DEFAULT NULL COMMENT '线程池ID', + `instance_id` varchar(256) DEFAULT NULL COMMENT '实例ID', + `current_load` bigint(20) DEFAULT NULL COMMENT '当前负载', + `peak_load` bigint(20) DEFAULT NULL COMMENT '峰值负载', + `pool_size` bigint(20) DEFAULT NULL COMMENT '线程数', + `active_size` bigint(20) DEFAULT NULL COMMENT '活跃线程数', + `queue_capacity` bigint(20) DEFAULT NULL COMMENT '队列容量', + `queue_size` bigint(20) DEFAULT NULL COMMENT '队列元素', + `queue_remaining_capacity` bigint(20) DEFAULT NULL COMMENT '队列剩余容量', + `completed_task_count` bigint(20) DEFAULT NULL COMMENT '已完成任务计数', + `reject_count` bigint(20) DEFAULT NULL COMMENT '拒绝次数', + `timestamp` bigint(20) DEFAULT NULL COMMENT '时间戳', + `gmt_create` datetime DEFAULT NULL COMMENT '创建时间', + `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`), + KEY `idx_group_key` (`tenant_id`,`item_id`,`tp_id`,`instance_id`) USING BTREE, + KEY `idx_timestamp` (`timestamp`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='历史运行数据表'; + +/******************************************/ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = log_record_info */ /******************************************/ DROP TABLE IF EXISTS `log_record_info`; @@ -91,12 +141,12 @@ CREATE TABLE `log_record_info` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = user */ /******************************************/ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( - `id` bigint(20) NOT NULL COMMENT 'ID', + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_name` varchar(64) NOT NULL COMMENT '用户名', `password` varchar(512) NOT NULL COMMENT '用户密码', `role` varchar(50) NOT NULL COMMENT '角色', @@ -104,30 +154,30 @@ CREATE TABLE `user` ( `gmt_modified` datetime NOT NULL COMMENT '修改时间', `del_flag` tinyint(1) NOT NULL COMMENT '是否删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = role */ /******************************************/ DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( - `id` bigint(20) NOT NULL COMMENT 'ID', + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `role` varchar(64) NOT NULL COMMENT '角色', `user_name` varchar(64) NOT NULL COMMENT '用户名', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `del_flag` tinyint(1) NOT NULL COMMENT '是否删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='角色表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = permission */ /******************************************/ DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` ( - `id` bigint(20) NOT NULL COMMENT 'ID', + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `role` varchar(512) NOT NULL COMMENT '角色', `resource` varchar(512) NOT NULL COMMENT '资源', `action` varchar(8) NOT NULL COMMENT '读写权限', @@ -135,10 +185,10 @@ CREATE TABLE `permission` ( `gmt_modified` datetime NOT NULL COMMENT '修改时间', `del_flag` tinyint(1) NOT NULL COMMENT '是否删除', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限表'; /******************************************/ -/* 数据库全名 = hippo_manager */ +/* 数据库全名 = hippo4j_manager */ /* 表名称 = notify */ /******************************************/ DROP TABLE IF EXISTS `alarm`, `notify`; @@ -158,7 +208,7 @@ CREATE TABLE `notify` ( `del_flag` tinyint(1) NOT NULL COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_notify_biz_key` (`tenant_id`,`item_id`,`tp_id`,`platform`,`type`,`del_flag`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; /* 租户 */ INSERT INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0'); @@ -167,12 +217,18 @@ INSERT INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, INSERT INTO `item` (`id`, `tenant_id`, `item_id`, `item_name`, `item_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', '动态线程池示例项目', '动态线程池示例项目,对应 Hippo 项目的 example 模块', '马称', '2021-10-24 16:11:00', '2021-10-24 16:11:00', '0'); /* 线程池 */ -INSERT INTO `config` (`id`, `tenant_id`, `item_id`, `tp_id`, `tp_name`, `core_size`, `max_size`, `queue_type`, `capacity`, `rejected_type`, `keep_alive_time`, `content`, `md5`, `is_alarm`, `capacity_alarm`, `liveness_alarm`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-consume', '示例消费者线程池', '1', '5', '9', '1024', '2', '90', '{\"capacity\":1024,\"capacityAlarm\":80,\"coreSize\":1,\"isAlarm\":0,\"itemId\":\"dynamic-threadpool-example\",\"keepAliveTime\":90,\"livenessAlarm\":80,\"maxSize\":5,\"queueType\":9,\"tenantId\":\"prescription\",\"tpId\":\"message-consume\"}', '548564177fd601015e19ef6df42000d1', '0', '80', '80', '2021-10-24 16:12:16', '2021-10-24 16:12:16', '0'), -('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', '示例生产者线程池', '1', '5', '9', '100', '1', '10', '{\"capacity\":100,\"capacityAlarm\":30,\"coreSize\":10,\"isAlarm\":0,\"itemId\":\"dynamic-threadpool-example\",\"keepAliveTime\":10,\"livenessAlarm\":30,\"maxSize\":15,\"queueType\":9,\"rejectedType\":7,\"tenantId\":\"prescription\",\"tpId\":\"message-produce\"}', 'edd6677f6ca35ce2c2e06db5749572c8', '0', '30', '30', '2021-10-24 16:12:56', '2021-10-28 09:49:27', '0'); +INSERT INTO `config` (`id`, `tenant_id`, `item_id`, `tp_id`, `tp_name`, `core_size`, `max_size`, `queue_type`, `capacity`, `rejected_type`, `keep_alive_time`, `allow_core_thread_time_out`, `content`, `md5`, `is_alarm`, `capacity_alarm`, `liveness_alarm`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-consume', '示例消费者线程池', '5', '10', '9', '1024', '2', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-consume\",\"coreSize\":5,\"maxSize\":10,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":2,\"isAlarm\":0,\"capacityAlarm\":80,\"livenessAlarm\":80,\"allowCoreThreadTimeOut\":0}', 'f80ea89044889fb6cec20e1a517f2ec3', '0', '80', '80', '2021-10-24 10:24:00', '2021-12-22 08:58:55', '0'), +('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', '示例生产者线程池', '5', '15', '9', '1024', '1', '9999', '0', '{\"tenantId\":\"prescription\",\"itemId\":\"dynamic-threadpool-example\",\"tpId\":\"message-produce\",\"coreSize\":5,\"maxSize\":15,\"queueType\":9,\"capacity\":1024,\"keepAliveTime\":9999,\"rejectedType\":1,\"isAlarm\":0,\"capacityAlarm\":30,\"livenessAlarm\":30,\"allowCoreThreadTimeOut\":0}', '525e1429468bcfe98df7e70a75710051', '0', '30', '30', '2021-10-24 10:24:00', '2021-12-22 08:59:02', '0'); /* 用户 */ INSERT INTO `user` (`id`, `user_name`, `password`, `role`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'admin', '$2a$10$2KCqRbra0Yn2TwvkZxtfLuWuUP5KyCWsljO/ci5pLD27pqR3TV1vy', 'ROLE_ADMIN', '2021-11-04 21:35:17', '2021-11-15 23:04:59', '0'); /* 通知表 */ -INSERT INTO `notify` (`id`, `tenant_id`, `item_id`, `tp_id`, `platform`, `type`, `secret_key`, `interval`, `receives`, `enable`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1461345908531671042', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'CONFIG', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', NULL, '15601166691', '0', '2021-11-18 22:49:50', '2021-11-18 22:49:50', '0'), -('1461345976047382530', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'ALARM', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', '30', '15601166691', '0', '2021-11-18 22:50:06', '2021-11-18 22:50:06', '0'); +INSERT INTO `notify` (`id`, `tenant_id`, `item_id`, `tp_id`, `platform`, `type`, `secret_key`, `interval`, `receives`, `enable`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'CONFIG', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', NULL, '15601166691', '0', '2021-11-18 22:49:50', '2021-11-18 22:49:50', '0'), +('2', 'prescription', 'dynamic-threadpool-example', 'message-produce', 'DING', 'ALARM', '4a582a588a161d6e3a1bd1de7eea9ee9f562cdfcbe56b6e72029e7fd512b2eae', '30', '15601166691', '0', '2021-11-18 22:50:06', '2021-11-18 22:50:06', '0'); + +/* 1.1.0 Upgrade Start */ +ALTER TABLE `config` DROP INDEX `uk_configinfo_datagrouptenant`; +ALTER TABLE `item` DROP INDEX `uk_iteminfo_tenantitem`; +ALTER TABLE `tenant` DROP INDEX `uk_tenantinfo_tenantid`; +/* 1.1.0 Upgrade End */ diff --git a/hippo4j-server/conf/sql-upgrade/1.1.0_upgrade.sql b/hippo4j-server/conf/sql-upgrade/1.1.0_upgrade.sql new file mode 100644 index 00000000..0b4be247 --- /dev/null +++ b/hippo4j-server/conf/sql-upgrade/1.1.0_upgrade.sql @@ -0,0 +1,5 @@ +ALTER TABLE `config` DROP INDEX `uk_configinfo_datagrouptenant`; + +ALTER TABLE `item` DROP INDEX `uk_iteminfo_tenantitem`; + +ALTER TABLE `tenant` DROP INDEX `uk_tenantinfo_tenantid`; diff --git a/hippo4j-server/pom.xml b/hippo4j-server/pom.xml index 23297e97..dbf7d139 100644 --- a/hippo4j-server/pom.xml +++ b/hippo4j-server/pom.xml @@ -2,18 +2,12 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - hippo4j-server - jar - - ${project.artifactId} - ${project.artifactId} true @@ -23,22 +17,65 @@ cn.hippo4j hippo4j-config + ${revision} cn.hippo4j hippo4j-console + ${revision} cn.hippo4j hippo4j-discovery + ${revision} + + + + + javax.xml.bind + jaxb-api + 2.3.0 + + + + com.sun.xml.bind + jaxb-impl + 2.3.0 + + + com.sun.xml.bind + jaxb-core + 2.3.0 + + + + javax.activation + activation + 1.1.1 + + ${project.artifactId} + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + org.springframework.boot spring-boot-maven-plugin @@ -52,5 +89,4 @@ - diff --git a/hippo4j-server/src/main/java/cn/hippo4j/server/ServerApplication.java b/hippo4j-server/src/main/java/cn/hippo4j/server/ServerApplication.java index bffa8a57..239a632f 100644 --- a/hippo4j-server/src/main/java/cn/hippo4j/server/ServerApplication.java +++ b/hippo4j-server/src/main/java/cn/hippo4j/server/ServerApplication.java @@ -1,9 +1,28 @@ +/* + * 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. + */ + package cn.hippo4j.server; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; +@EnableTransactionManagement @SpringBootApplication(scanBasePackages = "cn.hippo4j") @MapperScan(basePackages = {"cn.hippo4j.config.mapper", "cn.hippo4j.auth.mapper"}) public class ServerApplication { @@ -11,5 +30,4 @@ public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); } - } diff --git a/hippo4j-server/src/main/java/cn/hippo4j/server/listener/BaseSpringApplicationRunListener.java b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/BaseSpringApplicationRunListener.java new file mode 100644 index 00000000..fc550a73 --- /dev/null +++ b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/BaseSpringApplicationRunListener.java @@ -0,0 +1,72 @@ +/* + * 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. + */ + +package cn.hippo4j.server.listener; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.SpringApplicationRunListener; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.Ordered; + +import java.util.ArrayList; +import java.util.List; + +/** + * Base spring application run listener. + */ +public class BaseSpringApplicationRunListener implements SpringApplicationRunListener, Ordered { + + private final SpringApplication application; + + private final String[] args; + + private List hippo4JApplicationListeners = new ArrayList(); + + { + hippo4JApplicationListeners.add(new StartingApplicationListener()); + } + + public BaseSpringApplicationRunListener(SpringApplication application, String[] args) { + this.application = application; + this.args = args; + } + + @Override + public void starting() { + hippo4JApplicationListeners.forEach(each -> each.starting()); + } + + @Override + public void contextPrepared(ConfigurableApplicationContext context) { + hippo4JApplicationListeners.forEach(each -> each.contextPrepared(context)); + } + + @Override + public void started(ConfigurableApplicationContext context) { + hippo4JApplicationListeners.forEach(each -> each.started(context)); + } + + @Override + public void failed(ConfigurableApplicationContext context, Throwable exception) { + hippo4JApplicationListeners.forEach(each -> each.failed(context, exception)); + } + + @Override + public int getOrder() { + return HIGHEST_PRECEDENCE; + } +} diff --git a/hippo4j-server/src/main/java/cn/hippo4j/server/listener/Hippo4JApplicationListener.java b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/Hippo4JApplicationListener.java new file mode 100644 index 00000000..baf6e24e --- /dev/null +++ b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/Hippo4JApplicationListener.java @@ -0,0 +1,53 @@ +/* + * 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. + */ + +package cn.hippo4j.server.listener; + +import org.springframework.context.ConfigurableApplicationContext; + +/** + * Hippo4J application listener. + */ +public interface Hippo4JApplicationListener { + + /** + * {@link BaseSpringApplicationRunListener#starting} + */ + void starting(); + + /** + * {@link BaseSpringApplicationRunListener#contextPrepared} + * + * @param context + */ + void contextPrepared(ConfigurableApplicationContext context); + + /** + * {@link BaseSpringApplicationRunListener#started} + * + * @param context context + */ + void started(ConfigurableApplicationContext context); + + /** + * {@link BaseSpringApplicationRunListener#failed} + * + * @param context + * @param exception + */ + void failed(ConfigurableApplicationContext context, Throwable exception); +} diff --git a/hippo4j-server/src/main/java/cn/hippo4j/server/listener/StartingApplicationListener.java b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/StartingApplicationListener.java new file mode 100644 index 00000000..f5510477 --- /dev/null +++ b/hippo4j-server/src/main/java/cn/hippo4j/server/listener/StartingApplicationListener.java @@ -0,0 +1,85 @@ +/* + * 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. + */ + +package cn.hippo4j.server.listener; + +import cn.hippo4j.config.toolkit.EnvUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ConfigurableApplicationContext; + +import java.nio.file.Paths; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Starting application listener. + */ +@Slf4j +public class StartingApplicationListener implements Hippo4JApplicationListener { + + private volatile boolean starting; + + private ScheduledExecutorService scheduledExecutorService; + + @Override + public void starting() { + starting = true; + } + + @Override + public void contextPrepared(ConfigurableApplicationContext context) { + if (EnvUtil.getStandaloneMode()) { + scheduledExecutorService = new ScheduledThreadPoolExecutor( + 1, + r -> { + Thread thread = new Thread(r); + thread.setName("server.hippo4j-starting"); + return thread; + }); + scheduledExecutorService.scheduleWithFixedDelay(() -> { + if (starting) { + log.info("Hippo4J is starting..."); + } + }, 1, 1, TimeUnit.SECONDS); + } + } + + @Override + public void started(ConfigurableApplicationContext context) { + starting = false; + closeExecutor(); + if (EnvUtil.getStandaloneMode()) { + log.info("Hippo4J started successfully..."); + } + } + + @Override + public void failed(ConfigurableApplicationContext context, Throwable exception) { + log.error("Startup errors: {}", exception); + closeExecutor(); + context.close(); + log.error("Hippo4J failed to start, please see {} for more details.", + Paths.get(EnvUtil.getHippo4JHome(), "logs/hippo4j.log")); + } + + private void closeExecutor() { + if (scheduledExecutorService != null) { + scheduledExecutorService.shutdownNow(); + } + } +} diff --git a/hippo4j-server/src/main/resources/META-INF/spring.factories b/hippo4j-server/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..1c596c4b --- /dev/null +++ b/hippo4j-server/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.SpringApplicationRunListener=cn.hippo4j.server.listener.BaseSpringApplicationRunListener diff --git a/hippo4j-server/src/main/resources/application.properties b/hippo4j-server/src/main/resources/application.properties index 7e4623cf..b8779e7c 100644 --- a/hippo4j-server/src/main/resources/application.properties +++ b/hippo4j-server/src/main/resources/application.properties @@ -1,19 +1,36 @@ #*************** Spring Boot Related Configurations ***************# +### Default Web Context Path +# server.servlet.contextPath=/hippo4j + ### Server Startup Port server.port=6691 +### Server Tomcat +server.tomcat.accesslog.enabled=true +server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i + +### Default Current Work Dir +server.tomcat.basedir= #*************** Dynamic Thread Pool Custom Configuration ***************# ### Custom Logging Tenant tenant=hippo4j +### Regularly clean up the historical running data of thread pool. unit: minute. +hippo4j.core.clean-history-data-period=30 +hippo4j.core.clean-history-data-enable=true + +### Use netty to report thread pool monitoring data. The default is http. +# hippo4j.core.monitor.report-type=netty #*************** Config Module Related Configurations ***************# -### Hikari Datasource -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://localhost:3306/hippo_manager?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8 +### Data source customization section +spring.datasource.url=jdbc:mysql://localhost:3306/hippo4j_manager?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root + +### Hikari Datasource +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.pool-name=Hikari spring.datasource.hikari.connectionTimeout=30000 spring.datasource.hikari.idleTimeout=30000 @@ -25,7 +42,8 @@ spring.datasource.hikari.maximumPoolSize=15 spring.datasource.hikari.connection-test-query=SELECT 1 ### Mybatis-Plus Config -mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl +mybatis-plus.global-config.banner=false +# mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis-plus.global-config.db-config.logic-delete-field=delFlag mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 diff --git a/hippo4j-server/src/main/resources/banner.txt b/hippo4j-server/src/main/resources/banner.txt new file mode 100644 index 00000000..f075fe2c --- /dev/null +++ b/hippo4j-server/src/main/resources/banner.txt @@ -0,0 +1,15 @@ + + ,--, ,--, ,---._ + ,--.'| ,--.'| .-- -.' \ Hippo4J ${application.version} + ,--, | : ,--, ,-.----. ,-.----. ,--, | : | | : Port: ${server.port} +,---.'| : ',--.'| \ / \ \ / \ ,---. ,---.'| : ' : ; | PID: ${pid} +| | : _' || |, | : || : | ' ,'\ ; : | | ; : | Console: http://127.0.0.1:${server.port}/index.html +: : |.' |`--'_ | | .\ :| | .\ : / / || | : _' | | : : +| ' ' ; :,' ,'| . : |: |. : |: |. ; ,. :: : |.' | : https://hippo4j.cn +' | .'. |' | | | | \ :| | \ :' | |: :| ' ' ; : | ; | +| | : | '| | : | : . || : . |' | .; :\ \ .'. | ___ l +' : | : ;' : |__ : |`-': |`-'| : | `---`: | ' / /\ J : +| | ' ,/ | | '.'|: : : : : : \ \ / ' ; |/ ../ `..- , +; : ;--' ; : ;| | : | | : `----' | : ;\ \ ; +| ,/ | , / `---'.| `---'.| ' ,/ \ \ ,' +'---' ---`-' `---` `---` '--' "---....--' diff --git a/hippo4j-spring-boot-starter/.gitignore b/hippo4j-spring-boot-starter/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-spring-boot-starter/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlDTO.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlDTO.java deleted file mode 100644 index bcafcf79..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hutool.core.util.StrUtil; -import lombok.Builder; -import lombok.Data; - -/** - * 报警控制实体. - * - * @author chen.ma - * @date 2021/10/28 22:15 - */ -@Data -@Builder -public class AlarmControlDTO { - - /** - * 线程池 Id - */ - private String threadPool; - - /** - * 推送报警平台 - */ - private String platform; - - /** - * 推送报警类型 - */ - private MessageTypeEnum typeEnum; - - /** - * 构建线程池报警标识 - * - * @return - */ - public String buildPk() { - return StrUtil.builder(threadPool, "+", platform).toString(); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlHandler.java deleted file mode 100644 index eae63a4d..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/AlarmControlHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import com.google.common.cache.Cache; -import com.google.common.collect.Maps; - -import java.util.Map; - -/** - * 报警控制组件. - * - * @author chen.ma - * @date 2021/10/28 21:24 - */ -public class AlarmControlHandler { - - public static Map> THREAD_POOL_ALARM_CACHE = Maps.newConcurrentMap(); - - /** - * 控制消息推送报警频率. - * - * @param alarmControl - * @return - */ - public boolean isSendAlarm(AlarmControlDTO alarmControl) { - Cache cache = THREAD_POOL_ALARM_CACHE.get(alarmControl.buildPk()); - if (cache != null) { - String pkId = cache.getIfPresent(alarmControl.getTypeEnum().name()); - if (StrUtil.isBlank(pkId)) { - // val 无意义 - cache.put(alarmControl.getTypeEnum().name(), IdUtil.simpleUUID()); - return true; - } - } - - return false; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/BaseSendMessageService.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/BaseSendMessageService.java deleted file mode 100644 index 47e6db85..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/BaseSendMessageService.java +++ /dev/null @@ -1,180 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.common.toolkit.GroupKey; -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.starter.config.BootstrapProperties; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -/** - * Base send message service. - * - * @author chen.ma - * @date 2021/8/15 15:34 - */ -@Slf4j -@RequiredArgsConstructor -public class BaseSendMessageService implements InitializingBean, SendMessageService { - - @NonNull - private final HttpAgent httpAgent; - - @NonNull - private final BootstrapProperties properties; - - @NonNull - private final AlarmControlHandler alarmControlHandler; - - public final static Map> ALARM_NOTIFY_CONFIG = Maps.newHashMap(); - - private final Map sendMessageHandlers = Maps.newHashMap(); - - @Override - public void sendAlarmMessage(MessageTypeEnum typeEnum, DynamicThreadPoolExecutor executor) { - String buildKey = StrUtil.builder(executor.getThreadPoolId(), "+", "ALARM").toString(); - List notifyList = ALARM_NOTIFY_CONFIG.get(buildKey); - if (CollUtil.isEmpty(notifyList)) { - log.warn("Please configure alarm notification on the server."); - return; - } - - notifyList.forEach(each -> { - try { - SendMessageHandler messageHandler = sendMessageHandlers.get(each.getPlatform()); - if (messageHandler == null) { - log.warn("Please configure alarm notification on the server."); - return; - } - - if (isSendAlarm(each.getTpId(), each.setTypeEnum(typeEnum))) { - messageHandler.sendAlarmMessage(each, executor); - } - } catch (Exception ex) { - log.warn("Failed to send thread pool alarm notification.", ex); - } - }); - } - - @Override - public void sendChangeMessage(PoolParameterInfo parameter) { - String buildKey = StrUtil.builder(parameter.getTpId(), "+", "CONFIG").toString(); - List notifyList = ALARM_NOTIFY_CONFIG.get(buildKey); - if (CollUtil.isEmpty(notifyList)) { - log.warn("Please configure alarm notification on the server."); - return; - } - - notifyList.forEach(each -> { - try { - SendMessageHandler messageHandler = sendMessageHandlers.get(each.getPlatform()); - if (messageHandler == null) { - log.warn("Please configure alarm notification on the server."); - return; - } - - messageHandler.sendChangeMessage(each, parameter); - } catch (Exception ex) { - log.warn("Failed to send thread pool change notification.", ex); - } - }); - } - - @Override - public void afterPropertiesSet() { - Map sendMessageHandlerMap = - ApplicationContextHolder.getBeansOfType(SendMessageHandler.class); - sendMessageHandlerMap.values().forEach(each -> sendMessageHandlers.put(each.getType(), each)); - - List threadPoolIds = GlobalThreadPoolManage.listThreadPoolId(); - if (CollUtil.isEmpty(threadPoolIds)) { - log.warn("The client does not have a dynamic thread pool instance configured."); - return; - } - - List groupKeys = Lists.newArrayList(); - threadPoolIds.forEach(each -> { - String groupKey = GroupKey.getKeyTenant(each, properties.getItemId(), properties.getNamespace()); - groupKeys.add(groupKey); - }); - - Result result = null; - try { - result = httpAgent.httpPostByDiscovery("/v1/cs/notify/list/config", new ThreadPoolNotifyReqDTO(groupKeys)); - } catch (Throwable ex) { - log.error("Get dynamic thread pool notify configuration error.", ex); - } - - if (result != null && result.isSuccess() && result.getData() != null) { - String resultDataStr = JSON.toJSONString(result.getData()); - List resultData = JSON.parseArray(resultDataStr, ThreadPoolNotify.class); - resultData.forEach(each -> ALARM_NOTIFY_CONFIG.put(each.getNotifyKey(), each.getNotifyList())); - - ALARM_NOTIFY_CONFIG.forEach((key, val) -> - val.stream().filter(each -> StrUtil.equals("ALARM", each.getType())) - .forEach(each -> { - Cache cache = CacheBuilder.newBuilder() - .expireAfterWrite(each.getInterval(), TimeUnit.MINUTES) - .build(); - AlarmControlHandler.THREAD_POOL_ALARM_CACHE.put(StrUtil.builder(each.getTpId(), "+", each.getPlatform()).toString(), cache); - }) - ); - } - } - - private boolean isSendAlarm(String threadPoolId, NotifyDTO notifyInfo) { - AlarmControlDTO alarmControl = AlarmControlDTO.builder() - .threadPool(threadPoolId) - .platform(notifyInfo.getPlatform()) - .typeEnum(notifyInfo.getTypeEnum()) - .build(); - - return alarmControlHandler.isSendAlarm(alarmControl); - } - - @Data - @AllArgsConstructor - static class ThreadPoolNotifyReqDTO { - - /** - * groupKeys - */ - private List groupKeys; - - } - - @Data - static class ThreadPoolNotify { - - /** - * 通知 Key - */ - private String notifyKey; - - /** - * 报警配置 - */ - private List notifyList; - - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/MessageTypeEnum.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/MessageTypeEnum.java deleted file mode 100644 index 5e6cd6dd..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/MessageTypeEnum.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hippo4j.starter.alarm; - -/** - * Message type enum. - * - * @author chen.ma - * @date 2021/8/16 20:50 - */ -public enum MessageTypeEnum { - - /** - * 通知类型 - */ - CHANGE, - - /** - * 容量报警 - */ - CAPACITY, - - /** - * 活跃度报警 - */ - LIVENESS, - - /** - * 拒绝策略报警 - */ - REJECT - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyConfig.java deleted file mode 100644 index 896ad190..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import lombok.Data; - -/** - * Alarm config. - * - * @author chen.ma - * @date 2021/8/15 16:09 - */ -@Data -public class NotifyConfig { - - /** - * type - */ - private String type; - - /** - * url - */ - private String url; - - /** - * token - */ - private String token; - - /** - * receives - */ - private String receives; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyDTO.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyDTO.java deleted file mode 100644 index 93a514cc..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyDTO.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 通知实体. - * - * @author chen.ma - * @date 2021/11/17 22:12 - */ -@Data -@Accessors(chain = true) -public class NotifyDTO { - - /** - * 租户id - */ - private String tenantId; - - /** - * 项目id - */ - private String itemId; - - /** - * 线程池id - */ - private String tpId; - - /** - * 通知平台 - */ - private String platform; - - /** - * 通知类型 - */ - private String type; - - /** - * 密钥 - */ - private String secretKey; - - /** - * 报警间隔 - */ - private Integer interval; - - /** - * 接收者 - */ - private String receives; - - /** - * 报警类型 - */ - private MessageTypeEnum typeEnum; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyPlatformEnum.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyPlatformEnum.java deleted file mode 100644 index d6a2a972..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/NotifyPlatformEnum.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.hippo4j.starter.alarm; - -/** - * Notify platform enum. - * - * @author chen.ma - * @date 2021/8/15 15:50 - */ -public enum NotifyPlatformEnum { - - /** - * 钉钉 - */ - DING, - - /** - * 飞书 - */ - LARK, - - /** - * 企业微信 - */ - WECHAT - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageHandler.java deleted file mode 100644 index ca26ff86..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; - -/** - * Send message handler. - * - * @author chen.ma - * @date 2021/8/15 15:44 - */ -public interface SendMessageHandler { - - /** - * Get type. - * - * @return - */ - String getType(); - - /** - * Send alarm message. - * - * @param notifyConfig - * @param threadPoolExecutor - */ - void sendAlarmMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor threadPoolExecutor); - - /** - * Send change message. - * - * @param notifyConfig - * @param parameter - */ - void sendChangeMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageService.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageService.java deleted file mode 100644 index 66930beb..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/SendMessageService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; - -/** - * Send msg. - * - * @author chen.ma - * @date 2021/8/15 15:31 - */ -public interface SendMessageService { - - /** - * Send alarm message. - * - * @param typeEnum - * @param threadPoolExecutor - */ - void sendAlarmMessage(MessageTypeEnum typeEnum, DynamicThreadPoolExecutor threadPoolExecutor); - - /** - * Send change message. - * - * @param parameter - */ - void sendChangeMessage(PoolParameterInfo parameter); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarm.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarm.java deleted file mode 100644 index 5e60907d..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarm.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import lombok.AllArgsConstructor; -import lombok.Data; - -/** - * Thread pool alarm. - * - * @author chen.ma - * @date 2021/8/15 13:13 - */ -@Data -@AllArgsConstructor -public class ThreadPoolAlarm { - - /** - * isAlarm - */ - private Boolean isAlarm; - - /** - * livenessAlarm - */ - private Integer livenessAlarm; - - /** - * capacityAlarm - */ - private Integer capacityAlarm; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarmManage.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarmManage.java deleted file mode 100644 index 89bbfd82..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ThreadPoolAlarmManage.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.hippo4j.starter.alarm; - -import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.config.MessageAlarmConfig; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.toolkit.CalculateUtil; -import lombok.extern.slf4j.Slf4j; - -import java.util.Optional; -import java.util.concurrent.BlockingQueue; - -/** - * Alarm manage. - * - * @author chen.ma - * @date 2021/8/15 14:13 - */ -@Slf4j -public class ThreadPoolAlarmManage { - - /** - * 发送消息 - */ - private static final SendMessageService SEND_MESSAGE_SERVICE; - - static { - SEND_MESSAGE_SERVICE = Optional.ofNullable(ApplicationContextHolder.getInstance()) - .map(each -> each.getBean(MessageAlarmConfig.SEND_MESSAGE_BEAN_NAME, SendMessageService.class)) - .orElse(null); - } - - /** - * Check thread pool capacity alarm. - * - * @param threadPoolExecutor - */ - public static void checkPoolCapacityAlarm(DynamicThreadPoolExecutor threadPoolExecutor) { - if (SEND_MESSAGE_SERVICE == null) { - return; - } - ThreadPoolAlarm threadPoolAlarm = threadPoolExecutor.getThreadPoolAlarm(); - BlockingQueue blockIngQueue = threadPoolExecutor.getQueue(); - - int queueSize = blockIngQueue.size(); - int capacity = queueSize + blockIngQueue.remainingCapacity(); - int divide = CalculateUtil.divide(queueSize, capacity); - boolean isSend = threadPoolAlarm.getIsAlarm() - && divide > threadPoolAlarm.getCapacityAlarm() - && isSendMessage(threadPoolExecutor, MessageTypeEnum.CAPACITY); - if (isSend) { - SEND_MESSAGE_SERVICE.sendAlarmMessage(MessageTypeEnum.CAPACITY, threadPoolExecutor); - } - } - - /** - * Check thread pool activity alarm. - * - * @param isCore - * @param threadPoolExecutor - */ - public static void checkPoolLivenessAlarm(boolean isCore, DynamicThreadPoolExecutor threadPoolExecutor) { - if (isCore || SEND_MESSAGE_SERVICE == null || !isSendMessage(threadPoolExecutor, MessageTypeEnum.LIVENESS)) { - return; - } - int activeCount = threadPoolExecutor.getActiveCount(); - int maximumPoolSize = threadPoolExecutor.getMaximumPoolSize(); - int divide = CalculateUtil.divide(activeCount, maximumPoolSize); - - ThreadPoolAlarm threadPoolAlarm = threadPoolExecutor.getThreadPoolAlarm(); - - boolean isSend = threadPoolAlarm.getIsAlarm() - && divide > threadPoolAlarm.getLivenessAlarm() - && isSendMessage(threadPoolExecutor, MessageTypeEnum.LIVENESS); - if (isSend) { - SEND_MESSAGE_SERVICE.sendAlarmMessage(MessageTypeEnum.LIVENESS, threadPoolExecutor); - } - } - - /** - * Check thread pool reject policy alarm. - * - * @param threadPoolExecutor - */ - public static void checkPoolRejectAlarm(DynamicThreadPoolExecutor threadPoolExecutor) { - if (SEND_MESSAGE_SERVICE == null) { - return; - } - - ThreadPoolAlarm threadPoolAlarm = threadPoolExecutor.getThreadPoolAlarm(); - if (threadPoolAlarm.getIsAlarm() && isSendMessage(threadPoolExecutor, MessageTypeEnum.REJECT)) { - SEND_MESSAGE_SERVICE.sendAlarmMessage(MessageTypeEnum.REJECT, threadPoolExecutor); - } - } - - /** - * Send thread pool configuration change message. - * - * @param parameter - */ - public static void sendPoolConfigChange(PoolParameterInfo parameter) { - if (SEND_MESSAGE_SERVICE == null) { - return; - } - - SEND_MESSAGE_SERVICE.sendChangeMessage(parameter); - } - - /** - * Is send message. - * - * @param threadPoolExecutor - * @param typeEnum - * @return - */ - private static boolean isSendMessage(DynamicThreadPoolExecutor threadPoolExecutor, MessageTypeEnum typeEnum) { - // ignore - return true; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingAlarmConstants.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingAlarmConstants.java deleted file mode 100644 index 32ed3394..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingAlarmConstants.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.hippo4j.starter.alarm.ding; - -/** - * Ding alarm constants. - * - * @author chen.ma - * @date 2021/11/26 20:03 - */ -public class DingAlarmConstants { - - /** - * 钉钉机器人 Url - */ - public static final String DING_ROBOT_SERVER_URL = "https://oapi.dingtalk.com/robot/send?access_token="; - - /** - * 线程池报警通知标题 - */ - public static final String DING_ALARM_TITLE = "动态线程池告警"; - - /** - * 线程池参数变更通知标题 - */ - public static final String DING_NOTICE_TITLE = "动态线程池通知"; - - /** - * 线程池报警通知文本 - */ - public static final String DING_ALARM_TXT = - "[警报] %s - 动态线程池运行告警 \n\n" + - " --- \n\n " + - "线程池ID:%s \n\n " + - "应用名称:%s \n\n " + - "应用实例:%s \n\n " + - "报警类型:%s \n\n " + - " --- \n\n " + - "核心线程数:%d \n\n " + - "最大线程数:%d \n\n " + - "当前线程数:%d \n\n " + - "活跃线程数:%d \n\n " + - "最大任务数:%d \n\n " + - "线程池任务总量:%d \n\n " + - " --- \n\n " + - "队列类型:%s \n\n " + - "队列容量:%d \n\n " + - "队列元素个数:%d \n\n " + - "队列剩余个数:%d \n\n " + - " --- \n\n " + - "拒绝策略:%s \n\n" + - "拒绝策略执行次数:%d \n\n " + - "OWNER:@%s \n\n" + - "提示:%d 分钟内此线程池不会重复告警(可配置) \n\n" + - " --- \n\n " + - "**播报时间:%s**"; - - /** - * 线程池参数变更通知文本 - */ - public static final String DING_NOTICE_TXT = - "[通知] %s - 动态线程池参数变更 \n\n" + - " --- \n\n " + - "线程池ID:%s \n\n " + - "应用名称:%s \n\n " + - "应用实例:%s \n\n " + - " --- \n\n " + - "核心线程数:%s \n\n " + - "最大线程数:%s \n\n " + - "线程存活时间:%s / SECONDS \n\n" + - " --- \n\n " + - "队列类型:%s \n\n " + - "队列容量:%s \n\n " + - " --- \n\n " + - "AGO 拒绝策略:%s \n\n" + - "NOW 拒绝策略:%s \n\n" + - " --- \n\n " + - "提示:动态线程池配置变更实时通知(无限制) \n\n" + - "OWNER:@%s \n\n" + - " --- \n\n " + - "**播报时间:%s**"; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingSendMessageHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingSendMessageHandler.java deleted file mode 100644 index 72c944b1..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/ding/DingSendMessageHandler.java +++ /dev/null @@ -1,182 +0,0 @@ -package cn.hippo4j.starter.alarm.ding; - -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.alarm.NotifyDTO; -import cn.hippo4j.starter.alarm.NotifyPlatformEnum; -import cn.hippo4j.starter.alarm.SendMessageHandler; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedTypeEnum; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import com.dingtalk.api.DefaultDingTalkClient; -import com.dingtalk.api.DingTalkClient; -import com.dingtalk.api.request.OapiRobotSendRequest; -import com.google.common.base.Joiner; -import com.taobao.api.ApiException; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static cn.hippo4j.starter.alarm.ding.DingAlarmConstants.DING_ALARM_TXT; -import static cn.hippo4j.starter.alarm.ding.DingAlarmConstants.DING_NOTICE_TXT; - -/** - * Send ding notification message. - * - * @author chen.ma - * @date 2021/8/15 15:49 - */ -@Slf4j -@AllArgsConstructor -public class DingSendMessageHandler implements SendMessageHandler { - - private final String active; - - private final InstanceInfo instanceInfo; - - @Override - public String getType() { - return NotifyPlatformEnum.DING.name(); - } - - @Override - public void sendAlarmMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor pool) { - dingAlarmSendMessage(notifyConfig, pool); - } - - @Override - public void sendChangeMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter) { - dingChangeSendMessage(notifyConfig, parameter); - } - - private void dingAlarmSendMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor pool) { - List receives = StrUtil.split(notifyConfig.getReceives(), ','); - String afterReceives = Joiner.on(", @").join(receives); - - BlockingQueue queue = pool.getQueue(); - String text = String.format( - DING_ALARM_TXT, - // 环境 - active.toUpperCase(), - // 线程池ID - pool.getThreadPoolId(), - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 报警类型 - notifyConfig.getTypeEnum(), - // 核心线程数 - pool.getCorePoolSize(), - // 最大线程数 - pool.getMaximumPoolSize(), - // 当前线程数 - pool.getPoolSize(), - // 活跃线程数 - pool.getActiveCount(), - // 最大任务数 - pool.getLargestPoolSize(), - // 线程池任务总量 - pool.getCompletedTaskCount(), - // 队列类型名称 - queue.getClass().getSimpleName(), - // 队列容量 - queue.size() + queue.remainingCapacity(), - // 队列元素个数 - queue.size(), - // 队列剩余个数 - queue.remainingCapacity(), - // 拒绝策略名称 - pool.getRejectedExecutionHandler().getClass().getSimpleName(), - // 拒绝策略次数 - pool.getRejectCount(), - // 告警手机号 - afterReceives, - // 报警频率 - notifyConfig.getInterval(), - // 当前时间 - DateUtil.now() - ); - - execute(notifyConfig, DingAlarmConstants.DING_ALARM_TITLE, text, receives); - } - - private void dingChangeSendMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter) { - String threadPoolId = parameter.getTpId(); - DynamicThreadPoolWrapper poolWrap = GlobalThreadPoolManage.getExecutorService(threadPoolId); - if (poolWrap == null) { - log.warn("Thread pool is empty when sending change notification, threadPoolId :: {}", threadPoolId); - return; - } - - List receives = StrUtil.split(notifyConfig.getReceives(), ','); - String afterReceives = Joiner.on(", @").join(receives); - - ThreadPoolExecutor customPool = poolWrap.getExecutor(); - /** - * hesitant e.g. ➲ ➜ ⇨ ➪ - */ - String text = String.format( - DING_NOTICE_TXT, - // 环境 - active.toUpperCase(), - // 线程池名称 - threadPoolId, - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 核心线程数 - customPool.getCorePoolSize() + " ➲ " + parameter.getCoreSize(), - // 最大线程数 - customPool.getMaximumPoolSize() + " ➲ " + parameter.getMaxSize(), - // 线程存活时间 - customPool.getKeepAliveTime(TimeUnit.SECONDS) + " ➲ " + parameter.getKeepAliveTime(), - // 阻塞队列 - QueueTypeEnum.getBlockingQueueNameByType(parameter.getQueueType()), - // 阻塞队列容量 - (customPool.getQueue().size() + customPool.getQueue().remainingCapacity()) + " ➲ " + parameter.getCapacity(), - // 拒绝策略 - customPool.getRejectedExecutionHandler().getClass().getSimpleName(), - RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType()), - // 告警手机号 - afterReceives, - // 当前时间 - DateUtil.now() - ); - - execute(notifyConfig, DingAlarmConstants.DING_NOTICE_TITLE, text, receives); - } - - private void execute(NotifyDTO notifyConfig, String title, String text, List mobiles) { - String serverUrl = DingAlarmConstants.DING_ROBOT_SERVER_URL + notifyConfig.getSecretKey(); - DingTalkClient dingTalkClient = new DefaultDingTalkClient(serverUrl); - OapiRobotSendRequest request = new OapiRobotSendRequest(); - request.setMsgtype("markdown"); - - OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown(); - markdown.setTitle(title); - markdown.setText(text); - - OapiRobotSendRequest.At at = new OapiRobotSendRequest.At(); - at.setAtMobiles(mobiles); - - request.setAt(at); - request.setMarkdown(markdown); - - try { - dingTalkClient.execute(request); - } catch (ApiException ex) { - log.error("Ding failed to send message", ex); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkAlarmConstants.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkAlarmConstants.java deleted file mode 100644 index fc85c64d..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkAlarmConstants.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.hippo4j.starter.alarm.lark; - -/** - * lark alarm constants. - * - * @author imyzt - * @date 2021-11-23 19:29 - */ -public class LarkAlarmConstants { - - /** - * lark bot url - */ - public static final String LARK_BOT_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/"; - - /** - * lark 报警 json文件路径 - */ - public static final String ALARM_JSON_PATH = "classpath:properties/lark/alarm.json"; - - /** - * lark 配置变更通知 json文件路径 - */ - public static final String NOTICE_JSON_PATH = "classpath:properties/lark/notice.json"; - - /** - * lark at format. openid - * 当配置openid时,机器人可以@人 - */ - public static final String LARK_AT_FORMAT_OPENID = ""; - - /** - * lark at format. username - * 当配置username时,只能蓝色字体展示@username,被@人无@提醒 - */ - public static final String LARK_AT_FORMAT_USERNAME = "%s"; - - /** - * lark openid prefix - */ - public static final String LARK_OPENID_PREFIX = "ou_"; -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkSendMessageHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkSendMessageHandler.java deleted file mode 100644 index 9db286b1..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/lark/LarkSendMessageHandler.java +++ /dev/null @@ -1,188 +0,0 @@ -package cn.hippo4j.starter.alarm.lark; - -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.alarm.NotifyDTO; -import cn.hippo4j.starter.alarm.NotifyPlatformEnum; -import cn.hippo4j.starter.alarm.SendMessageHandler; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedTypeEnum; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.ResourceUtils; - -import java.io.FileNotFoundException; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static cn.hippo4j.starter.alarm.lark.LarkAlarmConstants.*; - -/** - * Send lark notification message. - * - * @author imyzt - * @date 2021/11/22 21:12 - */ -@Slf4j -@AllArgsConstructor -public class LarkSendMessageHandler implements SendMessageHandler { - - private final String active; - - private final InstanceInfo instanceInfo; - - @Override - public String getType() { - return NotifyPlatformEnum.LARK.name(); - } - - @Override - public void sendAlarmMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor pool) { - larkAlarmSendMessage(notifyConfig, pool); - } - - @Override - public void sendChangeMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter) { - larkChangeSendMessage(notifyConfig, parameter); - } - - @SneakyThrows - private void larkAlarmSendMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor pool) { - String afterReceives = getReceives(notifyConfig); - - BlockingQueue queue = pool.getQueue(); - - String larkAlarmJson = getLarkJson(ALARM_JSON_PATH); - - String text = String.format(larkAlarmJson, - // 环境 - active.toUpperCase(), - // 线程池ID - pool.getThreadPoolId(), - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 报警类型 - notifyConfig.getTypeEnum(), - // 核心线程数 - pool.getCorePoolSize(), - // 最大线程数 - pool.getMaximumPoolSize(), - // 当前线程数 - pool.getPoolSize(), - // 活跃线程数 - pool.getActiveCount(), - // 最大任务数 - pool.getLargestPoolSize(), - // 线程池任务总量 - pool.getCompletedTaskCount(), - // 队列类型名称 - queue.getClass().getSimpleName(), - // 队列容量 - queue.size() + queue.remainingCapacity(), - // 队列元素个数 - queue.size(), - // 队列剩余个数 - queue.remainingCapacity(), - // 拒绝策略名称 - pool.getRejectedExecutionHandler().getClass().getSimpleName(), - // 拒绝策略次数 - pool.getRejectCount(), - // 告警姓名 - afterReceives, - // 当前时间 - DateUtil.now(), - // 报警频率 - notifyConfig.getInterval() - ); - - execute(notifyConfig, text); - } - - @SneakyThrows - private void larkChangeSendMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter) { - String threadPoolId = parameter.getTpId(); - DynamicThreadPoolWrapper poolWrap = GlobalThreadPoolManage.getExecutorService(threadPoolId); - if (poolWrap == null) { - log.warn("Thread pool is empty when sending change notification, threadPoolId :: {}", threadPoolId); - return; - } - - String afterReceives = getReceives(notifyConfig); - - ThreadPoolExecutor customPool = poolWrap.getExecutor(); - - String larkNoticeJson = getLarkJson(NOTICE_JSON_PATH); - - /** - * hesitant e.g. ➲ ➜ ⇨ ➪ - */ - String text = String.format(larkNoticeJson, - // 环境 - active.toUpperCase(), - // 线程池名称 - threadPoolId, - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 核心线程数 - customPool.getCorePoolSize() + " ➲ " + parameter.getCoreSize(), - // 最大线程数 - customPool.getMaximumPoolSize() + " ➲ " + parameter.getMaxSize(), - // 线程存活时间 - customPool.getKeepAliveTime(TimeUnit.SECONDS) + " ➲ " + parameter.getKeepAliveTime(), - // 阻塞队列 - QueueTypeEnum.getBlockingQueueNameByType(parameter.getQueueType()), - // 阻塞队列容量 - (customPool.getQueue().size() + customPool.getQueue().remainingCapacity()) + " ➲ " + parameter.getCapacity(), - // 拒绝策略 - customPool.getRejectedExecutionHandler().getClass().getSimpleName(), - RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType()), - // 告警姓名 - afterReceives, - // 当前时间 - DateUtil.now() - ); - - execute(notifyConfig, text); - } - - private String getLarkJson(String filePath) throws FileNotFoundException { - return FileUtil.readString(ResourceUtils.getFile(filePath), StandardCharsets.UTF_8); - } - - private String getReceives(NotifyDTO notifyConfig) { - if (StrUtil.isBlank(notifyConfig.getReceives())) { - return ""; - } - return Arrays.stream(notifyConfig.getReceives().split(",")) - .map(receive -> StrUtil.startWith(receive, LARK_OPENID_PREFIX) ? - String.format(LARK_AT_FORMAT_OPENID, receive) : String.format(LARK_AT_FORMAT_USERNAME, receive)) - .collect(Collectors.joining(" ")); - } - - private void execute(NotifyDTO notifyConfig, String text) { - String serverUrl = LARK_BOT_URL + notifyConfig.getSecretKey(); - - try { - HttpRequest.post(serverUrl).body(text).execute(); - } catch (Exception ex) { - log.error("Lark failed to send message", ex); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatAlarmConstants.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatAlarmConstants.java deleted file mode 100644 index 3f4c6107..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatAlarmConstants.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.hippo4j.starter.alarm.wechat; - -/** - * Ding alarm constants. - * - * @author chen.ma - * @date 2021/11/26 20:03 - */ -public class WeChatAlarmConstants { - - /** - * 企微机器人 Url - */ - public static final String WE_CHAT_SERVER_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key="; - - /** - * 线程池报警通知文本 - */ - public static final String WE_CHAT_ALARM_TXT = - "### [警报] %s - 动态线程池运行告警 \n" + - "> 线程池ID:%s \n" + - "> 应用名称:%s \n" + - "> 应用实例:%s \n" + - "> 报警类型:%s \n" + - "> 核心线程数:%s \n" + - "> 最大线程数:%s \n" + - "> 当前线程数:%s \n" + - "> 活跃线程数:%s \n" + - "> 最大任务数:%s \n" + - "> 线程池任务总量:%s \n" + - "> 队列类型:%s \n" + - "> 队列容量:%s \n" + - "> 队列元素个数:%s \n" + - "> 队列剩余个数:%s \n" + - "> 拒绝策略:%s \n" + - "> 拒绝策略执行次数:%s \n" + - "> OWNER:@%s \n" + - "> 提示:%d 分钟内此线程池不会重复告警(可配置) \n\n" + - "**播报时间:%s**"; - - /** - * 线程池参数变更通知文本 - */ - public static final String WE_CHAT_NOTICE_TXT = - "### [通知] %s - 动态线程池参数变更 \n" + - "> 线程池ID:%s \n" + - "> 应用名称:%s \n" + - "> 应用实例:%s \n" + - "> 核心线程数:%s \n" + - "> 最大线程数:%s \n" + - "> 线程存活时间:%s / SECONDS \n" + - "> 队列类型:%s \n" + - "> 队列容量:%s \n" + - "> AGO 拒绝策略:%s \n" + - "> NOW 拒绝策略:%s \n" + - "> OWNER:**@%s** \n" + - "> 提示:动态线程池配置变更实时通知(无限制) \n\n" + - "**播报时间:%s**"; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatSendMessageHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatSendMessageHandler.java deleted file mode 100644 index 148e128c..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/alarm/wechat/WeChatSendMessageHandler.java +++ /dev/null @@ -1,190 +0,0 @@ -package cn.hippo4j.starter.alarm.wechat; - -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.alarm.NotifyDTO; -import cn.hippo4j.starter.alarm.NotifyPlatformEnum; -import cn.hippo4j.starter.alarm.SendMessageHandler; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedTypeEnum; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; -import com.alibaba.fastjson.JSON; -import com.google.common.base.Joiner; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.experimental.Accessors; -import lombok.extern.slf4j.Slf4j; - -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static cn.hippo4j.starter.alarm.wechat.WeChatAlarmConstants.*; - -/** - * WeChat send message handler. - * - * @author chen.ma - * @date 2021/11/26 20:06 - */ -@Slf4j -@AllArgsConstructor -public class WeChatSendMessageHandler implements SendMessageHandler { - - private final String active; - - private final InstanceInfo instanceInfo; - - @Override - public String getType() { - return NotifyPlatformEnum.WECHAT.name(); - } - - @Override - public void sendAlarmMessage(NotifyDTO notifyConfig, DynamicThreadPoolExecutor pool) { - List receives = StrUtil.split(notifyConfig.getReceives(), ','); - String afterReceives = Joiner.on(", @").join(receives); - - BlockingQueue queue = pool.getQueue(); - String text = String.format( - WE_CHAT_ALARM_TXT, - // 环境 - active.toUpperCase(), - // 线程池ID - pool.getThreadPoolId(), - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 报警类型 - notifyConfig.getTypeEnum(), - // 核心线程数 - pool.getCorePoolSize(), - // 最大线程数 - pool.getMaximumPoolSize(), - // 当前线程数 - pool.getPoolSize(), - // 活跃线程数 - pool.getActiveCount(), - // 最大任务数 - pool.getLargestPoolSize(), - // 线程池任务总量 - pool.getCompletedTaskCount(), - // 队列类型名称 - queue.getClass().getSimpleName(), - // 队列容量 - queue.size() + queue.remainingCapacity(), - // 队列元素个数 - queue.size(), - // 队列剩余个数 - queue.remainingCapacity(), - // 拒绝策略名称 - pool.getRejectedExecutionHandler().getClass().getSimpleName(), - // 拒绝策略次数 - pool.getRejectCount(), - // 告警手机号 - afterReceives, - // 报警频率 - notifyConfig.getInterval(), - // 当前时间 - DateUtil.now() - ); - - execute(notifyConfig, text); - } - - @Override - public void sendChangeMessage(NotifyDTO notifyConfig, PoolParameterInfo parameter) { - String threadPoolId = parameter.getTpId(); - DynamicThreadPoolWrapper poolWrap = GlobalThreadPoolManage.getExecutorService(threadPoolId); - if (poolWrap == null) { - log.warn("Thread pool is empty when sending change notification, threadPoolId :: {}", threadPoolId); - return; - } - - List receives = StrUtil.split(notifyConfig.getReceives(), ','); - String afterReceives = Joiner.on(", @").join(receives); - - ThreadPoolExecutor customPool = poolWrap.getExecutor(); - String text = String.format( - WE_CHAT_NOTICE_TXT, - // 环境 - active.toUpperCase(), - // 线程池名称 - threadPoolId, - // 应用名称 - instanceInfo.getAppName(), - // 实例信息 - instanceInfo.getIdentify(), - // 核心线程数 - customPool.getCorePoolSize() + " ➲ " + parameter.getCoreSize(), - // 最大线程数 - customPool.getMaximumPoolSize() + " ➲ " + parameter.getMaxSize(), - // 线程存活时间 - customPool.getKeepAliveTime(TimeUnit.SECONDS) + " ➲ " + parameter.getKeepAliveTime(), - // 阻塞队列 - QueueTypeEnum.getBlockingQueueNameByType(parameter.getQueueType()), - // 阻塞队列容量 - (customPool.getQueue().size() + customPool.getQueue().remainingCapacity()) + " ➲ " + parameter.getCapacity(), - // 拒绝策略 - customPool.getRejectedExecutionHandler().getClass().getSimpleName(), - RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType()), - // 告警手机号 - afterReceives, - // 当前时间 - DateUtil.now() - ); - - execute(notifyConfig, text); - } - - private void execute(NotifyDTO notifyConfig, String text) { - String serverUrl = WE_CHAT_SERVER_URL + notifyConfig.getSecretKey(); - - try { - WeChatReqDTO weChatReq = new WeChatReqDTO(); - weChatReq.setMsgtype("markdown"); - - Markdown markdown = new Markdown(); - markdown.setContent(text); - weChatReq.setMarkdown(markdown); - - HttpRequest.post(serverUrl).body(JSON.toJSONString(weChatReq)).execute(); - } catch (Exception ex) { - log.error("WeChat failed to send message", ex); - } - } - - @Data - @Accessors(chain = true) - public static class WeChatReqDTO { - - /** - * msgType - */ - private String msgtype; - - /** - * markdown - */ - private Markdown markdown; - - } - - @Data - public static class Markdown { - - /** - * content - */ - private String content; - - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/common/CommonDynamicThreadPool.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/common/CommonDynamicThreadPool.java deleted file mode 100644 index 18b2eb43..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/common/CommonDynamicThreadPool.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hippo4j.starter.common; - -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedPolicies; -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; - -import java.util.concurrent.TimeUnit; - -/** - * Common dynamic threadPool. - * - * @author chen.ma - * @date 2021/6/16 22:35 - */ -public class CommonDynamicThreadPool { - - public static DynamicThreadPoolExecutor getInstance(String threadPoolId) { - DynamicThreadPoolExecutor poolExecutor = (DynamicThreadPoolExecutor) ThreadPoolBuilder.builder() - .dynamicPool() - .threadFactory(threadPoolId) - .poolThreadSize(3, 5) - .keepAliveTime(1000L, TimeUnit.SECONDS) - .rejected(RejectedPolicies.runsOldestTaskPolicy()) - .alarmConfig(1, 80, 80) - .workQueue(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, 512) - .build(); - return poolExecutor; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java deleted file mode 100644 index 280f7d00..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/BootstrapProperties.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.hippo4j.starter.config; - -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * Bootstrap properties. - * - * @author chen.ma - * @date 2021/6/22 09:14 - */ -@Slf4j -@Getter -@Setter -@ConfigurationProperties(prefix = BootstrapProperties.PREFIX) -public class BootstrapProperties { - - public static final String PREFIX = "spring.dynamic.thread-pool"; - - /** - * serverAddr - */ - private String serverAddr; - - /** - * namespace - */ - private String namespace; - - /** - * itemId - */ - private String itemId; - - /** - * Enable banner - */ - private boolean banner = true; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/CorsConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/CorsConfig.java deleted file mode 100644 index 2102da2e..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/CorsConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hippo4j.starter.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -/** - * Cors config. - * - * @author chen.ma - * @date 2021/11/12 21:46 - */ -public class CorsConfig { - - private CorsConfiguration buildConfig() { - CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.addAllowedOrigin("*"); - corsConfiguration.addAllowedHeader("*"); - corsConfiguration.addAllowedMethod("GET"); - return corsConfiguration; - } - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", buildConfig()); - return new CorsFilter(source); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java deleted file mode 100644 index 8bc92a08..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DiscoveryConfig.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.hippo4j.starter.config; - -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.common.toolkit.ContentUtil; -import cn.hippo4j.starter.core.DiscoveryClient; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hippo4j.starter.toolkit.inet.InetUtils; -import cn.hutool.core.util.StrUtil; -import lombok.AllArgsConstructor; -import lombok.SneakyThrows; -import org.springframework.context.annotation.Bean; -import org.springframework.core.env.ConfigurableEnvironment; - -import java.net.InetAddress; - -import static cn.hippo4j.starter.toolkit.CloudCommonIdUtil.getDefaultInstanceId; -import static cn.hippo4j.starter.toolkit.CloudCommonIdUtil.getIpApplicationName; - -/** - * Dynamic threadPool discovery config. - * - * @author chen.ma - * @date 2021/8/6 21:35 - */ -@AllArgsConstructor -public class DiscoveryConfig { - - private final ConfigurableEnvironment environment; - - private final BootstrapProperties properties; - - private final InetUtils inetUtils; - - @Bean - @SneakyThrows - public InstanceInfo instanceConfig() { - String namespace = properties.getNamespace(); - String itemId = properties.getItemId(); - String applicationName = environment.getProperty("spring.application.name"); - - InstanceInfo instanceInfo = new InstanceInfo(); - instanceInfo.setInstanceId(getDefaultInstanceId(environment, inetUtils)) - .setIpApplicationName(getIpApplicationName(environment, inetUtils)) - .setHostName(InetAddress.getLocalHost().getHostAddress()) - .setGroupKey(itemId + "+" + namespace) - .setAppName(applicationName) - .setClientBasePath(environment.getProperty("server.servlet.context-path")) - .setGroupKey(ContentUtil.getGroupKey(itemId, namespace)); - - String callBackUrl = new StringBuilder().append(instanceInfo.getHostName()).append(":") - .append(environment.getProperty("server.port")).append(instanceInfo.getClientBasePath()) - .toString(); - instanceInfo.setCallBackUrl(callBackUrl); - - String ip = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); - String port = environment.getProperty("server.port"); - String identification = StrUtil.builder(ip, ":", port).toString(); - instanceInfo.setIdentify(identification); - - - return instanceInfo; - } - - @Bean - public DiscoveryClient discoveryClient(HttpAgent httpAgent, InstanceInfo instanceInfo) { - return new DiscoveryClient(httpAgent, instanceInfo); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DynamicThreadPoolAutoConfiguration.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DynamicThreadPoolAutoConfiguration.java deleted file mode 100644 index e5824046..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/DynamicThreadPoolAutoConfiguration.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.hippo4j.starter.config; - -import cn.hutool.core.util.StrUtil; -import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.starter.controller.PoolRunStateController; -import cn.hippo4j.starter.core.ConfigService; -import cn.hippo4j.starter.core.DynamicThreadPoolPostProcessor; -import cn.hippo4j.starter.core.ThreadPoolConfigService; -import cn.hippo4j.starter.core.ThreadPoolOperation; -import cn.hippo4j.starter.enable.MarkerConfiguration; -import cn.hippo4j.starter.handler.DynamicThreadPoolBannerHandler; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hippo4j.starter.toolkit.inet.InetUtils; -import lombok.AllArgsConstructor; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.core.env.ConfigurableEnvironment; - -/** - * DynamicTp auto configuration. - * - * @author chen.ma - * @date 2021/6/22 09:20 - */ -@Configuration -@AllArgsConstructor -@ConditionalOnBean(MarkerConfiguration.Marker.class) -@EnableConfigurationProperties(BootstrapProperties.class) -@ImportAutoConfiguration({HttpClientConfig.class, DiscoveryConfig.class, MessageAlarmConfig.class, UtilAutoConfiguration.class, CorsConfig.class}) -public class DynamicThreadPoolAutoConfiguration { - - private final BootstrapProperties properties; - - private final ConfigurableEnvironment environment; - - @Bean - public DynamicThreadPoolBannerHandler threadPoolBannerHandler() { - return new DynamicThreadPoolBannerHandler(properties); - } - - @Bean - @Order(Ordered.HIGHEST_PRECEDENCE) - public ApplicationContextHolder hippo4JApplicationContextHolder() { - return new ApplicationContextHolder(); - } - - @Bean - @SuppressWarnings("all") - public ConfigService configService(HttpAgent httpAgent, InetUtils hippo4JInetUtils) { - String ip = hippo4JInetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); - String port = environment.getProperty("server.port"); - String identification = StrUtil.builder(ip, ":", port).toString(); - return new ThreadPoolConfigService(httpAgent, identification); - } - - @Bean - public ThreadPoolOperation threadPoolOperation(ConfigService configService) { - return new ThreadPoolOperation(properties, configService); - } - - @Bean - @SuppressWarnings("all") - public DynamicThreadPoolPostProcessor threadPoolBeanPostProcessor(HttpAgent httpAgent, ThreadPoolOperation threadPoolOperation, - ApplicationContextHolder hippo4JApplicationContextHolder) { - return new DynamicThreadPoolPostProcessor(properties, httpAgent, threadPoolOperation); - } - - @Bean - public PoolRunStateController poolRunStateController() { - return new PoolRunStateController(); - } - -} - - diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java deleted file mode 100644 index afd4828b..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/MessageAlarmConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.hippo4j.starter.config; - -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.starter.alarm.AlarmControlHandler; -import cn.hippo4j.starter.alarm.BaseSendMessageService; -import cn.hippo4j.starter.alarm.SendMessageHandler; -import cn.hippo4j.starter.alarm.SendMessageService; -import cn.hippo4j.starter.alarm.ding.DingSendMessageHandler; -import cn.hippo4j.starter.alarm.lark.LarkSendMessageHandler; -import cn.hippo4j.starter.alarm.wechat.WeChatSendMessageHandler; -import cn.hippo4j.starter.remote.HttpAgent; -import lombok.AllArgsConstructor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.DependsOn; -import org.springframework.core.env.ConfigurableEnvironment; - -/** - * Message alarm config. - * - * @author chen.ma - * @date 2021/8/15 15:39 - */ -@AllArgsConstructor -public class MessageAlarmConfig { - - private final BootstrapProperties properties; - - private final InstanceInfo instanceInfo; - - private ConfigurableEnvironment environment; - - public static final String ACTIVE_DEFAULT = "unknown"; - - public static final String SEND_MESSAGE_BEAN_NAME = "hippo4JSendMessageService"; - - @DependsOn("hippo4JApplicationContextHolder") - @Bean(MessageAlarmConfig.SEND_MESSAGE_BEAN_NAME) - public SendMessageService hippo4JSendMessageService(HttpAgent httpAgent, AlarmControlHandler alarmControlHandler) { - return new BaseSendMessageService(httpAgent, properties, alarmControlHandler); - } - - @Bean - public SendMessageHandler dingSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); - return new DingSendMessageHandler(active, instanceInfo); - } - - @Bean - public SendMessageHandler larkSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); - return new LarkSendMessageHandler(active, instanceInfo); - } - - @Bean - public SendMessageHandler weChatSendMessageHandler() { - String active = environment.getProperty("spring.profiles.active", ACTIVE_DEFAULT); - return new WeChatSendMessageHandler(active, instanceInfo); - } - - @Bean - public AlarmControlHandler alarmControlHandler() { - return new AlarmControlHandler(); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/UtilAutoConfiguration.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/UtilAutoConfiguration.java deleted file mode 100644 index 7018c4af..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/UtilAutoConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.hippo4j.starter.config; - -import cn.hippo4j.starter.toolkit.inet.InetUtils; -import cn.hippo4j.starter.toolkit.inet.InetUtilsProperties; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; - -/** - * Util auto configuration. - * - * @author Spencer Gibb - * @date 2021/11/12 21:34 - */ -@EnableConfigurationProperties(InetUtilsProperties.class) -public class UtilAutoConfiguration { - - @Bean - @ConditionalOnMissingBean - public InetUtils hippo4JInetUtils(InetUtilsProperties properties) { - return new InetUtils(properties); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/controller/PoolRunStateController.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/controller/PoolRunStateController.java deleted file mode 100644 index 4a13f4b1..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/controller/PoolRunStateController.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.hippo4j.starter.controller; - -import cn.hippo4j.starter.handler.ThreadPoolRunStateHandler; -import cn.hippo4j.common.model.PoolRunStateInfo; -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.common.web.base.Results; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - -/** - * Pool run state controller. - * - * @author chen.ma - * @date 2021/7/7 21:34 - */ -@RestController -public class PoolRunStateController { - - @GetMapping("/run/state/{tpId}") - public Result getPoolRunState(@PathVariable("tpId") String tpId) { - PoolRunStateInfo poolRunState = ThreadPoolRunStateHandler.getPoolRunState(tpId); - return Results.success(poolRunState); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/CacheData.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/CacheData.java deleted file mode 100644 index 5e37e81f..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/CacheData.java +++ /dev/null @@ -1,105 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.starter.wrapper.ManagerListenerWrapper; -import cn.hippo4j.common.toolkit.ContentUtil; -import cn.hippo4j.common.toolkit.Md5Util; -import cn.hippo4j.common.constant.Constants; -import lombok.extern.slf4j.Slf4j; - -import java.util.concurrent.CopyOnWriteArrayList; - -/** - * Cache data. - * - * @author chen.ma - * @date 2021/6/22 20:46 - */ -@Slf4j -public class CacheData { - - public volatile String md5; - - public volatile String content; - - public final String tenantId; - - public final String itemId; - - public final String tpId; - - private int taskId; - - private volatile boolean isInitializing = true; - - private volatile long localConfigLastModified; - - private final CopyOnWriteArrayList listeners; - - public CacheData(String tenantId, String itemId, String tpId) { - this.tenantId = tenantId; - this.itemId = itemId; - this.tpId = tpId; - this.content = ContentUtil.getPoolContent(GlobalThreadPoolManage.getPoolParameter(tpId)); - this.md5 = getMd5String(content); - this.listeners = new CopyOnWriteArrayList(); - - } - - public void addListener(Listener listener) { - if (null == listener) { - throw new IllegalArgumentException("listener is null"); - } - - ManagerListenerWrapper managerListenerWrap = new ManagerListenerWrapper(md5, listener); - - if (listeners.addIfAbsent(managerListenerWrap)) { - log.info("Add listener status :: ok, tpId :: {}, cnt :: {}", tpId, listeners.size()); - } - } - - public void checkListenerMd5() { - for (ManagerListenerWrapper wrap : listeners) { - if (!md5.equals(wrap.getLastCallMd5())) { - safeNotifyListener(content, md5, wrap); - } - } - } - - private void safeNotifyListener(String content, String md5, ManagerListenerWrapper wrap) { - Listener listener = wrap.getListener(); - - Runnable runnable = () -> { - wrap.setLastCallMd5(md5); - - listener.receiveConfigInfo(content); - }; - - listener.getExecutor().execute(runnable); - } - - public void setContent(String content) { - this.content = content; - this.md5 = getMd5String(this.content); - } - - public static String getMd5String(String config) { - return (null == config) ? Constants.NULL : Md5Util.md5Hex(config, Constants.ENCODE); - } - - public String getMd5() { - return this.md5; - } - - public void setTaskId(Integer taskId) { - this.taskId = taskId; - } - - public boolean isInitializing() { - return isInitializing; - } - - public void setInitializing(boolean isInitializing) { - this.isInitializing = isInitializing; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigAdapter.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigAdapter.java deleted file mode 100644 index 99d4adad..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.hippo4j.starter.core; - -/** - * Config adapter. - * - * @author chen.ma - * @date 2021/6/22 21:29 - */ -public class ConfigAdapter { - - /** - * Callback Config. - * - * @param config - */ - public void callbackConfig(String config) { - ThreadPoolDynamicRefresh.refreshDynamicPool(config); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java deleted file mode 100644 index 9349b267..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyAnalyzer.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hippo4j.starter.core; - -import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; -import org.springframework.boot.diagnostics.FailureAnalysis; - -/** - * Config empty analyzer. - * - * @author chen.ma - * @date 2021/11/28 21:59 - */ -public class ConfigEmptyAnalyzer extends AbstractFailureAnalyzer { - - @Override - protected FailureAnalysis analyze(Throwable rootFailure, ConfigEmptyException cause) { - return new FailureAnalysis(cause.getDescription(), cause.getAction(), cause); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java deleted file mode 100644 index 21110a10..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigEmptyException.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.hippo4j.starter.core; - -import lombok.AllArgsConstructor; -import lombok.Data; - -/** - * Config empty exception. - * - * @author chen.ma - * @date 2021/11/28 21:58 - */ -@Data -@AllArgsConstructor -public class ConfigEmptyException extends RuntimeException { - - private String description; - - private String action; - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigService.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigService.java deleted file mode 100644 index b1bc1d07..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ConfigService.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.hippo4j.starter.core; - -/** - * Config service. - * - * @author chen.ma - * @date 2021/6/21 21:49 - */ -public interface ConfigService { - - /** - * Add listener. - * - * @param tenantId - * @param itemId - * @param tpId - * @param listener - */ - void addListener(String tenantId, String itemId, String tpId, Listener listener); - - /** - * Get server status. - * - * @return - */ - String getServerStatus(); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DiscoveryClient.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DiscoveryClient.java deleted file mode 100644 index c62b256c..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DiscoveryClient.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.common.constant.Constants; -import cn.hippo4j.common.model.InstanceInfo; -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.common.web.base.Results; -import cn.hippo4j.common.web.exception.ErrorCodeEnum; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hippo4j.starter.toolkit.thread.ThreadFactoryBuilder; -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; -import cn.hutool.core.text.StrBuilder; -import cn.hutool.core.util.StrUtil; -import com.google.common.collect.Maps; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.DisposableBean; - -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.*; - -import static cn.hippo4j.common.constant.Constants.GROUP_KEY; - -/** - * Discovery client. - * - * @author chen.ma - * @date 2021/7/13 21:51 - */ -@Slf4j -public class DiscoveryClient implements DisposableBean { - - private final ThreadPoolExecutor heartbeatExecutor; - - private final ScheduledExecutorService scheduler; - - private final HttpAgent httpAgent; - - private final InstanceInfo instanceInfo; - - private volatile long lastSuccessfulHeartbeatTimestamp = -1; - - private static final String PREFIX = "DiscoveryClient_"; - - private final String appPathIdentifier; - - public DiscoveryClient(HttpAgent httpAgent, InstanceInfo instanceInfo) { - this.httpAgent = httpAgent; - this.instanceInfo = instanceInfo; - this.appPathIdentifier = instanceInfo.getAppName().toUpperCase() + "/" + instanceInfo.getInstanceId(); - this.heartbeatExecutor = ThreadPoolBuilder.builder() - .poolThreadSize(1, 5) - .keepAliveTime(0, TimeUnit.SECONDS) - .workQueue(new SynchronousQueue()) - .threadFactory("DiscoveryClient-HeartbeatExecutor", true) - .build(); - - this.scheduler = Executors.newScheduledThreadPool(2, - ThreadFactoryBuilder.builder() - .daemon(true) - .prefix("DiscoveryClient-Scheduler") - .build() - ); - - register(); - - // init the schedule tasks - initScheduledTasks(); - } - - private void initScheduledTasks() { - scheduler.scheduleWithFixedDelay(new HeartbeatThread(), 30, 30, TimeUnit.SECONDS); - } - - boolean register() { - log.info("{}{} - registering service...", PREFIX, appPathIdentifier); - - String urlPath = Constants.BASE_PATH + "/apps/register/"; - Result registerResult; - try { - registerResult = httpAgent.httpPostByDiscovery(urlPath, instanceInfo); - } catch (Exception ex) { - registerResult = Results.failure(ErrorCodeEnum.SERVICE_ERROR); - log.error("{}{} - registration failed :: {}", PREFIX, appPathIdentifier, ex.getMessage(), ex); - } - - if (log.isInfoEnabled()) { - log.info("{}{} - registration status :: {}", PREFIX, appPathIdentifier, registerResult.isSuccess() ? "success" : "fail"); - } - - return registerResult.isSuccess(); - } - - @Override - public void destroy() throws Exception { - log.info("{}{} - destroy service...", PREFIX, appPathIdentifier); - String removeConfigCacheUrlPath = Constants.CONFIG_CONTROLLER_PATH + "/remove/config/cache"; - Result removeConfigCacheResult; - try { - String groupKeyIp = StrBuilder.create().append(instanceInfo.getGroupKey()).append(Constants.GROUP_KEY_DELIMITER).append(instanceInfo.getIdentify()).toString(); - Map bodyMap = Maps.newHashMap(); - bodyMap.put(GROUP_KEY, groupKeyIp); - removeConfigCacheResult = httpAgent.httpPostByDiscovery(removeConfigCacheUrlPath, bodyMap); - if (removeConfigCacheResult.isSuccess()) { - log.info("{}{} - remove config cache success.", PREFIX, appPathIdentifier); - } - } catch (Throwable ex) { - log.error("{}{} - remove config cache fail.", PREFIX, appPathIdentifier, ex); - } - - String removeNodeUrlPath = Constants.BASE_PATH + "/apps/remove/"; - Result removeNodeResult; - try { - removeNodeResult = httpAgent.httpPostByDiscovery(removeNodeUrlPath, instanceInfo); - if (removeNodeResult.isSuccess()) { - log.info("{}{} - destroy service success.", PREFIX, appPathIdentifier); - } - } catch (Throwable ex) { - log.error("{}{} - destroy service fail.", PREFIX, appPathIdentifier, ex); - } - - Optional.ofNullable(scheduler).ifPresent((each) -> each.shutdown()); - } - - public class HeartbeatThread implements Runnable { - - @Override - public void run() { - if (renew()) { - lastSuccessfulHeartbeatTimestamp = System.currentTimeMillis(); - } - } - } - - boolean renew() { - Result renewResult; - try { - InstanceInfo.InstanceRenew instanceRenew = new InstanceInfo.InstanceRenew() - .setAppName(instanceInfo.getAppName()) - .setInstanceId(instanceInfo.getInstanceId()) - .setLastDirtyTimestamp(instanceInfo.getLastDirtyTimestamp().toString()) - .setStatus(instanceInfo.getStatus().toString()); - - renewResult = httpAgent.httpPostByDiscovery(Constants.BASE_PATH + "/apps/renew", instanceRenew); - if (StrUtil.equals(ErrorCodeEnum.NOT_FOUND.getCode(), renewResult.getCode())) { - long timestamp = instanceInfo.setIsDirtyWithTime(); - boolean success = register(); - if (success) { - instanceInfo.unsetIsDirty(timestamp); - } - return success; - } - - return renewResult.isSuccess(); - } catch (Exception ex) { - log.error(PREFIX + "{} - was unable to send heartbeat!", appPathIdentifier, ex); - return false; - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPool.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPool.java deleted file mode 100644 index 7c17d8c2..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPool.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.hippo4j.starter.core; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Dynamic thread pool. - * - * @author chen.ma - * @date 2021/10/13 21:50 - */ -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface DynamicThreadPool { - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolExecutor.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolExecutor.java deleted file mode 100644 index 3d5a33c7..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolExecutor.java +++ /dev/null @@ -1,979 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.starter.alarm.ThreadPoolAlarm; -import cn.hippo4j.starter.alarm.ThreadPoolAlarmManage; -import cn.hippo4j.starter.event.EventExecutor; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import org.springframework.core.task.TaskDecorator; - -import java.security.AccessControlContext; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.AbstractQueuedSynchronizer; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.ReentrantLock; - -import static cn.hippo4j.common.constant.Constants.MAP_INITIAL_CAPACITY; - -/** - * Dynamic threadPool wrap. - * - * @author chen.ma - * @date 2021/7/8 21:47 - */ -public class DynamicThreadPoolExecutor extends DynamicExecutorConfigurationSupport { - - private final AtomicInteger rejectCount = new AtomicInteger(); - private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); - - private static final int COUNT_BITS = Integer.SIZE - 3; - private static final int CAPACITY = (1 << COUNT_BITS) - 1; - - private static final int RUNNING = -1 << COUNT_BITS; - private static final int SHUTDOWN = 0 << COUNT_BITS; - private static final int STOP = 1 << COUNT_BITS; - private static final int TIDYING = 2 << COUNT_BITS; - private static final int TERMINATED = 3 << COUNT_BITS; - - private TaskDecorator taskDecorator; - private final BlockingQueue workQueue; - private final ReentrantLock mainLock = new ReentrantLock(); - private final HashSet workers = new HashSet(); - private final Condition termination = mainLock.newCondition(); - - private int largestPoolSize; - private long completedTaskCount; - private volatile long keepAliveTime; - private volatile boolean allowCoreThreadTimeOut; - private volatile int corePoolSize; - private volatile int maximumPoolSize; - private String threadPoolId; - - private final AccessControlContext acc; - private volatile ThreadPoolAlarm threadPoolAlarm; - private volatile ThreadFactory threadFactory; - private volatile RejectedExecutionHandler handler; - - private static final RejectedExecutionHandler DEFAULT_HANDLER = new ThreadPoolExecutor.AbortPolicy(); - private static final RuntimePermission SHUTDOWN_PERM = new RuntimePermission("modifyThread"); - - public DynamicThreadPoolExecutor(int corePoolSize, - int maximumPoolSize, - long keepAliveTime, - TimeUnit unit, - boolean waitForTasksToCompleteOnShutdown, - long awaitTerminationMillis, - @NonNull BlockingQueue workQueue, - @NonNull String threadPoolId, - @NonNull ThreadFactory threadFactory, - @NonNull ThreadPoolAlarm threadPoolAlarm, - @NonNull RejectedExecutionHandler handler) { - super(corePoolSize, maximumPoolSize, keepAliveTime, unit, waitForTasksToCompleteOnShutdown, awaitTerminationMillis, workQueue, threadPoolId, threadFactory, handler); - - if (corePoolSize < 0 || - maximumPoolSize <= 0 || - maximumPoolSize < corePoolSize || - keepAliveTime < 0) { - throw new IllegalArgumentException(); - } - - this.corePoolSize = corePoolSize; - this.maximumPoolSize = maximumPoolSize; - this.workQueue = workQueue; - this.threadPoolId = threadPoolId; - this.keepAliveTime = unit.toNanos(keepAliveTime); - this.threadFactory = threadFactory; - this.handler = handler; - this.threadPoolAlarm = threadPoolAlarm; - this.acc = System.getSecurityManager() == null ? null : AccessController.getContext(); - } - - private static int runStateOf(int c) { - return c & ~CAPACITY; - } - - private static int workerCountOf(int c) { - return c & CAPACITY; - } - - private static int ctlOf(int rs, int wc) { - return rs | wc; - } - - private static boolean runStateLessThan(int c, int s) { - return c < s; - } - - private static boolean runStateAtLeast(int c, int s) { - return c >= s; - } - - private static boolean isRunning(int c) { - return c < SHUTDOWN; - } - - private boolean compareAndIncrementWorkerCount(int expect) { - return ctl.compareAndSet(expect, expect + 1); - } - - private boolean compareAndDecrementWorkerCount(int expect) { - return ctl.compareAndSet(expect, expect - 1); - } - - private void decrementWorkerCount() { - do { - } while (!compareAndDecrementWorkerCount(ctl.get())); - } - - public Integer getRejectCount() { - return rejectCount.get(); - } - - public ThreadPoolAlarm getThreadPoolAlarm() { - return this.threadPoolAlarm; - } - - public void setThreadPoolAlarm(ThreadPoolAlarm threadPoolAlarm) { - this.threadPoolAlarm = threadPoolAlarm; - } - - public String getThreadPoolId() { - return this.threadPoolId; - } - - private final class Worker extends AbstractQueuedSynchronizer implements Runnable { - - private static final long serialVersionUID = 6138294804551838833L; - - final Thread thread; - Runnable firstTask; - volatile long completedTasks; - - Worker(Runnable firstTask) { - setState(-1); - this.firstTask = firstTask; - this.thread = getThreadFactory().newThread(this); - } - - @Override - public void run() { - runWorker(this); - } - - @Override - protected boolean isHeldExclusively() { - return getState() != 0; - } - - @Override - protected boolean tryAcquire(int unused) { - if (compareAndSetState(0, 1)) { - setExclusiveOwnerThread(Thread.currentThread()); - return true; - } - return false; - } - - @Override - protected boolean tryRelease(int unused) { - setExclusiveOwnerThread(null); - setState(0); - return true; - } - - public void lock() { - acquire(1); - } - - public boolean tryLock() { - return tryAcquire(1); - } - - public void unlock() { - release(1); - } - - public boolean isLocked() { - return isHeldExclusively(); - } - - void interruptIfStarted() { - Thread t; - if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) { - try { - t.interrupt(); - } catch (SecurityException ignore) { - } - } - } - } - - private void advanceRunState(int targetState) { - for (; ; ) { - int c = ctl.get(); - if (runStateAtLeast(c, targetState) || - ctl.compareAndSet(c, ctlOf(targetState, workerCountOf(c)))) { - break; - } - } - } - - final void tryTerminate() { - for (; ; ) { - int c = ctl.get(); - if (isRunning(c) - || runStateAtLeast(c, TIDYING) - || (runStateOf(c) == SHUTDOWN && !workQueue.isEmpty())) { - return; - } - if (workerCountOf(c) != 0) { - interruptIdleWorkers(ONLY_ONE); - return; - } - - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - if (ctl.compareAndSet(c, ctlOf(TIDYING, 0))) { - try { - terminated(); - } finally { - ctl.set(ctlOf(TERMINATED, 0)); - termination.signalAll(); - } - return; - } - } finally { - mainLock.unlock(); - } - } - } - - private void checkShutdownAccess() { - SecurityManager security = System.getSecurityManager(); - if (security != null) { - security.checkPermission(SHUTDOWN_PERM); - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - for (Worker w : workers) { - security.checkAccess(w.thread); - } - } finally { - mainLock.unlock(); - } - } - } - - private void interruptWorkers() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - for (Worker w : workers) { - w.interruptIfStarted(); - } - } finally { - mainLock.unlock(); - } - } - - private void interruptIdleWorkers(boolean onlyOne) { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - for (Worker w : workers) { - Thread t = w.thread; - if (!t.isInterrupted() && w.tryLock()) { - try { - t.interrupt(); - } catch (SecurityException ignore) { - } finally { - w.unlock(); - } - } - if (onlyOne) { - break; - } - } - } finally { - mainLock.unlock(); - } - } - - private void interruptIdleWorkers() { - interruptIdleWorkers(false); - } - - private static final boolean ONLY_ONE = true; - - final void reject(Runnable command) { - rejectCount.incrementAndGet(); - EventExecutor.publishEvent( - () -> ThreadPoolAlarmManage.checkPoolRejectAlarm(this) - ); - handler.rejectedExecution(command, this); - } - - void onShutdown() { - } - - final boolean isRunningOrShutdown(boolean shutdownOk) { - int rs = runStateOf(ctl.get()); - return rs == RUNNING || (rs == SHUTDOWN && shutdownOk); - } - - private List drainQueue() { - BlockingQueue q = workQueue; - ArrayList taskList = new ArrayList(); - q.drainTo(taskList); - if (!q.isEmpty()) { - for (Runnable r : q.toArray(new Runnable[0])) { - if (q.remove(r)) { - taskList.add(r); - } - } - } - return taskList; - } - - private boolean addWorker(Runnable firstTask, boolean core) { - retry: - for (; ; ) { - int c = ctl.get(); - int rs = runStateOf(c); - - // Check if queue empty only if necessary. - if (rs >= SHUTDOWN && !(rs == SHUTDOWN && firstTask == null && !workQueue.isEmpty())) { - return false; - } - - for (; ; ) { - int wc = workerCountOf(c); - if (wc >= CAPACITY || - wc >= (core ? corePoolSize : maximumPoolSize)) { - return false; - } - if (compareAndIncrementWorkerCount(c)) { - break retry; - } - c = ctl.get(); - if (runStateOf(c) != rs) { - continue retry; - } - } - } - - EventExecutor.publishEvent( - () -> ThreadPoolAlarmManage.checkPoolLivenessAlarm(core, this) - ); - - boolean workerStarted = false; - boolean workerAdded = false; - Worker w = null; - try { - w = new Worker(firstTask); - final Thread t = w.thread; - if (t != null) { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - int rs = runStateOf(ctl.get()); - - if (rs < SHUTDOWN || (rs == SHUTDOWN && firstTask == null)) { - if (t.isAlive()) { - throw new IllegalThreadStateException(); - } - workers.add(w); - int s = workers.size(); - if (s > largestPoolSize) { - largestPoolSize = s; - } - workerAdded = true; - } - } finally { - mainLock.unlock(); - } - if (workerAdded) { - t.start(); - workerStarted = true; - } - } - } finally { - if (!workerStarted) { - addWorkerFailed(w); - } - } - return workerStarted; - } - - private void addWorkerFailed(Worker w) { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - if (w != null) { - workers.remove(w); - } - decrementWorkerCount(); - tryTerminate(); - } finally { - mainLock.unlock(); - } - } - - private void processWorkerExit(Worker w, boolean completedAbruptly) { - if (completedAbruptly) { - decrementWorkerCount(); - } - - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - completedTaskCount += w.completedTasks; - workers.remove(w); - } finally { - mainLock.unlock(); - } - - tryTerminate(); - - int c = ctl.get(); - if (runStateLessThan(c, STOP)) { - if (!completedAbruptly) { - int min = allowCoreThreadTimeOut ? 0 : corePoolSize; - if (min == 0 && !workQueue.isEmpty()) { - min = 1; - } - if (workerCountOf(c) >= min) { - return; - } - } - addWorker(null, false); - } - } - - private Runnable getTask() { - boolean timedOut = false; - - for (; ; ) { - int c = ctl.get(); - int rs = runStateOf(c); - - if (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) { - decrementWorkerCount(); - return null; - } - - int wc = workerCountOf(c); - - boolean timed = allowCoreThreadTimeOut || wc > corePoolSize; - - if ((wc > maximumPoolSize || (timed && timedOut)) && (wc > 1 || workQueue.isEmpty())) { - if (compareAndDecrementWorkerCount(c)) { - return null; - } - continue; - } - - try { - Runnable r = timed ? - workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) : - workQueue.take(); - if (r != null) { - return r; - } - timedOut = true; - } catch (InterruptedException retry) { - timedOut = false; - } - } - } - - final void runWorker(Worker w) { - Thread wt = Thread.currentThread(); - Runnable task = w.firstTask; - w.firstTask = null; - w.unlock(); - boolean completedAbruptly = true; - try { - while (task != null || (task = getTask()) != null) { - w.lock(); - if ((runStateAtLeast(ctl.get(), STOP) - || (Thread.interrupted() && runStateAtLeast(ctl.get(), STOP))) - && !wt.isInterrupted()) { - wt.interrupt(); - } - try { - beforeExecute(wt, task); - Throwable thrown = null; - try { - task.run(); - } catch (RuntimeException x) { - thrown = x; - throw x; - } catch (Error x) { - thrown = x; - throw x; - } catch (Throwable x) { - thrown = x; - throw new Error(x); - } finally { - afterExecute(task, thrown); - } - } finally { - task = null; - w.completedTasks++; - w.unlock(); - } - } - completedAbruptly = false; - } finally { - processWorkerExit(w, completedAbruptly); - } - } - - @Override - public void execute(@NonNull Runnable command) { - if (taskDecorator != null) { - command = taskDecorator.decorate(command); - } - int c = ctl.get(); - if (workerCountOf(c) < corePoolSize) { - if (addWorker(command, true)) { - return; - } - c = ctl.get(); - } - if (isRunning(c) && workQueue.offer(command)) { - EventExecutor.publishEvent( - () -> ThreadPoolAlarmManage.checkPoolCapacityAlarm(this) - ); - int recheck = ctl.get(); - if (!isRunning(recheck) && remove(command)) { - reject(command); - } else if (workerCountOf(recheck) == 0) { - addWorker(null, false); - } - } else if (!addWorker(command, false)) { - reject(command); - } - } - - @Override - protected ExecutorService initializeExecutor() { - return this; - } - - @Override - public void shutdown() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - checkShutdownAccess(); - advanceRunState(SHUTDOWN); - interruptIdleWorkers(); - onShutdown(); - } finally { - mainLock.unlock(); - } - tryTerminate(); - } - - @Override - public List shutdownNow() { - List tasks; - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - checkShutdownAccess(); - advanceRunState(STOP); - interruptWorkers(); - tasks = drainQueue(); - } finally { - mainLock.unlock(); - } - tryTerminate(); - return tasks; - } - - @Override - public boolean isShutdown() { - return !isRunning(ctl.get()); - } - - @Override - public boolean isTerminating() { - int c = ctl.get(); - return !isRunning(c) && runStateLessThan(c, TERMINATED); - } - - @Override - public boolean isTerminated() { - return runStateAtLeast(ctl.get(), TERMINATED); - } - - @Override - public boolean awaitTermination(long timeout, TimeUnit unit) - throws InterruptedException { - long nanos = unit.toNanos(timeout); - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - for (; ; ) { - if (runStateAtLeast(ctl.get(), TERMINATED)) { - return true; - } - if (nanos <= 0) { - return false; - } - nanos = termination.awaitNanos(nanos); - } - } finally { - mainLock.unlock(); - } - } - - @Override - protected void finalize() { - SecurityManager sm = System.getSecurityManager(); - if (sm == null || acc == null) { - shutdown(); - } else { - PrivilegedAction pa = () -> { - shutdown(); - return null; - }; - AccessController.doPrivileged(pa, acc); - } - } - - @Override - public void setThreadFactory(@NonNull ThreadFactory threadFactory) { - this.threadFactory = threadFactory; - } - - @Override - public ThreadFactory getThreadFactory() { - return threadFactory; - } - - @Override - public void setRejectedExecutionHandler(@NonNull RejectedExecutionHandler handler) { - this.handler = handler; - } - - @Override - public RejectedExecutionHandler getRejectedExecutionHandler() { - return handler; - } - - @Override - public void setCorePoolSize(int corePoolSize) { - if (corePoolSize < 0) { - throw new IllegalArgumentException(); - } - int delta = corePoolSize - this.corePoolSize; - this.corePoolSize = corePoolSize; - if (workerCountOf(ctl.get()) > corePoolSize) { - interruptIdleWorkers(); - } else if (delta > 0) { - int k = Math.min(delta, workQueue.size()); - while (k-- > 0 && addWorker(null, true)) { - if (workQueue.isEmpty()) { - break; - } - } - } - } - - @Override - public int getCorePoolSize() { - return corePoolSize; - } - - @Override - public boolean prestartCoreThread() { - return workerCountOf(ctl.get()) < corePoolSize && - addWorker(null, true); - } - - public TaskDecorator getTaskDecorator() { - return taskDecorator; - } - - public void setTaskDecorator(TaskDecorator taskDecorator) { - this.taskDecorator = taskDecorator; - } - - void ensurePrestart() { - int wc = workerCountOf(ctl.get()); - if (wc < corePoolSize) { - addWorker(null, true); - } else if (wc == 0) { - addWorker(null, false); - } - } - - @Override - public int prestartAllCoreThreads() { - int n = 0; - while (addWorker(null, true)) { - ++n; - } - return n; - } - - @Override - public boolean allowsCoreThreadTimeOut() { - return allowCoreThreadTimeOut; - } - - @Override - public void allowCoreThreadTimeOut(boolean value) { - if (value && keepAliveTime <= 0) { - throw new IllegalArgumentException("Core threads must have nonzero keep alive times"); - } - if (value != allowCoreThreadTimeOut) { - allowCoreThreadTimeOut = value; - if (value) { - interruptIdleWorkers(); - } - } - } - - @Override - public void setMaximumPoolSize(int maximumPoolSize) { - if (maximumPoolSize <= 0 || maximumPoolSize < corePoolSize) { - throw new IllegalArgumentException(); - } - this.maximumPoolSize = maximumPoolSize; - if (workerCountOf(ctl.get()) > maximumPoolSize) { - interruptIdleWorkers(); - } - } - - @Override - public int getMaximumPoolSize() { - return maximumPoolSize; - } - - @Override - public void setKeepAliveTime(long time, TimeUnit unit) { - if (time < 0) { - throw new IllegalArgumentException(); - } - if (time == 0 && allowsCoreThreadTimeOut()) { - throw new IllegalArgumentException("Core threads must have nonzero keep alive times"); - } - long keepAliveTime = unit.toNanos(time); - long delta = keepAliveTime - this.keepAliveTime; - this.keepAliveTime = keepAliveTime; - if (delta < 0) { - interruptIdleWorkers(); - } - } - - @Override - public long getKeepAliveTime(TimeUnit unit) { - return unit.convert(keepAliveTime, TimeUnit.NANOSECONDS); - } - - @Override - public BlockingQueue getQueue() { - return workQueue; - } - - @Override - public boolean remove(Runnable task) { - boolean removed = workQueue.remove(task); - tryTerminate(); - return removed; - } - - @Override - public void purge() { - final BlockingQueue q = workQueue; - try { - Iterator it = q.iterator(); - while (it.hasNext()) { - Runnable r = it.next(); - if (r instanceof Future && ((Future) r).isCancelled()) { - it.remove(); - } - } - } catch (ConcurrentModificationException fallThrough) { - for (Object r : q.toArray()) { - if (r instanceof Future && ((Future) r).isCancelled()) { - q.remove(r); - } - } - } - - tryTerminate(); - } - - @Override - public int getPoolSize() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - return runStateAtLeast(ctl.get(), TIDYING) ? 0 : workers.size(); - } finally { - mainLock.unlock(); - } - } - - @Override - public int getActiveCount() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - int n = 0; - for (Worker w : workers) { - if (w.isLocked()) { - ++n; - } - } - return n; - } finally { - mainLock.unlock(); - } - } - - @Override - public int getLargestPoolSize() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - return largestPoolSize; - } finally { - mainLock.unlock(); - } - } - - @Override - public long getTaskCount() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - long n = completedTaskCount; - for (Worker w : workers) { - n += w.completedTasks; - if (w.isLocked()) { - ++n; - } - } - return n + workQueue.size(); - } finally { - mainLock.unlock(); - } - } - - @Override - public long getCompletedTaskCount() { - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - long n = completedTaskCount; - for (Worker w : workers) { - n += w.completedTasks; - } - return n; - } finally { - mainLock.unlock(); - } - } - - @Override - public String toString() { - long ncompleted; - int nworkers, nactive; - final ReentrantLock mainLock = this.mainLock; - mainLock.lock(); - try { - ncompleted = completedTaskCount; - nactive = 0; - nworkers = workers.size(); - for (Worker w : workers) { - ncompleted += w.completedTasks; - if (w.isLocked()) { - ++nactive; - } - } - } finally { - mainLock.unlock(); - } - int c = ctl.get(); - String rs = (runStateLessThan(c, SHUTDOWN) ? "Running" : - (runStateAtLeast(c, TERMINATED) ? "Terminated" : - "Shutting down")); - return super.toString() + - "[" + rs + - ", pool size = " + nworkers + - ", active threads = " + nactive + - ", queued tasks = " + workQueue.size() + - ", completed tasks = " + ncompleted + - "]"; - } - - private ConcurrentHashMap statisticsTime = new ConcurrentHashMap(MAP_INITIAL_CAPACITY); - - @Override - protected void beforeExecute(Thread t, Runnable r) { - statisticsTime.put(String.valueOf(r.hashCode()), new Date()); - } - - @Override - protected void afterExecute(Runnable r, Throwable t) { - Date startDate = statisticsTime.remove(String.valueOf(r.hashCode())); - Date finishDate = new Date(); - // long diff = finishDate.getTime() - startDate.getTime(); - - } - - @Override - protected void terminated() { - } - - @NoArgsConstructor - public static class CallerRunsPolicy implements RejectedExecutionHandler { - @Override - public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { - if (!e.isShutdown()) { - r.run(); - } - } - } - - @NoArgsConstructor - public static class AbortPolicy implements RejectedExecutionHandler { - @Override - public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { - throw new RejectedExecutionException("Task " + r.toString() + - " rejected from " + - e.toString()); - } - } - - @NoArgsConstructor - public static class DiscardPolicy implements RejectedExecutionHandler { - @Override - public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { - } - } - - @NoArgsConstructor - public static class DiscardOldestPolicy implements RejectedExecutionHandler { - @Override - public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { - if (!e.isShutdown()) { - e.getQueue().poll(); - e.execute(r); - } - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolPostProcessor.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolPostProcessor.java deleted file mode 100644 index 9e686f44..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/DynamicThreadPoolPostProcessor.java +++ /dev/null @@ -1,152 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.common.config.ApplicationContextHolder; -import cn.hippo4j.common.constant.Constants; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.starter.common.CommonDynamicThreadPool; -import cn.hippo4j.starter.config.BootstrapProperties; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedTypeEnum; -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import com.alibaba.fastjson.JSON; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import lombok.var; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.core.task.TaskDecorator; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static cn.hippo4j.common.constant.Constants.*; - -/** - * Dynamic threadPool post processor. - * - * @author chen.ma - * @date 2021/8/2 20:40 - */ -@Slf4j -@AllArgsConstructor -public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { - - private final BootstrapProperties properties; - - private final HttpAgent httpAgent; - - private final ThreadPoolOperation threadPoolOperation; - - private final ExecutorService executorService = ThreadPoolBuilder.builder() - .poolThreadSize(2, 4) - .keepAliveTime(0L, TimeUnit.MILLISECONDS) - .workQueue(QueueTypeEnum.ARRAY_BLOCKING_QUEUE, 1) - .threadFactory("dynamic-threadPool-config") - .rejected(new ThreadPoolExecutor.DiscardOldestPolicy()) - .build(); - - @Override - public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof DynamicThreadPoolExecutor) { - var dynamicThreadPool = ApplicationContextHolder.findAnnotationOnBean(beanName, DynamicThreadPool.class); - if (Objects.isNull(dynamicThreadPool)) { - return bean; - } - var dynamicExecutor = (DynamicThreadPoolExecutor) bean; - var wrap = new DynamicThreadPoolWrapper(dynamicExecutor.getThreadPoolId(), dynamicExecutor); - var remoteExecutor = fillPoolAndRegister(wrap); - subscribeConfig(wrap); - return remoteExecutor; - } else if (bean instanceof DynamicThreadPoolWrapper) { - var wrap = (DynamicThreadPoolWrapper) bean; - registerAndSubscribe(wrap); - } - - return bean; - } - - /** - * Register and subscribe. - * - * @param dynamicThreadPoolWrap - */ - protected void registerAndSubscribe(DynamicThreadPoolWrapper dynamicThreadPoolWrap) { - executorService.execute(() -> { - fillPoolAndRegister(dynamicThreadPoolWrap); - subscribeConfig(dynamicThreadPoolWrap); - }); - } - - /** - * Fill the thread pool and register. - * - * @param dynamicThreadPoolWrap - */ - protected ThreadPoolExecutor fillPoolAndRegister(DynamicThreadPoolWrapper dynamicThreadPoolWrap) { - String tpId = dynamicThreadPoolWrap.getTpId(); - Map queryStrMap = new HashMap(3); - queryStrMap.put(TP_ID, tpId); - queryStrMap.put(ITEM_ID, properties.getItemId()); - queryStrMap.put(NAMESPACE, properties.getNamespace()); - - Result result; - boolean isSubscribe = false; - ThreadPoolExecutor poolExecutor = null; - PoolParameterInfo ppi = new PoolParameterInfo(); - - try { - result = httpAgent.httpGetByConfig(Constants.CONFIG_CONTROLLER_PATH, null, queryStrMap, 5000L); - if (result.isSuccess() && result.getData() != null && (ppi = JSON.toJavaObject((JSON) result.getData(), PoolParameterInfo.class)) != null) { - // 使用相关参数创建线程池 - BlockingQueue workQueue = QueueTypeEnum.createBlockingQueue(ppi.getQueueType(), ppi.getCapacity()); - poolExecutor = ThreadPoolBuilder.builder() - .dynamicPool() - .workQueue(workQueue) - .threadFactory(tpId) - .poolThreadSize(ppi.getCoreSize(), ppi.getMaxSize()) - .keepAliveTime(ppi.getKeepAliveTime(), TimeUnit.SECONDS) - .rejected(RejectedTypeEnum.createPolicy(ppi.getRejectedType())) - .alarmConfig(ppi.getIsAlarm(), ppi.getCapacityAlarm(), ppi.getLivenessAlarm()) - .build(); - - if (poolExecutor instanceof DynamicExecutorConfigurationSupport) { - TaskDecorator taskDecorator = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrap.getExecutor()).getTaskDecorator(); - ((DynamicThreadPoolExecutor) poolExecutor).setTaskDecorator(taskDecorator); - } - - dynamicThreadPoolWrap.setExecutor(poolExecutor); - isSubscribe = true; - } - } catch (Exception ex) { - poolExecutor = dynamicThreadPoolWrap.getExecutor() != null ? dynamicThreadPoolWrap.getExecutor() : CommonDynamicThreadPool.getInstance(tpId); - dynamicThreadPoolWrap.setExecutor(poolExecutor); - - log.error("[Init pool] Failed to initialize thread pool configuration. error message :: {}", ex.getMessage()); - } finally { - if (Objects.isNull(dynamicThreadPoolWrap.getExecutor())) { - dynamicThreadPoolWrap.setExecutor(CommonDynamicThreadPool.getInstance(tpId)); - } - - // 设置是否订阅远端线程池配置 - dynamicThreadPoolWrap.setSubscribeFlag(isSubscribe); - } - - GlobalThreadPoolManage.register(dynamicThreadPoolWrap.getTpId(), ppi, dynamicThreadPoolWrap); - return poolExecutor; - } - - protected void subscribeConfig(DynamicThreadPoolWrapper dynamicThreadPoolWrap) { - if (dynamicThreadPoolWrap.isSubscribeFlag()) { - threadPoolOperation.subscribeConfig(dynamicThreadPoolWrap.getTpId(), executorService, config -> ThreadPoolDynamicRefresh.refreshDynamicPool(config)); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/GlobalThreadPoolManage.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/GlobalThreadPoolManage.java deleted file mode 100644 index f7bbf748..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/GlobalThreadPoolManage.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.common.model.PoolParameter; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import com.google.common.collect.Lists; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Global threadPool manage. - * - * @author chen.ma - * @date 2021/6/20 15:57 - */ -public class GlobalThreadPoolManage { - - private static final Map POOL_PARAMETER = new ConcurrentHashMap(); - - private static final Map EXECUTOR_MAP = new ConcurrentHashMap(); - - public static DynamicThreadPoolWrapper getExecutorService(String tpId) { - return EXECUTOR_MAP.get(tpId); - } - - public static PoolParameter getPoolParameter(String tpId) { - return POOL_PARAMETER.get(tpId); - } - - public static void register(String tpId, PoolParameter poolParameter, DynamicThreadPoolWrapper executor) { - registerPool(tpId, executor); - registerPoolParameter(tpId, poolParameter); - } - - public static void registerPool(String tpId, DynamicThreadPoolWrapper executor) { - EXECUTOR_MAP.put(tpId, executor); - } - - public static void registerPoolParameter(String tpId, PoolParameter poolParameter) { - POOL_PARAMETER.put(tpId, poolParameter); - } - - public static List listThreadPoolId() { - return Lists.newArrayList(POOL_PARAMETER.keySet()); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/Listener.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/Listener.java deleted file mode 100644 index 043703b2..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/Listener.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.hippo4j.starter.core; - -import java.util.concurrent.Executor; - -/** - * Listener. - * - * @author chen.ma - * @date 2021/6/22 20:20 - */ -public interface Listener { - - /** - * Get executor. - * - * @return - */ - Executor getExecutor(); - - /** - * Receive config info. - * - * @param configInfo - */ - void receiveConfigInfo(String configInfo); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolConfigService.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolConfigService.java deleted file mode 100644 index deee2e8f..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolConfigService.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.starter.remote.HttpAgent; - -import java.util.Arrays; - -/** - * ThreadPool config service. - * - * @author chen.ma - * @date 2021/6/21 21:50 - */ -public class ThreadPoolConfigService implements ConfigService { - - private final ClientWorker clientWorker; - - public ThreadPoolConfigService(HttpAgent httpAgent, String identification) { - clientWorker = new ClientWorker(httpAgent, identification); - } - - @Override - public void addListener(String tenantId, String itemId, String tpId, Listener listener) { - clientWorker.addTenantListeners(tenantId, itemId, tpId, Arrays.asList(listener)); - } - - @Override - public String getServerStatus() { - if (clientWorker.isHealthServer()) { - return "UP"; - } else { - return "DOWN"; - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolDynamicRefresh.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolDynamicRefresh.java deleted file mode 100644 index f0835491..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolDynamicRefresh.java +++ /dev/null @@ -1,83 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.RejectedTypeEnum; -import cn.hippo4j.starter.toolkit.thread.ResizableCapacityLinkedBlockIngQueue; -import com.alibaba.fastjson.JSON; -import cn.hippo4j.common.model.PoolParameterInfo; -import cn.hippo4j.starter.alarm.ThreadPoolAlarmManage; -import lombok.extern.slf4j.Slf4j; - -import java.util.Objects; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * ThreadPool dynamic refresh. - * - * @author chen.ma - * @date 2021/6/20 15:51 - */ -@Slf4j -public class ThreadPoolDynamicRefresh { - - public static void refreshDynamicPool(String content) { - PoolParameterInfo parameter = JSON.parseObject(content, PoolParameterInfo.class); - ThreadPoolAlarmManage.sendPoolConfigChange(parameter); - ThreadPoolDynamicRefresh.refreshDynamicPool(parameter); - } - - public static void refreshDynamicPool(PoolParameterInfo parameter) { - String threadPoolId = parameter.getTpId(); - ThreadPoolExecutor executor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); - - int originalCoreSize = executor.getCorePoolSize(); - int originalMaximumPoolSize = executor.getMaximumPoolSize(); - String originalQuery = executor.getQueue().getClass().getSimpleName(); - int originalCapacity = executor.getQueue().remainingCapacity() + executor.getQueue().size(); - long originalKeepAliveTime = executor.getKeepAliveTime(TimeUnit.SECONDS); - String originalRejected = executor.getRejectedExecutionHandler().getClass().getSimpleName(); - - changePoolInfo(executor, parameter); - ThreadPoolExecutor afterExecutor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); - - log.info("[🔥 {}] Changed thread pool. \ncoreSize :: [{}], maxSize :: [{}], queueType :: [{}], capacity :: [{}], keepAliveTime :: [{}], rejectedType :: [{}]", - threadPoolId.toUpperCase(), - String.format("%s => %s", originalCoreSize, afterExecutor.getCorePoolSize()), - String.format("%s => %s", originalMaximumPoolSize, afterExecutor.getMaximumPoolSize()), - String.format("%s => %s", originalQuery, QueueTypeEnum.getBlockingQueueNameByType(parameter.getQueueType())), - String.format("%s => %s", originalCapacity, - (afterExecutor.getQueue().remainingCapacity() + afterExecutor.getQueue().size())), - String.format("%s => %s", originalKeepAliveTime, afterExecutor.getKeepAliveTime(TimeUnit.SECONDS)), - String.format("%s => %s", originalRejected, RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType()))); - } - - public static void changePoolInfo(ThreadPoolExecutor executor, PoolParameterInfo parameter) { - if (parameter.getCoreSize() != null) { - executor.setCorePoolSize(parameter.getCoreSize()); - } - - if (parameter.getMaxSize() != null) { - executor.setMaximumPoolSize(parameter.getMaxSize()); - } - - if (parameter.getCapacity() != null - && Objects.equals(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.type, parameter.getQueueType())) { - if (executor.getQueue() instanceof ResizableCapacityLinkedBlockIngQueue) { - ResizableCapacityLinkedBlockIngQueue queue = (ResizableCapacityLinkedBlockIngQueue) executor.getQueue(); - queue.setCapacity(parameter.getCapacity()); - } else { - log.warn("[Pool change] The queue length cannot be modified. Queue type mismatch. Current queue type :: {}", executor.getQueue().getClass().getSimpleName()); - } - } - - if (parameter.getKeepAliveTime() != null) { - executor.setKeepAliveTime(parameter.getKeepAliveTime(), TimeUnit.SECONDS); - } - - if (parameter.getRejectedType() != null) { - executor.setRejectedExecutionHandler(RejectedTypeEnum.createPolicy(parameter.getRejectedType())); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolOperation.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolOperation.java deleted file mode 100644 index c6f771d5..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolOperation.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.hippo4j.starter.core; - -import cn.hippo4j.starter.config.BootstrapProperties; - -import java.util.concurrent.Executor; - -/** - * ThreadPool operation. - * - * @author chen.ma - * @date 2021/6/22 20:25 - */ -public class ThreadPoolOperation { - - private final ConfigService configService; - - private final BootstrapProperties properties; - - public ThreadPoolOperation(BootstrapProperties properties, ConfigService configService) { - this.properties = properties; - this.configService = configService; - } - - public Listener subscribeConfig(String tpId, Executor executor, ThreadPoolSubscribeCallback threadPoolSubscribeCallback) { - Listener configListener = new Listener() { - @Override - public void receiveConfigInfo(String config) { - threadPoolSubscribeCallback.callback(config); - } - - @Override - public Executor getExecutor() { - return executor; - } - }; - - configService.addListener(properties.getNamespace(), properties.getItemId(), tpId, configListener); - - return configListener; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolSubscribeCallback.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolSubscribeCallback.java deleted file mode 100644 index d6b08e4c..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ThreadPoolSubscribeCallback.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.hippo4j.starter.core; - -/** - * ThreadPool subscribe callback. - * - * @author chen.ma - * @date 2021/6/22 20:26 - */ -public interface ThreadPoolSubscribeCallback { - - /** - * Callback. - * - * @param config - */ - void callback(String config); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java deleted file mode 100644 index a2bd08ea..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/BeforeCheckConfiguration.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.hippo4j.starter.enable; - -import cn.hippo4j.starter.config.BootstrapProperties; -import cn.hippo4j.starter.core.ConfigEmptyException; -import cn.hutool.core.util.StrUtil; -import lombok.AllArgsConstructor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.ConfigurableEnvironment; - -/** - * Before check configuration. - * - * @author chen.ma - * @date 2021/11/28 22:44 - */ -@AllArgsConstructor -@Configuration(proxyBeanMethods = false) -public class BeforeCheckConfiguration { - - @Bean - public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolBeforeCheckBean(BootstrapProperties properties, ConfigurableEnvironment environment) { - String namespace = properties.getNamespace(); - if (StrUtil.isBlank(namespace)) { - throw new ConfigEmptyException( - "Web server failed to start. The dynamic thread pool namespace is empty.", - "Please check whether the [spring.dynamic.thread-pool.namespace] configuration is empty or an empty string." - ); - } - - String itemId = properties.getItemId(); - if (StrUtil.isBlank(itemId)) { - throw new ConfigEmptyException( - "Web server failed to start. The dynamic thread pool item id is empty.", - "Please check whether the [spring.dynamic.thread-pool.item-id] configuration is empty or an empty string." - ); - } - - String serverAddr = properties.getServerAddr(); - if (StrUtil.isBlank(serverAddr)) { - throw new ConfigEmptyException( - "Web server failed to start. The dynamic thread pool server addr is empty.", - "Please check whether the [spring.dynamic.thread-pool.server-addr] configuration is empty or an empty string." - ); - } - - String applicationName = environment.getProperty("spring.application.name"); - if (StrUtil.isBlank(applicationName)) { - throw new ConfigEmptyException( - "Web server failed to start. The dynamic thread pool application name is empty.", - "Please check whether the [spring.application.name] configuration is empty or an empty string." - ); - } - - return new BeforeCheckConfiguration.BeforeCheck(); - } - - public class BeforeCheck { - - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java deleted file mode 100644 index 739ac226..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/EnableDynamicThreadPool.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hippo4j.starter.enable; - -import org.springframework.context.annotation.Import; - -import java.lang.annotation.*; - -/** - * Annotation to activate dynamic threadPool related configuration. - * - * @author chen.ma - * @date 2021/7/8 23:28 - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Import({BeforeCheckConfiguration.class, MarkerConfiguration.class}) -public @interface EnableDynamicThreadPool { - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/MarkerConfiguration.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/MarkerConfiguration.java deleted file mode 100644 index e89abc2d..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/enable/MarkerConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.hippo4j.starter.enable; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * Marker configuration. - * - * @author chen.ma - * @date 2021/7/8 23:30 - */ -@Configuration(proxyBeanMethods = false) -public class MarkerConfiguration { - - @Bean - public Marker dynamicThreadPoolMarkerBean() { - return new Marker(); - } - - public class Marker { - - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/event/EventExecutor.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/event/EventExecutor.java deleted file mode 100644 index 8c71bf42..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/event/EventExecutor.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.hippo4j.starter.event; - -import cn.hippo4j.common.function.NoArgsConsumer; -import cn.hippo4j.starter.toolkit.thread.QueueTypeEnum; -import cn.hippo4j.starter.toolkit.thread.ThreadPoolBuilder; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * 事件执行器. - * - * @author chen.ma - * @date 2021/11/8 23:44 - */ -public class EventExecutor { - - private static final ExecutorService EVENT_EXECUTOR = ThreadPoolBuilder.builder() - .threadFactory("event-executor") - .corePoolSize(Runtime.getRuntime().availableProcessors()) - .maxPoolNum(Runtime.getRuntime().availableProcessors()) - .workQueue(QueueTypeEnum.ARRAY_BLOCKING_QUEUE, 2048) - .rejected(new ThreadPoolExecutor.DiscardPolicy()) - .build(); - - /** - * 发布事件. - * - * @param consumer - */ - public static void publishEvent(NoArgsConsumer consumer) { - EVENT_EXECUTOR.execute(consumer::accept); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java deleted file mode 100644 index e3447e44..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java +++ /dev/null @@ -1,106 +0,0 @@ -package cn.hippo4j.starter.handler; - -import cn.hippo4j.common.model.PoolRunStateInfo; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; -import cn.hippo4j.starter.toolkit.ByteConvertUtil; -import cn.hippo4j.starter.toolkit.CalculateUtil; -import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.system.RuntimeInfo; -import lombok.extern.slf4j.Slf4j; - -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Date; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * Thread pool run state service. - * - * @author chen.ma - * @date 2021/7/12 21:25 - */ -@Slf4j -public class ThreadPoolRunStateHandler { - - private static InetAddress INET_ADDRESS; - - static { - try { - INET_ADDRESS = InetAddress.getLocalHost(); - } catch (UnknownHostException ex) { - log.error("Local IP acquisition failed.", ex); - } - } - - public static PoolRunStateInfo getPoolRunState(String tpId) { - DynamicThreadPoolWrapper executorService = GlobalThreadPoolManage.getExecutorService(tpId); - ThreadPoolExecutor pool = executorService.getExecutor(); - - // 核心线程数 - int corePoolSize = pool.getCorePoolSize(); - // 最大线程数 - int maximumPoolSize = pool.getMaximumPoolSize(); - // 线程池当前线程数 (有锁) - int poolSize = pool.getPoolSize(); - // 活跃线程数 (有锁) - int activeCount = pool.getActiveCount(); - // 同时进入池中的最大线程数 (有锁) - int largestPoolSize = pool.getLargestPoolSize(); - // 线程池中执行任务总数量 (有锁) - long completedTaskCount = pool.getCompletedTaskCount(); - // 当前负载 - String currentLoad = CalculateUtil.divide(activeCount, maximumPoolSize) + "%"; - // 峰值负载 - String peakLoad = CalculateUtil.divide(largestPoolSize, maximumPoolSize) + "%"; - - BlockingQueue queue = pool.getQueue(); - // 队列类型 - String queueType = queue.getClass().getSimpleName(); - // 队列元素个数 - int queueSize = queue.size(); - // 队列剩余容量 - int remainingCapacity = queue.remainingCapacity(); - // 队列容量 - int queueCapacity = queueSize + remainingCapacity; - - // 内存占比: 使用内存 / 最大内存 - RuntimeInfo runtimeInfo = new RuntimeInfo(); - String memoryProportion = StrUtil.builder( - "已分配: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), - " / 最大可用: ", - ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory()) - ).toString(); - - PoolRunStateInfo stateInfo = new PoolRunStateInfo(); - stateInfo.setCoreSize(corePoolSize); - stateInfo.setMaximumSize(maximumPoolSize); - stateInfo.setPoolSize(poolSize); - stateInfo.setActiveSize(activeCount); - stateInfo.setCurrentLoad(currentLoad); - stateInfo.setPeakLoad(peakLoad); - stateInfo.setQueueType(queueType); - stateInfo.setQueueSize(queueSize); - stateInfo.setQueueRemainingCapacity(remainingCapacity); - stateInfo.setQueueCapacity(queueCapacity); - stateInfo.setLargestPoolSize(largestPoolSize); - stateInfo.setCompletedTaskCount(completedTaskCount); - stateInfo.setHost(INET_ADDRESS.getHostAddress()); - stateInfo.setTpId(tpId); - stateInfo.setMemoryProportion(memoryProportion); - stateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); - - int rejectCount = pool instanceof DynamicThreadPoolExecutor - ? ((DynamicThreadPoolExecutor) pool).getRejectCount() - : -1; - stateInfo.setRejectCount(rejectCount); - stateInfo.setClientLastRefreshTime(DateUtil.formatDateTime(new Date())); - - return stateInfo; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerHttpAgent.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerHttpAgent.java deleted file mode 100644 index 3c99f319..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerHttpAgent.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.hippo4j.starter.remote; - -import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.starter.config.BootstrapProperties; -import cn.hippo4j.starter.toolkit.HttpClientUtil; - -import java.util.Map; - -/** - * Server http agent. - * - * @author chen.ma - * @date 2021/6/23 20:50 - */ -public class ServerHttpAgent implements HttpAgent { - - private final BootstrapProperties dynamicThreadPoolProperties; - - private final ServerListManager serverListManager; - - private final HttpClientUtil httpClientUtil; - - public ServerHttpAgent(BootstrapProperties properties, HttpClientUtil httpClientUtil) { - this.dynamicThreadPoolProperties = properties; - this.httpClientUtil = httpClientUtil; - this.serverListManager = new ServerListManager(dynamicThreadPoolProperties); - } - - @Override - public void start() { - - } - - @Override - public String getTenantId() { - return dynamicThreadPoolProperties.getNamespace(); - } - - @Override - public String getEncode() { - return null; - } - - @Override - public Result httpPostByDiscovery(String path, Object body) { - return httpClientUtil.restApiPost(buildUrl(path), body, Result.class); - } - - @Override - public Result httpGetByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { - return httpClientUtil.restApiGetByThreadPool(buildUrl(path), headers, paramValues, readTimeoutMs, Result.class); - } - - @Override - public Result httpPostByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { - return httpClientUtil.restApiPostByThreadPool(buildUrl(path), headers, paramValues, readTimeoutMs, Result.class); - } - - @Override - public Result httpDeleteByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { - return null; - } - - private String buildUrl(String path) { - return serverListManager.getCurrentServerAddr() + path; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomBlockingQueue.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomBlockingQueue.java deleted file mode 100644 index b62795ca..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomBlockingQueue.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.hippo4j.starter.spi; - -import java.util.concurrent.BlockingQueue; - -/** - * Custom blockingQueue. - * - * @author chen.ma - * @date 2021/7/11 00:51 - */ -public interface CustomBlockingQueue { - - /** - * Gets the custom blocking queue type. - * - * @return - */ - Integer getType(); - - /** - * Get custom blocking queue. - * - * @return - */ - BlockingQueue generateBlockingQueue(); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomRejectedExecutionHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomRejectedExecutionHandler.java deleted file mode 100644 index c3f6ade8..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/CustomRejectedExecutionHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.hippo4j.starter.spi; - -import java.util.concurrent.RejectedExecutionHandler; - -/** - * Custom rejectedExecution handler. - * - * @author chen.ma - * @date 2021/7/10 23:51 - */ -public interface CustomRejectedExecutionHandler { - - /** - * Get custom reject policy type. - * - * @return - */ - Integer getType(); - - /** - * Get custom reject policy. - * - * @return - */ - RejectedExecutionHandler generateRejected(); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/ServiceLoaderInstantiationException.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/ServiceLoaderInstantiationException.java deleted file mode 100644 index a0116a3c..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/spi/ServiceLoaderInstantiationException.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hippo4j.starter.spi; - -/** - * Service loader instantiation exception. - * - * @author chen.ma - * @date 2021/7/10 23:48 - */ -public class ServiceLoaderInstantiationException extends RuntimeException { - - public ServiceLoaderInstantiationException(final Class clazz, final Exception cause) { - super(String.format("Can not find public default constructor for SPI class `%s`", clazz.getName()), cause); - } - -} - diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ArrayUtil.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ArrayUtil.java deleted file mode 100644 index e1e0652d..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ArrayUtil.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.hippo4j.starter.toolkit; - -import java.lang.reflect.Array; - -/** - * Array util. - * - * @author chen.ma - * @date 2021/7/5 21:54 - */ -public class ArrayUtil { - - public static T[] addAll(final T[] array1, @SuppressWarnings("unchecked") final T... array2) { - if (array1 == null) { - return clone(array2); - } else if (array2 == null) { - return clone(array1); - } - final Class type1 = array1.getClass().getComponentType(); - @SuppressWarnings("unchecked") final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length); - System.arraycopy(array1, 0, joinedArray, 0, array1.length); - try { - System.arraycopy(array2, 0, joinedArray, array1.length, array2.length); - } catch (final ArrayStoreException ase) { - final Class type2 = array2.getClass().getComponentType(); - if (!type1.isAssignableFrom(type2)) { - throw new IllegalArgumentException("Cannot store " + type2.getName() + " in an array of " - + type1.getName(), ase); - } - throw ase; - } - return joinedArray; - } - - public static T[] clone(final T[] array) { - if (array == null) { - return null; - } - return array.clone(); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java deleted file mode 100644 index 3cf191de..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.hippo4j.starter.toolkit; - -/** - * 字节转换工具类. - * - * @author chen.ma - * @date 2021/11/20 12:21 - */ -public class ByteConvertUtil { - - /** - * 字节转换. - * - * @param size - * @return - */ - public static String getPrintSize(long size) { - long covertNum = 1024; - if (size < covertNum) { - return size + "B"; - } else { - size = size / covertNum; - } - if (size < covertNum) { - return size + "KB"; - } else { - size = size / covertNum; - } - if (size < covertNum) { - size = size * 100; - return (size / 100) + "." + (size % 100) + "MB"; - } else { - size = size * 100 / covertNum; - return (size / 100) + "." + (size % 100) + "GB"; - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CalculateUtil.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CalculateUtil.java deleted file mode 100644 index d64a540f..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CalculateUtil.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.hippo4j.starter.toolkit; - -/** - * Calculate util. - * - * @author chen.ma - * @date 2021/8/15 14:29 - */ -public class CalculateUtil { - - public static int divide(int num1, int num2) { - return ((int) (Double.parseDouble(num1 + "") / Double.parseDouble(num2 + "") * 100)); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/AbstractBuildThreadPoolTemplate.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/AbstractBuildThreadPoolTemplate.java deleted file mode 100644 index 7260baf2..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/AbstractBuildThreadPoolTemplate.java +++ /dev/null @@ -1,195 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import cn.hippo4j.common.toolkit.Assert; -import cn.hippo4j.starter.alarm.ThreadPoolAlarm; -import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; -import lombok.Data; -import lombok.experimental.Accessors; -import lombok.extern.slf4j.Slf4j; -import org.springframework.core.task.TaskDecorator; - -import java.util.concurrent.*; -import java.util.concurrent.locks.AbstractQueuedSynchronizer; - -/** - * Abstract build threadPool template. - * - * @author chen.ma - * @date 2021/7/5 21:45 - */ -@Slf4j -public class AbstractBuildThreadPoolTemplate { - - /** - * 线程池构建初始化参数 - *

- * 此处本身是模版设计方法, 但是考虑创建简洁性, 移除 abstract - * 异常参考 {@link AbstractQueuedSynchronizer#tryAcquire} - * - * @return - */ - protected static ThreadPoolInitParam initParam() { - throw new UnsupportedOperationException(); - } - - /** - * 构建线程池 - * - * @return - */ - public static ThreadPoolExecutor buildPool() { - ThreadPoolInitParam initParam = initParam(); - return buildPool(initParam); - } - - /** - * 构建线程池 - * - * @return - */ - public static ThreadPoolExecutor buildPool(ThreadPoolInitParam initParam) { - Assert.notNull(initParam); - ThreadPoolExecutor executorService = - new ThreadPoolExecutorTemplate(initParam.getCorePoolNum(), - initParam.getMaxPoolNum(), - initParam.getKeepAliveTime(), - initParam.getTimeUnit(), - initParam.getWorkQueue(), - initParam.getThreadFactory(), - initParam.rejectedExecutionHandler); - return executorService; - } - - /** - * 构建快速执行线程池 - * - * @return - */ - public static ThreadPoolExecutor buildFastPool() { - ThreadPoolInitParam initParam = initParam(); - return buildFastPool(initParam); - } - - /** - * 构建快速执行线程池 - * - * @return - */ - public static ThreadPoolExecutor buildFastPool(ThreadPoolInitParam initParam) { - TaskQueue taskQueue = new TaskQueue(initParam.getCapacity()); - FastThreadPoolExecutor fastThreadPoolExecutor = - new FastThreadPoolExecutor(initParam.getCorePoolNum(), - initParam.getMaxPoolNum(), - initParam.getKeepAliveTime(), - initParam.getTimeUnit(), - taskQueue, - initParam.getThreadFactory(), - initParam.rejectedExecutionHandler); - taskQueue.setExecutor(fastThreadPoolExecutor); - return fastThreadPoolExecutor; - } - - /** - * 构建动态线程池 - * - * @param initParam - * @return - */ - public static DynamicThreadPoolExecutor buildDynamicPool(ThreadPoolInitParam initParam) { - Assert.notNull(initParam); - DynamicThreadPoolExecutor executorService = - new DynamicThreadPoolExecutor(initParam.getCorePoolNum(), - initParam.getMaxPoolNum(), - initParam.getKeepAliveTime(), - initParam.getTimeUnit(), - initParam.getWaitForTasksToCompleteOnShutdown(), - initParam.getAwaitTerminationMillis(), - initParam.getWorkQueue(), - initParam.getThreadPoolId(), - initParam.getThreadFactory(), - initParam.getThreadPoolAlarm(), - initParam.getRejectedExecutionHandler()); - - executorService.setTaskDecorator(initParam.getTaskDecorator()); - return executorService; - } - - @Data - @Accessors(chain = true) - public static class ThreadPoolInitParam { - - /** - * 核心线程数量 - */ - private Integer corePoolNum; - - /** - * 最大线程数量 - */ - private Integer maxPoolNum; - - /** - * 线程存活时间 - */ - private Long keepAliveTime; - - /** - * 线程存活时间单位 - */ - private TimeUnit timeUnit; - - /** - * 队列最大容量 - */ - private Integer capacity; - - /** - * 阻塞队列 - */ - private BlockingQueue workQueue; - - /** - * 线程池任务满时拒绝任务策略 - */ - private RejectedExecutionHandler rejectedExecutionHandler; - - /** - * 创建线程工厂 - */ - private ThreadFactory threadFactory; - - /** - * 线程 ID - */ - private String threadPoolId; - - /** - * 报警策略 - */ - private ThreadPoolAlarm threadPoolAlarm; - - /** - * 线程任务装饰器 - */ - private TaskDecorator taskDecorator; - - /** - * 等待终止毫秒 - */ - private Long awaitTerminationMillis; - - /** - * 等待任务在关机时完成 - */ - private Boolean waitForTasksToCompleteOnShutdown; - - public ThreadPoolInitParam(String threadNamePrefix, boolean isDaemon) { - this.threadPoolId = threadNamePrefix; - this.threadFactory = ThreadFactoryBuilder.builder() - .prefix(threadNamePrefix) - .daemon(isDaemon) - .build(); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/Builder.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/Builder.java deleted file mode 100644 index 2982ae51..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/Builder.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import java.io.Serializable; - -/** - * Builder pattern interface definition. - * - * @author chen.ma - * @date 2021/7/5 21:39 - */ -public interface Builder extends Serializable { - - /** - * Build. - * - * @return - */ - T build(); - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedPolicies.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedPolicies.java deleted file mode 100644 index ff1f4bd6..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedPolicies.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import lombok.extern.slf4j.Slf4j; - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.RejectedExecutionHandler; - -/** - * Rejected policies. - * - * @author chen.ma - * @date 2021/7/5 21:23 - */ -@Slf4j -public class RejectedPolicies { - - /** - * 发生拒绝事件时, 添加新任务并运行最早的任务 - * - * @return - */ - public static RejectedExecutionHandler runsOldestTaskPolicy() { - return (r, executor) -> { - if (executor.isShutdown()) { - return; - } - BlockingQueue workQueue = executor.getQueue(); - Runnable firstWork = workQueue.poll(); - boolean newTaskAdd = workQueue.offer(r); - if (firstWork != null) { - firstWork.run(); - } - if (!newTaskAdd) { - executor.execute(r); - } - }; - } - - /** - * 使用阻塞方法将拒绝任务添加队列, 可保证任务不丢失 - * - * @return - */ - public static RejectedExecutionHandler syncPutQueuePolicy() { - return (r, executor) -> { - if (executor.isShutdown()) { - return; - } - try { - executor.getQueue().put(r); - } catch (InterruptedException e) { - log.error("线程池添加队列任务失败", e); - } - }; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedTypeEnum.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedTypeEnum.java deleted file mode 100644 index afd186cd..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/RejectedTypeEnum.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import cn.hippo4j.starter.spi.CustomRejectedExecutionHandler; -import cn.hippo4j.starter.spi.DynamicTpServiceLoader; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.RejectedExecutionHandler; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.stream.Stream; - -/** - * Reject policy type Enum. - * - * @author chen.ma - * @date 2021/7/10 23:16 - */ -public enum RejectedTypeEnum { - - /** - * 被拒绝任务的程序由主线程执行 - */ - CALLER_RUNS_POLICY(1, new ThreadPoolExecutor.CallerRunsPolicy()), - - /** - * 被拒绝任务的处理程序, 抛出异常 - */ - ABORT_POLICY(2, new ThreadPoolExecutor.AbortPolicy()), - - /** - * 被拒绝任务的处理程序, 默默地丢弃被拒绝的任务。 - */ - DISCARD_POLICY(3, new ThreadPoolExecutor.DiscardPolicy()), - - /** - * 被拒绝任务的处理程序, 它丢弃最早的未处理请求, 然后重试 - */ - DISCARD_OLDEST_POLICY(4, new ThreadPoolExecutor.DiscardOldestPolicy()), - - /** - * 发生拒绝事件时, 添加新任务并运行最早的任务 - */ - RUNS_OLDEST_TASK_POLICY(5, RejectedPolicies.runsOldestTaskPolicy()), - - /** - * 使用阻塞方法将拒绝任务添加队列, 可保证任务不丢失 - */ - SYNC_PUT_QUEUE_POLICY(6, RejectedPolicies.syncPutQueuePolicy()); - - /** - * 类型 - */ - public Integer type; - - /** - * 线程池拒绝策略 - */ - public RejectedExecutionHandler rejectedHandler; - - RejectedTypeEnum(Integer type, RejectedExecutionHandler rejectedHandler) { - this.type = type; - this.rejectedHandler = rejectedHandler; - } - - static { - DynamicTpServiceLoader.register(CustomRejectedExecutionHandler.class); - } - - public static RejectedExecutionHandler createPolicy(int type) { - Optional rejectedTypeEnum = Stream.of(RejectedTypeEnum.values()) - .filter(each -> Objects.equals(type, each.type)) - .map(each -> each.rejectedHandler) - .findFirst(); - - // 使用 SPI 匹配拒绝策略 - RejectedExecutionHandler resultRejected = rejectedTypeEnum.orElseGet(() -> { - Collection customRejectedExecutionHandlers = DynamicTpServiceLoader - .getSingletonServiceInstances(CustomRejectedExecutionHandler.class); - Optional customRejected = customRejectedExecutionHandlers.stream() - .filter(each -> Objects.equals(type, each.getType())) - .map(each -> each.generateRejected()) - .findFirst(); - - return customRejected.orElse(ABORT_POLICY.rejectedHandler); - }); - - return resultRejected; - } - - public static String getRejectedNameByType(int type) { - Optional rejectedTypeEnum = Arrays.stream(RejectedTypeEnum.values()) - .filter(each -> each.type == type).findFirst(); - - return rejectedTypeEnum.map(each -> each.rejectedHandler.getClass().getSimpleName()).orElse(""); - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ResizableCapacityLinkedBlockIngQueue.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ResizableCapacityLinkedBlockIngQueue.java deleted file mode 100644 index cc5340eb..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/ResizableCapacityLinkedBlockIngQueue.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import cn.hutool.core.util.ReflectUtil; -import lombok.extern.slf4j.Slf4j; - -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Resizable capacity linkedBlockIngQueue. - * - * @author chen.ma - * @date 2021/6/20 14:24 - */ -@Slf4j -public class ResizableCapacityLinkedBlockIngQueue extends LinkedBlockingQueue { - - public ResizableCapacityLinkedBlockIngQueue(int capacity) { - super(capacity); - } - - public synchronized boolean setCapacity(Integer capacity) { - boolean successFlag = true; - /** - * TODO:后续考虑切换 Rabbitmq VariableLinkedBlockingQueue - */ - try { - int oldCapacity = (int) ReflectUtil.getFieldValue(this, "capacity"); - AtomicInteger count = (AtomicInteger) ReflectUtil.getFieldValue(this, "count"); - int size = count.get(); - - ReflectUtil.setFieldValue(this, "capacity", capacity); - if (capacity > size && size >= oldCapacity) { - ReflectUtil.invoke(this, "signalNotFull"); - } - } catch (Exception ex) { - // ignore - log.error("Dynamic modification of blocking queue size failed.", ex); - successFlag = false; - } - - return successFlag; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/TaskQueue.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/TaskQueue.java deleted file mode 100644 index 71ba07fe..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/thread/TaskQueue.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.hippo4j.starter.toolkit.thread; - -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; - -/** - * Task queue. - * - * @author chen.ma - * @date 2021/7/5 21:00 - */ -public class TaskQueue extends LinkedBlockingQueue { - - private static final long serialVersionUID = -2635853580887179627L; - - private FastThreadPoolExecutor executor; - - public TaskQueue(int capacity) { - super(capacity); - } - - public void setExecutor(FastThreadPoolExecutor exec) { - executor = exec; - } - - @Override - public boolean offer(Runnable runnable) { - int currentPoolThreadSize = executor.getPoolSize(); - // 如果有核心线程正在空闲, 将任务加入阻塞队列, 由核心线程进行处理任务 - if (executor.getSubmittedTaskCount() < currentPoolThreadSize) { - return super.offer(runnable); - } - - // 当前线程池线程数量小于最大线程数, 返回false, 根据线程池源码, 会创建非核心线程 - if (currentPoolThreadSize < executor.getMaximumPoolSize()) { - return false; - } - - // 如果当前线程池数量大于最大线程数, 任务加入阻塞队列 - return super.offer(runnable); - } - - public boolean retryOffer(Runnable o, long timeout, TimeUnit unit) throws InterruptedException { - if (executor.isShutdown()) { - throw new RejectedExecutionException("Actuator closed!"); - } - return super.offer(o, timeout, unit); - } -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/DynamicThreadPoolWrapper.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/DynamicThreadPoolWrapper.java deleted file mode 100644 index c9152684..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/DynamicThreadPoolWrapper.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.hippo4j.starter.wrapper; - -import cn.hippo4j.starter.common.CommonDynamicThreadPool; -import cn.hippo4j.starter.core.DynamicExecutorConfigurationSupport; -import lombok.Data; -import org.springframework.beans.factory.DisposableBean; - -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * Dynamic threadPool wrapper. - * - * @author chen.ma - * @date 2021/6/20 16:55 - */ -@Data -public class DynamicThreadPoolWrapper implements DisposableBean { - - private String tenantId; - - private String itemId; - - private String tpId; - - private boolean subscribeFlag; - - private ThreadPoolExecutor executor; - - /** - * 首选服务端线程池, 为空使用默认线程池 {@link CommonDynamicThreadPool#getInstance(String)} - * - * @param threadPoolId - */ - public DynamicThreadPoolWrapper(String threadPoolId) { - this(threadPoolId, CommonDynamicThreadPool.getInstance(threadPoolId)); - } - - /** - * 首选服务端线程池, 为空使用 threadPoolExecutor - * - * @param threadPoolId - * @param threadPoolExecutor - */ - public DynamicThreadPoolWrapper(String threadPoolId, ThreadPoolExecutor threadPoolExecutor) { - this.tpId = threadPoolId; - this.executor = threadPoolExecutor; - } - - /** - * 提交任务 - * - * @param command - */ - public void execute(Runnable command) { - executor.execute(command); - } - - /** - * 提交任务 - * - * @param task - * @return - */ - public Future submit(Runnable task) { - return executor.submit(task); - } - - /** - * 提交任务 - * - * @param task - * @param - * @return - */ - public Future submit(Callable task) { - return executor.submit(task); - } - - @Override - public void destroy() throws Exception { - if (executor != null && executor instanceof DynamicExecutorConfigurationSupport) { - ((DynamicExecutorConfigurationSupport) executor).destroy(); - } - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/ManagerListenerWrapper.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/ManagerListenerWrapper.java deleted file mode 100644 index c6af3afb..00000000 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/wrapper/ManagerListenerWrapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.hippo4j.starter.wrapper; - -import cn.hippo4j.starter.core.Listener; -import lombok.Getter; -import lombok.Setter; - -/** - * Manager listener wrapper. - * - * @author chen.ma - * @date 2021/6/22 17:47 - */ -@Getter -@Setter -public class ManagerListenerWrapper { - - private String lastCallMd5; - - final Listener listener; - - public ManagerListenerWrapper(String md5, Listener listener) { - this.lastCallMd5 = md5; - this.listener = listener; - } - -} diff --git a/hippo4j-spring-boot-starter/src/main/resources/META-INF/LICENSE b/hippo4j-spring-boot-starter/src/main/resources/META-INF/LICENSE deleted file mode 100644 index ff773796..00000000 --- a/hippo4j-spring-boot-starter/src/main/resources/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed 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 - - https://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. diff --git a/hippo4j-spring-boot-starter/src/test/java/cn/hippo4j/starter/test/ResizableCapacityLinkedBlockIngQueueTest.java b/hippo4j-spring-boot-starter/src/test/java/cn/hippo4j/starter/test/ResizableCapacityLinkedBlockIngQueueTest.java deleted file mode 100644 index 90744039..00000000 --- a/hippo4j-spring-boot-starter/src/test/java/cn/hippo4j/starter/test/ResizableCapacityLinkedBlockIngQueueTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.hippo4j.starter.test; - -import cn.hippo4j.starter.toolkit.thread.ResizableCapacityLinkedBlockIngQueue; -import lombok.extern.slf4j.Slf4j; - -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * 可调整大小的阻塞队列单元测试 - * - * @author chen.ma - * @date 2021/6/20 14:45 - */ -@Slf4j -public class ResizableCapacityLinkedBlockIngQueueTest { - - public static void main(String[] args) throws InterruptedException { - ResizableCapacityLinkedBlockIngQueue blockIngQueue = new ResizableCapacityLinkedBlockIngQueue(5); - ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, - 3, - 1024, - TimeUnit.SECONDS, - blockIngQueue); - - /*Runnable runnable = new Runnable() { - @SneakyThrows - public void run() { - Thread.sleep(10000); - } - }; - for (int i = 0; i <; i++) { - threadPoolExecutor.execute(runnable); - }*/ - - print(threadPoolExecutor); - - Thread.sleep(1000); - blockIngQueue.setCapacity(1000); - print(threadPoolExecutor); - - } - - private static void print(ThreadPoolExecutor executor) { - LinkedBlockingQueue queue = (LinkedBlockingQueue) executor.getQueue(); - - log.info("核心线程数 :: {}," + - " 活动线程数 :: {}," + - " 最大线程数 :: {}," + - " 线程池活跃度 :: {}," + - " 任务完成数 :: {}," + - " 队列大小 :: {}," + - " 当前排队线程数 :: {}," + - " 队列剩余大小 :: {}," + - " 队列使用度 :: {}", - executor.getCorePoolSize(), - executor.getActiveCount(), - executor.getMaximumPoolSize(), - divide(executor.getActiveCount(), executor.getMaximumPoolSize()), - executor.getCompletedTaskCount(), - (queue.size() + queue.remainingCapacity()), - queue.size(), - queue.remainingCapacity(), - divide(queue.size(), queue.size() + queue.remainingCapacity())); - - } - - private static String divide(int num1, int num2) { - return String.format("%1.2f%%", Double.parseDouble(num1 + "") / Double.parseDouble(num2 + "") * 100); - } -} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml new file mode 100644 index 00000000..6754a642 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml @@ -0,0 +1,119 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot + ${revision} + + hippo4j-core-spring-boot-starter + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + cn.hippo4j + hippo4j-core + + + + com.alibaba.nacos + nacos-client + ${nacos-client.version} + true + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + ${spring-cloud-starter-alibaba-nacos-config.version} + true + + + + com.ctrip.framework.apollo + apollo-client + ${apollo.version} + compile + true + + + + org.apache.curator + curator-framework + ${curator-framework.version} + compile + true + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + cn.hippo4j + hippo4j-adapter-base + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-web + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-monitor-log + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-monitor-prometheus + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/common/ConfigFileTypeEnum.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/common/ConfigFileTypeEnum.java new file mode 100644 index 00000000..4fc820a1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/common/ConfigFileTypeEnum.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.common; + +/** + * Config file type enum. + */ +public enum ConfigFileTypeEnum { + + /** + * PROPERTIES + */ + PROPERTIES { + + @Override + public String type() { + return "properties"; + } + }, + + /*** + * YML + */ + YML { + + @Override + public String type() { + return "yml"; + } + }, + + /*** + * YAML + */ + YAML { + + @Override + public String type() { + return "yaml"; + } + }; + + /** + * Type. + * + * @return + */ + public abstract String type(); +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/AdapterExecutorProperties.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/AdapterExecutorProperties.java new file mode 100644 index 00000000..9328b6de --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/AdapterExecutorProperties.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import lombok.Data; + +/** + * Adapter executor properties. + */ +@Data +public class AdapterExecutorProperties { + + /** + * Mark + */ + private String mark; + + /** + * Thread-pool key + */ + private String threadPoolKey; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/BootstrapCoreProperties.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/BootstrapCoreProperties.java new file mode 100644 index 00000000..93696763 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/BootstrapCoreProperties.java @@ -0,0 +1,149 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import cn.hippo4j.core.config.BootstrapPropertiesInterface; +import cn.hippo4j.core.springboot.starter.parser.ConfigFileTypeEnum; +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; +import java.util.Map; + +/** + * Bootstrap core properties. + */ +@Getter +@Setter +@ConfigurationProperties(prefix = BootstrapCoreProperties.PREFIX) +public class BootstrapCoreProperties implements BootstrapPropertiesInterface { + + public static final String PREFIX = "spring.dynamic.thread-pool"; + + /** + * Enable dynamic thread pool. + */ + private Boolean enable = Boolean.TRUE; + + /** + * Enabled banner. + */ + private Boolean banner = Boolean.TRUE; + + /*** + * Collect thread pool runtime indicators. + */ + private Boolean collect = Boolean.TRUE; + + /** + * Type of collection thread pool running data. eg: log,prometheus. Multiple can be used at the same time. + */ + private String collectType; + + /** + * Delay starting data acquisition task. unit: ms + */ + private Long initialDelay = 10000L; + + /** + * Collect interval. unit: ms + */ + private Long collectInterval = 5000L; + + /** + * Config file type. + */ + private ConfigFileTypeEnum configFileType; + + /** + * Nacos config. + */ + private Map nacos; + + /** + * Apollo config. + */ + private Map apollo; + + /** + * Zookeeper config. + */ + private Map zookeeper; + + /** + * Tomcat thread pool config. + */ + private WebThreadPoolProperties tomcat; + + /** + * Undertow thread pool config. + */ + private WebThreadPoolProperties undertow; + + /** + * Jetty thread pool config. + * KeepAliveTime is not supported temporarily. + */ + private WebThreadPoolProperties jetty; + + /** + * Notify platforms. + */ + private List notifyPlatforms; + + /** + * Whether to enable thread pool running alarm. + */ + private Boolean alarm = Boolean.TRUE; + + /** + * Check thread pool running status interval. + */ + private Integer checkStateInterval; + + /** + * Active alarm. + */ + private Integer activeAlarm; + + /** + * Capacity alarm. + */ + private Integer capacityAlarm; + + /** + * Thread pool run alarm interval. unit: s + */ + private Integer alarmInterval; + + /** + * Receive. + */ + private String receive; + + /** + * Executors. + */ + private List executors; + + /** + * Adapter executors + */ + private List adapterExecutors; +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ConfigHandlerConfiguration.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ConfigHandlerConfiguration.java new file mode 100644 index 00000000..ab25a586 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ConfigHandlerConfiguration.java @@ -0,0 +1,91 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import cn.hippo4j.core.springboot.starter.refresher.ApolloRefresherHandler; +import cn.hippo4j.core.springboot.starter.refresher.NacosCloudRefresherHandler; +import cn.hippo4j.core.springboot.starter.refresher.NacosRefresherHandler; +import cn.hippo4j.core.springboot.starter.refresher.ZookeeperRefresherHandler; +import com.alibaba.cloud.nacos.NacosConfigManager; +import com.alibaba.nacos.api.config.ConfigService; +import lombok.RequiredArgsConstructor; +import org.apache.curator.framework.CuratorFramework; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Config handler configuration. + */ +@Configuration(proxyBeanMethods = false) +public class ConfigHandlerConfiguration { + + private static final String NACOS_CONFIG_MANAGER_KEY = "com.alibaba.cloud.nacos.NacosConfigManager"; + + private static final String NACOS_DATA_ID_KEY = "nacos.data-id"; + + private static final String APOLLO_NAMESPACE_KEY = "apollo.namespace"; + + private static final String ZOOKEEPER_CONNECT_STR_KEY = "zookeeper.zk-connect-str"; + + @RequiredArgsConstructor + @ConditionalOnClass(ConfigService.class) + @ConditionalOnMissingClass(NACOS_CONFIG_MANAGER_KEY) + @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = NACOS_DATA_ID_KEY) + static class EmbeddedNacos { + + public final BootstrapCoreProperties bootstrapCoreProperties; + + @Bean + public NacosRefresherHandler nacosRefresherHandler() { + return new NacosRefresherHandler(bootstrapCoreProperties); + } + } + + @ConditionalOnClass(NacosConfigManager.class) + @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = NACOS_DATA_ID_KEY) + static class EmbeddedNacosCloud { + + @Bean + public NacosCloudRefresherHandler nacosCloudRefresherHandler() { + return new NacosCloudRefresherHandler(); + } + } + + @ConditionalOnClass(com.ctrip.framework.apollo.ConfigService.class) + @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = APOLLO_NAMESPACE_KEY) + static class EmbeddedApollo { + + @Bean + public ApolloRefresherHandler apolloRefresher() { + return new ApolloRefresherHandler(); + } + } + + @ConditionalOnClass(CuratorFramework.class) + @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = ZOOKEEPER_CONNECT_STR_KEY) + static class EmbeddedZookeeper { + + @Bean + public ZookeeperRefresherHandler zookeeperRefresher() { + return new ZookeeperRefresherHandler(); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java new file mode 100644 index 00000000..ec672a43 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java @@ -0,0 +1,126 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.config.UtilAutoConfiguration; +import cn.hippo4j.core.enable.MarkerConfiguration; +import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; +import cn.hippo4j.core.handler.DynamicThreadPoolBannerHandler; +import cn.hippo4j.core.springboot.starter.monitor.DynamicThreadPoolMonitorExecutor; +import cn.hippo4j.core.springboot.starter.notify.CoreNotifyConfigBuilder; +import cn.hippo4j.core.springboot.starter.refresher.event.AdapterExecutorsListener; +import cn.hippo4j.core.springboot.starter.refresher.event.ExecutorsListener; +import cn.hippo4j.core.springboot.starter.refresher.event.PlatformsListener; +import cn.hippo4j.core.springboot.starter.refresher.event.WebExecutorListener; +import cn.hippo4j.core.springboot.starter.support.DynamicThreadPoolPostProcessor; +import cn.hippo4j.core.springboot.starter.support.ThreadPoolAdapterRegister; +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.message.config.MessageConfiguration; +import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; +import cn.hippo4j.message.service.Hippo4jSendMessageService; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +/** + * Dynamic thread-pool core auto configuration. + */ +@Configuration +@AllArgsConstructor +@ConditionalOnBean(MarkerConfiguration.Marker.class) +@EnableConfigurationProperties(BootstrapCoreProperties.class) +@ImportAutoConfiguration({UtilAutoConfiguration.class, MessageConfiguration.class}) +@ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, value = "enable", matchIfMissing = true, havingValue = "true") +@Import({ + ConfigHandlerConfiguration.EmbeddedNacos.class, ConfigHandlerConfiguration.EmbeddedNacosCloud.class, + ConfigHandlerConfiguration.EmbeddedApollo.class, ConfigHandlerConfiguration.EmbeddedZookeeper.class +}) +public class DynamicThreadPoolCoreAutoConfiguration { + + private final BootstrapCoreProperties bootstrapCoreProperties; + + @Bean + @ConditionalOnMissingBean + @Order(Ordered.HIGHEST_PRECEDENCE) + public ApplicationContextHolder hippo4JApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + public NotifyConfigBuilder notifyConfigBuilder(AlarmControlHandler alarmControlHandler) { + return new CoreNotifyConfigBuilder(alarmControlHandler, bootstrapCoreProperties); + } + + @Bean + public ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler(Hippo4jSendMessageService hippoSendMessageService) { + return new ThreadPoolNotifyAlarmHandler(hippoSendMessageService); + } + + @Bean + public DynamicThreadPoolPostProcessor dynamicThreadPoolPostProcessor(ApplicationContextHolder hippo4JApplicationContextHolder) { + return new DynamicThreadPoolPostProcessor(bootstrapCoreProperties); + } + + @Bean + public DynamicThreadPoolMonitorExecutor hippo4jDynamicThreadPoolMonitorExecutor() { + return new DynamicThreadPoolMonitorExecutor(bootstrapCoreProperties); + } + + @Bean + @SuppressWarnings("all") + public ExecutorsListener hippo4jExecutorsListener(ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler, + CoreNotifyConfigBuilder coreNotifyConfigBuilder, + Hippo4jBaseSendMessageService hippoBaseSendMessageService) { + return new ExecutorsListener(threadPoolNotifyAlarmHandler, coreNotifyConfigBuilder, hippoBaseSendMessageService); + } + + @Bean + public AdapterExecutorsListener hippo4jAdapterExecutorsListener() { + return new AdapterExecutorsListener(); + } + + @Bean + public PlatformsListener hippo4jPlatformsListener() { + return new PlatformsListener(); + } + + @Bean + public WebExecutorListener hippo4jWebExecutorListener() { + return new WebExecutorListener(); + } + + @Bean + public ThreadPoolAdapterRegister threadPoolAdapterRegister() { + return new ThreadPoolAdapterRegister(bootstrapCoreProperties); + } + + @Bean + public DynamicThreadPoolBannerHandler threadPoolBannerHandler() { + return new DynamicThreadPoolBannerHandler(bootstrapCoreProperties); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ExecutorProperties.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ExecutorProperties.java new file mode 100644 index 00000000..dbcf4973 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ExecutorProperties.java @@ -0,0 +1,93 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import com.google.common.collect.Maps; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Map; +import java.util.Objects; + +/** + * Executor properties. + */ +@Data +@Accessors(chain = true) +public class ExecutorProperties { + + /** + * Thread pool id + */ + private String threadPoolId; + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Queue capacity + */ + private Integer queueCapacity; + + /** + * Blocking queue + */ + private String blockingQueue; + + /** + * Rejected handler + */ + private String rejectedHandler; + + /** + * Keep alive time + */ + private Long keepAliveTime; + + /** + * Execute timeout + */ + private Long executeTimeOut; + + /** + * Allow core thread timeout + */ + private Boolean allowCoreThreadTimeOut; + + /** + * Thread name prefix + */ + private String threadNamePrefix; + + /** + * Notify + */ + private ThreadPoolNotifyAlarm notify; + + public Map receives() { + return Objects.isNull(this.notify) || this.notify.getReceives() == null ? Maps.newHashMap() : this.notify.getReceives(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/NotifyPlatformProperties.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/NotifyPlatformProperties.java new file mode 100644 index 00000000..6b645de0 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/NotifyPlatformProperties.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import lombok.Data; + +/** + * Notify platform properties. + */ +@Data +public class NotifyPlatformProperties { + + /** + * Platform + */ + private String platform; + + /** + * Secret key. {@link NotifyPlatformProperties#token} + */ + @Deprecated + private String secretKey; + + /** + * Token + */ + private String token; + + /** + * Secret + */ + private String secret; +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/WebThreadPoolProperties.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/WebThreadPoolProperties.java new file mode 100644 index 00000000..915a0c4d --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/WebThreadPoolProperties.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.config; + +import lombok.Data; + +/** + * Web thread pool properties. + */ +@Data +public class WebThreadPoolProperties { + + /** + * Core pool size + */ + private Integer corePoolSize; + + /** + * Maximum pool size + */ + private Integer maximumPoolSize; + + /** + * Keep alive time + */ + private Integer keepAliveTime; +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java new file mode 100644 index 00000000..cc34d5f6 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java @@ -0,0 +1,91 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.monitor; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import com.example.monitor.base.DynamicThreadPoolMonitor; +import com.example.monitor.base.ThreadPoolMonitor; +import com.google.common.collect.Lists; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Dynamic thread-pool monitor executor. + */ +@Slf4j +@RequiredArgsConstructor +public class DynamicThreadPoolMonitorExecutor implements ApplicationRunner { + + private final BootstrapCoreProperties properties; + + private ScheduledThreadPoolExecutor collectExecutor; + + private List threadPoolMonitors; + + @Override + public void run(ApplicationArguments args) throws Exception { + String collectType = properties.getCollectType(); + if (!properties.getCollect() || StringUtil.isBlank(collectType)) { + return; + } + log.info("Start monitoring the running status of dynamic thread pool."); + threadPoolMonitors = Lists.newArrayList(); + collectExecutor = new ScheduledThreadPoolExecutor( + new Integer(1), + ThreadFactoryBuilder.builder().daemon(true).prefix("client.scheduled.collect.data").build()); + // Get dynamic thread pool monitoring component. + List collectTypes = Arrays.asList(collectType.split(",")); + ApplicationContextHolder.getBeansOfType(ThreadPoolMonitor.class) + .forEach((key, val) -> { + if (collectTypes.contains(val.getType())) { + threadPoolMonitors.add(val); + } + }); + Collection dynamicThreadPoolMonitors = + DynamicThreadPoolServiceLoader.getSingletonServiceInstances(DynamicThreadPoolMonitor.class); + dynamicThreadPoolMonitors.stream().filter(each -> collectTypes.contains(each.getType())).forEach(each -> threadPoolMonitors.add(each)); + // Execute dynamic thread pool monitoring component. + collectExecutor.scheduleWithFixedDelay( + () -> scheduleRunnable(), + properties.getInitialDelay(), + properties.getCollectInterval(), + TimeUnit.MILLISECONDS); + } + + private void scheduleRunnable() { + for (ThreadPoolMonitor each : threadPoolMonitors) { + try { + each.collect(); + } catch (Exception ex) { + log.error("Error monitoring the running status of dynamic thread pool. Type: {}", each.getType(), ex); + } + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/notify/CoreNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/notify/CoreNotifyConfigBuilder.java new file mode 100644 index 00000000..b829885e --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/notify/CoreNotifyConfigBuilder.java @@ -0,0 +1,145 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.notify; + +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.springboot.starter.config.NotifyPlatformProperties; +import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * Core notify config builder. + */ +@AllArgsConstructor +@Slf4j +public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { + + private final AlarmControlHandler alarmControlHandler; + + private final BootstrapCoreProperties bootstrapCoreProperties; + + @Override + public Map> buildNotify() { + Map> resultMap = Maps.newHashMap(); + boolean globalAlarm = bootstrapCoreProperties.getAlarm(); + List executors = bootstrapCoreProperties.getExecutors(); + if (CollectionUtil.isEmpty(executors)) { + log.warn("Failed to build notify, executors configuration is empty."); + return resultMap; + } + List actual = executors.stream().filter(each -> Optional.ofNullable(each.getNotify()).map(notify -> notify.getAlarm()).orElse(false)).collect(Collectors.toList()); + if (!globalAlarm && CollectionUtil.isEmpty(actual)) { + return resultMap; + } + for (ExecutorProperties executor : executors) { + Map> buildSingleNotifyConfig = buildSingleNotifyConfig(executor); + initCacheAndLock(buildSingleNotifyConfig); + resultMap.putAll(buildSingleNotifyConfig); + } + return resultMap; + } + + /** + * Build single notify config. + * + * @param executor + * @return + */ + public Map> buildSingleNotifyConfig(ExecutorProperties executor) { + Map> resultMap = Maps.newHashMap(); + String threadPoolId = executor.getThreadPoolId(); + String alarmBuildKey = threadPoolId + "+ALARM"; + List alarmNotifyConfigs = Lists.newArrayList(); + List notifyPlatforms = bootstrapCoreProperties.getNotifyPlatforms(); + for (NotifyPlatformProperties platformProperties : notifyPlatforms) { + NotifyConfigDTO notifyConfig = new NotifyConfigDTO(); + notifyConfig.setPlatform(platformProperties.getPlatform()); + notifyConfig.setTpId(threadPoolId); + notifyConfig.setType("ALARM"); + notifyConfig.setSecret(platformProperties.getSecret()); + notifyConfig.setSecretKey(getToken(platformProperties)); + int interval = Optional.ofNullable(executor.getNotify()) + .map(each -> each.getInterval()) + .orElseGet(() -> bootstrapCoreProperties.getAlarmInterval() != null ? bootstrapCoreProperties.getAlarmInterval() : 5); + notifyConfig.setInterval(interval); + notifyConfig.setReceives(buildReceive(executor, platformProperties)); + alarmNotifyConfigs.add(notifyConfig); + } + resultMap.put(alarmBuildKey, alarmNotifyConfigs); + String changeBuildKey = threadPoolId + "+CONFIG"; + List changeNotifyConfigs = Lists.newArrayList(); + for (NotifyPlatformProperties platformProperties : notifyPlatforms) { + NotifyConfigDTO notifyConfig = new NotifyConfigDTO(); + notifyConfig.setPlatform(platformProperties.getPlatform()); + notifyConfig.setTpId(threadPoolId); + notifyConfig.setType("CONFIG"); + notifyConfig.setSecretKey(getToken(platformProperties)); + notifyConfig.setSecret(platformProperties.getSecret()); + notifyConfig.setReceives(buildReceive(executor, platformProperties)); + changeNotifyConfigs.add(notifyConfig); + } + resultMap.put(changeBuildKey, changeNotifyConfigs); + return resultMap; + } + + public void initCacheAndLock(Map> buildSingleNotifyConfig) { + buildSingleNotifyConfig.forEach( + (key, val) -> val.stream() + .filter(each -> StrUtil.equals("ALARM", each.getType())) + .forEach(each -> alarmControlHandler.initCacheAndLock(each.getTpId(), each.getPlatform(), each.getInterval()))); + } + + private String buildReceive(ExecutorProperties executor, NotifyPlatformProperties platformProperties) { + String receive; + if (executor.getNotify() != null) { + receive = executor.getNotify().getReceive(); + if (StrUtil.isBlank(receive)) { + receive = bootstrapCoreProperties.getReceive(); + if (StrUtil.isBlank(receive)) { + Map receives = executor.receives(); + receive = receives.get(platformProperties.getPlatform()); + } + } + } else { + receive = bootstrapCoreProperties.getReceive(); + if (StrUtil.isBlank(receive)) { + Map receives = executor.receives(); + receive = receives.get(platformProperties.getPlatform()); + } + } + return receive; + } + + private String getToken(NotifyPlatformProperties platformProperties) { + return StringUtil.isNotBlank(platformProperties.getToken()) ? platformProperties.getToken() : platformProperties.getSecretKey(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/AbstractConfigParser.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/AbstractConfigParser.java new file mode 100644 index 00000000..72822277 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/AbstractConfigParser.java @@ -0,0 +1,29 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +/** + * Abstract config parser + */ +public abstract class AbstractConfigParser implements ConfigParser { + + @Override + public boolean supports(ConfigFileTypeEnum type) { + return getConfigFileTypes().contains(type); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigFileTypeEnum.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigFileTypeEnum.java new file mode 100644 index 00000000..91819d60 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigFileTypeEnum.java @@ -0,0 +1,72 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +import lombok.Getter; + +/** + * Config file type enum + */ +@Getter +public enum ConfigFileTypeEnum { + + /** + * PROPERTIES + */ + PROPERTIES("properties"), + + /** + * XML + */ + XML("xml"), + + /** + * JSON + */ + JSON("json"), + + /** + * YML + */ + YML("yml"), + + /** + * YAML + */ + YAML("yaml"), + + /** + * TXT + */ + TXT("txt"); + + private final String value; + + ConfigFileTypeEnum(String value) { + this.value = value; + } + + public static ConfigFileTypeEnum of(String value) { + for (ConfigFileTypeEnum typeEnum : ConfigFileTypeEnum.values()) { + if (typeEnum.value.equals(value)) { + return typeEnum; + } + } + return PROPERTIES; + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParser.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParser.java new file mode 100644 index 00000000..e0a98ba7 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParser.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * Config parser. + */ +public interface ConfigParser { + + /** + * Supports. + * + * @param type + * @return + */ + boolean supports(ConfigFileTypeEnum type); + + /** + * Do parse. + * + * @param content + * @return + * @throws IOException + */ + Map doParse(String content) throws IOException; + + /** + * Get config file types. + * + * @return + */ + List getConfigFileTypes(); +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParserHandler.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParserHandler.java new file mode 100644 index 00000000..0a02d466 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParserHandler.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +import com.google.common.collect.Lists; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; + +/** + * Config parser handler. + */ +public class ConfigParserHandler { + + private static final List PARSERS = Lists.newArrayList(); + + private ConfigParserHandler() { + ServiceLoader loader = ServiceLoader.load(ConfigParser.class); + for (ConfigParser configParser : loader) { + PARSERS.add(configParser); + } + PARSERS.add(new PropertiesConfigParser()); + PARSERS.add(new YamlConfigParser()); + } + + public Map parseConfig(String content, ConfigFileTypeEnum type) throws IOException { + for (ConfigParser parser : PARSERS) { + if (parser.supports(type)) { + return parser.doParse(content); + } + } + return Collections.emptyMap(); + } + + public static ConfigParserHandler getInstance() { + return ConfigParserHandlerHolder.INSTANCE; + } + + private static class ConfigParserHandlerHolder { + + private static final ConfigParserHandler INSTANCE = new ConfigParserHandler(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/PropertiesConfigParser.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/PropertiesConfigParser.java new file mode 100644 index 00000000..9fb118d2 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/PropertiesConfigParser.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +import com.google.common.collect.Lists; + +import java.io.IOException; +import java.io.StringReader; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +/** + * Properties config parser. + */ +public class PropertiesConfigParser extends AbstractConfigParser { + + @Override + public Map doParse(String content) throws IOException { + Properties properties = new Properties(); + properties.load(new StringReader(content)); + return properties; + } + + @Override + public List getConfigFileTypes() { + return Lists.newArrayList(ConfigFileTypeEnum.PROPERTIES); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/YamlConfigParser.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/YamlConfigParser.java new file mode 100644 index 00000000..6f78ee23 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/YamlConfigParser.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.parser; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; + +/** + * Yaml config parser. + */ +public class YamlConfigParser extends AbstractConfigParser { + + @Override + public Map doParse(String content) { + if (StringUtils.isEmpty(content)) { + return Maps.newHashMapWithExpectedSize(0); + } + YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean(); + yamlPropertiesFactoryBean.setResources(new ByteArrayResource(content.getBytes())); + return yamlPropertiesFactoryBean.getObject(); + } + + @Override + public List getConfigFileTypes() { + return Lists.newArrayList(ConfigFileTypeEnum.YML, ConfigFileTypeEnum.YAML); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java new file mode 100644 index 00000000..db75f1ca --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java @@ -0,0 +1,68 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.parser.ConfigParserHandler; +import cn.hippo4j.core.springboot.starter.refresher.event.Hippo4jCoreDynamicRefreshEvent; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; + +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutorService; + +/** + * Abstract core thread-pool dynamic refresh. + */ +@Slf4j +@RequiredArgsConstructor +public abstract class AbstractCoreThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh, InitializingBean { + + protected final BootstrapCoreProperties bootstrapCoreProperties; + + protected final ExecutorService dynamicRefreshExecutorService = ThreadPoolBuilder.builder().singlePool("client.dynamic.refresh").build(); + + public AbstractCoreThreadPoolDynamicRefresh() { + bootstrapCoreProperties = ApplicationContextHolder.getBean(BootstrapCoreProperties.class); + } + + @Override + public void dynamicRefresh(String configContent) { + dynamicRefresh(configContent, null); + } + + @Override + public void dynamicRefresh(String configContent, Map newValueChangeMap) { + try { + Map configInfo = ConfigParserHandler.getInstance().parseConfig(configContent, bootstrapCoreProperties.getConfigFileType()); + if (CollectionUtil.isNotEmpty(newValueChangeMap)) { + Optional.ofNullable(configInfo).ifPresent(each -> each.putAll(newValueChangeMap)); + } + BootstrapCoreProperties bindableCoreProperties = BootstrapCorePropertiesBinderAdapt.bootstrapCorePropertiesBinder(configInfo, bootstrapCoreProperties); + ApplicationContextHolder.getInstance().publishEvent(new Hippo4jCoreDynamicRefreshEvent(this, bindableCoreProperties)); + } catch (Exception ex) { + log.error("Hippo-4J core dynamic refresh failed.", ex); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ApolloRefresherHandler.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ApolloRefresherHandler.java new file mode 100644 index 00000000..89ce57aa --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ApolloRefresherHandler.java @@ -0,0 +1,65 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import com.ctrip.framework.apollo.Config; +import com.ctrip.framework.apollo.ConfigChangeListener; +import com.ctrip.framework.apollo.ConfigFile; +import com.ctrip.framework.apollo.ConfigService; +import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; +import com.ctrip.framework.apollo.model.ConfigChange; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; + +import java.util.Map; + +import static cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties.PREFIX; + +/** + * Apollo refresher handler. + */ +@Slf4j +public class ApolloRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh { + + private static final String APOLLO_PROPERTY = "${spring.dynamic.thread-pool.apollo.namespace:application}"; + + @Value(APOLLO_PROPERTY) + private String namespace; + + @Override + public void afterPropertiesSet() { + String[] apolloNamespaces = this.namespace.split(","); + this.namespace = apolloNamespaces[0]; + Config config = ConfigService.getConfig(String.format("%s.%s", namespace, bootstrapCoreProperties.getConfigFileType().getValue())); + ConfigChangeListener configChangeListener = configChangeEvent -> { + String namespace = this.namespace.replaceAll("." + bootstrapCoreProperties.getConfigFileType().getValue(), ""); + ConfigFileFormat configFileFormat = ConfigFileFormat.fromString(bootstrapCoreProperties.getConfigFileType().getValue()); + ConfigFile configFile = ConfigService.getConfigFile(namespace, configFileFormat); + Map newChangeValueMap = Maps.newHashMap(); + configChangeEvent.changedKeys().stream().filter(each -> each.contains(PREFIX)).forEach(each -> { + ConfigChange change = configChangeEvent.getChange(each); + String newValue = change.getNewValue(); + newChangeValueMap.put(each, newValue); + }); + dynamicRefresh(configFile.getContent(), newChangeValueMap); + }; + config.addChangeListener(configChangeListener); + log.info("Dynamic thread pool refresher, add apollo listener success. namespace: {}", namespace); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java new file mode 100644 index 00000000..f8bc5311 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java @@ -0,0 +1,169 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.springboot.starter.config.NotifyPlatformProperties; +import cn.hippo4j.message.enums.NotifyPlatformEnum; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.boot.context.properties.source.ConfigurationPropertySource; +import org.springframework.boot.context.properties.source.MapConfigurationPropertySource; + +import java.util.List; +import java.util.Map; + +import static cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties.PREFIX; + +/** + * Bootstrap core properties binder adapt. + */ +public class BootstrapCorePropertiesBinderAdapt { + + /** + * Bootstrap core properties binder. + * + * @param configInfo + * @param bootstrapCoreProperties + * @return + */ + public static BootstrapCoreProperties bootstrapCorePropertiesBinder(Map configInfo, BootstrapCoreProperties bootstrapCoreProperties) { + BootstrapCoreProperties bindableCoreProperties = null; + try { + ConfigurationPropertySource sources = new MapConfigurationPropertySource(configInfo); + Binder binder = new Binder(sources); + bindableCoreProperties = binder.bind(PREFIX, Bindable.ofInstance(bootstrapCoreProperties)).get(); + } catch (Exception ex) { + try { + Class.forName("org.springframework.boot.context.properties.bind.Binder"); + } catch (ClassNotFoundException notEx) { + bindableCoreProperties = adapt(configInfo); + } + } + return bindableCoreProperties; + } + + /** + * 此处采用硬编码适配低版本 SpringBoot 1.5.x, 如果有更好的方法进行逻辑转换的话, 欢迎 PR. + * + * @param configInfo + * @return + */ + @Deprecated + private static BootstrapCoreProperties adapt(Map configInfo) { + BootstrapCoreProperties bindableCoreProperties; + try { + // filter + Map targetMap = Maps.newHashMap(); + configInfo.forEach((key, val) -> { + boolean containFlag = key != null + && StringUtil.isNotBlank((String) key) + && (((String) key).indexOf(PREFIX + ".executors") != -1 + || ((String) key).indexOf(PREFIX + ".notify-platforms") != -1 + || ((String) key).indexOf(PREFIX + ".notifyPlatforms") != -1); + if (containFlag) { + String targetKey = key.toString().replace(PREFIX + ".", ""); + targetMap.put(targetKey, val); + } + }); + // convert + List executorPropertiesList = Lists.newArrayList(); + List notifyPropertiesList = Lists.newArrayList(); + for (int i = 0; i < Integer.MAX_VALUE; i++) { + Map executorSingleMap = Maps.newHashMap(); + Map platformSingleMap = Maps.newHashMap(); + Map notifySingleMap = Maps.newHashMap(); + + for (Map.Entry entry : targetMap.entrySet()) { + String key = entry.getKey().toString(); + if (key.indexOf("executors[" + i + "].") != -1) { + if (key.indexOf("executors[" + i + "].notify.") != -1) { + key = key.replace("executors[" + i + "].notify.", ""); + String[] notifyKeySplit = key.split("-"); + if (notifyKeySplit != null && notifyKeySplit.length > 0) { + key = key.replace("-", "_"); + } + notifySingleMap.put(key, entry.getValue()); + } else { + key = key.replace("executors[" + i + "].", ""); + + String[] keySplit = key.split("-"); + if (keySplit != null && keySplit.length > 0) { + key = key.replace("-", "_"); + } + executorSingleMap.put(key, entry.getValue()); + } + } + if (key.indexOf("notify-platforms[" + i + "].") != -1 || key.indexOf("notifyPlatforms[" + i + "].") != -1) { + if (key.indexOf("notify-platforms[" + i + "].") != -1) { + key = key.replace("notify-platforms[" + i + "].", ""); + } else { + key = key.replace("notifyPlatforms[" + i + "].", ""); + } + String[] keySplit = key.split("-"); + if (keySplit != null && keySplit.length > 0) { + key = key.replace("-", "_"); + } + platformSingleMap.put(key, entry.getValue()); + } + } + if (CollectionUtil.isEmpty(executorSingleMap) && CollectionUtil.isEmpty(platformSingleMap)) { + break; + } + if (CollectionUtil.isNotEmpty(executorSingleMap)) { + ExecutorProperties executorProperties = BeanUtil.mapToBean(executorSingleMap, ExecutorProperties.class, true, CopyOptions.create()); + if (executorProperties != null) { + if (CollectionUtil.isNotEmpty(notifySingleMap)) { + ThreadPoolNotifyAlarm alarm = BeanUtil.mapToBean(notifySingleMap, ThreadPoolNotifyAlarm.class, true, CopyOptions.create()); + Map notifyReceivesMap = Maps.newHashMap(); + for (NotifyPlatformEnum value : NotifyPlatformEnum.values()) { + Object receives = targetMap.get("executors[" + i + "].notify.receives." + value.name()); + if (receives != null && StringUtil.isNotBlank((String) receives)) { + notifyReceivesMap.put(value.name(), (String) receives); + } + } + alarm.setReceives(notifyReceivesMap); + executorProperties.setNotify(alarm); + } + executorPropertiesList.add(executorProperties); + } + } + if (CollectionUtil.isNotEmpty(platformSingleMap)) { + NotifyPlatformProperties notifyPlatformProperties = BeanUtil.mapToBean(platformSingleMap, NotifyPlatformProperties.class, true, CopyOptions.create()); + if (notifyPlatformProperties != null) { + notifyPropertiesList.add(notifyPlatformProperties); + } + } + } + bindableCoreProperties = new BootstrapCoreProperties(); + bindableCoreProperties.setExecutors(executorPropertiesList); + bindableCoreProperties.setNotifyPlatforms(notifyPropertiesList); + } catch (Exception ex) { + throw ex; + } + return bindableCoreProperties; + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosCloudRefresherHandler.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosCloudRefresherHandler.java new file mode 100644 index 00000000..1afb4ad5 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosCloudRefresherHandler.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import com.alibaba.cloud.nacos.NacosConfigManager; +import com.alibaba.nacos.api.config.listener.Listener; +import lombok.extern.slf4j.Slf4j; + +import java.util.Map; +import java.util.concurrent.Executor; + +/** + * Nacos cloud refresher handler. + */ +@Slf4j +public class NacosCloudRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh { + + private final NacosConfigManager nacosConfigManager; + + public NacosCloudRefresherHandler() { + nacosConfigManager = ApplicationContextHolder.getBean(NacosConfigManager.class); + } + + @Override + public void afterPropertiesSet() throws Exception { + Map nacosConfig = bootstrapCoreProperties.getNacos(); + nacosConfigManager.getConfigService().addListener(nacosConfig.get("data-id"), + nacosConfig.get("group"), new Listener() { + + @Override + public Executor getExecutor() { + return dynamicRefreshExecutorService; + } + + @Override + public void receiveConfigInfo(String configInfo) { + dynamicRefresh(configInfo); + } + }); + log.info("Dynamic thread pool refresher, add nacos cloud listener success. data-id: {}, group: {}", nacosConfig.get("data-id"), nacosConfig.get("group")); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosRefresherHandler.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosRefresherHandler.java new file mode 100644 index 00000000..652ed484 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosRefresherHandler.java @@ -0,0 +1,62 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import com.alibaba.nacos.api.annotation.NacosInjected; +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.config.listener.Listener; +import lombok.extern.slf4j.Slf4j; + +import java.util.Map; +import java.util.concurrent.Executor; + +/** + * Nacos refresher handler. + */ +@Slf4j +public class NacosRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh { + + @NacosInjected + private ConfigService configService; + + public NacosRefresherHandler(BootstrapCoreProperties bootstrapCoreProperties) { + super(bootstrapCoreProperties); + } + + @Override + public void afterPropertiesSet() throws Exception { + Map nacosConfig = bootstrapCoreProperties.getNacos(); + + configService.addListener(nacosConfig.get("data-id"), nacosConfig.get("group"), + new Listener() { + + @Override + public Executor getExecutor() { + return dynamicRefreshExecutorService; + } + + @Override + public void receiveConfigInfo(String configInfo) { + dynamicRefresh(configInfo); + } + }); + log.info("Dynamic thread pool refresher, add nacos listener success. data-id: {}, group: {}", nacosConfig.get("data-id"), nacosConfig.get("group")); + + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ZookeeperRefresherHandler.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ZookeeperRefresherHandler.java new file mode 100644 index 00000000..1f7cd9ab --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ZookeeperRefresherHandler.java @@ -0,0 +1,121 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher; + +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import com.google.common.base.Charsets; +import lombok.extern.slf4j.Slf4j; +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.framework.api.CuratorListener; +import org.apache.curator.framework.api.GetChildrenBuilder; +import org.apache.curator.framework.api.GetDataBuilder; +import org.apache.curator.framework.state.ConnectionState; +import org.apache.curator.framework.state.ConnectionStateListener; +import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.curator.utils.ZKPaths; +import org.apache.zookeeper.WatchedEvent; + +import java.util.List; +import java.util.Map; + +/** + * Zookeeper refresher handler. + */ +@Slf4j +public class ZookeeperRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh { + + private CuratorFramework curatorFramework; + + @Override + public void afterPropertiesSet() { + Map zkConfigs = bootstrapCoreProperties.getZookeeper(); + curatorFramework = CuratorFrameworkFactory.newClient(zkConfigs.get("zk-connect-str"), + new ExponentialBackoffRetry(1000, 3)); + String nodePath = ZKPaths.makePath(ZKPaths.makePath(zkConfigs.get("root-node"), + zkConfigs.get("config-version")), zkConfigs.get("node")); + final ConnectionStateListener connectionStateListener = (client, newState) -> { + if (newState == ConnectionState.CONNECTED) { + loadNode(nodePath); + } else if (newState == ConnectionState.RECONNECTED) { + loadNode(nodePath); + } + }; + final CuratorListener curatorListener = (client, curatorEvent) -> { + final WatchedEvent watchedEvent = curatorEvent.getWatchedEvent(); + if (null != watchedEvent) { + switch (watchedEvent.getType()) { + case NodeChildrenChanged: + case NodeDataChanged: + loadNode(nodePath); + break; + default: + break; + } + } + }; + curatorFramework.getConnectionStateListenable().addListener(connectionStateListener); + curatorFramework.getCuratorListenable().addListener(curatorListener); + curatorFramework.start(); + } + + /** + * Load config info and refresh. + * + * @param nodePath zk config node path. + */ + public void loadNode(String nodePath) { + try { + final GetChildrenBuilder childrenBuilder = curatorFramework.getChildren(); + final List children = childrenBuilder.watched().forPath(nodePath); + StringBuilder content = new StringBuilder(); + children.forEach(c -> { + String n = ZKPaths.makePath(nodePath, c); + final String nodeName = ZKPaths.getNodeFromPath(n); + final GetDataBuilder data = curatorFramework.getData(); + String value = ""; + try { + value = new String(data.watched().forPath(n), Charsets.UTF_8); + } catch (Exception ex) { + log.error("Load zookeeper node error", ex); + } + content.append(nodeName).append("=").append(value).append("\n"); + }); + dynamicRefresh(content.toString()); + registerNotifyAlarmManage(); + } catch (Exception ex) { + log.error("Load zookeeper node error, nodePath is: {}", nodePath, ex); + } + } + + /** + * Register notify alarm manage. + */ + public void registerNotifyAlarmManage() { + bootstrapCoreProperties.getExecutors().forEach(executorProperties -> { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm( + executorProperties.getNotify().getAlarm(), + executorProperties.getNotify().getCapacityAlarm(), + executorProperties.getNotify().getActiveAlarm()); + threadPoolNotifyAlarm.setInterval(executorProperties.getNotify().getInterval()); + threadPoolNotifyAlarm.setReceives(executorProperties.receives()); + GlobalNotifyAlarmManage.put(executorProperties.getThreadPoolId(), threadPoolNotifyAlarm); + }); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/AdapterExecutorsListener.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/AdapterExecutorsListener.java new file mode 100644 index 00000000..2bbcb0f1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/AdapterExecutorsListener.java @@ -0,0 +1,69 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.core.springboot.starter.config.AdapterExecutorProperties; +import cn.hutool.core.bean.BeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.core.annotation.Order; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; +import static cn.hippo4j.core.springboot.starter.refresher.event.Hippo4jCoreDynamicRefreshEventOrder.ADAPTER_EXECUTORS_LISTENER; +import static cn.hippo4j.core.springboot.starter.support.ThreadPoolAdapterRegister.ADAPTER_EXECUTORS_MAP; + +/** + * Adapter executors listener. + */ +@Slf4j +@Order(ADAPTER_EXECUTORS_LISTENER) +public class AdapterExecutorsListener implements ApplicationListener { + + @Override + public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent event) { + List adapterExecutors; + Map threadPoolAdapterMap = ApplicationContextHolder.getBeansOfType(ThreadPoolAdapter.class); + if (CollectionUtil.isEmpty(adapterExecutors = event.getBootstrapCoreProperties().getAdapterExecutors()) || CollectionUtil.isEmpty(threadPoolAdapterMap)) { + return; + } + for (AdapterExecutorProperties each : adapterExecutors) { + String buildKey = each.getMark() + IDENTIFY_SLICER_SYMBOL + each.getThreadPoolKey(); + AdapterExecutorProperties adapterExecutorProperties = ADAPTER_EXECUTORS_MAP.get(buildKey); + if (adapterExecutorProperties == null) { + continue; + } + if (!Objects.equals(adapterExecutorProperties.getCorePoolSize(), each.getCorePoolSize()) + || !Objects.equals(adapterExecutorProperties.getMaximumPoolSize(), each.getMaximumPoolSize())) { + threadPoolAdapterMap.forEach((key, val) -> { + if (Objects.equals(val.mark(), each.getMark())) { + val.updateThreadPool(BeanUtil.toBean(each, ThreadPoolAdapterParameter.class)); + ADAPTER_EXECUTORS_MAP.put(buildKey, each); + } + }); + } + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/ExecutorsListener.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/ExecutorsListener.java new file mode 100644 index 00000000..7b27ca13 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/ExecutorsListener.java @@ -0,0 +1,265 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; +import cn.hippo4j.core.executor.support.QueueTypeEnum; +import cn.hippo4j.core.executor.support.RejectedTypeEnum; +import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockingQueue; +import cn.hippo4j.core.proxy.RejectedProxyUtil; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.springboot.starter.notify.CoreNotifyConfigBuilder; +import cn.hippo4j.core.springboot.starter.support.GlobalCoreThreadPoolManage; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import com.google.common.collect.Lists; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.core.annotation.Order; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_THREAD_POOL_TEXT; +import static cn.hippo4j.core.springboot.starter.refresher.event.Hippo4jCoreDynamicRefreshEventOrder.EXECUTORS_LISTENER; + +/** + * Executors listener. + */ +@Slf4j +@RequiredArgsConstructor +@Order(EXECUTORS_LISTENER) +public class ExecutorsListener implements ApplicationListener { + + private final ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler; + + private final CoreNotifyConfigBuilder coreNotifyConfigBuilder; + + private final Hippo4jBaseSendMessageService hippo4jBaseSendMessageService; + + @Override + public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent threadPoolDynamicRefreshEvent) { + BootstrapCoreProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapCoreProperties(); + List executors = bindableCoreProperties.getExecutors(); + for (ExecutorProperties properties : executors) { + String threadPoolId = properties.getThreadPoolId(); + // Check whether the notification configuration is consistent. + // this operation will not trigger the notification. + checkNotifyConsistencyAndReplace(properties); + if (!checkConsistency(threadPoolId, properties)) { + continue; + } + // refresh executor pool. + dynamicRefreshPool(threadPoolId, properties); + // old properties. + ExecutorProperties beforeProperties = GlobalCoreThreadPoolManage.getProperties(properties.getThreadPoolId()); + // refresh executor properties. + GlobalCoreThreadPoolManage.refresh(threadPoolId, properties); + log.info(CHANGE_THREAD_POOL_TEXT, + threadPoolId, + String.format(CHANGE_DELIMITER, beforeProperties.getCorePoolSize(), properties.getCorePoolSize()), + String.format(CHANGE_DELIMITER, beforeProperties.getMaximumPoolSize(), properties.getMaximumPoolSize()), + String.format(CHANGE_DELIMITER, beforeProperties.getBlockingQueue(), properties.getBlockingQueue()), + String.format(CHANGE_DELIMITER, beforeProperties.getQueueCapacity(), properties.getQueueCapacity()), + String.format(CHANGE_DELIMITER, beforeProperties.getKeepAliveTime(), properties.getKeepAliveTime()), + String.format(CHANGE_DELIMITER, beforeProperties.getExecuteTimeOut(), properties.getExecuteTimeOut()), + String.format(CHANGE_DELIMITER, beforeProperties.getRejectedHandler(), properties.getRejectedHandler()), + String.format(CHANGE_DELIMITER, beforeProperties.getAllowCoreThreadTimeOut(), properties.getAllowCoreThreadTimeOut())); + try { + threadPoolNotifyAlarmHandler.sendPoolConfigChange(newChangeRequest(beforeProperties, properties)); + } catch (Throwable ex) { + log.error("Failed to send Chang smart application listener notice. Message: {}", ex.getMessage()); + } + } + } + + /** + * Construct change parameter notify request instance. + * + * @param beforeProperties old properties + * @param properties new properties + * @return instance + */ + private ChangeParameterNotifyRequest newChangeRequest(ExecutorProperties beforeProperties, ExecutorProperties properties) { + ChangeParameterNotifyRequest changeParameterNotifyRequest = ChangeParameterNotifyRequest.builder() + .beforeCorePoolSize(beforeProperties.getCorePoolSize()) + .beforeMaximumPoolSize(beforeProperties.getMaximumPoolSize()) + .beforeAllowsCoreThreadTimeOut(beforeProperties.getAllowCoreThreadTimeOut()) + .beforeKeepAliveTime(beforeProperties.getKeepAliveTime()) + .blockingQueueName(beforeProperties.getBlockingQueue()) + .beforeQueueCapacity(beforeProperties.getQueueCapacity()) + .beforeRejectedName(beforeProperties.getRejectedHandler()) + .beforeExecuteTimeOut(beforeProperties.getExecuteTimeOut()) + .nowCorePoolSize(properties.getCorePoolSize()) + .nowMaximumPoolSize(properties.getMaximumPoolSize()) + .nowAllowsCoreThreadTimeOut(properties.getAllowCoreThreadTimeOut()) + .nowKeepAliveTime(properties.getKeepAliveTime()) + .nowQueueCapacity(properties.getQueueCapacity()) + .nowRejectedName(properties.getRejectedHandler()) + .nowExecuteTimeOut(properties.getExecuteTimeOut()) + .build(); + changeParameterNotifyRequest.setThreadPoolId(beforeProperties.getThreadPoolId()); + return changeParameterNotifyRequest; + } + + /** + * Check notify consistency and replace. + * + * @param properties + */ + private void checkNotifyConsistencyAndReplace(ExecutorProperties properties) { + boolean checkNotifyConfig = false; + boolean checkNotifyAlarm = false; + List changeKeys = Lists.newArrayList(); + Map> newDynamicThreadPoolNotifyMap = coreNotifyConfigBuilder.buildSingleNotifyConfig(properties); + Map> notifyConfigs = hippo4jBaseSendMessageService.getNotifyConfigs(); + if (CollectionUtil.isNotEmpty(notifyConfigs)) { + for (Map.Entry> each : newDynamicThreadPoolNotifyMap.entrySet()) { + if (checkNotifyConfig) { + break; + } + List notifyConfigDTOS = notifyConfigs.get(each.getKey()); + for (NotifyConfigDTO notifyConfig : each.getValue()) { + if (!notifyConfigDTOS.contains(notifyConfig)) { + checkNotifyConfig = true; + changeKeys.add(each.getKey()); + break; + } + } + } + } + if (checkNotifyConfig) { + coreNotifyConfigBuilder.initCacheAndLock(newDynamicThreadPoolNotifyMap); + hippo4jBaseSendMessageService.putPlatform(newDynamicThreadPoolNotifyMap); + } + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(properties.getThreadPoolId()); + if (threadPoolNotifyAlarm != null && properties.getNotify() != null) { + ThreadPoolNotifyAlarm notify = properties.getNotify(); + boolean isAlarm = notify.getAlarm(); + Integer activeAlarm = notify.getActiveAlarm(); + Integer capacityAlarm = notify.getCapacityAlarm(); + if (threadPoolNotifyAlarm.getAlarm() != isAlarm + || threadPoolNotifyAlarm.getActiveAlarm() != activeAlarm + || threadPoolNotifyAlarm.getCapacityAlarm() != capacityAlarm) { + checkNotifyAlarm = true; + threadPoolNotifyAlarm.setAlarm(isAlarm); + threadPoolNotifyAlarm.setActiveAlarm(activeAlarm); + threadPoolNotifyAlarm.setCapacityAlarm(capacityAlarm); + } + } + if (checkNotifyConfig || checkNotifyAlarm) { + log.info("[{}] Dynamic thread pool notification property changes.", properties.getThreadPoolId()); + } + } + + /** + * Check consistency. + * + * @param threadPoolId + * @param properties + */ + private boolean checkConsistency(String threadPoolId, ExecutorProperties properties) { + ExecutorProperties beforeProperties = GlobalCoreThreadPoolManage.getProperties(properties.getThreadPoolId()); + ThreadPoolExecutor executor = GlobalThreadPoolManage.getExecutor(threadPoolId); + if (executor == null) { + return false; + } + boolean result = !Objects.equals(beforeProperties.getCorePoolSize(), properties.getCorePoolSize()) + || !Objects.equals(beforeProperties.getMaximumPoolSize(), properties.getMaximumPoolSize()) + || !Objects.equals(beforeProperties.getAllowCoreThreadTimeOut(), properties.getAllowCoreThreadTimeOut()) + || !Objects.equals(beforeProperties.getExecuteTimeOut(), properties.getExecuteTimeOut()) + || !Objects.equals(beforeProperties.getKeepAliveTime(), properties.getKeepAliveTime()) + || !Objects.equals(beforeProperties.getRejectedHandler(), properties.getRejectedHandler()) + || + (!Objects.equals(beforeProperties.getQueueCapacity(), properties.getQueueCapacity()) + && Objects.equals(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.name, executor.getQueue().getClass().getSimpleName())); + return result; + } + + /** + * Dynamic refresh pool. + * + * @param threadPoolId + * @param properties + */ + private void dynamicRefreshPool(String threadPoolId, ExecutorProperties properties) { + ExecutorProperties beforeProperties = GlobalCoreThreadPoolManage.getProperties(properties.getThreadPoolId()); + ThreadPoolExecutor executor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); + if (properties.getMaximumPoolSize() != null && properties.getCorePoolSize() != null) { + if (properties.getMaximumPoolSize() < executor.getMaximumPoolSize()) { + executor.setCorePoolSize(properties.getCorePoolSize()); + executor.setMaximumPoolSize(properties.getMaximumPoolSize()); + } else { + executor.setMaximumPoolSize(properties.getMaximumPoolSize()); + executor.setCorePoolSize(properties.getCorePoolSize()); + } + } else { + if (properties.getMaximumPoolSize() != null) { + executor.setMaximumPoolSize(properties.getMaximumPoolSize()); + } + if (properties.getCorePoolSize() != null) { + executor.setCorePoolSize(properties.getCorePoolSize()); + } + } + if (!Objects.equals(beforeProperties.getAllowCoreThreadTimeOut(), properties.getAllowCoreThreadTimeOut())) { + executor.allowCoreThreadTimeOut(properties.getAllowCoreThreadTimeOut()); + } + if (!Objects.equals(beforeProperties.getExecuteTimeOut(), properties.getExecuteTimeOut())) { + if (executor instanceof AbstractDynamicExecutorSupport) { + ((DynamicThreadPoolExecutor) executor).setExecuteTimeOut(properties.getExecuteTimeOut()); + } + } + if (!Objects.equals(beforeProperties.getRejectedHandler(), properties.getRejectedHandler())) { + RejectedExecutionHandler rejectedExecutionHandler = RejectedTypeEnum.createPolicy(properties.getRejectedHandler()); + if (executor instanceof AbstractDynamicExecutorSupport) { + DynamicThreadPoolExecutor dynamicExecutor = (DynamicThreadPoolExecutor) executor; + dynamicExecutor.setRedundancyHandler(rejectedExecutionHandler); + AtomicLong rejectCount = dynamicExecutor.getRejectCount(); + rejectedExecutionHandler = RejectedProxyUtil.createProxy(rejectedExecutionHandler, threadPoolId, rejectCount); + } + executor.setRejectedExecutionHandler(rejectedExecutionHandler); + } + if (!Objects.equals(beforeProperties.getKeepAliveTime(), properties.getKeepAliveTime())) { + executor.setKeepAliveTime(properties.getKeepAliveTime(), TimeUnit.SECONDS); + } + if (!Objects.equals(beforeProperties.getQueueCapacity(), properties.getQueueCapacity()) + && Objects.equals(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.name, executor.getQueue().getClass().getSimpleName())) { + if (executor.getQueue() instanceof ResizableCapacityLinkedBlockingQueue) { + ResizableCapacityLinkedBlockingQueue queue = (ResizableCapacityLinkedBlockingQueue) executor.getQueue(); + queue.setCapacity(properties.getQueueCapacity()); + } else { + log.warn("The queue length cannot be modified. Queue type mismatch. Current queue type: {}", executor.getQueue().getClass().getSimpleName()); + } + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEvent.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEvent.java new file mode 100644 index 00000000..bb979f96 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEvent.java @@ -0,0 +1,38 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import lombok.Getter; +import lombok.Setter; +import org.springframework.context.ApplicationEvent; + +/** + * Hippo-4j core dynamic refresh event. + */ +public class Hippo4jCoreDynamicRefreshEvent extends ApplicationEvent { + + @Getter + @Setter + private BootstrapCoreProperties bootstrapCoreProperties; + + public Hippo4jCoreDynamicRefreshEvent(Object source, BootstrapCoreProperties bootstrapCoreProperties) { + super(source); + this.bootstrapCoreProperties = bootstrapCoreProperties; + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEventOrder.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEventOrder.java new file mode 100644 index 00000000..72c4641f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEventOrder.java @@ -0,0 +1,32 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +/** + * Hippo-4j core dynamic refresh event order. + */ +public interface Hippo4jCoreDynamicRefreshEventOrder { + + int WEB_EXECUTOR_LISTENER = 0; + + int PLATFORMS_LISTENER = 1; + + int EXECUTORS_LISTENER = 2; + + int ADAPTER_EXECUTORS_LISTENER = 3; +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/PlatformsListener.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/PlatformsListener.java new file mode 100644 index 00000000..e8034ca9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/PlatformsListener.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.springboot.starter.notify.CoreNotifyConfigBuilder; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; +import org.springframework.context.ApplicationListener; +import org.springframework.core.annotation.Order; + +import java.util.List; +import java.util.Map; + +import static cn.hippo4j.core.springboot.starter.refresher.event.Hippo4jCoreDynamicRefreshEventOrder.PLATFORMS_LISTENER; + +/** + * Platforms listener. + */ +@Order(PLATFORMS_LISTENER) +public class PlatformsListener implements ApplicationListener { + + @Override + public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent threadPoolDynamicRefreshEvent) { + BootstrapCoreProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapCoreProperties(); + List executors = bindableCoreProperties.getExecutors(); + for (ExecutorProperties executorProperties : executors) { + String threadPoolId = executorProperties.getThreadPoolId(); + DynamicThreadPoolWrapper wrapper = GlobalThreadPoolManage.getExecutorService(threadPoolId); + if (wrapper != null && !wrapper.isInitFlag()) { + Hippo4jBaseSendMessageService sendMessageService = ApplicationContextHolder.getBean(Hippo4jBaseSendMessageService.class); + CoreNotifyConfigBuilder configBuilder = ApplicationContextHolder.getBean(CoreNotifyConfigBuilder.class); + Map> notifyConfig = configBuilder.buildSingleNotifyConfig(executorProperties); + sendMessageService.putPlatform(notifyConfig); + wrapper.setInitFlag(Boolean.TRUE); + } + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/WebExecutorListener.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/WebExecutorListener.java new file mode 100644 index 00000000..e191caef --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/WebExecutorListener.java @@ -0,0 +1,87 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.refresher.event; + +import cn.hippo4j.adapter.web.WebThreadPoolHandlerChoose; +import cn.hippo4j.adapter.web.WebThreadPoolService; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.WebThreadPoolProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.core.annotation.Order; + +import java.util.Objects; + +import static cn.hippo4j.core.springboot.starter.refresher.event.Hippo4jCoreDynamicRefreshEventOrder.WEB_EXECUTOR_LISTENER; + +/** + * Web executor listener. + */ +@Slf4j +@Order(WEB_EXECUTOR_LISTENER) +public class WebExecutorListener implements ApplicationListener { + + @Override + public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent threadPoolDynamicRefreshEvent) { + BootstrapCoreProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapCoreProperties(); + boolean isNullFlag = bindableCoreProperties.getJetty() == null + && bindableCoreProperties.getUndertow() == null + && bindableCoreProperties.getTomcat() == null; + if (isNullFlag) { + return; + } + try { + ThreadPoolParameterInfo nowParameter = buildWebPoolParameter(bindableCoreProperties); + if (nowParameter != null) { + WebThreadPoolHandlerChoose webThreadPoolHandlerChoose = ApplicationContextHolder.getBean(WebThreadPoolHandlerChoose.class); + WebThreadPoolService webThreadPoolService = webThreadPoolHandlerChoose.choose(); + ThreadPoolParameter beforeParameter = webThreadPoolService.getWebThreadPoolParameter(); + if (!Objects.equals(beforeParameter.getCoreSize(), nowParameter.getCoreSize()) + || !Objects.equals(beforeParameter.getMaxSize(), nowParameter.getMaxSize()) + || !Objects.equals(beforeParameter.getKeepAliveTime(), nowParameter.getKeepAliveTime())) { + webThreadPoolService.updateWebThreadPool(nowParameter); + } + } + } catch (Exception ex) { + log.error("Failed to modify web thread pool.", ex); + } + } + + private ThreadPoolParameterInfo buildWebPoolParameter(BootstrapCoreProperties bindableCoreProperties) { + ThreadPoolParameterInfo threadPoolParameterInfo = null; + WebThreadPoolProperties webThreadPoolProperties = null; + if (bindableCoreProperties.getTomcat() != null) { + webThreadPoolProperties = bindableCoreProperties.getTomcat(); + } else if (bindableCoreProperties.getUndertow() != null) { + webThreadPoolProperties = bindableCoreProperties.getUndertow(); + } else if (bindableCoreProperties.getJetty() != null) { + webThreadPoolProperties = bindableCoreProperties.getJetty(); + } + if (webThreadPoolProperties != null) { + threadPoolParameterInfo = ThreadPoolParameterInfo.builder() + .coreSize(webThreadPoolProperties.getCorePoolSize()) + .maximumPoolSize(webThreadPoolProperties.getMaximumPoolSize()) + .keepAliveTime(webThreadPoolProperties.getKeepAliveTime()) + .build(); + } + return threadPoolParameterInfo; + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java new file mode 100644 index 00000000..5a44a5ae --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java @@ -0,0 +1,197 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.support; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.*; +import cn.hippo4j.core.executor.support.adpter.DynamicThreadPoolAdapterChoose; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.toolkit.inet.DynamicThreadPoolAnnotationUtil; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.core.task.TaskDecorator; + +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Dynamic thread-pool post processor. + */ +@Slf4j +@AllArgsConstructor +public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { + + private final BootstrapCoreProperties bootstrapCoreProperties; + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof DynamicThreadPoolExecutor || DynamicThreadPoolAdapterChoose.match(bean)) { + DynamicThreadPool dynamicThreadPool; + try { + dynamicThreadPool = ApplicationContextHolder.findAnnotationOnBean(beanName, DynamicThreadPool.class); + if (Objects.isNull(dynamicThreadPool)) { + // Adapt to lower versions of SpringBoot. + dynamicThreadPool = DynamicThreadPoolAnnotationUtil.findAnnotationOnBean(beanName, DynamicThreadPool.class); + if (Objects.isNull(dynamicThreadPool)) { + return bean; + } + } + } catch (Exception ex) { + log.error("Failed to create dynamic thread pool in annotation mode.", ex); + return bean; + } + DynamicThreadPoolExecutor dynamicThreadPoolExecutor; + if ((dynamicThreadPoolExecutor = DynamicThreadPoolAdapterChoose.unwrap(bean)) == null) { + dynamicThreadPoolExecutor = (DynamicThreadPoolExecutor) bean; + } + DynamicThreadPoolWrapper wrap = new DynamicThreadPoolWrapper(dynamicThreadPoolExecutor.getThreadPoolId(), dynamicThreadPoolExecutor); + ThreadPoolExecutor remoteThreadPoolExecutor = fillPoolAndRegister(wrap); + DynamicThreadPoolAdapterChoose.replace(bean, remoteThreadPoolExecutor); + return remoteThreadPoolExecutor; + } + if (bean instanceof DynamicThreadPoolWrapper) { + DynamicThreadPoolWrapper wrap = (DynamicThreadPoolWrapper) bean; + registerAndSubscribe(wrap); + } + return bean; + } + + /** + * Register and subscribe. + * + * @param dynamicThreadPoolWrap + */ + protected void registerAndSubscribe(DynamicThreadPoolWrapper dynamicThreadPoolWrap) { + fillPoolAndRegister(dynamicThreadPoolWrap); + } + + /** + * Fill the thread pool and register. + * + * @param dynamicThreadPoolWrapper + */ + protected ThreadPoolExecutor fillPoolAndRegister(DynamicThreadPoolWrapper dynamicThreadPoolWrapper) { + String threadPoolId = dynamicThreadPoolWrapper.getThreadPoolId(); + ThreadPoolExecutor newDynamicPoolExecutor = dynamicThreadPoolWrapper.getExecutor(); + ExecutorProperties executorProperties = null; + if (null != bootstrapCoreProperties.getExecutors()) { + executorProperties = bootstrapCoreProperties.getExecutors() + .stream() + .filter(each -> Objects.equals(threadPoolId, each.getThreadPoolId())) + .findFirst() + .orElse(null); + if (executorProperties != null) { + try { + BlockingQueue workQueue = QueueTypeEnum.createBlockingQueue(executorProperties.getBlockingQueue(), executorProperties.getQueueCapacity()); + String threadNamePrefix = executorProperties.getThreadNamePrefix(); + newDynamicPoolExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .workQueue(workQueue) + .threadFactory(StringUtil.isNotBlank(threadNamePrefix) ? threadNamePrefix : threadPoolId) + .executeTimeOut(Optional.ofNullable(executorProperties.getExecuteTimeOut()).orElse(0L)) + .poolThreadSize(executorProperties.getCorePoolSize(), executorProperties.getMaximumPoolSize()) + .keepAliveTime(executorProperties.getKeepAliveTime(), TimeUnit.SECONDS) + .rejected(RejectedTypeEnum.createPolicy(executorProperties.getRejectedHandler())) + .allowCoreThreadTimeOut(executorProperties.getAllowCoreThreadTimeOut()) + .build(); + } catch (Exception ex) { + log.error("Failed to initialize thread pool configuration. error: {}", ex); + } finally { + if (Objects.isNull(dynamicThreadPoolWrapper.getExecutor())) { + dynamicThreadPoolWrapper.setExecutor(CommonDynamicThreadPool.getInstance(threadPoolId)); + } + dynamicThreadPoolWrapper.setInitFlag(Boolean.TRUE); + } + } + if (dynamicThreadPoolWrapper.getExecutor() instanceof AbstractDynamicExecutorSupport) { + ThreadPoolNotifyAlarm notify = Optional.ofNullable(executorProperties).map(ExecutorProperties::getNotify).orElse(null); + boolean isAlarm = Optional.ofNullable(notify) + .map(each -> each.getAlarm()).orElseGet(() -> bootstrapCoreProperties.getAlarm() != null ? bootstrapCoreProperties.getAlarm() : true); + int activeAlarm = Optional.ofNullable(notify) + .map(each -> each.getActiveAlarm()).orElseGet(() -> bootstrapCoreProperties.getActiveAlarm() != null ? bootstrapCoreProperties.getActiveAlarm() : 80); + int capacityAlarm = Optional.ofNullable(notify) + .map(each -> each.getActiveAlarm()).orElseGet(() -> bootstrapCoreProperties.getCapacityAlarm() != null ? bootstrapCoreProperties.getCapacityAlarm() : 80); + int interval = Optional.ofNullable(notify) + .map(each -> each.getInterval()).orElseGet(() -> bootstrapCoreProperties.getAlarmInterval() != null ? bootstrapCoreProperties.getAlarmInterval() : 5); + String receive = Optional.ofNullable(notify) + .map(each -> each.getReceive()).orElseGet(() -> bootstrapCoreProperties.getReceive() != null ? bootstrapCoreProperties.getReceive() : null); + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm(isAlarm, activeAlarm, capacityAlarm); + threadPoolNotifyAlarm.setInterval(interval); + threadPoolNotifyAlarm.setReceive(receive); + GlobalNotifyAlarmManage.put(threadPoolId, threadPoolNotifyAlarm); + TaskDecorator taskDecorator = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).getTaskDecorator(); + ((DynamicThreadPoolExecutor) newDynamicPoolExecutor).setTaskDecorator(taskDecorator); + long awaitTerminationMillis = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).awaitTerminationMillis; + boolean waitForTasksToCompleteOnShutdown = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).waitForTasksToCompleteOnShutdown; + ((DynamicThreadPoolExecutor) newDynamicPoolExecutor).setSupportParam(awaitTerminationMillis, waitForTasksToCompleteOnShutdown); + } + dynamicThreadPoolWrapper.setExecutor(newDynamicPoolExecutor); + } + GlobalThreadPoolManage.registerPool(dynamicThreadPoolWrapper.getThreadPoolId(), dynamicThreadPoolWrapper); + GlobalCoreThreadPoolManage.register( + threadPoolId, + executorProperties == null + ? buildExecutorProperties(threadPoolId, newDynamicPoolExecutor) + : executorProperties); + return newDynamicPoolExecutor; + } + + /** + * Build executor properties. + * + * @param threadPoolId + * @param executor + * @return + */ + private ExecutorProperties buildExecutorProperties(String threadPoolId, ThreadPoolExecutor executor) { + ExecutorProperties executorProperties = new ExecutorProperties(); + BlockingQueue blockingQueue = executor.getQueue(); + int queueSize = blockingQueue.size(); + String queueType = blockingQueue.getClass().getSimpleName(); + int remainingCapacity = blockingQueue.remainingCapacity(); + int queueCapacity = queueSize + remainingCapacity; + executorProperties.setCorePoolSize(executor.getCorePoolSize()) + .setMaximumPoolSize(executor.getMaximumPoolSize()) + .setAllowCoreThreadTimeOut(executor.allowsCoreThreadTimeOut()) + .setKeepAliveTime(executor.getKeepAliveTime(TimeUnit.SECONDS)) + .setBlockingQueue(queueType) + .setExecuteTimeOut(10000L) + .setQueueCapacity(queueCapacity) + .setRejectedHandler(((DynamicThreadPoolExecutor) executor).getRedundancyHandler().getClass().getSimpleName()) + .setThreadPoolId(threadPoolId); + return executorProperties; + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/GlobalCoreThreadPoolManage.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/GlobalCoreThreadPoolManage.java new file mode 100644 index 00000000..6c665023 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/GlobalCoreThreadPoolManage.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.support; + +import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import com.google.common.collect.Maps; + +import java.util.Map; + +/** + * Global core thread-pool manage. + */ +public class GlobalCoreThreadPoolManage { + + private static final Map EXECUTOR_PROPERTIES = Maps.newConcurrentMap(); + + /** + * Get properties. + * + * @param threadPoolId + * @return + */ + public static ExecutorProperties getProperties(String threadPoolId) { + return EXECUTOR_PROPERTIES.get(threadPoolId); + } + + /** + * Register. + * + * @param threadPoolId + * @param executorProperties + */ + public static void register(String threadPoolId, ExecutorProperties executorProperties) { + EXECUTOR_PROPERTIES.put(threadPoolId, executorProperties); + } + + /** + * Refresh. + * + * @param threadPoolId + * @param executorProperties + */ + public static void refresh(String threadPoolId, ExecutorProperties executorProperties) { + EXECUTOR_PROPERTIES.put(threadPoolId, executorProperties); + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/ThreadPoolAdapterRegister.java b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/ThreadPoolAdapterRegister.java new file mode 100644 index 00000000..f9204fc8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/ThreadPoolAdapterRegister.java @@ -0,0 +1,56 @@ +/* + * 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. + */ + +package cn.hippo4j.core.springboot.starter.support; + +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.core.springboot.starter.config.AdapterExecutorProperties; +import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; + +import java.util.List; +import java.util.Map; + +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; + +/** + * Thread-pool adapter register. + */ +@Slf4j +@AllArgsConstructor +public class ThreadPoolAdapterRegister implements ApplicationRunner { + + private final BootstrapCoreProperties bootstrapCoreProperties; + + public static final Map ADAPTER_EXECUTORS_MAP = Maps.newConcurrentMap(); + + @Override + public void run(ApplicationArguments args) throws Exception { + List adapterExecutors; + if (CollectionUtil.isEmpty(adapterExecutors = bootstrapCoreProperties.getAdapterExecutors())) { + return; + } + for (AdapterExecutorProperties each : adapterExecutors) { + String buildKey = each.getMark() + IDENTIFY_SLICER_SYMBOL + each.getThreadPoolKey(); + ADAPTER_EXECUTORS_MAP.put(buildKey, each); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..203972c7 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.core.springboot.starter.config.DynamicThreadPoolCoreAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-all/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-all/pom.xml new file mode 100644 index 00000000..be2cdc6c --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-all/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-all + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-rocketmq + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-rabbitmq + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-dubbo + ${revision} + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-hystrix + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/pom.xml new file mode 100644 index 00000000..1a37b96f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-dubbo + + + + cn.hippo4j + hippo4j-adapter-dubbo + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/dubbo/DubboAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/dubbo/DubboAdapterAutoConfiguration.java new file mode 100644 index 00000000..badf3efd --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/dubbo/DubboAdapterAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.dubbo; + +import cn.hippo4j.adapter.dubbo.DubboThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Dubbo adapter auto configuration. + */ +@Configuration +public class DubboAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "dubbo.application.name") + public DubboThreadPoolAdapter dubboThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new DubboThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..9f14bcd2 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-dubbo/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.dubbo.DubboAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/pom.xml new file mode 100644 index 00000000..750b1c3f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-hystrix + + + + cn.hippo4j + hippo4j-adapter-hystrix + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/java/cn/hippo4j/springboot/starter/adapter/hystrix/HystrixAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/java/cn/hippo4j/springboot/starter/adapter/hystrix/HystrixAdapterAutoConfiguration.java new file mode 100644 index 00000000..d7e3e5a8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/java/cn/hippo4j/springboot/starter/adapter/hystrix/HystrixAdapterAutoConfiguration.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.hystrix; + +import cn.hippo4j.adapter.hystrix.HystrixThreadPoolAdapter; +import cn.hippo4j.adapter.hystrix.ThreadPoolAdapterScheduler; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @program: hippo4j + * @description: + * @author: lk + * @create: 2022-07-15 + **/ +@Configuration(proxyBeanMethods = false) +public class HystrixAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + public ThreadPoolAdapterScheduler threadPoolAdapterScheduler() { + return new ThreadPoolAdapterScheduler(); + } + + @Bean + public HystrixThreadPoolAdapter hystrixThreadPoolAdapter(ThreadPoolAdapterScheduler threadPoolAdapterScheduler) { + return new HystrixThreadPoolAdapter(threadPoolAdapterScheduler); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..e00410f3 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-hystrix/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.hystrix.HystrixAdapterAutoConfiguration \ No newline at end of file diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/pom.xml new file mode 100644 index 00000000..09a264fa --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-kafka + + + + cn.hippo4j + hippo4j-adapter-kafka + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/KafkaAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/KafkaAdapterAutoConfiguration.java new file mode 100644 index 00000000..b362f0b4 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/KafkaAdapterAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.kafka; + +import cn.hippo4j.adapter.kafka.KafkaThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Kafka adapter auto configuration. + */ +@Configuration +public class KafkaAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "spring.kafka.bootstrap-servers") + public KafkaThreadPoolAdapter kafkaMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new KafkaThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..592fba93 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-kafka/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.kafka.KafkaAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/pom.xml new file mode 100644 index 00000000..98c3e228 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-rabbitmq + + + + cn.hippo4j + hippo4j-adapter-rabbitmq + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/RabbitMQAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/RabbitMQAdapterAutoConfiguration.java new file mode 100644 index 00000000..23ca19da --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/RabbitMQAdapterAutoConfiguration.java @@ -0,0 +1,50 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rabbitmq; + +import cn.hippo4j.adapter.rabbitmq.RabbitMQThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import lombok.RequiredArgsConstructor; +import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Rabbit adapter auto configuration. + */ +@Configuration +@RequiredArgsConstructor +public class RabbitMQAdapterAutoConfiguration { + + private final AbstractConnectionFactory abstractConnectionFactories; + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "spring.rabbitmq.host") + public RabbitMQThreadPoolAdapter rabbitMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new RabbitMQThreadPoolAdapter(abstractConnectionFactories); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..4ec83b15 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rabbitmq/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.rabbitmq.RabbitMQAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/pom.xml new file mode 100644 index 00000000..5c8eb397 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-rocketmq + + + + cn.hippo4j + hippo4j-adapter-rocketmq + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/RocketMQAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/RocketMQAdapterAutoConfiguration.java new file mode 100644 index 00000000..02b73d71 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/RocketMQAdapterAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.rocketmq; + +import cn.hippo4j.adapter.rocketmq.RocketMQThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * RocketMQ adapter auto configuration. + */ +@Configuration +public class RocketMQAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "rocketmq.name-server") + public RocketMQThreadPoolAdapter rocketMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new RocketMQThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..b9521ada --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-rocketmq/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.rocketmq.RocketMQAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/pom.xml new file mode 100644 index 00000000..96d34eda --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka + + + + cn.hippo4j + hippo4j-adapter-spring-cloud-stream-kafka + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaAdapterAutoConfiguration.java new file mode 100644 index 00000000..cc8ddb6e --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/kafka/SpringCloudStreamKafkaAdapterAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.kafka; + +import cn.hippo4j.adapter.springcloud.stream.kafka.SpringCloudStreamKafkaThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Spring cloud stream kafka adapter auto configuration. + */ +@Configuration +public class SpringCloudStreamKafkaAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "xxx") + public SpringCloudStreamKafkaThreadPoolAdapter springCloudStreamKafkaThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new SpringCloudStreamKafkaThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..065332d1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.springcloud.stream.kafka.SpringCloudStreamKafkaAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/pom.xml new file mode 100644 index 00000000..02f829f8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + + + + cn.hippo4j + hippo4j-adapter-spring-cloud-stream-rocketmq + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQAdapterAutoConfiguration.java new file mode 100644 index 00000000..61d8ced8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/SpringCloudStreamRocketMQAdapterAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq; + +import cn.hippo4j.adapter.springcloud.stream.rocketmq.SpringCloudStreamRocketMQThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Spring cloud stream rocketMQ adapter auto configuration. + */ +@Configuration +public class SpringCloudStreamRocketMQAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "spring.cloud.stream.rocketmq.binder.name-server") + public SpringCloudStreamRocketMQThreadPoolAdapter springCloudStreamRocketMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new SpringCloudStreamRocketMQThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..fc109fda --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.springcloud.stream.rocketmq.SpringCloudStreamRocketMQAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/pom.xml new file mode 100644 index 00000000..fd3f88d9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-web + + + + cn.hippo4j + hippo4j-adapter-web + ${revision} + + + + org.springframework.boot + spring-boot-starter-tomcat + true + + + + org.springframework.boot + spring-boot-starter-jetty + true + + + + org.springframework.boot + spring-boot-starter-undertow + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebAdapterAutoConfiguration.java new file mode 100644 index 00000000..e3c878aa --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebAdapterAutoConfiguration.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.web; + +import cn.hippo4j.adapter.web.*; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * Web adapter auto configuration. + */ +@Configuration +@Import({WebThreadPoolHandlerConfiguration.EmbeddedTomcat.class, + WebThreadPoolHandlerConfiguration.EmbeddedJetty.class, + WebThreadPoolHandlerConfiguration.EmbeddedUndertow.class}) +@RequiredArgsConstructor +public class WebAdapterAutoConfiguration { + + private final ConfigurableEnvironment environment; + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + public WebThreadPoolRunStateHandler webThreadPoolRunStateHandler() { + return new WebThreadPoolRunStateHandler(); + } + + @Bean + @SuppressWarnings("all") + public ThreadPoolRunStateHandler threadPoolRunStateHandler(InetUtils hippo4JInetUtils) { + return new ThreadPoolRunStateHandler(hippo4JInetUtils, environment); + } + + @Bean + public WebThreadPoolHandlerChoose webThreadPoolServiceChoose() { + return new WebThreadPoolHandlerChoose(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java new file mode 100644 index 00000000..5f41092d --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/java/cn/hippo4j/springboot/starter/adapter/web/WebThreadPoolHandlerConfiguration.java @@ -0,0 +1,93 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.adapter.web; + +import cn.hippo4j.adapter.web.JettyWebThreadPoolHandler; +import cn.hippo4j.adapter.web.TomcatWebThreadPoolHandler; +import cn.hippo4j.adapter.web.UndertowWebThreadPoolHandler; +import cn.hippo4j.adapter.web.WebThreadPoolRunStateHandler; +import org.apache.catalina.startup.Tomcat; +import org.apache.coyote.UpgradeProtocol; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.SearchStrategy; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.util.Loader; +import org.eclipse.jetty.webapp.WebAppContext; +import io.undertow.Undertow; +import org.xnio.SslClientAuthMode; + +import javax.servlet.Servlet; + +/** + * Web Thread Pool Handler Configuration + **/ +@Configuration(proxyBeanMethods = false) +public class WebThreadPoolHandlerConfiguration { + + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass({Servlet.class, Tomcat.class, UpgradeProtocol.class}) + @ConditionalOnBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT) + static class EmbeddedTomcat { + + /** + * Refer to the Tomcat loading source code . + * This load is performed if the {@link Tomcat} class exists and + * the Web embedded server loads the {@link ServletWebServerFactory} top-level interface type at the same time + */ + @Bean + public TomcatWebThreadPoolHandler tomcatWebThreadPoolHandler(WebThreadPoolRunStateHandler webThreadPoolRunStateHandler) { + return new TomcatWebThreadPoolHandler(webThreadPoolRunStateHandler); + } + } + + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass({Servlet.class, Server.class, Loader.class, WebAppContext.class}) + @ConditionalOnBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT) + static class EmbeddedJetty { + + /** + * Refer to the Server loading source code . + * This load is performed if the {@link Server} class exists and + * the Web embedded server loads the {@link ServletWebServerFactory} top-level interface type at the same time + */ + @Bean + public JettyWebThreadPoolHandler jettyWebThreadPoolHandler() { + return new JettyWebThreadPoolHandler(); + } + } + + @Configuration(proxyBeanMethods = false) + @ConditionalOnClass({Servlet.class, Undertow.class, SslClientAuthMode.class}) + @ConditionalOnBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT) + static class EmbeddedUndertow { + + /** + * Refer to the Undertow loading source code . + * This load is performed if the {@link Undertow} class exists and + * the Web embedded server loads the {@link ServletWebServerFactory} top-level interface type at the same time + */ + @Bean + public UndertowWebThreadPoolHandler undertowWebThreadPoolHandler() { + return new UndertowWebThreadPoolHandler(); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..1b63df06 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-web/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.web.WebAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml new file mode 100644 index 00000000..c319c935 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot + ${revision} + + hippo4j-spring-boot-starter-adapter + pom + hippo4j-spring-boot-starter-adapter + Define the adapter management of thread pool of tripartite framework + + + hippo4j-spring-boot-starter-adapter-all + hippo4j-spring-boot-starter-adapter-dubbo + hippo4j-spring-boot-starter-adapter-kafka + hippo4j-spring-boot-starter-adapter-rabbitmq + hippo4j-spring-boot-starter-adapter-rocketmq + hippo4j-spring-boot-starter-adapter-hystrix + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-kafka + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq + hippo4j-spring-boot-starter-adapter-web + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/pom.xml new file mode 100644 index 00000000..eb8cbad1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-monitor + ${revision} + + hippo4j-spring-boot-starter-monitor-es + + + + cn.hippo4j + hippo4j-monitor-es + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java new file mode 100644 index 00000000..25a94b13 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.es; + +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.monitor.es.EsMonitorHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Es monitor auto configuration. + */ +@Configuration +public class EsMonitorAutoConfiguration { + + @Bean + public EsMonitorHandler esMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + return new EsMonitorHandler(threadPoolRunStateHandler); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..325fc0aa --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.monitor.es.EsMonitorAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/pom.xml new file mode 100644 index 00000000..ac000059 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-monitor + ${revision} + + hippo4j-spring-boot-starter-monitor-log + + + + cn.hippo4j + hippo4j-monitor-log + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/java/cn/hippo4j/springboot/starter/monitor/log/LogMonitorAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/java/cn/hippo4j/springboot/starter/monitor/log/LogMonitorAutoConfiguration.java new file mode 100644 index 00000000..6b4cd63f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/java/cn/hippo4j/springboot/starter/monitor/log/LogMonitorAutoConfiguration.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.log; + +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.monitor.log.LogMonitorHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Log monitor auto configuration. + */ +@Configuration +public class LogMonitorAutoConfiguration { + + @Bean + public LogMonitorHandler logMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + return new LogMonitorHandler(threadPoolRunStateHandler); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..d386fdc6 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.monitor.log.LogMonitorAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/pom.xml new file mode 100644 index 00000000..de38bcf1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-monitor + ${revision} + + hippo4j-spring-boot-starter-monitor-prometheus + + + + cn.hippo4j + hippo4j-monitor-prometheus + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/java/cn/hippo4j/springboot/starter/monitor/prometheus/PrometheusMonitorAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/java/cn/hippo4j/springboot/starter/monitor/prometheus/PrometheusMonitorAutoConfiguration.java new file mode 100644 index 00000000..5aa26020 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/java/cn/hippo4j/springboot/starter/monitor/prometheus/PrometheusMonitorAutoConfiguration.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.prometheus; + +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.monitor.prometheus.PrometheusMonitorHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Prometheus monitor auto configuration. + */ +@Configuration +public class PrometheusMonitorAutoConfiguration { + + @Bean + public PrometheusMonitorHandler prometheusMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + return new PrometheusMonitorHandler(threadPoolRunStateHandler); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..91f26a3e --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-prometheus/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.monitor.prometheus.PrometheusMonitorAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml new file mode 100644 index 00000000..97cda63f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot + ${revision} + + hippo4j-spring-boot-starter-monitor + pom + + + hippo4j-spring-boot-starter-monitor-es + hippo4j-spring-boot-starter-monitor-log + hippo4j-spring-boot-starter-monitor-prometheus + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter/pom.xml new file mode 100644 index 00000000..8b260c97 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/pom.xml @@ -0,0 +1,138 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot + ${revision} + + hippo4j-spring-boot-starter + Thread pool dynamic parameter adjustment, alarming, status viewing and monitoring functions + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + com.squareup.okhttp3 + okhttp + + + + cn.hippo4j + hippo4j-core + + + + cn.hippo4j + hippo4j-common + ${revision} + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.projectlombok + lombok + + + + com.aliyun + alibaba-dingtalk-service-sdk + + + + log4j + log4j + + + + + + org.springframework.boot + spring-boot-starter-tomcat + compile + true + + + + org.springframework.boot + spring-boot-starter-jetty + compile + true + + + + org.springframework.boot + spring-boot-starter-undertow + compile + true + + + + cn.hippo4j + hippo4j-adapter-base + + + + io.netty + netty-all + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-web + ${revision} + + + + cn.hippo4j + hippo4j-monitor-base + ${revision} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId} + ${project.version} + ${maven.build.timestamp} + chen.ma + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + + jar + + + + + + + diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/BootstrapProperties.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/BootstrapProperties.java new file mode 100644 index 00000000..0d3771c4 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/BootstrapProperties.java @@ -0,0 +1,106 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.config; + +import cn.hippo4j.core.config.BootstrapPropertiesInterface; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Bootstrap properties. + */ +@Slf4j +@Getter +@Setter +@ConfigurationProperties(prefix = BootstrapProperties.PREFIX) +public class BootstrapProperties implements BootstrapPropertiesInterface { + + public static final String PREFIX = "spring.dynamic.thread-pool"; + + /** + * Username. + */ + private String username; + + /** + * Password. + */ + private String password; + + /** + * Server addr + */ + private String serverAddr; + + /** + * Netty server port + */ + private String nettyServerPort; + + /** + * Report type + */ + private String reportType; + + /** + * Namespace + */ + private String namespace; + + /** + * Item id + */ + private String itemId; + + /** + * Whether to enable dynamic thread pool + */ + private Boolean enable = true; + + /** + * Print dynamic thread pool banner + */ + private Boolean banner = true; + + /** + * Enable client data collect + */ + private Boolean collect = true; + + /** + * Type of collection thread pool running data. eg: server,prometheus. Multiple can be used at the same time. + */ + private String collectType; + + /** + * Task buffer container capacity + */ + private Integer taskBufferSize = 4096; + + /** + * Delay starting data acquisition task. unit: ms + */ + private Long initialDelay = 10000L; + + /** + * Time interval for client to collect monitoring data. unit: ms + */ + private Long collectInterval = 5000L; +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java new file mode 100644 index 00000000..255a28e1 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DiscoveryConfiguration.java @@ -0,0 +1,83 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.config; + +import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.toolkit.ContentUtil; +import cn.hippo4j.core.toolkit.IdentifyUtil; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hippo4j.springboot.starter.toolkit.CloudCommonIdUtil; +import cn.hippo4j.springboot.starter.core.DiscoveryClient; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hutool.core.text.StrBuilder; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.net.InetAddress; + +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; +import static cn.hippo4j.core.toolkit.IdentifyUtil.CLIENT_IDENTIFICATION_VALUE; + +/** + * Dynamic threadPool discovery config. + */ +@AllArgsConstructor +public class DiscoveryConfiguration { + + private final ConfigurableEnvironment environment; + + private final BootstrapProperties bootstrapProperties; + + private final InetUtils hippo4JInetUtils; + + @Bean + @SneakyThrows + public InstanceInfo instanceConfig() { + String namespace = bootstrapProperties.getNamespace(); + String itemId = bootstrapProperties.getItemId(); + String port = environment.getProperty("server.port", "8080"); + String applicationName = environment.getProperty("spring.dynamic.thread-pool.item-id"); + String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); + InstanceInfo instanceInfo = new InstanceInfo(); + String instanceId = CloudCommonIdUtil.getDefaultInstanceId(environment, hippo4JInetUtils); + instanceId = StrBuilder.create().append(instanceId).append(IDENTIFY_SLICER_SYMBOL).append(CLIENT_IDENTIFICATION_VALUE).toString(); + String contextPath = environment.getProperty("server.servlet.context-path", ""); + instanceInfo.setInstanceId(instanceId) + .setIpApplicationName(CloudCommonIdUtil.getIpApplicationName(environment, hippo4JInetUtils)) + .setHostName(InetAddress.getLocalHost().getHostAddress()) + .setAppName(applicationName) + .setPort(port) + .setClientBasePath(contextPath) + .setGroupKey(ContentUtil.getGroupKey(itemId, namespace)); + String callBackUrl = new StringBuilder().append(instanceInfo.getHostName()).append(":") + .append(port).append(instanceInfo.getClientBasePath()) + .toString(); + instanceInfo.setCallBackUrl(callBackUrl); + String identify = IdentifyUtil.generate(environment, hippo4JInetUtils); + instanceInfo.setIdentify(identify); + instanceInfo.setActive(active.toUpperCase()); + return instanceInfo; + } + + @Bean + public DiscoveryClient hippo4JDiscoveryClient(HttpAgent httpAgent, InstanceInfo instanceInfo) { + return new DiscoveryClient(httpAgent, instanceInfo); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DynamicThreadPoolAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DynamicThreadPoolAutoConfiguration.java new file mode 100644 index 00000000..24f40176 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/DynamicThreadPoolAutoConfiguration.java @@ -0,0 +1,202 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.config; + +import cn.hippo4j.adapter.base.ThreadPoolAdapterBeanContainer; +import cn.hippo4j.adapter.web.WebThreadPoolHandlerChoose; +import cn.hippo4j.common.api.ThreadDetailState; +import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.core.config.UtilAutoConfiguration; +import cn.hippo4j.core.enable.MarkerConfiguration; +import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import cn.hippo4j.core.executor.support.DynamicThreadPoolService; +import cn.hippo4j.core.handler.DynamicThreadPoolBannerHandler; +import cn.hippo4j.core.toolkit.IdentifyUtil; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.message.config.MessageConfiguration; +import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.service.Hippo4jSendMessageService; +import cn.hippo4j.springboot.starter.controller.ThreadPoolAdapterController; +import cn.hippo4j.springboot.starter.controller.WebThreadPoolController; +import cn.hippo4j.springboot.starter.controller.WebThreadPoolRunStateController; +import cn.hippo4j.springboot.starter.core.*; +import cn.hippo4j.springboot.starter.event.ApplicationContentPostProcessor; +import cn.hippo4j.springboot.starter.monitor.ReportingEventExecutor; +import cn.hippo4j.springboot.starter.monitor.collect.RunTimeInfoCollector; +import cn.hippo4j.springboot.starter.monitor.send.MessageSender; +import cn.hippo4j.springboot.starter.monitor.send.http.HttpConnectSender; +import cn.hippo4j.springboot.starter.notify.ServerNotifyConfigBuilder; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hippo4j.springboot.starter.remote.HttpScheduledHealthCheck; +import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * Dynamic thread-pool auto-configuration. + */ +@Configuration +@AllArgsConstructor +@ConditionalOnBean(MarkerConfiguration.Marker.class) +@EnableConfigurationProperties(BootstrapProperties.class) +@ConditionalOnProperty(prefix = BootstrapProperties.PREFIX, value = "enable", matchIfMissing = true, havingValue = "true") +@ImportAutoConfiguration({HttpClientConfiguration.class, NettyClientConfiguration.class, DiscoveryConfiguration.class, MessageConfiguration.class, UtilAutoConfiguration.class}) +public class DynamicThreadPoolAutoConfiguration { + + private final BootstrapProperties properties; + + private final ConfigurableEnvironment environment; + + @Bean + public DynamicThreadPoolBannerHandler threadPoolBannerHandler() { + return new DynamicThreadPoolBannerHandler(properties); + } + + @Bean + @ConditionalOnMissingBean + @Order(Ordered.HIGHEST_PRECEDENCE) + public ApplicationContextHolder hippo4JApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + public ClientWorker hippo4jClientWorker(HttpAgent httpAgent, + InetUtils hippo4JInetUtils, + ServerHealthCheck serverHealthCheck) { + String identify = IdentifyUtil.generate(environment, hippo4JInetUtils); + return new ClientWorker(httpAgent, identify, serverHealthCheck); + } + + @Bean + @SuppressWarnings("all") + public DynamicThreadPoolService dynamicThreadPoolConfigService(HttpAgent httpAgent, + ClientWorker clientWorker, + ServerHealthCheck serverHealthCheck, + DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig) { + return new DynamicThreadPoolConfigService(httpAgent, clientWorker, properties, dynamicThreadPoolSubscribeConfig); + } + + @Bean + @SuppressWarnings("all") + public DynamicThreadPoolPostProcessor threadPoolBeanPostProcessor(HttpAgent httpAgent, + ApplicationContextHolder hippo4JApplicationContextHolder, + DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig) { + return new DynamicThreadPoolPostProcessor(properties, httpAgent, dynamicThreadPoolSubscribeConfig); + } + + @Bean + @ConditionalOnMissingBean(value = ThreadDetailState.class) + public ThreadDetailState baseThreadDetailStateHandler() { + return new BaseThreadDetailStateHandler(); + } + + @Bean + public WebThreadPoolRunStateController poolRunStateController(ThreadPoolRunStateHandler threadPoolRunStateHandler, + ThreadDetailState threadDetailState) { + return new WebThreadPoolRunStateController(threadPoolRunStateHandler, threadDetailState); + } + + @Bean + @ConditionalOnMissingBean + @SuppressWarnings("all") + public MessageSender messageSender(HttpAgent httpAgent) { + return new HttpConnectSender(httpAgent); + } + + @Bean + public ReportingEventExecutor reportingEventExecutor(BootstrapProperties properties, + MessageSender messageSender, + ServerHealthCheck serverHealthCheck) { + return new ReportingEventExecutor(properties, messageSender, serverHealthCheck); + } + + @Bean + @SuppressWarnings("all") + public ServerHealthCheck httpScheduledHealthCheck(HttpAgent httpAgent) { + return new HttpScheduledHealthCheck(httpAgent); + } + + @Bean + public RunTimeInfoCollector runTimeInfoCollector() { + return new RunTimeInfoCollector(properties); + } + + @Bean + @SuppressWarnings("all") + public ThreadPoolAdapterController threadPoolAdapterController(InetUtils hippo4JInetUtils) { + return new ThreadPoolAdapterController(environment, hippo4JInetUtils); + } + + @Bean + public ThreadPoolAdapterBeanContainer threadPoolAdapterBeanContainer() { + return new ThreadPoolAdapterBeanContainer(); + } + + @Bean + public ApplicationContentPostProcessor applicationContentPostProcessor() { + return new ApplicationContentPostProcessor(); + } + + @Bean + @SuppressWarnings("all") + public WebThreadPoolController webThreadPoolController(WebThreadPoolHandlerChoose webThreadPoolServiceChoose) { + return new WebThreadPoolController(webThreadPoolServiceChoose); + } + + @Bean + @SuppressWarnings("all") + public ThreadPoolAdapterRegister threadPoolAdapterRegister(HttpAgent httpAgent, + InetUtils hippo4JInetUtils) { + return new ThreadPoolAdapterRegister(httpAgent, properties, environment, hippo4JInetUtils); + } + + @Bean + public NotifyConfigBuilder serverNotifyConfigBuilder(HttpAgent httpAgent, + BootstrapProperties properties, + AlarmControlHandler alarmControlHandler) { + return new ServerNotifyConfigBuilder(httpAgent, properties, alarmControlHandler); + } + + @Bean + public ThreadPoolDynamicRefresh threadPoolDynamicRefresh(ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler) { + return new ServerThreadPoolDynamicRefresh(threadPoolNotifyAlarmHandler); + } + + @Bean + public DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig(ThreadPoolDynamicRefresh threadPoolDynamicRefresh, + ClientWorker clientWorker) { + return new DynamicThreadPoolSubscribeConfig(threadPoolDynamicRefresh, clientWorker, properties); + } + + @Bean + public ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler(Hippo4jSendMessageService hippoSendMessageService) { + return new ThreadPoolNotifyAlarmHandler(hippoSendMessageService); + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/HttpClientConfig.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/HttpClientConfiguration.java similarity index 64% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/HttpClientConfig.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/HttpClientConfiguration.java index fad7e8ff..42b55fb8 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/config/HttpClientConfig.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/HttpClientConfiguration.java @@ -1,8 +1,25 @@ -package cn.hippo4j.starter.config; +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.config; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hippo4j.starter.remote.ServerHttpAgent; -import cn.hippo4j.starter.toolkit.HttpClientUtil; +import cn.hippo4j.springboot.starter.toolkit.HttpClientUtil; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hippo4j.springboot.starter.remote.ServerHttpAgent; import lombok.SneakyThrows; import okhttp3.OkHttpClient; import org.springframework.context.annotation.Bean; @@ -15,11 +32,8 @@ import java.util.concurrent.TimeUnit; /** * Http client config. - * - * @author chen.ma - * @date 2021/6/10 13:28 */ -public class HttpClientConfig { +public class HttpClientConfiguration { @Bean public OkHttpClient hippo4JOkHttpClient() { @@ -37,6 +51,7 @@ public class HttpClientConfig { } @Bean + @SuppressWarnings("all") public HttpAgent httpAgent(BootstrapProperties properties, HttpClientUtil hippo4JHttpClientUtil) { return new ServerHttpAgent(properties, hippo4JHttpClientUtil); } @@ -44,6 +59,7 @@ public class HttpClientConfig { @SneakyThrows private void supportHttps(OkHttpClient.Builder builder) { final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { + @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { } @@ -64,5 +80,4 @@ public class HttpClientConfig { builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]); builder.hostnameVerifier((hostname, session) -> true); } - } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/NettyClientConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/NettyClientConfiguration.java new file mode 100644 index 00000000..0eb02844 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/config/NettyClientConfiguration.java @@ -0,0 +1,42 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.config; + +import cn.hippo4j.springboot.starter.monitor.send.netty.NettyConnectSender; +import cn.hippo4j.springboot.starter.monitor.send.MessageSender; +import cn.hippo4j.springboot.starter.remote.ServerNettyAgent; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; + +/** + * Netty client configuration. + */ +@ConditionalOnProperty(prefix = BootstrapProperties.PREFIX, name = "report-type", havingValue = "netty") +public class NettyClientConfiguration { + + @Bean + @SuppressWarnings("all") + public ServerNettyAgent serverNettyAgent(BootstrapProperties properties) { + return new ServerNettyAgent(properties); + } + + @Bean + public MessageSender messageSender(ServerNettyAgent serverNettyAgent) { + return new NettyConnectSender(serverNettyAgent); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/ThreadPoolAdapterController.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/ThreadPoolAdapterController.java new file mode 100644 index 00000000..1ca73e1a --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/ThreadPoolAdapterController.java @@ -0,0 +1,75 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.controller; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.core.toolkit.IdentifyUtil; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hippo4j.springboot.starter.toolkit.CloudCommonIdUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Optional; + +import static cn.hippo4j.adapter.base.ThreadPoolAdapterBeanContainer.THREAD_POOL_ADAPTER_BEAN_CONTAINER; + +/** + * Thread-pool adapter controller. + */ +@Slf4j +@RestController +@AllArgsConstructor +public class ThreadPoolAdapterController { + + private final ConfigurableEnvironment environment; + + private final InetUtils hippo4JInetUtils; + + @GetMapping("/adapter/thread-pool/info") + public Result getAdapterThreadPool(ThreadPoolAdapterParameter requestParameter) { + ThreadPoolAdapter threadPoolAdapter = THREAD_POOL_ADAPTER_BEAN_CONTAINER.get(requestParameter.getMark()); + ThreadPoolAdapterState result = Optional.ofNullable(threadPoolAdapter).map(each -> { + ThreadPoolAdapterState threadPoolState = each.getThreadPoolState(requestParameter.getThreadPoolKey()); + String active = environment.getProperty("spring.profiles.active", "UNKNOWN"); + threadPoolState.setActive(active.toUpperCase()); + String clientAddress = CloudCommonIdUtil.getClientIpPort(environment, hippo4JInetUtils); + threadPoolState.setClientAddress(clientAddress); + threadPoolState.setIdentify(IdentifyUtil.getIdentify()); + return threadPoolState; + }).orElse(null); + return Results.success(result); + } + + @PostMapping("/adapter/thread-pool/update") + public Result updateAdapterThreadPool(@RequestBody ThreadPoolAdapterParameter requestParameter) { + log.info("[{}] Change third-party thread pool data. key: {}, coreSize: {}, maximumSize: {}", + requestParameter.getMark(), requestParameter.getThreadPoolKey(), requestParameter.getCorePoolSize(), requestParameter.getMaximumPoolSize()); + ThreadPoolAdapter threadPoolAdapter = THREAD_POOL_ADAPTER_BEAN_CONTAINER.get(requestParameter.getMark()); + Optional.ofNullable(threadPoolAdapter).ifPresent(each -> each.updateThreadPool(requestParameter)); + return Results.success(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolController.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolController.java new file mode 100644 index 00000000..20561563 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolController.java @@ -0,0 +1,58 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.controller; + +import cn.hippo4j.adapter.web.WebThreadPoolHandlerChoose; +import cn.hippo4j.common.model.ThreadPoolBaseInfo; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * Web thread pool controller. + * + *

At present, only Tomcat is well supported, and other web containers need to be improved. + */ +@CrossOrigin +@RestController +@AllArgsConstructor +public class WebThreadPoolController { + + private final WebThreadPoolHandlerChoose webThreadPoolServiceChoose; + + @GetMapping("/web/base/info") + public Result getPoolBaseState() { + ThreadPoolBaseInfo result = webThreadPoolServiceChoose.choose().simpleInfo(); + return Results.success(result); + } + + @GetMapping("/web/run/state") + public Result getPoolRunState() { + ThreadPoolRunStateInfo result = webThreadPoolServiceChoose.choose().getWebRunStateInfo(); + return Results.success(result); + } + + @PostMapping("/web/update/pool") + public Result updateWebThreadPool(@RequestBody ThreadPoolParameterInfo threadPoolParameterInfo) { + webThreadPoolServiceChoose.choose().updateWebThreadPool(threadPoolParameterInfo); + return Results.success(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolRunStateController.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolRunStateController.java new file mode 100644 index 00000000..5b0424d2 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/controller/WebThreadPoolRunStateController.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.controller; + +import cn.hippo4j.common.api.ThreadDetailState; +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.model.ThreadDetailStateInfo; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Web thread-pool run state controller. + */ +@CrossOrigin +@RestController +@AllArgsConstructor +public class WebThreadPoolRunStateController { + + private final ThreadPoolRunStateHandler threadPoolRunStateHandler; + + private final ThreadDetailState threadDetailState; + + @GetMapping("/run/state/{threadPoolId}") + public Result getPoolRunState(@PathVariable("threadPoolId") String threadPoolId) { + ThreadPoolRunStateInfo result = threadPoolRunStateHandler.getPoolRunState(threadPoolId); + return Results.success(result); + } + + @GetMapping("/run/thread/state/{threadPoolId}") + public Result> getThreadStateDetail(@PathVariable("threadPoolId") String threadPoolId) { + List result = threadDetailState.getThreadDetailStateInfo(threadPoolId); + return Results.success(result); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/BaseThreadDetailStateHandler.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/BaseThreadDetailStateHandler.java new file mode 100644 index 00000000..2e3f1051 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/BaseThreadDetailStateHandler.java @@ -0,0 +1,93 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.api.ThreadDetailState; +import cn.hippo4j.common.model.ThreadDetailStateInfo; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.ReflectUtil; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Base thread detail state handler. + * + *

The Java 8 implementation is temporarily provided, {@link ThreadDetailState} interface can be customized. + */ +@Slf4j +public class BaseThreadDetailStateHandler implements ThreadDetailState { + + private final String WORKERS = "workers"; + + private final String THREAD = "thread"; + + @Override + public List getThreadDetailStateInfo(String threadPoolId) { + DynamicThreadPoolWrapper dynamicThreadPoolWrapper = GlobalThreadPoolManage.getExecutorService(threadPoolId); + ThreadPoolExecutor threadPoolExecutor = dynamicThreadPoolWrapper.getExecutor(); + return getThreadDetailStateInfo(threadPoolExecutor); + } + + @Override + public List getThreadDetailStateInfo(ThreadPoolExecutor threadPoolExecutor) { + List resultThreadStates = new ArrayList(); + try { + HashSet workers = (HashSet) ReflectUtil.getFieldValue(threadPoolExecutor, WORKERS); + if (CollectionUtil.isEmpty(workers)) { + return resultThreadStates; + } + for (Object worker : workers) { + Thread thread; + try { + thread = (Thread) ReflectUtil.getFieldValue(worker, THREAD); + if (thread == null) { + log.warn("Reflection get worker thread is null. Worker: {}", worker); + continue; + } + } catch (Exception ex) { + log.error("Reflection get worker thread exception. Worker: {}", worker, ex); + continue; + } + long threadId = thread.getId(); + String threadName = thread.getName(); + String threadStatus = thread.getState().name(); + StackTraceElement[] stackTrace = thread.getStackTrace(); + List threadStack = new ArrayList(stackTrace.length); + for (int i = 0; i < stackTrace.length; i++) { + threadStack.add(stackTrace[i].toString()); + } + ThreadDetailStateInfo threadState = ThreadDetailStateInfo.builder() + .threadId(threadId) + .threadName(threadName) + .threadStatus(threadStatus) + .threadStack(threadStack) + .build(); + resultThreadStates.add(threadState); + } + } catch (Exception ex) { + log.error("Failed to get thread status.", ex); + } + return resultThreadStates; + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/CacheData.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/CacheData.java new file mode 100644 index 00000000..c4d393b8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/CacheData.java @@ -0,0 +1,110 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.springboot.starter.wrapper.ManagerListenerWrapper; +import cn.hippo4j.common.toolkit.ContentUtil; +import cn.hippo4j.common.toolkit.Md5Util; +import cn.hippo4j.common.constant.Constants; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * Cache data. + */ +@Slf4j +public class CacheData { + + @Getter + public volatile String md5; + + public volatile String content; + + public final String tenantId; + + public final String itemId; + + public final String threadPoolId; + + @Setter + private int taskId; + + @Setter + private volatile boolean isInitializing = true; + + private volatile long localConfigLastModified; + + private final CopyOnWriteArrayList listeners; + + public CacheData(String tenantId, String itemId, String threadPoolId) { + this.tenantId = tenantId; + this.itemId = itemId; + this.threadPoolId = threadPoolId; + this.content = ContentUtil.getPoolContent(GlobalThreadPoolManage.getPoolParameter(threadPoolId)); + this.md5 = getMd5String(content); + this.listeners = new CopyOnWriteArrayList(); + } + + public void addListener(Listener listener) { + if (null == listener) { + throw new IllegalArgumentException("Listener is null."); + } + ManagerListenerWrapper managerListenerWrap = new ManagerListenerWrapper(md5, listener); + if (listeners.addIfAbsent(managerListenerWrap)) { + log.info("Add listener status: ok, thread pool id: {}, listeners count: {}", threadPoolId, listeners.size()); + } + } + + public void checkListenerMd5() { + for (ManagerListenerWrapper managerListenerWrapper : listeners) { + if (!md5.equals(managerListenerWrapper.getLastCallMd5())) { + safeNotifyListener(content, md5, managerListenerWrapper); + } + } + } + + private void safeNotifyListener(String content, String md5, ManagerListenerWrapper managerListenerWrapper) { + Listener listener = managerListenerWrapper.getListener(); + Runnable runnable = () -> { + managerListenerWrapper.setLastCallMd5(md5); + listener.receiveConfigInfo(content); + }; + try { + listener.getExecutor().execute(runnable); + } catch (Exception ex) { + log.error("Failed to execute listener. message: {}", ex.getMessage()); + } + } + + public void setContent(String content) { + this.content = content; + this.md5 = getMd5String(this.content); + } + + public static String getMd5String(String config) { + return (null == config) ? Constants.NULL : Md5Util.md5Hex(config, Constants.ENCODE); + } + + public boolean isInitializing() { + return isInitializing; + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ClientWorker.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java similarity index 57% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ClientWorker.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java index 6330dbd8..8e0deebe 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/core/ClientWorker.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java @@ -1,91 +1,94 @@ -package cn.hippo4j.starter.core; +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; -import cn.hippo4j.common.model.PoolParameterInfo; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.toolkit.ContentUtil; import cn.hippo4j.common.toolkit.GroupKey; +import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.common.web.base.Result; -import cn.hippo4j.starter.remote.HttpAgent; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hutool.core.util.IdUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.DisposableBean; import org.springframework.util.StringUtils; import java.net.URLDecoder; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.*; import static cn.hippo4j.common.constant.Constants.*; /** * Client worker. - * - * @author chen.ma - * @date 2021/6/20 18:34 */ @Slf4j -public class ClientWorker implements DisposableBean { - - private double currentLongingTaskCount = 0; +public class ClientWorker { private long timeout; + private double currentLongingTaskCount = 0; + private final HttpAgent agent; - private final String identification; + private final String identify; + + private final ServerHealthCheck serverHealthCheck; private final ScheduledExecutorService executor; private final ScheduledExecutorService executorService; - private AtomicBoolean isHealthServer = new AtomicBoolean(true); - - private AtomicBoolean isHealthServerTemp = new AtomicBoolean(true); + private final CountDownLatch awaitApplicationComplete = new CountDownLatch(1); private final ConcurrentHashMap cacheMap = new ConcurrentHashMap(16); @SuppressWarnings("all") - public ClientWorker(HttpAgent httpAgent, String identification) { + public ClientWorker(HttpAgent httpAgent, String identify, ServerHealthCheck serverHealthCheck) { this.agent = httpAgent; - this.identification = identification; + this.identify = identify; this.timeout = CONFIG_LONG_POLL_TIMEOUT; - - this.executor = Executors.newScheduledThreadPool(1, r -> { - Thread t = new Thread(r); - t.setName("client.worker.executor"); - t.setDaemon(true); - return t; + this.serverHealthCheck = serverHealthCheck; + this.executor = Executors.newScheduledThreadPool(1, runnable -> { + Thread thread = new Thread(runnable); + thread.setName("client.worker.executor"); + thread.setDaemon(true); + return thread; }); - - int threadSize = Runtime.getRuntime().availableProcessors(); - this.executorService = Executors.newScheduledThreadPool(threadSize, r -> { - Thread t = new Thread(r); - t.setName("client.long.polling.executor"); - t.setDaemon(true); - return t; - }); - - log.info("Client identity :: {}", CLIENT_IDENTIFICATION_VALUE); - + this.executorService = Executors.newSingleThreadScheduledExecutor( + ThreadFactoryBuilder.builder().prefix("client.long.polling.executor").daemon(true).build()); + log.info("Client identify: {}", identify); this.executor.scheduleWithFixedDelay(() -> { try { + awaitApplicationComplete.await(); checkConfigInfo(); - } catch (Throwable e) { - log.error("[Sub check] rotate check error", e); + } catch (Throwable ex) { + log.error("Sub check rotate check error.", ex); } - }, 1L, 10L, TimeUnit.MILLISECONDS); + }, 1L, 1024L, TimeUnit.MILLISECONDS); } public void checkConfigInfo() { int listenerSize = cacheMap.size(); double perTaskConfigSize = 3000D; int longingTaskCount = (int) Math.ceil(listenerSize / perTaskConfigSize); - if (longingTaskCount > currentLongingTaskCount) { for (int i = (int) currentLongingTaskCount; i < longingTaskCount; i++) { executorService.execute(new LongPollingRunnable()); @@ -94,64 +97,37 @@ public class ClientWorker implements DisposableBean { } } - @Override - public void destroy() throws Exception { - Optional.ofNullable(executor).ifPresent((each) -> each.shutdown()); - Optional.ofNullable(executorService).ifPresent((each) -> each.shutdown()); - } - class LongPollingRunnable implements Runnable { - @SneakyThrows - private void checkStatus() { - if (Objects.equals(isHealthServerTemp.get(), Boolean.FALSE) - && Objects.equals(isHealthServer.get(), Boolean.TRUE)) { - isHealthServerTemp.set(Boolean.TRUE); - log.info("🚀 The client reconnects to the server successfully."); - } - // 服务端状态不正常睡眠 30s - if (!isHealthServer.get()) { - isHealthServerTemp.set(Boolean.FALSE); - log.error("[Check config] Error. exception message, Thread sleep 30 s."); - Thread.sleep(30000); - } - } - @Override @SneakyThrows public void run() { - checkStatus(); - + serverHealthCheck.isHealthStatus(); List cacheDataList = new ArrayList(); List inInitializingCacheList = new ArrayList(); cacheMap.forEach((key, val) -> cacheDataList.add(val)); - List changedTpIds = checkUpdateDataIds(cacheDataList, inInitializingCacheList); - for (String each : changedTpIds) { - String[] keys = StrUtil.split(each, GROUP_KEY_DELIMITER); + for (String groupKey : changedTpIds) { + String[] keys = groupKey.split(GROUP_KEY_DELIMITER_TRANSLATION); String tpId = keys[0]; String itemId = keys[1]; String namespace = keys[2]; - try { String content = getServerConfig(namespace, itemId, tpId, 3000L); CacheData cacheData = cacheMap.get(tpId); - String poolContent = ContentUtil.getPoolContent(JSON.parseObject(content, PoolParameterInfo.class)); + String poolContent = ContentUtil.getPoolContent(JSONUtil.parseObject(content, ThreadPoolParameterInfo.class)); cacheData.setContent(poolContent); - } catch (Exception ex) { - // ignore - log.error("Failed to get the latest thread pool configuration.", ex); + } catch (Exception ignored) { + log.error("Failed to get the latest thread pool configuration.", ignored); } } - for (CacheData cacheData : cacheDataList) { if (!cacheData.isInitializing() || inInitializingCacheList - .contains(GroupKey.getKeyTenant(cacheData.tpId, cacheData.itemId, cacheData.tenantId))) { + .contains(GroupKey.getKeyTenant(cacheData.threadPoolId, cacheData.itemId, cacheData.tenantId))) { cacheData.checkListenerMd5(); cacheData.setInitializing(false); } } - inInitializingCacheList.clear(); executorService.execute(this); } @@ -160,17 +136,15 @@ public class ClientWorker implements DisposableBean { private List checkUpdateDataIds(List cacheDataList, List inInitializingCacheList) { StringBuilder sb = new StringBuilder(); for (CacheData cacheData : cacheDataList) { - sb.append(cacheData.tpId).append(WORD_SEPARATOR); + sb.append(cacheData.threadPoolId).append(WORD_SEPARATOR); sb.append(cacheData.itemId).append(WORD_SEPARATOR); sb.append(cacheData.tenantId).append(WORD_SEPARATOR); - sb.append(identification).append(WORD_SEPARATOR); + sb.append(identify).append(WORD_SEPARATOR); sb.append(cacheData.getMd5()).append(LINE_SEPARATOR); - if (cacheData.isInitializing()) { - inInitializingCacheList.add(GroupKey.getKeyTenant(cacheData.tpId, cacheData.itemId, cacheData.tenantId)); + inInitializingCacheList.add(GroupKey.getKeyTenant(cacheData.threadPoolId, cacheData.itemId, cacheData.tenantId)); } } - boolean isInitializingCacheList = !inInitializingCacheList.isEmpty(); return checkUpdateTpIds(sb.toString(), isInitializingCacheList); } @@ -178,52 +152,42 @@ public class ClientWorker implements DisposableBean { public List checkUpdateTpIds(String probeUpdateString, boolean isInitializingCacheList) { Map params = new HashMap(2); params.put(PROBE_MODIFY_REQUEST, probeUpdateString); + params.put(WEIGHT_CONFIGS, IdUtil.simpleUUID()); Map headers = new HashMap(2); headers.put(LONG_PULLING_TIMEOUT, "" + timeout); - - // 确认客户端身份, 修改线程池配置时可单独修改 - headers.put(LONG_PULLING_CLIENT_IDENTIFICATION, identification); - + // Confirm the identity of the client, and can be modified separately when modifying the thread pool configuration. + headers.put(LONG_PULLING_CLIENT_IDENTIFICATION, identify); // told server do not hang me up if new initializing cacheData added in if (isInitializingCacheList) { headers.put(LONG_PULLING_TIMEOUT_NO_HANGUP, "true"); } - if (StringUtils.isEmpty(probeUpdateString)) { return Collections.emptyList(); } - try { long readTimeoutMs = timeout + (long) Math.round(timeout >> 1); Result result = agent.httpPostByConfig(LISTENER_PATH, headers, params, readTimeoutMs); - - // Server 端重启后会进入非健康状态, 不进入 catch 则为健康调用 - isHealthServer.set(true); if (result != null && result.isSuccess()) { - setHealthServer(true); return parseUpdateDataIdResponse(result.getData().toString()); } } catch (Exception ex) { setHealthServer(false); - log.error("[Check update] get changed dataId exception. error message :: {}", ex.getMessage()); + log.error("Check update get changed dataId exception. error message: {}", ex.getMessage()); } - return Collections.emptyList(); } - public String getServerConfig(String namespace, String itemId, String tpId, long readTimeout) { + public String getServerConfig(String namespace, String itemId, String threadPoolId, long readTimeout) { Map params = new HashMap(3); params.put("namespace", namespace); params.put("itemId", itemId); - params.put("tpId", tpId); - + params.put("tpId", threadPoolId); + params.put("instanceId", identify); Result result = agent.httpGetByConfig(CONFIG_CONTROLLER_PATH, null, params, readTimeout); if (result.isSuccess()) { - return result.getData().toString(); + return JSONUtil.toJSONString(result.getData()); } - - log.error("[Sub server] namespace :: {}, itemId :: {}, tpId :: {}, result code :: {}", - namespace, itemId, tpId, result.getCode()); + log.error("Sub server namespace: {}, itemId: {}, threadPoolId: {}, result code: {}", namespace, itemId, threadPoolId, result.getCode()); return NULL; } @@ -231,75 +195,64 @@ public class ClientWorker implements DisposableBean { if (StringUtils.isEmpty(response)) { return Collections.emptyList(); } - try { response = URLDecoder.decode(response, "UTF-8"); } catch (Exception e) { - log.error("[Polling resp] decode modifiedDataIdsString error", e); + log.error("Polling resp decode modifiedDataIdsString error.", e); } - - List updateList = new LinkedList(); for (String dataIdAndGroup : response.split(LINE_SEPARATOR)) { if (!StringUtils.isEmpty(dataIdAndGroup)) { String[] keyArr = dataIdAndGroup.split(WORD_SEPARATOR); String dataId = keyArr[0]; String group = keyArr[1]; - if (keyArr.length == 2) { - updateList.add(GroupKey.getKey(dataId, group)); - log.info("[{}] [Polling resp] config changed. dataId={}, group={}", dataId, group); - } else if (keyArr.length == 3) { + if (keyArr.length == 3) { String tenant = keyArr[2]; updateList.add(GroupKey.getKeyTenant(dataId, group, tenant)); - log.info("[Polling resp] config changed. dataId={}, group={}, tenant={}", dataId, group, tenant); + log.info("Refresh thread pool changed. [{}]", dataId); } else { - log.error("[{}] [Polling resp] invalid dataIdAndGroup error {}", dataIdAndGroup); + log.error("[{}] Polling resp invalid dataIdAndGroup error.", dataIdAndGroup); } } } return updateList; } - public void addTenantListeners(String namespace, String itemId, String tpId, List listeners) { - CacheData cacheData = addCacheDataIfAbsent(namespace, itemId, tpId); + public void addTenantListeners(String namespace, String itemId, String threadPoolId, List listeners) { + CacheData cacheData = addCacheDataIfAbsent(namespace, itemId, threadPoolId); for (Listener listener : listeners) { cacheData.addListener(listener); } } - public CacheData addCacheDataIfAbsent(String namespace, String itemId, String tpId) { - CacheData cacheData = cacheMap.get(tpId); + public CacheData addCacheDataIfAbsent(String namespace, String itemId, String threadPoolId) { + CacheData cacheData = cacheMap.get(threadPoolId); if (cacheData != null) { return cacheData; } - - cacheData = new CacheData(namespace, itemId, tpId); - CacheData lastCacheData = cacheMap.putIfAbsent(tpId, cacheData); + cacheData = new CacheData(namespace, itemId, threadPoolId); + CacheData lastCacheData = cacheMap.putIfAbsent(threadPoolId, cacheData); if (lastCacheData == null) { - String serverConfig = null; + String serverConfig; try { - serverConfig = getServerConfig(namespace, itemId, tpId, 3000L); - PoolParameterInfo poolInfo = JSON.parseObject(serverConfig, PoolParameterInfo.class); + serverConfig = getServerConfig(namespace, itemId, threadPoolId, 3000L); + ThreadPoolParameterInfo poolInfo = JSONUtil.parseObject(serverConfig, ThreadPoolParameterInfo.class); cacheData.setContent(ContentUtil.getPoolContent(poolInfo)); } catch (Exception ex) { - log.error("[Cache Data] Error. Service Unavailable :: {}", ex.getMessage()); + log.error("Cache Data Error. Service Unavailable: {}", ex.getMessage()); } - int taskId = cacheMap.size() / CONFIG_LONG_POLL_TIMEOUT; cacheData.setTaskId(taskId); - lastCacheData = cacheData; } - return lastCacheData; } - public boolean isHealthServer() { - return this.isHealthServer.get(); - } - private void setHealthServer(boolean isHealthServer) { - this.isHealthServer.set(isHealthServer); + this.serverHealthCheck.setHealthStatus(isHealthServer); } + protected void notifyApplicationComplete() { + awaitApplicationComplete.countDown(); + } } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigEmptyAnalyzer.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigEmptyAnalyzer.java new file mode 100644 index 00000000..66678250 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigEmptyAnalyzer.java @@ -0,0 +1,33 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.core.config.ConfigEmptyException; +import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; +import org.springframework.boot.diagnostics.FailureAnalysis; + +/** + * Config empty analyzer. + */ +public class ConfigEmptyAnalyzer extends AbstractFailureAnalyzer { + + @Override + protected FailureAnalysis analyze(Throwable rootFailure, ConfigEmptyException configEmptyException) { + return new FailureAnalysis(configEmptyException.getDescription(), configEmptyException.getAction(), configEmptyException); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigService.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigService.java new file mode 100644 index 00000000..72610226 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ConfigService.java @@ -0,0 +1,41 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +/** + * Config service. + */ +public interface ConfigService { + + /** + * Add listener. + * + * @param tenantId + * @param itemId + * @param threadPoolId + * @param listener + */ + void addListener(String tenantId, String itemId, String threadPoolId, Listener listener); + + /** + * Get server status. + * + * @return + */ + String getServerStatus(); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java new file mode 100644 index 00000000..f9e8824a --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DiscoveryClient.java @@ -0,0 +1,153 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.api.ClientCloseHookExecute; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.model.InstanceInfo; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.base.Results; +import cn.hippo4j.common.web.exception.ErrorCodeEnum; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.DisposableBean; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static cn.hippo4j.common.constant.Constants.BASE_PATH; + +/** + * Discovery client. + */ +@Slf4j +public class DiscoveryClient implements DisposableBean { + + private final ScheduledExecutorService scheduler; + + private final HttpAgent httpAgent; + + private final InstanceInfo instanceInfo; + + private volatile long lastSuccessfulHeartbeatTimestamp = -1; + + private static final String PREFIX = "DiscoveryClient_"; + + private final String appPathIdentifier; + + public DiscoveryClient(HttpAgent httpAgent, InstanceInfo instanceInfo) { + this.httpAgent = httpAgent; + this.instanceInfo = instanceInfo; + this.appPathIdentifier = instanceInfo.getAppName().toUpperCase() + "/" + instanceInfo.getInstanceId(); + this.scheduler = new ScheduledThreadPoolExecutor( + new Integer(1), + ThreadFactoryBuilder.builder().daemon(true).prefix("client.discovery.scheduler").build()); + register(); + // Init the schedule tasks. + initScheduledTasks(); + } + + private void initScheduledTasks() { + scheduler.scheduleWithFixedDelay(new HeartbeatThread(), 30, 30, TimeUnit.SECONDS); + } + + boolean register() { + log.info("{}{} - registering service...", PREFIX, appPathIdentifier); + String urlPath = BASE_PATH + "/apps/register/"; + Result registerResult; + try { + registerResult = httpAgent.httpPostByDiscovery(urlPath, instanceInfo); + } catch (Exception ex) { + registerResult = Results.failure(ErrorCodeEnum.SERVICE_ERROR); + log.error("{}{} - registration failed: {}", PREFIX, appPathIdentifier, ex.getMessage()); + } + if (log.isInfoEnabled()) { + log.info("{}{} - registration status: {}", PREFIX, appPathIdentifier, registerResult.isSuccess() ? "success" : "fail"); + } + return registerResult.isSuccess(); + } + + @Override + public void destroy() throws Exception { + log.info("{}{} - destroy service...", PREFIX, appPathIdentifier); + String clientCloseUrlPath = Constants.BASE_PATH + "/client/close"; + Result clientCloseResult; + try { + String groupKeyIp = StrBuilder.create() + .append(instanceInfo.getGroupKey()) + .append(Constants.GROUP_KEY_DELIMITER) + .append(instanceInfo.getIdentify()) + .toString(); + ClientCloseHookExecute.ClientCloseHookReq clientCloseHookReq = new ClientCloseHookExecute.ClientCloseHookReq(); + clientCloseHookReq.setAppName(instanceInfo.getAppName()) + .setInstanceId(instanceInfo.getInstanceId()) + .setGroupKey(groupKeyIp); + clientCloseResult = httpAgent.httpPostByDiscovery(clientCloseUrlPath, clientCloseHookReq); + if (clientCloseResult.isSuccess()) { + log.info("{}{} -client close hook success.", PREFIX, appPathIdentifier); + } + } catch (Throwable ex) { + if (ex instanceof ShutdownExecuteException) { + return; + } + log.error("{}{} - client close hook fail.", PREFIX, appPathIdentifier, ex); + } + } + + public class HeartbeatThread implements Runnable { + + @Override + public void run() { + if (renew()) { + lastSuccessfulHeartbeatTimestamp = System.currentTimeMillis(); + } + } + } + + private boolean renew() { + Result renewResult; + try { + InstanceInfo.InstanceRenew instanceRenew = new InstanceInfo.InstanceRenew() + .setAppName(instanceInfo.getAppName()) + .setInstanceId(instanceInfo.getInstanceId()) + .setLastDirtyTimestamp(instanceInfo.getLastDirtyTimestamp().toString()) + .setStatus(instanceInfo.getStatus().toString()); + renewResult = httpAgent.httpPostByDiscovery(BASE_PATH + "/apps/renew", instanceRenew); + if (StrUtil.equals(ErrorCodeEnum.NOT_FOUND.getCode(), renewResult.getCode())) { + long timestamp = instanceInfo.setIsDirtyWithTime(); + boolean success = register(); + // TODO Abstract server registration logic + ThreadPoolAdapterRegister adapterRegister = ApplicationContextHolder.getBean(ThreadPoolAdapterRegister.class); + adapterRegister.register(); + if (success) { + instanceInfo.unsetIsDirty(timestamp); + } + return success; + } + return renewResult.isSuccess(); + } catch (Exception ex) { + log.error(PREFIX + "{} - was unable to send heartbeat!", appPathIdentifier, ex); + return false; + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolConfigService.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolConfigService.java new file mode 100644 index 00000000..c000520a --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolConfigService.java @@ -0,0 +1,113 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.toolkit.Assert; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.common.web.exception.ServiceException; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.DynamicThreadPoolService; +import cn.hippo4j.core.executor.support.QueueTypeEnum; +import cn.hippo4j.core.executor.support.RejectedTypeEnum; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.event.ApplicationCompleteEvent; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; + +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.Constants.REGISTER_DYNAMIC_THREAD_POOL_PATH; + +/** + * Dynamic thread-pool config service. + */ +@Slf4j +@RequiredArgsConstructor +public class DynamicThreadPoolConfigService implements DynamicThreadPoolService, ApplicationListener { + + private final HttpAgent httpAgent; + + private final ClientWorker clientWorker; + + private final BootstrapProperties properties; + + private final DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig; + + @Override + public void onApplicationEvent(ApplicationCompleteEvent event) { + clientWorker.notifyApplicationComplete(); + } + + @Override + public ThreadPoolExecutor registerDynamicThreadPool(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); + checkThreadPoolParameter(registerParameter); + ThreadPoolParameterInfo parameter = JSONUtil.parseObject(JSONUtil.toJSONString(registerParameter), ThreadPoolParameterInfo.class); + String threadPoolId = registerParameter.getThreadPoolId(); + try { + failDynamicThreadPoolRegisterWrapper(registerWrapper); + Result registerResult = httpAgent.httpPost(REGISTER_DYNAMIC_THREAD_POOL_PATH, registerWrapper); + if (registerResult == null || !registerResult.isSuccess()) { + throw new ServiceException("Dynamic thread pool registration returns error."); + } + } catch (Throwable ex) { + log.error("Dynamic thread pool registration execution error: {}", threadPoolId, ex); + throw ex; + } + ThreadPoolExecutor dynamicThreadPoolExecutor = buildDynamicThreadPoolExecutor(registerParameter); + DynamicThreadPoolWrapper dynamicThreadPoolWrapper = DynamicThreadPoolWrapper.builder() + .threadPoolId(threadPoolId) + .executor(dynamicThreadPoolExecutor) + .build(); + GlobalThreadPoolManage.register(threadPoolId, parameter, dynamicThreadPoolWrapper); + dynamicThreadPoolSubscribeConfig.subscribeConfig(threadPoolId); + clientWorker.addCacheDataIfAbsent(properties.getNamespace(), properties.getItemId(), threadPoolId); + return dynamicThreadPoolExecutor; + } + + private ThreadPoolExecutor buildDynamicThreadPoolExecutor(DynamicThreadPoolRegisterParameter registerParameter) { + ThreadPoolExecutor dynamicThreadPoolExecutor = ThreadPoolBuilder.builder() + .threadPoolId(registerParameter.getThreadPoolId()) + .corePoolSize(registerParameter.getCorePoolSize()) + .maxPoolNum(registerParameter.getMaximumPoolSize()) + .workQueue(QueueTypeEnum.createBlockingQueue(registerParameter.getQueueType(), registerParameter.getCapacity())) + .threadFactory(registerParameter.getThreadPoolId()) + .keepAliveTime(registerParameter.getKeepAliveTime()) + .rejected(RejectedTypeEnum.createPolicy(registerParameter.getRejectedType())) + .dynamicPool() + .build(); + return dynamicThreadPoolExecutor; + } + + private void checkThreadPoolParameter(DynamicThreadPoolRegisterParameter registerParameter) { + Assert.isTrue(!registerParameter.getThreadPoolId().contains("+"), "The thread pool contains sensitive characters."); + } + + private void failDynamicThreadPoolRegisterWrapper(DynamicThreadPoolRegisterWrapper registerWrapper) { + registerWrapper.setTenantId(properties.getNamespace()); + registerWrapper.setItemId(properties.getItemId()); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolPostProcessor.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolPostProcessor.java new file mode 100644 index 00000000..21821849 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolPostProcessor.java @@ -0,0 +1,189 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.enums.EnableEnum; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.common.toolkit.BooleanUtil; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.*; +import cn.hippo4j.core.executor.support.adpter.DynamicThreadPoolAdapterChoose; +import cn.hippo4j.core.toolkit.inet.DynamicThreadPoolAnnotationUtil; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.core.task.TaskDecorator; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static cn.hippo4j.common.constant.Constants.*; + +/** + * Dynamic thread-pool post processor. + */ +@Slf4j +@AllArgsConstructor +public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { + + private final BootstrapProperties properties; + + private final HttpAgent httpAgent; + + private final DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig; + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) { + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof DynamicThreadPoolExecutor || DynamicThreadPoolAdapterChoose.match(bean)) { + DynamicThreadPool dynamicThreadPool; + try { + dynamicThreadPool = ApplicationContextHolder.findAnnotationOnBean(beanName, DynamicThreadPool.class); + if (Objects.isNull(dynamicThreadPool)) { + // Adapt to lower versions of SpringBoot. + dynamicThreadPool = DynamicThreadPoolAnnotationUtil.findAnnotationOnBean(beanName, DynamicThreadPool.class); + if (Objects.isNull(dynamicThreadPool)) { + return bean; + } + } + } catch (Exception ex) { + log.error("Failed to create dynamic thread pool in annotation mode.", ex); + return bean; + } + DynamicThreadPoolExecutor dynamicThreadPoolExecutor; + if ((dynamicThreadPoolExecutor = DynamicThreadPoolAdapterChoose.unwrap(bean)) == null) { + dynamicThreadPoolExecutor = (DynamicThreadPoolExecutor) bean; + } + DynamicThreadPoolWrapper dynamicThreadPoolWrapper = new DynamicThreadPoolWrapper(dynamicThreadPoolExecutor.getThreadPoolId(), dynamicThreadPoolExecutor); + ThreadPoolExecutor remoteThreadPoolExecutor = fillPoolAndRegister(dynamicThreadPoolWrapper); + DynamicThreadPoolAdapterChoose.replace(bean, remoteThreadPoolExecutor); + subscribeConfig(dynamicThreadPoolWrapper); + return remoteThreadPoolExecutor; + } + if (bean instanceof DynamicThreadPoolWrapper) { + DynamicThreadPoolWrapper dynamicThreadPoolWrapper = (DynamicThreadPoolWrapper) bean; + registerAndSubscribe(dynamicThreadPoolWrapper); + } + return bean; + } + + /** + * Register and subscribe. + * + * @param dynamicThreadPoolWrapper + */ + protected void registerAndSubscribe(DynamicThreadPoolWrapper dynamicThreadPoolWrapper) { + fillPoolAndRegister(dynamicThreadPoolWrapper); + subscribeConfig(dynamicThreadPoolWrapper); + } + + /** + * Fill the thread pool and register. + * + * @param dynamicThreadPoolWrapper + */ + protected ThreadPoolExecutor fillPoolAndRegister(DynamicThreadPoolWrapper dynamicThreadPoolWrapper) { + String threadPoolId = dynamicThreadPoolWrapper.getThreadPoolId(); + Map queryStrMap = new HashMap(3); + queryStrMap.put(TP_ID, threadPoolId); + queryStrMap.put(ITEM_ID, properties.getItemId()); + queryStrMap.put(NAMESPACE, properties.getNamespace()); + boolean isSubscribe = false; + ThreadPoolExecutor newDynamicThreadPoolExecutor = null; + ThreadPoolParameterInfo threadPoolParameterInfo = new ThreadPoolParameterInfo(); + try { + Result result = httpAgent.httpGetByConfig(Constants.CONFIG_CONTROLLER_PATH, null, queryStrMap, 5000L); + if (result.isSuccess() && result.getData() != null) { + String resultJsonStr = JSONUtil.toJSONString(result.getData()); + if ((threadPoolParameterInfo = JSONUtil.parseObject(resultJsonStr, ThreadPoolParameterInfo.class)) != null) { + // Create a thread pool with relevant parameters. + BlockingQueue workQueue = QueueTypeEnum.createBlockingQueue(threadPoolParameterInfo.getQueueType(), threadPoolParameterInfo.getCapacity()); + newDynamicThreadPoolExecutor = ThreadPoolBuilder.builder() + .dynamicPool() + .workQueue(workQueue) + .threadFactory(threadPoolId) + .poolThreadSize(threadPoolParameterInfo.corePoolSizeAdapt(), threadPoolParameterInfo.maximumPoolSizeAdapt()) + .keepAliveTime(threadPoolParameterInfo.getKeepAliveTime(), TimeUnit.SECONDS) + .rejected(RejectedTypeEnum.createPolicy(threadPoolParameterInfo.getRejectedType())) + .allowCoreThreadTimeOut(EnableEnum.getBool(threadPoolParameterInfo.getAllowCoreThreadTimeOut())) + .build(); + // Set dynamic thread pool enhancement parameters. + if (dynamicThreadPoolWrapper.getExecutor() instanceof AbstractDynamicExecutorSupport) { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm( + BooleanUtil.toBoolean(threadPoolParameterInfo.getIsAlarm().toString()), + threadPoolParameterInfo.getCapacityAlarm(), + threadPoolParameterInfo.getLivenessAlarm()); + GlobalNotifyAlarmManage.put(threadPoolId, threadPoolNotifyAlarm); + TaskDecorator taskDecorator = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).getTaskDecorator(); + ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setTaskDecorator(taskDecorator); + long awaitTerminationMillis = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).awaitTerminationMillis; + boolean waitForTasksToCompleteOnShutdown = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).waitForTasksToCompleteOnShutdown; + ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setSupportParam(awaitTerminationMillis, waitForTasksToCompleteOnShutdown); + long executeTimeOut = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).getExecuteTimeOut(); + ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setExecuteTimeOut(executeTimeOut); + } + dynamicThreadPoolWrapper.setExecutor(newDynamicThreadPoolExecutor); + isSubscribe = true; + } + } + } catch (Exception ex) { + newDynamicThreadPoolExecutor = dynamicThreadPoolWrapper.getExecutor() != null ? dynamicThreadPoolWrapper.getExecutor() : CommonDynamicThreadPool.getInstance(threadPoolId); + dynamicThreadPoolWrapper.setExecutor(newDynamicThreadPoolExecutor); + log.error("Failed to initialize thread pool configuration. error message: {}", ex.getMessage()); + } finally { + if (Objects.isNull(dynamicThreadPoolWrapper.getExecutor())) { + dynamicThreadPoolWrapper.setExecutor(CommonDynamicThreadPool.getInstance(threadPoolId)); + } + // Set whether to subscribe to the remote thread pool configuration. + dynamicThreadPoolWrapper.setSubscribeFlag(isSubscribe); + } + GlobalThreadPoolManage.register(dynamicThreadPoolWrapper.getThreadPoolId(), threadPoolParameterInfo, dynamicThreadPoolWrapper); + return newDynamicThreadPoolExecutor; + } + + /** + * Client dynamic thread pool subscription server configuration. + * + * @param dynamicThreadPoolWrapper + */ + protected void subscribeConfig(DynamicThreadPoolWrapper dynamicThreadPoolWrapper) { + if (dynamicThreadPoolWrapper.isSubscribeFlag()) { + dynamicThreadPoolSubscribeConfig.subscribeConfig(dynamicThreadPoolWrapper.getThreadPoolId()); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolSubscribeConfig.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolSubscribeConfig.java new file mode 100644 index 00000000..78d35543 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolSubscribeConfig.java @@ -0,0 +1,74 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; +import cn.hippo4j.core.executor.support.QueueTypeEnum; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Dynamic thread-pool subscribe config. + */ +@RequiredArgsConstructor +public class DynamicThreadPoolSubscribeConfig { + + private final ThreadPoolDynamicRefresh threadPoolDynamicRefresh; + + private final ClientWorker clientWorker; + + private final BootstrapProperties properties; + + private final ExecutorService configRefreshExecutorService = ThreadPoolBuilder.builder() + .corePoolSize(1) + .maxPoolNum(2) + .keepAliveTime(2000) + .timeUnit(TimeUnit.MILLISECONDS) + .workQueue(QueueTypeEnum.SYNCHRONOUS_QUEUE) + .allowCoreThreadTimeOut(true) + .threadFactory("client.dynamic.threadPool.change.config") + .rejected(new ThreadPoolExecutor.AbortPolicy()) + .build(); + + public void subscribeConfig(String threadPoolId) { + subscribeConfig(threadPoolId, config -> threadPoolDynamicRefresh.dynamicRefresh(config)); + } + + public void subscribeConfig(String threadPoolId, ThreadPoolSubscribeCallback threadPoolSubscribeCallback) { + Listener configListener = new Listener() { + + @Override + public void receiveConfigInfo(String config) { + threadPoolSubscribeCallback.callback(config); + } + + @Override + public Executor getExecutor() { + return configRefreshExecutorService; + } + }; + clientWorker.addTenantListeners(properties.getNamespace(), properties.getItemId(), threadPoolId, Arrays.asList(configListener)); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/Listener.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/Listener.java new file mode 100644 index 00000000..f1f8b880 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/Listener.java @@ -0,0 +1,40 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import java.util.concurrent.Executor; + +/** + * Listener. + */ +public interface Listener { + + /** + * Get executor. + * + * @return + */ + Executor getExecutor(); + + /** + * Receive config info. + * + * @param configInfo + */ + void receiveConfigInfo(String configInfo); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ServerThreadPoolDynamicRefresh.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ServerThreadPoolDynamicRefresh.java new file mode 100644 index 00000000..77978fb2 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ServerThreadPoolDynamicRefresh.java @@ -0,0 +1,168 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.common.enums.EnableEnum; +import cn.hippo4j.common.model.ThreadPoolParameter; +import cn.hippo4j.common.model.ThreadPoolParameterInfo; +import cn.hippo4j.message.request.ChangeParameterNotifyRequest; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; +import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.AbstractDynamicExecutorSupport; +import cn.hippo4j.core.executor.support.QueueTypeEnum; +import cn.hippo4j.core.executor.support.RejectedTypeEnum; +import cn.hippo4j.core.executor.support.ResizableCapacityLinkedBlockingQueue; +import cn.hippo4j.core.proxy.RejectedProxyUtil; +import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.Objects; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_THREAD_POOL_TEXT; + +/** + * Thread pool dynamic refresh. + */ +@Slf4j +@AllArgsConstructor +public class ServerThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh { + + private final ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler; + + @Override + public void dynamicRefresh(String content) { + ThreadPoolParameterInfo parameter = JSONUtil.parseObject(content, ThreadPoolParameterInfo.class); + String threadPoolId = parameter.getTpId(); + ThreadPoolExecutor executor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); + refreshDynamicPool(parameter, executor); + } + + /** + * Refresh dynamic pool. + * + * @param parameter + * @param executor + */ + public void refreshDynamicPool(ThreadPoolParameter parameter, ThreadPoolExecutor executor) { + String threadPoolId = parameter.getTpId(); + int originalCoreSize = executor.getCorePoolSize(); + int originalMaximumPoolSize = executor.getMaximumPoolSize(); + String originalQuery = executor.getQueue().getClass().getSimpleName(); + int originalCapacity = executor.getQueue().remainingCapacity() + executor.getQueue().size(); + long originalKeepAliveTime = executor.getKeepAliveTime(TimeUnit.SECONDS); + boolean originalAllowCoreThreadTimeOut = executor.allowsCoreThreadTimeOut(); + Long originalExecuteTimeOut = null; + RejectedExecutionHandler rejectedExecutionHandler = executor.getRejectedExecutionHandler(); + if (executor instanceof AbstractDynamicExecutorSupport) { + DynamicThreadPoolExecutor dynamicExecutor = (DynamicThreadPoolExecutor) executor; + rejectedExecutionHandler = dynamicExecutor.getRedundancyHandler(); + originalExecuteTimeOut = dynamicExecutor.getExecuteTimeOut(); + } + String originalRejected = rejectedExecutionHandler.getClass().getSimpleName(); + // Send change message. + ChangeParameterNotifyRequest request = new ChangeParameterNotifyRequest(); + request.setBeforeCorePoolSize(originalCoreSize); + request.setBeforeMaximumPoolSize(originalMaximumPoolSize); + request.setBeforeAllowsCoreThreadTimeOut(originalAllowCoreThreadTimeOut); + request.setBeforeKeepAliveTime(originalKeepAliveTime); + request.setBlockingQueueName(originalQuery); + request.setBeforeQueueCapacity(originalCapacity); + request.setBeforeRejectedName(originalRejected); + request.setBeforeExecuteTimeOut(originalExecuteTimeOut); + request.setThreadPoolId(threadPoolId); + changePoolInfo(executor, parameter); + ThreadPoolExecutor afterExecutor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); + request.setNowCorePoolSize(afterExecutor.getCorePoolSize()); + request.setNowMaximumPoolSize(afterExecutor.getMaximumPoolSize()); + request.setNowAllowsCoreThreadTimeOut(EnableEnum.getBool(parameter.getAllowCoreThreadTimeOut())); + request.setNowKeepAliveTime(afterExecutor.getKeepAliveTime(TimeUnit.SECONDS)); + request.setNowQueueCapacity((afterExecutor.getQueue().remainingCapacity() + afterExecutor.getQueue().size())); + request.setNowRejectedName(RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType())); + request.setNowExecuteTimeOut(originalExecuteTimeOut); + threadPoolNotifyAlarmHandler.sendPoolConfigChange(request); + log.info(CHANGE_THREAD_POOL_TEXT, + threadPoolId, + String.format(CHANGE_DELIMITER, originalCoreSize, afterExecutor.getCorePoolSize()), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, afterExecutor.getMaximumPoolSize()), + String.format(CHANGE_DELIMITER, originalQuery, QueueTypeEnum.getBlockingQueueNameByType(parameter.getQueueType())), + String.format(CHANGE_DELIMITER, originalCapacity, + (afterExecutor.getQueue().remainingCapacity() + afterExecutor.getQueue().size())), + String.format(CHANGE_DELIMITER, originalKeepAliveTime, afterExecutor.getKeepAliveTime(TimeUnit.SECONDS)), + String.format(CHANGE_DELIMITER, originalExecuteTimeOut, originalExecuteTimeOut), + String.format(CHANGE_DELIMITER, originalRejected, RejectedTypeEnum.getRejectedNameByType(parameter.getRejectedType())), + String.format(CHANGE_DELIMITER, originalAllowCoreThreadTimeOut, EnableEnum.getBool(parameter.getAllowCoreThreadTimeOut()))); + } + + /** + * Change pool info. + * + * @param executor + * @param parameter + */ + public void changePoolInfo(ThreadPoolExecutor executor, ThreadPoolParameter parameter) { + if (parameter.getCoreSize() != null && parameter.getMaxSize() != null) { + if (parameter.getMaxSize() < executor.getMaximumPoolSize()) { + executor.setCorePoolSize(parameter.getCoreSize()); + executor.setMaximumPoolSize(parameter.getMaxSize()); + } else { + executor.setMaximumPoolSize(parameter.getMaxSize()); + executor.setCorePoolSize(parameter.getCoreSize()); + } + } else { + if (parameter.getMaxSize() != null) { + executor.setMaximumPoolSize(parameter.getMaxSize()); + } + if (parameter.getCoreSize() != null) { + executor.setCorePoolSize(parameter.getCoreSize()); + } + } + if (parameter.getCapacity() != null + && Objects.equals(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.type, parameter.getQueueType())) { + if (executor.getQueue() instanceof ResizableCapacityLinkedBlockingQueue) { + ResizableCapacityLinkedBlockingQueue queue = (ResizableCapacityLinkedBlockingQueue) executor.getQueue(); + queue.setCapacity(parameter.getCapacity()); + } else { + log.warn("The queue length cannot be modified. Queue type mismatch. Current queue type: {}", executor.getQueue().getClass().getSimpleName()); + } + } + if (parameter.getKeepAliveTime() != null) { + executor.setKeepAliveTime(parameter.getKeepAliveTime(), TimeUnit.SECONDS); + } + if (parameter.getRejectedType() != null) { + RejectedExecutionHandler rejectedExecutionHandler = RejectedTypeEnum.createPolicy(parameter.getRejectedType()); + if (executor instanceof AbstractDynamicExecutorSupport) { + DynamicThreadPoolExecutor dynamicExecutor = (DynamicThreadPoolExecutor) executor; + dynamicExecutor.setRedundancyHandler(rejectedExecutionHandler); + AtomicLong rejectCount = dynamicExecutor.getRejectCount(); + rejectedExecutionHandler = RejectedProxyUtil.createProxy(rejectedExecutionHandler, parameter.getTpId(), rejectCount); + } + executor.setRejectedExecutionHandler(rejectedExecutionHandler); + } + if (parameter.getAllowCoreThreadTimeOut() != null) { + executor.allowCoreThreadTimeOut(EnableEnum.getBool(parameter.getAllowCoreThreadTimeOut())); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ShutdownExecuteException.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ShutdownExecuteException.java new file mode 100644 index 00000000..42543fda --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ShutdownExecuteException.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +/** + * Shutdown execute exception. + */ +public class ShutdownExecuteException extends Exception { + + public ShutdownExecuteException() { + super("Execute task when stopped."); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java new file mode 100644 index 00000000..d520e0c3 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolAdapterRegister.java @@ -0,0 +1,106 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterCacheConfig; +import cn.hippo4j.adapter.base.ThreadPoolAdapterRegisterAction; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.core.toolkit.IdentifyUtil; +import cn.hippo4j.core.toolkit.inet.InetUtils; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hippo4j.springboot.starter.toolkit.CloudCommonIdUtil; +import com.google.common.collect.Lists; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.env.ConfigurableEnvironment; + +import java.util.List; +import java.util.Map; + +import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL; +import static cn.hippo4j.common.constant.Constants.REGISTER_ADAPTER_PATH; + +/** + * Thread-pool adapter register. + */ +@Slf4j +@AllArgsConstructor +public class ThreadPoolAdapterRegister implements ApplicationRunner, ThreadPoolAdapterRegisterAction { + + private final HttpAgent httpAgent; + + private final BootstrapProperties properties; + + private final ConfigurableEnvironment environment; + + private final InetUtils hippo4JInetUtils; + + @Override + public void run(ApplicationArguments args) throws Exception { + register(); + } + + @Override + public List getThreadPoolAdapterCacheConfigs(Map threadPoolAdapterMap) { + List adapterCacheConfigList = Lists.newArrayList(); + for (Map.Entry threadPoolAdapterEntry : threadPoolAdapterMap.entrySet()) { + ThreadPoolAdapter threadPoolAdapter = threadPoolAdapterEntry.getValue(); + List threadPoolStates = threadPoolAdapter.getThreadPoolStates(); + if (CollectionUtil.isEmpty(threadPoolStates) || threadPoolStates.size() == 0) { + continue; + } + ThreadPoolAdapterCacheConfig cacheConfig = new ThreadPoolAdapterCacheConfig(); + cacheConfig.setMark(threadPoolAdapter.mark()); + String tenantItemKey = properties.getNamespace() + IDENTIFY_SLICER_SYMBOL + properties.getItemId(); + cacheConfig.setTenantItemKey(tenantItemKey); + cacheConfig.setClientIdentify(IdentifyUtil.getIdentify()); + String clientAddress = CloudCommonIdUtil.getClientIpPort(environment, hippo4JInetUtils); + cacheConfig.setClientAddress(clientAddress); + cacheConfig.setThreadPoolAdapterStates(threadPoolStates); + adapterCacheConfigList.add(cacheConfig); + } + return adapterCacheConfigList; + } + + @Override + public void doRegister(List cacheConfigList) { + if (CollectionUtil.isNotEmpty(cacheConfigList) && cacheConfigList.size() > 0) { + try { + Result result = httpAgent.httpPost(REGISTER_ADAPTER_PATH, cacheConfigList); + if (!result.isSuccess()) { + log.warn("Failed to register third-party thread pool data."); + } + } catch (Throwable ex) { + log.error("Failed to register third-party thread pool data.", ex); + } + } + } + + public void register() { + Map threadPoolAdapterMap = ApplicationContextHolder.getBeansOfType(ThreadPoolAdapter.class); + List threadPoolAdapterCacheConfigs = getThreadPoolAdapterCacheConfigs(threadPoolAdapterMap); + doRegister(threadPoolAdapterCacheConfigs); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolSubscribeCallback.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolSubscribeCallback.java new file mode 100644 index 00000000..121314e9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ThreadPoolSubscribeCallback.java @@ -0,0 +1,31 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.core; + +/** + * ThreadPool subscribe callback. + */ +public interface ThreadPoolSubscribeCallback { + + /** + * Callback. + * + * @param config + */ + void callback(String config); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationCompleteEvent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationCompleteEvent.java new file mode 100644 index 00000000..9393062c --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationCompleteEvent.java @@ -0,0 +1,36 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.event; + +import org.springframework.context.ApplicationEvent; + +/** + * Execute after the spring application context is successfully started. + */ +public class ApplicationCompleteEvent extends ApplicationEvent { + + /** + * Create a new {@code ApplicationEvent}. + * + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public ApplicationCompleteEvent(Object source) { + super(source); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationContentPostProcessor.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationContentPostProcessor.java new file mode 100644 index 00000000..f4e2cc23 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/event/ApplicationContentPostProcessor.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.event; + +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationListener; + +import javax.annotation.Resource; + +/** + * Application content post processor. + */ +public class ApplicationContentPostProcessor implements ApplicationListener { + + @Resource + private ApplicationContext applicationContext; + + private boolean executeOnlyOnce = true; + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + synchronized (ApplicationContentPostProcessor.class) { + if (executeOnlyOnce) { + applicationContext.publishEvent(new ApplicationCompleteEvent(this)); + executeOnlyOnce = false; + } + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java new file mode 100644 index 00000000..4055a3b9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/ReportingEventExecutor.java @@ -0,0 +1,178 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.ThreadUtil; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.monitor.collect.Collector; +import cn.hippo4j.springboot.starter.monitor.send.MessageSender; +import cn.hippo4j.springboot.starter.remote.ServerHealthCheck; +import cn.hutool.core.collection.CollUtil; +import com.example.monitor.base.DynamicThreadPoolMonitor; +import com.example.monitor.base.MonitorTypeEnum; +import com.example.monitor.base.ThreadPoolMonitor; +import com.google.common.base.Strings; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.boot.CommandLineRunner; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static cn.hippo4j.core.executor.manage.GlobalThreadPoolManage.getThreadPoolNum; + +/** + * Dynamic thread pool collection and reporting event executor. + * + *

{@link BlockingQueue} Act as a buffer container, enabling a production-consumption model. + */ +@Slf4j +@RequiredArgsConstructor +public class ReportingEventExecutor implements Runnable, CommandLineRunner, DisposableBean { + + @NonNull + private final BootstrapProperties properties; + + @NonNull + private final MessageSender messageSender; + + @NonNull + private final ServerHealthCheck serverHealthCheck; + + /** + * Collection of data collection components. + */ + private Map collectors; + + /** + * Thread pool monitoring collection. + */ + private List threadPoolMonitors; + + /** + * Buffer container for data collection, waiting + * for ReportingEventExecutor to report to the server. + */ + private BlockingQueue messageCollectVessel; + + /** + * Data collection timing executor, after Spring starts, + * it delays for a period of time to collect the running data of the dynamic thread pool. + */ + private ScheduledThreadPoolExecutor collectVesselExecutor; + + @SneakyThrows + @Override + public void run() { + while (true) { + try { + Message message = messageCollectVessel.take(); + messageSender.send(message); + } catch (Throwable ex) { + log.error("Consumption buffer container task failed. Number of buffer container tasks: {}", messageCollectVessel.size(), ex); + } + } + } + + @Override + public void run(String... args) { + if (!properties.getCollect()) { + return; + } + String collectType = Optional.ofNullable(Strings.emptyToNull(properties.getCollectType())).orElse(MonitorTypeEnum.SERVER.name().toLowerCase()); + collectVesselExecutor = new ScheduledThreadPoolExecutor( + new Integer(collectType.split(",").length), + ThreadFactoryBuilder.builder().daemon(true).prefix("client.scheduled.collect.data").build()); + Collection dynamicThreadPoolMonitors = + DynamicThreadPoolServiceLoader.getSingletonServiceInstances(DynamicThreadPoolMonitor.class); + boolean customerDynamicThreadPoolMonitorFlag = CollectionUtil.isNotEmpty(dynamicThreadPoolMonitors) || (collectType.contains(MonitorTypeEnum.PROMETHEUS.name().toLowerCase()) + || collectType.contains(MonitorTypeEnum.LOG.name().toLowerCase()) + || collectType.contains(MonitorTypeEnum.ES.name().toLowerCase())); + if (customerDynamicThreadPoolMonitorFlag) { + // Get all dynamic thread pool monitoring components. + Map threadPoolMonitorMap = ApplicationContextHolder.getBeansOfType(ThreadPoolMonitor.class); + threadPoolMonitorMap.forEach((beanName, monitor) -> threadPoolMonitors.add(monitor)); + dynamicThreadPoolMonitors.stream().filter(each -> collectType.contains(each.getType())).forEach(each -> threadPoolMonitors.add(each)); + collectVesselExecutor.scheduleWithFixedDelay( + () -> dynamicThreadPoolMonitor(), + properties.getInitialDelay(), + properties.getCollectInterval(), + TimeUnit.MILLISECONDS); + } + if (collectType.contains(MonitorTypeEnum.SERVER.name().toLowerCase())) { + collectVesselExecutor.scheduleWithFixedDelay( + () -> runTimeGatherTask(), + properties.getInitialDelay(), + properties.getCollectInterval(), + TimeUnit.MILLISECONDS); + Integer bufferSize = properties.getTaskBufferSize(); + messageCollectVessel = new ArrayBlockingQueue(bufferSize); + // Get all data collection components, currently only historical operation data collection. + collectors = ApplicationContextHolder.getBeansOfType(Collector.class); + // Start reporting monitoring data thread. + ThreadUtil.newThread(this, "client.thread.reporting.task", Boolean.TRUE).start(); + } + if (GlobalThreadPoolManage.getThreadPoolNum() > 0) { + log.info("Dynamic thread pool: [{}]. The dynamic thread pool starts data collection and reporting.", getThreadPoolNum()); + } + } + + @Override + public void destroy() { + Optional.ofNullable(collectVesselExecutor).ifPresent((each) -> each.shutdown()); + } + + /** + * Running dynamic thread pool monitoring. + */ + private void dynamicThreadPoolMonitor() { + threadPoolMonitors.forEach(each -> each.collect()); + } + + /** + * Collect dynamic thread pool data and add buffer queues. + */ + private void runTimeGatherTask() { + boolean healthStatus = serverHealthCheck.isHealthStatus(); + if (!healthStatus || CollUtil.isEmpty(collectors)) { + return; + } + collectors.forEach((beanName, collector) -> { + Message message = collector.collectMessage(); + boolean offer = messageCollectVessel.offer(message); + if (!offer) { + log.warn("Buffer data starts stacking data..."); + } + }); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/Collector.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/Collector.java new file mode 100644 index 00000000..3fe5da50 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/Collector.java @@ -0,0 +1,33 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.collect; + +import cn.hippo4j.common.monitor.Message; + +/** + * Collect thread-pool data. + */ +public interface Collector { + + /** + * Collect message. + * + * @return + */ + Message collectMessage(); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java new file mode 100644 index 00000000..d38b3ed6 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/collect/RunTimeInfoCollector.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.collect; + +import cn.hippo4j.common.model.ThreadPoolRunStateInfo; +import cn.hippo4j.common.monitor.AbstractMessage; +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageTypeEnum; +import cn.hippo4j.common.monitor.RuntimeMessage; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.core.executor.state.AbstractThreadPoolRuntime; +import cn.hutool.core.bean.BeanUtil; +import com.google.common.collect.Lists; +import lombok.AllArgsConstructor; + +import java.util.List; + +import static cn.hippo4j.core.toolkit.IdentifyUtil.getThreadPoolIdentify; + +/** + * Thread pool runtime data collection. + */ +@AllArgsConstructor +public class RunTimeInfoCollector extends AbstractThreadPoolRuntime implements Collector { + + private final BootstrapProperties properties; + + @Override + public Message collectMessage() { + AbstractMessage message = new RuntimeMessage(); + List runtimeMessages = Lists.newArrayList(); + List listThreadPoolId = GlobalThreadPoolManage.listThreadPoolId(); + for (String each : listThreadPoolId) { + ThreadPoolRunStateInfo poolRunState = getPoolRunState(each); + RuntimeMessage runtimeMessage = BeanUtil.toBean(poolRunState, RuntimeMessage.class); + runtimeMessage.setGroupKey(getThreadPoolIdentify(each, properties.getItemId(), properties.getNamespace())); + runtimeMessages.add(runtimeMessage); + } + message.setMessageType(MessageTypeEnum.RUNTIME); + message.setMessages(runtimeMessages); + return message; + } + + @Override + public ThreadPoolRunStateInfo supplement(ThreadPoolRunStateInfo threadPoolRunStateInfo) { + return threadPoolRunStateInfo; + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/MessageSender.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/MessageSender.java new file mode 100644 index 00000000..bf91464a --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/MessageSender.java @@ -0,0 +1,33 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.send; + +import cn.hippo4j.common.monitor.Message; + +/** + * Message sender. + */ +public interface MessageSender { + + /** + * Send. + * + * @param message + */ + void send(Message message); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/http/HttpConnectSender.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/http/HttpConnectSender.java new file mode 100644 index 00000000..33fc1173 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/http/HttpConnectSender.java @@ -0,0 +1,48 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.send.http; + +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.common.toolkit.MessageConvert; +import cn.hippo4j.springboot.starter.monitor.send.MessageSender; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import static cn.hippo4j.common.constant.Constants.MONITOR_PATH; + +/** + * Http sender. + */ +@Slf4j +@AllArgsConstructor +public class HttpConnectSender implements MessageSender { + + private final HttpAgent httpAgent; + + @Override + public void send(Message message) { + try { + MessageWrapper messageWrapper = MessageConvert.convert(message); + httpAgent.httpPost(MONITOR_PATH, messageWrapper); + } catch (Throwable ex) { + log.error("Failed to push dynamic thread pool runtime data.", ex); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/NettyConnectSender.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/NettyConnectSender.java new file mode 100644 index 00000000..6ec5b98c --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/NettyConnectSender.java @@ -0,0 +1,70 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.send.netty; + +import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.monitor.MessageWrapper; +import cn.hippo4j.common.toolkit.MessageConvert; +import cn.hippo4j.springboot.starter.monitor.send.MessageSender; +import cn.hippo4j.springboot.starter.remote.ServerNettyAgent; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.serialization.ClassResolvers; +import io.netty.handler.codec.serialization.ObjectDecoder; +import io.netty.handler.codec.serialization.ObjectEncoder; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * Netty connect sender. + */ +@Slf4j +@AllArgsConstructor +public class NettyConnectSender implements MessageSender { + + private ServerNettyAgent serverNettyAgent; + + @Override + public void send(Message message) { + MessageWrapper messageWrapper = MessageConvert.convert(message); + EventLoopGroup eventLoopGroup = serverNettyAgent.getEventLoopGroup(); + try { + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .handler(new ChannelInitializer() { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new ObjectEncoder()); + pipeline.addLast(new ObjectDecoder(Integer.MAX_VALUE, + ClassResolvers.cacheDisabled(null))); + pipeline.addLast(new SenderHandler(messageWrapper)); + } + }); + bootstrap.connect(serverNettyAgent.getNettyServerAddress(), serverNettyAgent.getNettyServerPort()).sync(); + } catch (Exception e) { + log.error("Netty send error.", e); + } + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/SenderHandler.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/SenderHandler.java new file mode 100644 index 00000000..21c72be5 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/monitor/send/netty/SenderHandler.java @@ -0,0 +1,43 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.monitor.send.netty; + +import cn.hippo4j.common.monitor.MessageWrapper; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * Sender handler. + */ +@Slf4j +@AllArgsConstructor +public class SenderHandler extends SimpleChannelInboundHandler { + + private MessageWrapper messageWrapper; + + @Override + protected void channelRead0(ChannelHandlerContext ctx, MessageWrapper msg) throws Exception { + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + ctx.channel().writeAndFlush(messageWrapper); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java new file mode 100644 index 00000000..9b51cc2d --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/notify/ServerNotifyConfigBuilder.java @@ -0,0 +1,85 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.notify; + +import cn.hippo4j.common.toolkit.GroupKey; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.message.service.AlarmControlHandler; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.dto.ThreadPoolNotifyDTO; +import cn.hippo4j.message.api.NotifyConfigBuilder; +import cn.hippo4j.message.request.ThreadPoolNotifyRequest; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; + +import static cn.hippo4j.common.constant.Constants.BASE_PATH; + +/** + * Server notify config builder. + */ +@Slf4j +@AllArgsConstructor +public class ServerNotifyConfigBuilder implements NotifyConfigBuilder { + + private final HttpAgent httpAgent; + + private final BootstrapProperties properties; + + private final AlarmControlHandler alarmControlHandler; + + @Override + public Map> buildNotify() { + Map> resultMap = Maps.newHashMap(); + List threadPoolIds = GlobalThreadPoolManage.listThreadPoolId(); + if (CollUtil.isEmpty(threadPoolIds)) { + log.warn("The client does not have a dynamic thread pool instance configured."); + return resultMap; + } + List groupKeys = Lists.newArrayList(); + threadPoolIds.forEach(each -> { + String groupKey = GroupKey.getKeyTenant(each, properties.getItemId(), properties.getNamespace()); + groupKeys.add(groupKey); + }); + Result result = null; + try { + result = httpAgent.httpPostByDiscovery(BASE_PATH + "/notify/list/config", new ThreadPoolNotifyRequest(groupKeys)); + } catch (Throwable ex) { + log.error("Get dynamic thread pool notify configuration error. message: {}", ex.getMessage()); + } + if (result != null && result.isSuccess() && result.getData() != null) { + String resultDataStr = JSONUtil.toJSONString(result.getData()); + List resultData = JSONUtil.parseArray(resultDataStr, ThreadPoolNotifyDTO.class); + resultData.forEach(each -> resultMap.put(each.getNotifyKey(), each.getNotifyList())); + + resultMap.forEach((key, val) -> val.stream().filter(each -> StrUtil.equals("ALARM", each.getType())) + .forEach(each -> alarmControlHandler.initCacheAndLock(each.getTpId(), each.getPlatform(), each.getInterval()))); + } + return resultMap; + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java new file mode 100644 index 00000000..3ca23f0e --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/AbstractHealthCheck.java @@ -0,0 +1,167 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; + +import cn.hippo4j.common.toolkit.ThreadUtil; +import cn.hippo4j.springboot.starter.event.ApplicationCompleteEvent; +import cn.hippo4j.springboot.starter.core.ShutdownExecuteException; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationListener; + +import java.util.Objects; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + +import static cn.hippo4j.common.constant.Constants.HEALTH_CHECK_INTERVAL; + +/** + * Abstract health check. + */ +@Slf4j +public abstract class AbstractHealthCheck implements ServerHealthCheck, InitializingBean, ApplicationListener { + + /** + * Health status + */ + private volatile boolean healthStatus = true; + + /** + * Health check failure count + */ + private volatile int checkFailureCount = 0; + + /** + * Client shutdown hook + */ + private volatile boolean clientShutdownHook = false; + + /** + * Spring context init complete. TODO: Why this + */ + private boolean contextInitComplete = false; + + /** + * Health main lock + */ + private final ReentrantLock healthMainLock = new ReentrantLock(); + + /** + * Health condition + */ + private final Condition healthCondition = healthMainLock.newCondition(); + + /** + * Health check executor + */ + private final ScheduledThreadPoolExecutor healthCheckExecutor = new ScheduledThreadPoolExecutor( + new Integer(1), + ThreadFactoryBuilder.builder().daemon(true).prefix("client.scheduled.health.check").build()); + + /** + * Send health check. + * + * @return + */ + protected abstract boolean sendHealthCheck(); + + /** + * Health check. + */ + public void healthCheck() { + boolean healthCheckStatus = sendHealthCheck(); + if (healthCheckStatus) { + if (Objects.equals(healthStatus, false)) { + healthStatus = true; + checkFailureCount = 0; + log.info("The client reconnects to the server successfully."); + signalAllBizThread(); + } + } else { + healthStatus = false; + checkFailureCount++; + if (checkFailureCount > 1 && checkFailureCount < 4) { + ThreadUtil.sleep(HEALTH_CHECK_INTERVAL * 1000 * (checkFailureCount - 1)); + } else if (checkFailureCount >= 4) { + ThreadUtil.sleep(25000L); + } + } + } + + @Override + @SneakyThrows + public boolean isHealthStatus() { + while (contextInitComplete && !healthStatus && !clientShutdownHook) { + healthMainLock.lock(); + try { + healthCondition.await(); + } finally { + healthMainLock.unlock(); + } + } + if (!healthStatus) { + throw new ShutdownExecuteException(); + } + return healthStatus; + } + + @Override + public void setHealthStatus(boolean healthStatus) { + healthMainLock.lock(); + try { + this.healthStatus = healthStatus; + log.warn("The server health status setting is unavailable."); + } finally { + healthMainLock.unlock(); + } + } + + /** + * Signal all biz thread. + */ + private void signalAllBizThread() { + healthMainLock.lock(); + try { + healthCondition.signalAll(); + } finally { + healthMainLock.unlock(); + } + } + + @Override + public void afterPropertiesSet() throws Exception { + /** + * Add a hook function, when the client stops, if the server is in an unhealthy state, + * the client destroy function will suspend operation. + */ + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + clientShutdownHook = true; + signalAllBizThread(); + })); + healthCheckExecutor.scheduleWithFixedDelay(() -> healthCheck(), 0, HEALTH_CHECK_INTERVAL, TimeUnit.SECONDS); + } + + @Override + public void onApplicationEvent(ApplicationCompleteEvent event) { + contextInitComplete = true; + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/HttpAgent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpAgent.java similarity index 57% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/HttpAgent.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpAgent.java index 423445fa..e2bf9db5 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/HttpAgent.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpAgent.java @@ -1,4 +1,21 @@ -package cn.hippo4j.starter.remote; +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; import cn.hippo4j.common.web.base.Result; @@ -6,9 +23,6 @@ import java.util.Map; /** * Http agent. - * - * @author chen.ma - * @date 2021/6/23 20:45 */ public interface HttpAgent { @@ -31,6 +45,23 @@ public interface HttpAgent { */ String getEncode(); + /** + * Http get simple. + * + * @param path + * @return + */ + Result httpGetSimple(String path); + + /** + * Http post. + * + * @param path + * @param body + * @return + */ + Result httpPost(String path, Object body); + /** * Send HTTP post request by discovery. * @@ -75,5 +106,4 @@ public interface HttpAgent { */ Result httpDeleteByConfig(String path, Map headers, Map paramValues, long readTimeoutMs); - } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpScheduledHealthCheck.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpScheduledHealthCheck.java new file mode 100644 index 00000000..0b786363 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/HttpScheduledHealthCheck.java @@ -0,0 +1,51 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; + +import cn.hippo4j.common.web.base.Result; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.Objects; + +import static cn.hippo4j.common.constant.Constants.HEALTH_CHECK_PATH; +import static cn.hippo4j.common.constant.Constants.UP; + +/** + * Server health check. + */ +@Slf4j +@AllArgsConstructor +public class HttpScheduledHealthCheck extends AbstractHealthCheck { + + private final HttpAgent httpAgent; + + @Override + protected boolean sendHealthCheck() { + boolean healthStatus = false; + try { + Result healthResult = httpAgent.httpGetSimple(HEALTH_CHECK_PATH); + if (healthResult != null && Objects.equals(healthResult.getData(), UP)) { + healthStatus = true; + } + } catch (Throwable ex) { + log.error("Failed to periodically check the health status of the server.", ex.getMessage()); + } + return healthStatus; + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHealthCheck.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHealthCheck.java new file mode 100644 index 00000000..cdda8bf9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHealthCheck.java @@ -0,0 +1,38 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; + +/** + * Server health check. + */ +public interface ServerHealthCheck { + + /** + * Is health status. + * + * @return + */ + boolean isHealthStatus(); + + /** + * Set health status. + * + * @param healthStatus + */ + void setHealthStatus(boolean healthStatus); +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java new file mode 100644 index 00000000..9cd62075 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerHttpAgent.java @@ -0,0 +1,147 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.security.SecurityProxy; +import cn.hippo4j.springboot.starter.toolkit.HttpClientUtil; +import cn.hippo4j.core.executor.support.ThreadFactoryBuilder; +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.Maps; + +import java.util.Map; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Server http agent. + */ +public class ServerHttpAgent implements HttpAgent { + + private final BootstrapProperties dynamicThreadPoolProperties; + + private final ServerListManager serverListManager; + + private final HttpClientUtil httpClientUtil; + + private SecurityProxy securityProxy; + + private ServerHealthCheck serverHealthCheck; + + private ScheduledExecutorService executorService; + + private final long securityInfoRefreshIntervalMills = TimeUnit.SECONDS.toMillis(5); + + public ServerHttpAgent(BootstrapProperties properties, HttpClientUtil httpClientUtil) { + this.dynamicThreadPoolProperties = properties; + this.httpClientUtil = httpClientUtil; + this.serverListManager = new ServerListManager(dynamicThreadPoolProperties); + this.securityProxy = new SecurityProxy(httpClientUtil, properties); + this.securityProxy.applyToken(this.serverListManager.getServerUrls()); + this.executorService = new ScheduledThreadPoolExecutor( + new Integer(1), + ThreadFactoryBuilder.builder().daemon(true).prefix("client.scheduled.token.security.updater").build()); + this.executorService.scheduleWithFixedDelay( + () -> securityProxy.applyToken(serverListManager.getServerUrls()), + 0, + securityInfoRefreshIntervalMills, + TimeUnit.MILLISECONDS); + } + + @Override + public void start() { + + } + + @Override + public String getTenantId() { + return dynamicThreadPoolProperties.getNamespace(); + } + + @Override + public String getEncode() { + return null; + } + + @Override + public Result httpGetSimple(String path) { + path = injectSecurityInfoByPath(path); + return httpClientUtil.restApiGetHealth(buildUrl(path), Result.class); + } + + @Override + public Result httpPost(String path, Object body) { + isHealthStatus(); + path = injectSecurityInfoByPath(path); + return httpClientUtil.restApiPost(buildUrl(path), body, Result.class); + } + + @Override + public Result httpPostByDiscovery(String path, Object body) { + isHealthStatus(); + path = injectSecurityInfoByPath(path); + return httpClientUtil.restApiPost(buildUrl(path), body, Result.class); + } + + @Override + public Result httpGetByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { + isHealthStatus(); + injectSecurityInfo(paramValues); + return httpClientUtil.restApiGetByThreadPool(buildUrl(path), headers, paramValues, readTimeoutMs, Result.class); + } + + @Override + public Result httpPostByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { + isHealthStatus(); + injectSecurityInfo(paramValues); + return httpClientUtil.restApiPostByThreadPool(buildUrl(path), headers, paramValues, readTimeoutMs, Result.class); + } + + @Override + public Result httpDeleteByConfig(String path, Map headers, Map paramValues, long readTimeoutMs) { + return null; + } + + private String buildUrl(String path) { + return serverListManager.getCurrentServerAddr() + path; + } + + private void isHealthStatus() { + if (serverHealthCheck == null) { + serverHealthCheck = ApplicationContextHolder.getBean(ServerHealthCheck.class); + } + serverHealthCheck.isHealthStatus(); + } + + private Map injectSecurityInfo(Map params) { + if (StrUtil.isNotBlank(securityProxy.getAccessToken())) { + params.put(Constants.ACCESS_TOKEN, securityProxy.getAccessToken()); + } + return params; + } + + @Deprecated + private String injectSecurityInfoByPath(String path) { + String resultPath = httpClientUtil.buildUrl(path, injectSecurityInfo(Maps.newHashMap())); + return resultPath; + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java similarity index 59% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java index e0f7e8c8..f3d72823 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/remote/ServerListManager.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerListManager.java @@ -1,6 +1,25 @@ -package cn.hippo4j.starter.remote; +/* + * 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. + */ -import cn.hippo4j.starter.config.BootstrapProperties; +package cn.hippo4j.springboot.starter.remote; + +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hutool.core.util.StrUtil; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; @@ -8,9 +27,6 @@ import java.util.*; /** * Server list manager. - * - * @author chen.ma - * @date 2021/6/23 20:42 */ @Slf4j public class ServerListManager { @@ -21,6 +37,9 @@ public class ServerListManager { private String serverAddrsStr; + private String nettyServerPort; + + @Getter volatile List serverUrls = new ArrayList(); private volatile String currentServerAddr; @@ -32,20 +51,20 @@ public class ServerListManager { public ServerListManager(BootstrapProperties dynamicThreadPoolProperties) { this.properties = dynamicThreadPoolProperties; serverAddrsStr = properties.getServerAddr(); - + nettyServerPort = properties.getNettyServerPort(); if (!StringUtils.isEmpty(serverAddrsStr)) { - List serverAddrs = new ArrayList(); - String[] serverAddrsArr = this.serverAddrsStr.split(","); - - for (String serverAddr : serverAddrsArr) { - if (serverAddr.startsWith(HTTPS) || serverAddr.startsWith(HTTP)) { - // TODO Temporarily fixed write, later optimized - currentServerAddr = serverAddr; - serverAddrs.add(serverAddr); + List serverAddrList = new ArrayList(); + String[] serverAddrListArr = this.serverAddrsStr.split(","); + for (String serverAddr : serverAddrListArr) { + boolean whetherJoint = StrUtil.isNotBlank(serverAddr) + && !serverAddr.startsWith(HTTPS) && !serverAddr.startsWith(HTTP); + if (whetherJoint) { + serverAddr = HTTP + serverAddr; } + currentServerAddr = serverAddr; + serverAddrList.add(serverAddr); } - - this.serverUrls = serverAddrs; + this.serverUrls = serverAddrList; } } @@ -57,6 +76,10 @@ public class ServerListManager { return currentServerAddr; } + public String getNettyServerPort() { + return nettyServerPort; + } + Iterator iterator() { return new ServerAddressIterator(serverUrls); } @@ -100,7 +123,7 @@ public class ServerListManager { try { this.serverIp = ip; /* - change random scope from 32 to Integer.MAX_VALUE to fix load balance issue + * change random scope from 32 to Integer.MAX_VALUE to fix load balance issue */ this.seed = random.nextInt(Integer.MAX_VALUE); } catch (Exception e) { @@ -118,5 +141,4 @@ public class ServerListManager { } } } - } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerNettyAgent.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerNettyAgent.java new file mode 100644 index 00000000..fb3617b8 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/remote/ServerNettyAgent.java @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.remote; + +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; + +/** + * Server netty agent. + */ +public class ServerNettyAgent { + + private final BootstrapProperties dynamicThreadPoolProperties; + + private final ServerListManager serverListManager; + + private EventLoopGroup eventLoopGroup; + + public ServerNettyAgent(BootstrapProperties properties) { + this.dynamicThreadPoolProperties = properties; + this.serverListManager = new ServerListManager(dynamicThreadPoolProperties); + this.eventLoopGroup = new NioEventLoopGroup(); + } + + public EventLoopGroup getEventLoopGroup() { + return eventLoopGroup; + } + + public String getNettyServerAddress() { + return serverListManager.getCurrentServerAddr().split(":")[1].replace("//", ""); + } + + public Integer getNettyServerPort() { + return Integer.parseInt(serverListManager.getNettyServerPort()); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/security/SecurityProxy.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/security/SecurityProxy.java new file mode 100644 index 00000000..d3ecfc71 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/security/SecurityProxy.java @@ -0,0 +1,106 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.security; + +import cn.hippo4j.common.constant.Constants; +import cn.hippo4j.common.model.TokenInfo; +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.common.web.base.Result; +import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.toolkit.HttpClientUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * Security proxy. + */ +@Slf4j +public class SecurityProxy { + + private static final String APPLY_TOKEN_URL = Constants.BASE_PATH + "/auth/users/apply/token"; + + private final HttpClientUtil httpClientUtil; + + private final String username; + + private final String password; + + private String accessToken; + + private long tokenTtl; + + private long lastRefreshTime; + + private long tokenRefreshWindow; + + public SecurityProxy(HttpClientUtil httpClientUtil, BootstrapProperties properties) { + username = properties.getUsername(); + password = properties.getPassword(); + this.httpClientUtil = httpClientUtil; + } + + public boolean applyToken(List servers) { + try { + if ((System.currentTimeMillis() - lastRefreshTime) < TimeUnit.SECONDS.toMillis(tokenTtl - tokenRefreshWindow)) { + return true; + } + for (String server : servers) { + if (applyToken(server)) { + lastRefreshTime = System.currentTimeMillis(); + return true; + } + } + } catch (Throwable ignored) { + } + return false; + } + + public boolean applyToken(String server) { + if (StringUtil.isAllNotEmpty(username, password)) { + String url = server + APPLY_TOKEN_URL; + Map bodyMap = new HashMap(2); + bodyMap.put("userName", username); + bodyMap.put("password", password); + try { + Result result = httpClientUtil.restApiPost(url, bodyMap, Result.class); + if (!result.isSuccess()) { + log.error("Error getting access token. message: {}", result.getMessage()); + return false; + } + String tokenJsonStr = JSONUtil.toJSONString(result.getData()); + TokenInfo tokenInfo = JSONUtil.parseObject(tokenJsonStr, TokenInfo.class); + accessToken = tokenInfo.getAccessToken(); + tokenTtl = tokenInfo.getTokenTtl(); + tokenRefreshWindow = tokenTtl / 10; + } catch (Throwable ex) { + log.error("Failed to apply for token. message: {}", ex.getMessage()); + return false; + } + } + return true; + } + + public String getAccessToken() { + return accessToken; + } +} diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CloudCommonIdUtil.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/CloudCommonIdUtil.java similarity index 51% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CloudCommonIdUtil.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/CloudCommonIdUtil.java index 4ec3a68d..e2058c93 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/CloudCommonIdUtil.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/CloudCommonIdUtil.java @@ -1,19 +1,39 @@ -package cn.hippo4j.starter.toolkit; +/* + * 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. + */ -import cn.hippo4j.starter.toolkit.inet.InetUtils; +package cn.hippo4j.springboot.starter.toolkit; + +import cn.hippo4j.core.toolkit.inet.InetUtils; import lombok.SneakyThrows; import org.springframework.core.env.PropertyResolver; /** * Cloud common id util. - * - * @author chen.ma - * @date 2021/8/6 21:02 */ public class CloudCommonIdUtil { private static final String SEPARATOR = ":"; + public static String getClientIpPort(PropertyResolver resolver, InetUtils inetUtils) { + String hostname = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); + String port = resolver.getProperty("server.port", "8080"); + return combineParts(hostname, SEPARATOR, port); + } + @SneakyThrows public static String getDefaultInstanceId(PropertyResolver resolver, InetUtils inetUtils) { String namePart = getIpApplicationName(resolver, inetUtils); @@ -28,8 +48,7 @@ public class CloudCommonIdUtil { return combineParts(hostname, SEPARATOR, appName); } - public static String combineParts(String firstPart, String separator, - String secondPart) { + public static String combineParts(String firstPart, String separator, String secondPart) { String combined = null; if (firstPart != null && secondPart != null) { combined = firstPart + separator + secondPart; @@ -40,5 +59,4 @@ public class CloudCommonIdUtil { } return combined; } - } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/HttpClientUtil.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/HttpClientUtil.java similarity index 53% rename from hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/HttpClientUtil.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/HttpClientUtil.java index 765cbb97..184c77c9 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/HttpClientUtil.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/toolkit/HttpClientUtil.java @@ -1,6 +1,24 @@ -package cn.hippo4j.starter.toolkit; +/* + * 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. + */ -import com.alibaba.fastjson.JSON; +package cn.hippo4j.springboot.starter.toolkit; + +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.web.exception.ServiceException; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import okhttp3.*; @@ -12,9 +30,6 @@ import java.util.concurrent.TimeUnit; /** * HttpClient util. - * - * @author chen.ma - * @date 2021/6/10 13:30 */ @Slf4j public class HttpClientUtil { @@ -27,7 +42,7 @@ public class HttpClientUtil { private static int HTTP_OK_CODE = 200; /** - * Get 请求 + * Get. * * @param url * @return @@ -43,10 +58,10 @@ public class HttpClientUtil { } /** - * Get 请求, 支持添加查询字符串 + * Get request, supports adding query string. * * @param url - * @param queryString 查询字符串 + * @param queryString * @return */ public String get(String url, Map queryString) { @@ -55,7 +70,7 @@ public class HttpClientUtil { } /** - * 获取 Json 后直接反序列化 + * Deserialize directly after getting Json. * * @param url * @param clazz @@ -63,11 +78,25 @@ public class HttpClientUtil { */ public T restApiGet(String url, Class clazz) { String resp = get(url); - return JSON.parseObject(resp, clazz); + return JSONUtil.parseObject(resp, clazz); + } + + /** + * Call health check. + * + * @param url + * @param clazz + * @param + * @return + */ + @SneakyThrows + public T restApiGetHealth(String url, Class clazz) { + String resp = new String(doGet(url), "utf-8"); + return JSONUtil.parseObject(resp, clazz); } /** - * Get 请求, 支持查询字符串 + * Get request, supports query string. * * @param url * @param queryString @@ -78,11 +107,11 @@ public class HttpClientUtil { public T restApiGet(String url, Map queryString, Class clazz) { String fullUrl = buildUrl(url, queryString); String resp = get(fullUrl); - return JSON.parseObject(resp, clazz); + return JSONUtil.parseObject(resp, clazz); } /** - * Rest 接口 Post 调用 + * Rest interface Post call. * * @param url * @param body @@ -92,14 +121,13 @@ public class HttpClientUtil { try { return doPost(url, body); } catch (Exception e) { - log.error("httpPost 调用失败. {}", url, e); + log.error("httpPost 调用失败. {} message: {}", url, e.getMessage()); throw e; } } /** - * Rest 接口 Post 调用 - * 对返回值直接反序列化 + * Rest interface Post call. Deserialize the return value directly. * * @param url * @param body @@ -107,11 +135,11 @@ public class HttpClientUtil { */ public T restApiPost(String url, Object body, Class clazz) { String resp = restApiPost(url, body); - return JSON.parseObject(resp, clazz); + return JSONUtil.parseObject(resp, clazz); } /** - * 根据查询字符串构造完整的 Url + * Constructs a complete Url from the query string. * * @param url * @param queryString @@ -121,10 +149,8 @@ public class HttpClientUtil { if (null == queryString) { return url; } - StringBuilder builder = new StringBuilder(url); boolean isFirst = true; - for (Map.Entry entry : queryString.entrySet()) { String key = entry.getKey(); if (key != null && entry.getValue() != null) { @@ -139,81 +165,85 @@ public class HttpClientUtil { .append(queryString.get(key)); } } - return builder.toString(); } @SneakyThrows private String doPost(String url, Object body) { - String jsonBody = JSON.toJSONString(body); + String jsonBody = JSONUtil.toJSONString(body); RequestBody requestBody = RequestBody.create(jsonMediaType, jsonBody); Request request = new Request.Builder() .url(url) .post(requestBody) .build(); - Response resp = hippo4JOkHttpClient.newCall(request).execute(); - if (resp.code() != HTTP_OK_CODE) { - String msg = String.format("HttpPost 响应 code 异常. [code] %s [url] %s [body] %s", resp.code(), url, jsonBody); - throw new RuntimeException(msg); + try (Response resp = hippo4JOkHttpClient.newCall(request).execute()) { + try (ResponseBody responseBody = resp.body()) { + if (resp.code() != HTTP_OK_CODE) { + String msg = String.format("HttpPost 响应 code 异常. [code] %s [url] %s [body] %s", resp.code(), url, jsonBody); + throw new ServiceException(msg); + } + return responseBody.string(); + } } - return resp.body().string(); } @SneakyThrows private byte[] doGet(String url) { Request request = new Request.Builder().get().url(url).build(); - Response resp = hippo4JOkHttpClient.newCall(request).execute(); - if (resp.code() != HTTP_OK_CODE) { - String msg = String.format("HttpGet 响应 code 异常. [code] %s [url] %s", resp.code(), url); - throw new RuntimeException(msg); + try (Response resp = hippo4JOkHttpClient.newCall(request).execute()) { + try (ResponseBody responseBody = resp.body()) { + if (resp.code() != HTTP_OK_CODE) { + String msg = String.format("HttpGet 响应 code 异常. [code] %s [url] %s", resp.code(), url); + throw new ServiceException(msg); + } + return responseBody.bytes(); + } } - return resp.body().bytes(); } @SneakyThrows public T restApiGetByThreadPool(String url, Map headers, Map paramValues, Long readTimeoutMs, Class clazz) { String buildUrl = buildUrl(url, paramValues); Request.Builder builder = new Request.Builder().get(); - if (!CollectionUtils.isEmpty(headers)) { builder.headers(Headers.of(headers)); } - Request request = builder.url(buildUrl).build(); - Call call = hippo4JOkHttpClient.newCall(request); + // TODO Plan to optimize the timout api because its version is too high. call.timeout().timeout(readTimeoutMs, TimeUnit.MILLISECONDS); - - Response resp = call.execute(); - if (resp.code() != HTTP_OK_CODE) { - String msg = String.format("HttpGet 响应 code 异常. [code] %s [url] %s", resp.code(), url); - log.error(msg); - throw new RuntimeException(msg); + try (Response resp = call.execute()) { + try (ResponseBody responseBody = resp.body()) { + if (resp.code() != HTTP_OK_CODE) { + String msg = String.format("HttpGet 响应 code 异常. [code] %s [url] %s", resp.code(), url); + log.error(msg); + throw new ServiceException(msg); + } + return JSONUtil.parseObject(responseBody.string(), clazz); + } } - - return JSON.parseObject(resp.body().string(), clazz); } @SneakyThrows public T restApiPostByThreadPool(String url, Map headers, Map paramValues, Long readTimeoutMs, Class clazz) { String buildUrl = buildUrl(url, paramValues); - Request request = new Request.Builder() .url(buildUrl) .headers(Headers.of(headers)) .post(RequestBody.create(jsonMediaType, "")) .build(); - Call call = hippo4JOkHttpClient.newCall(request); + // TODO Plan to optimize the timout api because its version is too high. call.timeout().timeout(readTimeoutMs, TimeUnit.MILLISECONDS); - - Response resp = call.execute(); - if (resp.code() != HTTP_OK_CODE) { - String msg = String.format("HttpPost 响应 code 异常. [code] %s [url] %s.", resp.code(), url); - log.error(msg); - throw new RuntimeException(msg); + try (Response resp = call.execute()) { + try (ResponseBody responseBody = resp.body()) { + if (resp.code() != HTTP_OK_CODE) { + String msg = String.format("HttpPost 响应 code 异常. [code] %s [url] %s.", resp.code(), url); + log.error(msg); + throw new ServiceException(msg); + } + return JSONUtil.parseObject(responseBody.string(), clazz); + } } - return JSON.parseObject(resp.body().string(), clazz); } - } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/wrapper/ManagerListenerWrapper.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/wrapper/ManagerListenerWrapper.java new file mode 100644 index 00000000..0119f655 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/wrapper/ManagerListenerWrapper.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package cn.hippo4j.springboot.starter.wrapper; + +import cn.hippo4j.springboot.starter.core.Listener; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Manager listener wrapper. + */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class ManagerListenerWrapper { + + /** + * Last call md5 + */ + private String lastCallMd5; + + /** + * Listener + */ + private Listener listener; +} diff --git a/hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json similarity index 65% rename from hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 53fd8076..fe916f2f 100644 --- a/hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -6,6 +6,18 @@ "defaultValue": "localhost:6691", "description": "dynamic thread-pool server address." }, + { + "name": "spring.dynamic.thread-pool.netty-server-port", + "type": "java.lang.String", + "defaultValue": "8899", + "description": "dynamic thread-pool server netty port." + }, + { + "name": "spring.dynamic.thread-pool.report-type", + "type": "java.lang.String", + "defaultValue": "http", + "description": "dynamic thread-pool report-type." + }, { "name": "spring.dynamic.thread-pool.namespace", "type": "java.lang.String", diff --git a/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories similarity index 52% rename from hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories index dcfef765..18f30aff 100644 --- a/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.starter.config.DynamicThreadPoolAutoConfiguration -org.springframework.boot.diagnostics.FailureAnalyzer=cn.hippo4j.starter.core.ConfigEmptyAnalyzer +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.config.DynamicThreadPoolAutoConfiguration +org.springframework.boot.diagnostics.FailureAnalyzer=cn.hippo4j.springboot.starter.core.ConfigEmptyAnalyzer diff --git a/hippo4j-tools/pom.xml b/hippo4j-spring-boot/pom.xml similarity index 57% rename from hippo4j-tools/pom.xml rename to hippo4j-spring-boot/pom.xml index 42b9a8ab..b3cfb92b 100644 --- a/hippo4j-tools/pom.xml +++ b/hippo4j-spring-boot/pom.xml @@ -2,29 +2,18 @@ 4.0.0 - cn.hippo4j hippo4j-all ${revision} - - hippo4j-tools + hippo4j-spring-boot pom - tools - 动态线程池工具类模块 - - - true - - - - log-record-tool - - - open-change-tool + hippo4j-core-spring-boot-starter + hippo4j-spring-boot-starter + hippo4j-spring-boot-starter-adapter + hippo4j-spring-boot-starter-monitor - diff --git a/hippo4j-tools/.gitignore b/hippo4j-tools/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-tools/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-tools/log-record-tool/.gitignore b/hippo4j-tools/log-record-tool/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-tools/log-record-tool/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogField.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogField.java deleted file mode 100644 index 9953bf43..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogField.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.hippo4j.tools.logrecord.annotation; - -/** - * 日志字段, 用于标记需要比较的实体属性. - * - * @author chen.ma - * @date 2021/10/23 21:29 - */ -public @interface LogField { - - /** - * 字段名称 - * - * @return - */ - String name(); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogRecord.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogRecord.java deleted file mode 100644 index 489e1af7..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/annotation/LogRecord.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.hippo4j.tools.logrecord.annotation; - -import cn.hippo4j.tools.logrecord.enums.LogRecordTypeEnum; - -import java.lang.annotation.*; - -/** - * 日志记录注解. - * - * @author chen.ma - * @date 2021/10/23 21:29 - */ -@Documented -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface LogRecord { - - /** - * 业务前缀 - * - * @return - */ - String prefix() default ""; - - /** - * 操作日志文本模版 - * - * @return - */ - String success(); - - /** - * 操作日志失败的文本 - * - * @return - */ - String fail() default ""; - - /** - * 操作人 - * - * @return - */ - String operator() default ""; - - /** - * 业务码 - * - * @return - */ - String bizNo(); - - /** - * 日志详情 - * - * @return - */ - String detail() default ""; - - /** - * 日志种类 - * - * @return - */ - String category(); - - /** - * 记录类型 - * - * @return - */ - LogRecordTypeEnum recordType() default LogRecordTypeEnum.COMPLETE; - - /** - * 记录日志条件 - * - * @return - */ - String condition() default ""; - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/aop/LogRecordAspect.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/aop/LogRecordAspect.java deleted file mode 100644 index 8f7d4feb..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/aop/LogRecordAspect.java +++ /dev/null @@ -1,207 +0,0 @@ -package cn.hippo4j.tools.logrecord.aop; - -import cn.hippo4j.tools.logrecord.annotation.LogRecord; -import cn.hippo4j.tools.logrecord.context.LogRecordContext; -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; -import cn.hippo4j.tools.logrecord.model.LogRecordOps; -import cn.hippo4j.tools.logrecord.model.MethodExecuteResult; -import cn.hippo4j.tools.logrecord.parse.LogRecordOperationSource; -import cn.hippo4j.tools.logrecord.parse.LogRecordValueParser; -import cn.hippo4j.tools.logrecord.service.LogRecordService; -import cn.hippo4j.tools.logrecord.service.OperatorGetService; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; -import org.springframework.aop.framework.AopProxyUtils; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.lang.reflect.Method; -import java.util.*; - -/** - * 日志记录切面. - * - * @author chen.ma - * @date 2021/10/23 22:00 - */ -@Slf4j -@Aspect -@Component -@AllArgsConstructor -public class LogRecordAspect { - - private final LogRecordService bizLogService; - - private final LogRecordValueParser logRecordValueParser; - - private final OperatorGetService operatorGetService; - - private final LogRecordOperationSource logRecordOperationSource; - - private final ConfigurableEnvironment environment; - - @Around("@annotation(logRecord)") - public Object logRecord(ProceedingJoinPoint joinPoint, LogRecord logRecord) throws Throwable { - MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); - Method method = methodSignature.getMethod(); - Object target = joinPoint.getTarget(); - Class targetClass = AopProxyUtils.ultimateTargetClass(target); - Object[] args = joinPoint.getArgs(); - - LogRecordContext.putEmptySpan(); - - Object result = null; - Collection operations = Lists.newArrayList(); - Map functionNameAndReturnMap = Maps.newHashMap(); - MethodExecuteResult methodExecuteResult = new MethodExecuteResult(true); - - try { - operations = logRecordOperationSource.computeLogRecordOperations(method, targetClass); - List spElTemplates = getBeforeExecuteFunctionTemplate(operations); - functionNameAndReturnMap = logRecordValueParser.processBeforeExecuteFunctionTemplate(spElTemplates, targetClass, method, args); - - } catch (Exception ex) { - log.error("Log record parse before function exception.", ex); - } - - try { - result = joinPoint.proceed(); - } catch (Exception ex) { - methodExecuteResult = new MethodExecuteResult(false, ex, ex.getMessage()); - } - - try { - if (!CollectionUtils.isEmpty(operations)) { - recordExecute(result, method, args, operations, targetClass, - methodExecuteResult.isSuccess(), methodExecuteResult.getErrorMsg(), functionNameAndReturnMap); - } - } catch (Exception ex) { - log.error("Log record parse exception.", ex); - } finally { - LogRecordContext.clear(); - } - - if (methodExecuteResult.getThrowable() != null) { - throw methodExecuteResult.getThrowable(); - } - - return result; - - } - - private List getBeforeExecuteFunctionTemplate(Collection operations) { - List spElTemplates = new ArrayList(); - for (LogRecordOps operation : operations) { - // 执行之前的函数 - List templates = getSpElTemplates(operation, operation.getSuccessLogTemplate()); - if (!CollectionUtils.isEmpty(templates)) { - spElTemplates.addAll(templates); - } - } - - return spElTemplates; - } - - private List getSpElTemplates(LogRecordOps operation, String action) { - List spElTemplates = Lists.newArrayList(operation.getBizKey(), operation.getBizNo(), action, operation.getDetail()); - - if (!StringUtils.isEmpty(operation.getCondition())) { - spElTemplates.add(operation.getCondition()); - } - - return spElTemplates; - } - - /** - * 记录日志. - * - * @param ret - * @param method - * @param args - * @param operations - * @param targetClass - * @param success - * @param errorMsg - * @param functionNameAndReturnMap - */ - private void recordExecute(Object ret, Method method, Object[] args, Collection operations, - Class targetClass, boolean success, String errorMsg, Map functionNameAndReturnMap) { - for (LogRecordOps operation : operations) { - try { - String action = getActionContent(success, operation); - if (StringUtils.isEmpty(action)) { - // 没有日志内容则忽略 - continue; - } - // 获取需要解析的表达式 - List spElTemplates = getSpElTemplates(operation, action); - String operatorIdFromService = getOperatorIdFromServiceAndPutTemplate(operation, spElTemplates); - - Map expressionValues = logRecordValueParser.processTemplate(spElTemplates, ret, targetClass, method, args, errorMsg, functionNameAndReturnMap); - if (logConditionPassed(operation.getCondition(), expressionValues)) { - String tenant = environment.getProperty("tenant"); - LogRecordInfo logRecordInfo = LogRecordInfo.builder() - .tenant(StringUtils.isEmpty(tenant) ? "hippo4j" : tenant) - .bizKey(expressionValues.get(operation.getBizKey())) - .bizNo(expressionValues.get(operation.getBizNo())) - .operator(getRealOperatorId(operation, operatorIdFromService, expressionValues)) - .category(operation.getCategory()) - .detail(expressionValues.get(operation.getDetail())) - .action(expressionValues.get(action)) - .createTime(new Date()) - .build(); - - // 如果 action 为空, 不记录日志 - if (StringUtils.isEmpty(logRecordInfo.getAction())) { - continue; - } - // save log 需要新开事务, 失败日志不能因为事务回滚而丢失 - Preconditions.checkNotNull(bizLogService, "bizLogService not init"); - bizLogService.record(logRecordInfo); - } - } catch (Exception t) { - log.error("log record execute exception", t); - } - } - } - - private String getActionContent(boolean success, LogRecordOps operation) { - if (success) { - return operation.getSuccessLogTemplate(); - } - - return operation.getFailLogTemplate(); - } - - private String getOperatorIdFromServiceAndPutTemplate(LogRecordOps operation, List spElTemplates) { - String realOperatorId = ""; - if (StringUtils.isEmpty(operation.getOperatorId())) { - realOperatorId = operatorGetService.getUser().getOperatorId(); - if (StringUtils.isEmpty(realOperatorId)) { - throw new IllegalArgumentException("LogRecord operator is null"); - } - } else { - spElTemplates.add(operation.getOperatorId()); - } - - return realOperatorId; - } - - private boolean logConditionPassed(String condition, Map expressionValues) { - return StringUtils.isEmpty(condition) || StringUtils.endsWithIgnoreCase(expressionValues.get(condition), "true"); - } - - private String getRealOperatorId(LogRecordOps operation, String operatorIdFromService, Map expressionValues) { - return !StringUtils.isEmpty(operatorIdFromService) ? operatorIdFromService : expressionValues.get(operation.getOperatorId()); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/AbstractEquator.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/AbstractEquator.java deleted file mode 100644 index 727a5890..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/AbstractEquator.java +++ /dev/null @@ -1,186 +0,0 @@ -package cn.hippo4j.tools.logrecord.compare; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * 比对器抽象类. - * - * @author chen.ma - * @date 2021/10/24 20:25 - */ -public class AbstractEquator implements Equator { - - private static final List> WRAPPER = - Arrays - .asList( - Byte.class, - Short.class, - Integer.class, - Long.class, - Float.class, - Double.class, - Character.class, - Boolean.class, - String.class - ); - - private List includeFields; - - private List excludeFields; - - private boolean bothExistFieldOnly = true; - - public AbstractEquator() { - includeFields = Collections.emptyList(); - excludeFields = Collections.emptyList(); - } - - /** - * @param bothExistFieldOnly 是否仅比对两个类都包含的字段 - */ - public AbstractEquator(boolean bothExistFieldOnly) { - includeFields = Collections.emptyList(); - excludeFields = Collections.emptyList(); - this.bothExistFieldOnly = bothExistFieldOnly; - } - - /** - * 指定包含或排除某些字段. - * - * @param includeFields 包含字段, 若为 null 或空集则不指定 - * @param excludeFields 排除字段, 若为 null 或空集则不指定 - */ - public AbstractEquator(List includeFields, List excludeFields) { - this.includeFields = includeFields; - this.excludeFields = excludeFields; - } - - /** - * 指定包含或排除某些字段. - * - * @param includeFields 包含字段, 若为 null 或空集则不指定 - * @param excludeFields 排除字段, 若为 null 或空集则不指定 - * @param bothExistFieldOnly 是否只对比两个类都包含的字段, 默认为 true - */ - public AbstractEquator(List includeFields, List excludeFields, boolean bothExistFieldOnly) { - this.includeFields = includeFields; - this.excludeFields = excludeFields; - this.bothExistFieldOnly = bothExistFieldOnly; - } - - @Override - public boolean isEquals(Object first, Object second) { - List diff = getDiffFields(first, second); - return diff == null || diff.isEmpty(); - } - - @Override - public List getDiffFields(Object first, Object second) { - return null; - } - - /** - * 对比两个对象的指定属性是否相等, 默认为两个对象是否 equals. - *

- * 子类可以通过覆盖此方法对某些特殊属性进行比对. - * - * @param fieldInfo - * @return - */ - protected boolean isFieldEquals(FieldInfo fieldInfo) { - // 先判断排除, 如果需要排除, 则无论在不在包含范围, 都一律不比对 - if (isExclude(fieldInfo)) { - return true; - } - // 如果有指定需要包含的字段而且当前字段不在需要包含的字段中则不比对 - if (!isInclude(fieldInfo)) { - return true; - } - return nullableEquals(fieldInfo.getFirstVal(), fieldInfo.getSecondVal()); - } - - /** - * 确定是否需要需要排除这个字段, 子类可以扩展这个方法, 自定义判断方式. - * - * @param fieldInfo - * @return - */ - protected boolean isExclude(FieldInfo fieldInfo) { - // 如果有指定需要排除的字段,而且当前字段是需要排除字段,则直接返回 true - return excludeFields != null && !excludeFields.isEmpty() && excludeFields.contains(fieldInfo.getFieldName()); - } - - /** - * 确定是否需要比较这个字段, 子类可以扩展这个方法, 自定义判断方式. - * - * @param fieldInfo - * @return - */ - protected boolean isInclude(FieldInfo fieldInfo) { - // 没有指定需要包含的字段,则全部都包含 - if (includeFields == null || includeFields.isEmpty()) { - return true; - } - return includeFields.contains(fieldInfo.getFieldName()); - } - - /** - * 如果简单数据类型的对象则直接进行比对. - * - * @param first - * @param second - * @return - */ - protected List compareSimpleField(Object first, Object second) { - boolean eq = Objects.equals(first, second); - if (eq) { - return Collections.emptyList(); - } else { - Object obj = first == null ? second : first; - Class clazz = obj.getClass(); - // 不等的字段名称使用类的名称 - return Collections.singletonList(new FieldInfo(clazz.getSimpleName(), clazz, first, second)); - } - } - - /** - * 判断是否为原始数据类型. - * - * @param first - * @param second - * @return - */ - protected boolean isSimpleField(Object first, Object second) { - Object obj = first == null ? second : first; - Class clazz = obj.getClass(); - return clazz.isPrimitive() || WRAPPER.contains(clazz); - } - - protected boolean nullableEquals(Object first, Object second) { - if (first instanceof Collection && second instanceof Collection) { - // 如果两个都是集合类型,尝试转换为数组再进行深度比较 - return Objects.deepEquals(((Collection) first).toArray(), ((Collection) second).toArray()); - } - return Objects.deepEquals(first, second); - } - - protected Set getAllFieldNames(Set firstFields, Set secondFields) { - Set allFields; - // 只取交集 - if (isBothExistFieldOnly()) { - allFields = firstFields.stream().filter(secondFields::contains).collect(Collectors.toSet()); - } else { - // 否则取并集 - allFields = new HashSet<>(firstFields); - allFields.addAll(secondFields); - } - - return allFields; - } - - public boolean isBothExistFieldOnly() { - return bothExistFieldOnly; - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/Equator.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/Equator.java deleted file mode 100644 index 9b5a627a..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/Equator.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.hippo4j.tools.logrecord.compare; - -import java.util.List; - -/** - * 对象比对器. - * - * @author chen.ma - * @date 2021/10/24 20:27 - */ -public interface Equator { - - /** - * 判断两个对象是否相等. - * - * @param first - * @param second - * @return - */ - boolean isEquals(Object first, Object second); - - /** - * 获取两个对象不想等的属性. - * - * @param first - * @param second - * @return - */ - List getDiffFields(Object first, Object second); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/FieldInfo.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/FieldInfo.java deleted file mode 100644 index e7cafca4..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/FieldInfo.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.hippo4j.tools.logrecord.compare; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Objects; - -/** - * 对象比较中不同的字段. - * - * @author chen.ma - * @date 2021/10/24 20:03 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class FieldInfo { - - /** - * 字段名称 - */ - private String fieldName; - - /** - * 第一个字段的类型 - */ - private Class firstFieldType; - - /** - * 第二个字段的类型 - */ - private Class secondFieldType; - - /** - * 第一个对象的值 - */ - private Object firstVal; - - /** - * 第二个对象的值 - */ - private Object secondVal; - - public FieldInfo(String fieldName, Class firstFieldType, Class secondFieldType) { - this.fieldName = fieldName; - this.firstFieldType = firstFieldType; - this.secondFieldType = secondFieldType; - } - - public FieldInfo(String fieldName, Class fieldType, Object firstVal, Object secondVal) { - this.fieldName = fieldName; - this.firstFieldType = fieldType; - this.secondFieldType = fieldType; - this.firstVal = firstVal; - this.secondVal = secondVal; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o == null || getClass() != o.getClass()) { - return false; - } - FieldInfo fieldInfo = (FieldInfo) o; - return Objects.equals(fieldName, fieldInfo.fieldName) && - Objects.equals(firstFieldType, fieldInfo.firstFieldType) && - Objects.equals(secondFieldType, fieldInfo.secondFieldType) && - Objects.equals(firstVal, fieldInfo.firstVal) && - Objects.equals(secondVal, fieldInfo.secondVal); - } - - @Override - public int hashCode() { - return Objects.hash(fieldName, firstFieldType, secondFieldType, firstVal, secondVal); - } - - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/GetterBaseEquator.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/GetterBaseEquator.java deleted file mode 100644 index ee82f600..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/compare/GetterBaseEquator.java +++ /dev/null @@ -1,144 +0,0 @@ -package cn.hippo4j.tools.logrecord.compare; - -import lombok.NoArgsConstructor; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 基于 getter 方法比对两个对象 - *

- * 所有无参的 get 和 is 方法都认为是对象的属性 - * - * @author chen.ma - * @date 2021/10/24 20:36 - */ -@NoArgsConstructor -public class GetterBaseEquator extends AbstractEquator { - - private static final String GET = "get"; - - private static final String IS = "is"; - - private static final String GET_IS = "get|is"; - - private static final String GET_CLASS = "getClass"; - - private static final Map, Map> CACHE = new ConcurrentHashMap<>(); - - public GetterBaseEquator(boolean bothExistFieldOnly) { - super(bothExistFieldOnly); - } - - public GetterBaseEquator(List includeFields, List excludeFields) { - super(includeFields, excludeFields); - } - - public GetterBaseEquator(List includeFields, List excludeFields, boolean bothExistFieldOnly) { - super(includeFields, excludeFields, bothExistFieldOnly); - } - - @Override - public List getDiffFields(Object first, Object second) { - if (first == null && second == null) { - return Collections.emptyList(); - } - // 先尝试判断是否为普通数据类型 - if (isSimpleField(first, second)) { - return compareSimpleField(first, second); - } - Set allFieldNames; - // 获取所有字段 - Map firstGetters = getAllGetters(first); - Map secondGetters = getAllGetters(second); - if (first == null) { - allFieldNames = secondGetters.keySet(); - } else if (second == null) { - allFieldNames = firstGetters.keySet(); - } else { - allFieldNames = getAllFieldNames(firstGetters.keySet(), secondGetters.keySet()); - } - List diffFields = new LinkedList<>(); - for (String fieldName : allFieldNames) { - try { - Method firstGetterMethod = firstGetters.getOrDefault(fieldName, null); - Method secondGetterMethod = secondGetters.getOrDefault(fieldName, null); - Object firstVal = firstGetterMethod != null ? firstGetterMethod.invoke(first) : null; - Object secondVal = secondGetterMethod != null ? secondGetterMethod.invoke(second) : null; - FieldInfo fieldInfo = new FieldInfo(fieldName, getReturnType(firstGetterMethod), getReturnType(secondGetterMethod)); - fieldInfo.setFirstVal(firstVal); - fieldInfo.setSecondVal(secondVal); - if (!isFieldEquals(fieldInfo)) { - diffFields.add(fieldInfo); - } - } catch (IllegalAccessException | InvocationTargetException e) { - throw new IllegalStateException("获取属性进行比对发生异常: " + fieldName, e); - } - } - return diffFields; - } - - private Class getReturnType(Method method) { - return method == null ? null : method.getReturnType(); - } - - private Map getAllGetters(Object obj) { - if (obj == null) { - return Collections.emptyMap(); - } - return CACHE.computeIfAbsent(obj.getClass(), k -> { - Class clazz = obj.getClass(); - Map getters = new LinkedHashMap<>(8); - while (clazz != Object.class) { - Method[] methods = clazz.getDeclaredMethods(); - for (Method m : methods) { - // getter 方法必须是 public 且没有参数的 - if (!Modifier.isPublic(m.getModifiers()) || m.getParameterTypes().length > 0) { - continue; - } - if (m.getReturnType() == Boolean.class || m.getReturnType() == boolean.class) { - // 如果返回值是 boolean 则兼容 isXxx 的写法 - if (m.getName().startsWith(IS)) { - String fieldName = uncapitalize(m.getName().substring(2)); - getters.put(fieldName, m); - continue; - } - } - // 以 get 开头但排除 getClass() 方法 - if (m.getName().startsWith(GET) && !GET_CLASS.equals(m.getName())) { - String fieldName = uncapitalize(m.getName().replaceFirst(GET_IS, "")); - getters.put(fieldName, m); - } - } - // 得到父类, 然后赋给自己 - clazz = clazz.getSuperclass(); - } - return getters; - }); - } - - private String uncapitalize(final String str) { - int strLen; - if (str == null || (strLen = str.length()) == 0) { - return str; - } - final int firstCodepoint = str.codePointAt(0); - final int newCodePoint = Character.toLowerCase(firstCodepoint); - if (firstCodepoint == newCodePoint) { - return str; - } - final int[] newCodePoints = new int[strLen]; - int outOffset = 0; - newCodePoints[outOffset++] = newCodePoint; - for (int inOffset = Character.charCount(firstCodepoint); inOffset < strLen; ) { - final int codepoint = str.codePointAt(inOffset); - newCodePoints[outOffset++] = codepoint; - inOffset += Character.charCount(codepoint); - } - return new String(newCodePoints, 0, outOffset); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/config/LogRecordConfig.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/config/LogRecordConfig.java deleted file mode 100644 index c20f6f3a..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/config/LogRecordConfig.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.hippo4j.tools.logrecord.config; - -import cn.hippo4j.tools.logrecord.parse.LogRecordOperationSource; -import cn.hippo4j.tools.logrecord.parse.LogRecordValueParser; -import cn.hippo4j.tools.logrecord.service.FunctionService; -import cn.hippo4j.tools.logrecord.service.LogRecordService; -import cn.hippo4j.tools.logrecord.service.OperatorGetService; -import cn.hippo4j.tools.logrecord.service.ParseFunction; -import cn.hippo4j.tools.logrecord.service.impl.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Role; - -import java.util.List; - -/** - * 日志记录配置. - * - * @author chen.ma - * @date 2021/10/23 22:49 - */ -@Configuration -public class LogRecordConfig { - - @Bean - @ConditionalOnMissingBean(ParseFunction.class) - public DefaultParseFunction parseFunction() { - return new DefaultParseFunction(); - } - - - @Bean - public ParseFunctionFactory parseFunctionFactory(@Autowired List parseFunctions) { - return new ParseFunctionFactory(parseFunctions); - } - - @Bean - @ConditionalOnMissingBean(FunctionService.class) - public FunctionService functionService(ParseFunctionFactory parseFunctionFactory) { - return new DefaultFunctionServiceImpl(parseFunctionFactory); - } - - @Bean - @Role(BeanDefinition.ROLE_APPLICATION) - @ConditionalOnMissingBean(OperatorGetService.class) - public OperatorGetService operatorGetService() { - return new DefaultOperatorGetServiceImpl(); - } - - @Bean - @ConditionalOnMissingBean(LogRecordService.class) - @Role(BeanDefinition.ROLE_APPLICATION) - public LogRecordService recordService() { - return new DefaultLogRecordServiceImpl(); - } - - @Bean - public LogRecordValueParser logRecordValueParser() { - return new LogRecordValueParser(); - } - - @Bean - public LogRecordOperationSource logRecordOperationSource() { - return new LogRecordOperationSource(); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/context/LogRecordContext.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/context/LogRecordContext.java deleted file mode 100644 index 4f6e1356..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/context/LogRecordContext.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.hippo4j.tools.logrecord.context; - -import com.alibaba.ttl.TransmittableThreadLocal; -import com.google.common.collect.Maps; - -import java.util.Map; -import java.util.Stack; - -/** - * 日志记录上下文. - * - * @author chen.ma - * @date 2021/10/23 21:47 - */ -public class LogRecordContext { - - private static final ThreadLocal>> VARIABLE_MAP_STACK = new TransmittableThreadLocal(); - - /** - * 出栈. - */ - public static void clear() { - if (VARIABLE_MAP_STACK.get() != null) { - VARIABLE_MAP_STACK.get().pop(); - } - } - - /** - * 初始化. - */ - public static void putEmptySpan() { - Stack> mapStack = VARIABLE_MAP_STACK.get(); - if (mapStack == null) { - Stack> stack = new Stack<>(); - VARIABLE_MAP_STACK.set(stack); - } - - VARIABLE_MAP_STACK.get().push(Maps.newHashMap()); - } - - public static Map getVariables() { - Stack> mapStack = VARIABLE_MAP_STACK.get(); - return mapStack.peek(); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/enums/LogRecordTypeEnum.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/enums/LogRecordTypeEnum.java deleted file mode 100644 index 8a9525dc..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/enums/LogRecordTypeEnum.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.hippo4j.tools.logrecord.enums; - -/** - * 日志记录类型. - * - * @author chen.ma - * @date 2021/10/24 21:54 - */ -public enum LogRecordTypeEnum { - - /** - * 按照文字模版记录 - */ - TEMPLATE, - - /** - * 比较修改前后所有区别 - */ - COMPLETE - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordInfo.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordInfo.java deleted file mode 100644 index a89c93e3..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordInfo.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.hippo4j.tools.logrecord.model; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotBlank; -import java.util.Date; - -/** - * 日志记录实体. - * - * @author chen.ma - * @date 2021/10/24 17:47 - */ -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class LogRecordInfo { - - private Long id; - - private String tenant; - - @NotBlank(message = "bizKey required") - @Length(max = 200, message = "appKey max length is 200") - private String bizKey; - - @NotBlank(message = "bizNo required") - @Length(max = 200, message = "bizNo max length is 200") - private String bizNo; - - @NotBlank(message = "operator required") - @Length(max = 63, message = "operator max length 63") - private String operator; - - @NotBlank(message = "opAction required") - @Length(max = 511, message = "operator max length 511") - private String action; - - private String category; - - private Date createTime; - - private String detail; - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordOps.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordOps.java deleted file mode 100644 index b6d13bbb..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/LogRecordOps.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.hippo4j.tools.logrecord.model; - -import lombok.Builder; -import lombok.Data; - -/** - * 日志操作记录. - * - * @author chen.ma - * @date 2021/10/24 21:07 - */ -@Data -@Builder -public class LogRecordOps { - - private String successLogTemplate; - - private String failLogTemplate; - - private String operatorId; - - private String bizKey; - - private String bizNo; - - private String category; - - private String detail; - - private String condition; - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/MethodExecuteResult.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/MethodExecuteResult.java deleted file mode 100644 index 0cfdb60b..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/MethodExecuteResult.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.hippo4j.tools.logrecord.model; - -import lombok.*; - -/** - * 方法执行结果. - * - * @author chen.ma - * @date 2021/10/24 21:59 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@RequiredArgsConstructor -public class MethodExecuteResult { - - /** - * 是否成功 - */ - @NonNull - private boolean success; - - /** - * 异常 - */ - private Throwable throwable; - - /** - * 错误日志 - */ - private String errorMsg; - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/Operator.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/Operator.java deleted file mode 100644 index aeb8d3e5..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/model/Operator.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.hippo4j.tools.logrecord.model; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * 操作人. - * - * @author chen.ma - * @date 2021/10/24 21:44 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class Operator { - - /** - * 操作人 Id - */ - private String operatorId; - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordEvaluationContext.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordEvaluationContext.java deleted file mode 100644 index da09b7d5..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordEvaluationContext.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.hippo4j.tools.logrecord.parse; - -import cn.hippo4j.tools.logrecord.context.LogRecordContext; -import org.springframework.context.expression.MethodBasedEvaluationContext; -import org.springframework.core.ParameterNameDiscoverer; - -import java.lang.reflect.Method; -import java.util.Map; - -/** - * Log record evaluation context. - * - * @author chen.ma - * @date 2021/10/24 21:25 - */ -public class LogRecordEvaluationContext extends MethodBasedEvaluationContext { - - public LogRecordEvaluationContext(Object rootObject, Method method, Object[] arguments, - ParameterNameDiscoverer parameterNameDiscoverer, Object ret, String errorMsg) { - super(rootObject, method, arguments, parameterNameDiscoverer); - - Map variables = LogRecordContext.getVariables(); - if (variables != null && variables.size() > 0) { - for (Map.Entry entry : variables.entrySet()) { - setVariable(entry.getKey(), entry.getValue()); - } - } - - setVariable("_ret", ret); - setVariable("_errorMsg", errorMsg); - } -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordExpressionEvaluator.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordExpressionEvaluator.java deleted file mode 100644 index 0815e0f7..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordExpressionEvaluator.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.hippo4j.tools.logrecord.parse; - -import com.google.common.collect.Maps; -import org.springframework.aop.support.AopUtils; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.context.expression.AnnotatedElementKey; -import org.springframework.context.expression.BeanFactoryResolver; -import org.springframework.context.expression.CachedExpressionEvaluator; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.Expression; - -import java.lang.reflect.Method; -import java.util.Map; - -/** - * Log record expression evaluator. - * - * @author chen.ma - * @date 2021/10/24 22:22 - */ -public class LogRecordExpressionEvaluator extends CachedExpressionEvaluator { - - private Map expressionCache = Maps.newConcurrentMap(); - - private final Map targetMethodCache = Maps.newConcurrentMap(); - - public String parseExpression(String conditionExpression, AnnotatedElementKey methodKey, EvaluationContext evalContext) { - Object value = getExpression(this.expressionCache, methodKey, conditionExpression).getValue(evalContext, Object.class); - return value == null ? "" : value.toString(); - } - - public EvaluationContext createEvaluationContext(Method method, Object[] args, Class targetClass, - Object result, String errorMsg, BeanFactory beanFactory) { - Method targetMethod = getTargetMethod(targetClass, method); - LogRecordEvaluationContext evaluationContext = new LogRecordEvaluationContext( - null, targetMethod, args, getParameterNameDiscoverer(), result, errorMsg); - if (beanFactory != null) { - evaluationContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); - } - return evaluationContext; - } - - private Method getTargetMethod(Class targetClass, Method method) { - AnnotatedElementKey methodKey = new AnnotatedElementKey(method, targetClass); - Method targetMethod = this.targetMethodCache.get(methodKey); - if (targetMethod == null) { - targetMethod = AopUtils.getMostSpecificMethod(method, targetClass); - this.targetMethodCache.put(methodKey, targetMethod); - } - return targetMethod; - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordOperationSource.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordOperationSource.java deleted file mode 100644 index 7af1b981..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordOperationSource.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.hippo4j.tools.logrecord.parse; - -import cn.hippo4j.tools.logrecord.annotation.LogRecord; -import cn.hippo4j.tools.logrecord.model.LogRecordOps; -import org.springframework.core.BridgeMethodResolver; -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; - -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collection; - -/** - * 日志记录操作解析. - * - * @author chen.ma - * @date 2021/10/23 22:02 - */ -public class LogRecordOperationSource { - - public Collection computeLogRecordOperations(Method method, Class targetClass) { - if (!Modifier.isPublic(method.getModifiers())) { - return null; - } - - Method specificMethod = ClassUtils.getMostSpecificMethod(method, targetClass); - specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod); - - return parseLogRecordAnnotations(specificMethod); - } - - private Collection parseLogRecordAnnotations(AnnotatedElement ae) { - Collection logRecordAnnotations = AnnotatedElementUtils.getAllMergedAnnotations(ae, LogRecord.class); - Collection ret = null; - if (!logRecordAnnotations.isEmpty()) { - ret = new ArrayList(1); - for (LogRecord logRecord : logRecordAnnotations) { - ret.add(parseLogRecordAnnotation(ae, logRecord)); - } - } - - return ret; - } - - private LogRecordOps parseLogRecordAnnotation(AnnotatedElement ae, LogRecord logRecord) { - LogRecordOps recordOps = LogRecordOps.builder() - .successLogTemplate(logRecord.success()) - .failLogTemplate(logRecord.fail()) - .bizKey(logRecord.prefix().concat(logRecord.bizNo())) - .bizNo(logRecord.bizNo()) - .operatorId(logRecord.operator()) - .category(StringUtils.isEmpty(logRecord.category()) ? logRecord.prefix() : logRecord.category()) - .detail(logRecord.detail()) - .condition(logRecord.condition()) - .build(); - - validateLogRecordOperation(ae, recordOps); - return recordOps; - } - - private void validateLogRecordOperation(AnnotatedElement ae, LogRecordOps recordOps) { - if (!StringUtils.hasText(recordOps.getSuccessLogTemplate()) && !StringUtils.hasText(recordOps.getFailLogTemplate())) { - throw new IllegalStateException("Invalid logRecord annotation configuration on '" + - ae.toString() + "'. 'one of successTemplate and failLogTemplate' attribute must be set."); - } - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordValueParser.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordValueParser.java deleted file mode 100644 index df1c3a27..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/parse/LogRecordValueParser.java +++ /dev/null @@ -1,107 +0,0 @@ -package cn.hippo4j.tools.logrecord.parse; - -import cn.hippo4j.tools.logrecord.service.FunctionService; -import com.google.common.base.Strings; -import com.google.common.collect.Maps; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.expression.AnnotatedElementKey; -import org.springframework.expression.EvaluationContext; -import org.springframework.util.StringUtils; - -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Log record value parser. - * - * @author chen.ma - * @date 2021/10/24 21:27 - */ -public class LogRecordValueParser implements BeanFactoryAware { - - @Autowired - private FunctionService functionService; - - protected BeanFactory beanFactory; - - private final LogRecordExpressionEvaluator expressionEvaluator = new LogRecordExpressionEvaluator(); - - private static final Pattern pattern = Pattern.compile("\\{\\s*(\\w*)\\s*\\{(.*?)}}"); - - public Map processTemplate(Collection templates, Object ret, - Class targetClass, Method method, Object[] args, String errorMsg, - Map beforeFunctionNameAndReturnMap) { - Map expressionValues = Maps.newHashMap(); - EvaluationContext evaluationContext = expressionEvaluator.createEvaluationContext(method, args, targetClass, ret, errorMsg, beanFactory); - - for (String expressionTemplate : templates) { - if (expressionTemplate.contains("{")) { - Matcher matcher = pattern.matcher(expressionTemplate); - StringBuffer parsedStr = new StringBuffer(); - while (matcher.find()) { - String expression = matcher.group(2); - AnnotatedElementKey annotatedElementKey = new AnnotatedElementKey(method, targetClass); - String value = expressionEvaluator.parseExpression(expression, annotatedElementKey, evaluationContext); - String functionReturnValue = getFunctionReturnValue(beforeFunctionNameAndReturnMap, value, matcher.group(1)); - matcher.appendReplacement(parsedStr, Strings.nullToEmpty(functionReturnValue)); - } - matcher.appendTail(parsedStr); - expressionValues.put(expressionTemplate, parsedStr.toString()); - } else { - expressionValues.put(expressionTemplate, expressionTemplate); - } - } - - return expressionValues; - } - - public Map processBeforeExecuteFunctionTemplate(Collection templates, Class targetClass, Method method, Object[] args) { - Map functionNameAndReturnValueMap = new HashMap<>(); - EvaluationContext evaluationContext = expressionEvaluator.createEvaluationContext(method, args, targetClass, null, null, beanFactory); - - for (String expressionTemplate : templates) { - if (expressionTemplate.contains("{")) { - Matcher matcher = pattern.matcher(expressionTemplate); - while (matcher.find()) { - String expression = matcher.group(2); - if (expression.contains("#_ret") || expression.contains("#_errorMsg")) { - continue; - } - AnnotatedElementKey annotatedElementKey = new AnnotatedElementKey(method, targetClass); - String functionName = matcher.group(1); - if (functionService.beforeFunction(functionName)) { - String value = expressionEvaluator.parseExpression(expression, annotatedElementKey, evaluationContext); - String functionReturnValue = getFunctionReturnValue(null, value, functionName); - functionNameAndReturnValueMap.put(functionName, functionReturnValue); - } - } - } - } - - return functionNameAndReturnValueMap; - } - - private String getFunctionReturnValue(Map beforeFunctionNameAndReturnMap, String value, String functionName) { - String functionReturnValue = ""; - if (beforeFunctionNameAndReturnMap != null) { - functionReturnValue = beforeFunctionNameAndReturnMap.get(functionName); - } - if (StringUtils.isEmpty(functionReturnValue)) { - functionReturnValue = functionService.apply(functionName, value); - } - return functionReturnValue; - } - - @Override - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { - this.beanFactory = beanFactory; - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/FunctionService.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/FunctionService.java deleted file mode 100644 index fe7e689f..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/FunctionService.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.hippo4j.tools.logrecord.service; - -/** - * 函数服务. - * - * @author chen.ma - * @date 2021/10/24 21:30 - */ -public interface FunctionService { - - /** - * 执行. - * - * @param functionName - * @param value - * @return - */ - String apply(String functionName, String value); - - /** - * 是否提前执行. - * - * @param functionName - * @return - */ - boolean beforeFunction(String functionName); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/LogRecordService.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/LogRecordService.java deleted file mode 100644 index 09f1c833..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/LogRecordService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.hippo4j.tools.logrecord.service; - -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; - -/** - * 日志记录. - * - * @author chen.ma - * @date 2021/10/23 22:43 - */ -public interface LogRecordService { - - /** - * 保存日志. - * - * @param logRecordInfo - */ - void record(LogRecordInfo logRecordInfo); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/OperatorGetService.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/OperatorGetService.java deleted file mode 100644 index eac2ba57..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/OperatorGetService.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.hippo4j.tools.logrecord.service; - -import cn.hippo4j.tools.logrecord.model.Operator; - -/** - * 获取操作人. - * - * @author chen.ma - * @date 2021/10/23 22:46 - */ -public interface OperatorGetService { - - /** - * 获取操作人. - * - * @return - */ - Operator getUser(); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/ParseFunction.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/ParseFunction.java deleted file mode 100644 index ffa09675..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/ParseFunction.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.hippo4j.tools.logrecord.service; - -/** - * 函数解析. - * - * @author chen.ma - * @date 2021/10/23 22:40 - */ -public interface ParseFunction { - - /** - * 是否先执行. - * - * @return - */ - default boolean executeBefore() { - return false; - } - - /** - * 函数名称. - * - * @return - */ - String functionName(); - - /** - * 执行. - * - * @param value - * @return - */ - String apply(String value); - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultFunctionServiceImpl.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultFunctionServiceImpl.java deleted file mode 100644 index 79b03935..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultFunctionServiceImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.hippo4j.tools.logrecord.service.impl; - -import cn.hippo4j.tools.logrecord.service.FunctionService; -import cn.hippo4j.tools.logrecord.service.ParseFunction; -import lombok.AllArgsConstructor; - -/** - * 默认实现函数接口. - * - * @author chen.ma - * @date 2021/10/24 21:54 - */ -@AllArgsConstructor -public class DefaultFunctionServiceImpl implements FunctionService { - - private final ParseFunctionFactory parseFunctionFactory; - - @Override - public String apply(String functionName, String value) { - ParseFunction function = parseFunctionFactory.getFunction(functionName); - if (function == null) { - return value; - } - return function.apply(value); - } - - @Override - public boolean beforeFunction(String functionName) { - return parseFunctionFactory.isBeforeFunction(functionName); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultLogRecordServiceImpl.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultLogRecordServiceImpl.java deleted file mode 100644 index a0e77bcb..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultLogRecordServiceImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.hippo4j.tools.logrecord.service.impl; - -import cn.hippo4j.tools.logrecord.model.LogRecordInfo; -import cn.hippo4j.tools.logrecord.service.LogRecordService; -import lombok.extern.slf4j.Slf4j; - -/** - * 默认实现日志存储. - * - * @author chen.ma - * @date 2021/10/24 17:59 - */ -@Slf4j -public class DefaultLogRecordServiceImpl implements LogRecordService { - - @Override - public void record(LogRecordInfo logRecordInfo) { - log.info("Log print :: {}", logRecordInfo); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultOperatorGetServiceImpl.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultOperatorGetServiceImpl.java deleted file mode 100644 index 866a0686..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultOperatorGetServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.hippo4j.tools.logrecord.service.impl; - -import cn.hippo4j.tools.logrecord.model.Operator; -import cn.hippo4j.tools.logrecord.service.OperatorGetService; - -/** - * 默认实现. - * - * @author chen.ma - * @date 2021/10/24 17:58 - */ -public class DefaultOperatorGetServiceImpl implements OperatorGetService { - - @Override - public Operator getUser() { - return new Operator("-"); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultParseFunction.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultParseFunction.java deleted file mode 100644 index b6fb80a3..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/DefaultParseFunction.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.hippo4j.tools.logrecord.service.impl; - -import cn.hippo4j.tools.logrecord.service.ParseFunction; - -/** - * 默认实现. - * - * @author chen.ma - * @date 2021/10/24 17:57 - */ -public class DefaultParseFunction implements ParseFunction { - - @Override - public boolean executeBefore() { - return true; - } - - @Override - public String functionName() { - return null; - } - - @Override - public String apply(String value) { - return null; - } - -} diff --git a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/ParseFunctionFactory.java b/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/ParseFunctionFactory.java deleted file mode 100644 index 0ea4dfd7..00000000 --- a/hippo4j-tools/log-record-tool/src/main/java/cn/hippo4j/tools/logrecord/service/impl/ParseFunctionFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.hippo4j.tools.logrecord.service.impl; - -import cn.hippo4j.tools.logrecord.service.ParseFunction; -import com.google.common.collect.Maps; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.Map; - -/** - * 函数解析工厂. - * - * @author chen.ma - * @date 2021/10/23 22:39 - */ -public class ParseFunctionFactory { - - private Map allFunctionMap; - - public ParseFunctionFactory(List parseFunctions) { - if (CollectionUtils.isEmpty(parseFunctions)) { - return; - } - - allFunctionMap = Maps.newHashMap(); - for (ParseFunction parseFunction : parseFunctions) { - if (StringUtils.isEmpty(parseFunction.functionName())) { - continue; - } - - allFunctionMap.put(parseFunction.functionName(), parseFunction); - } - } - - /** - * 获取函数实例. - * - * @param functionName - * @return - */ - public ParseFunction getFunction(String functionName) { - return allFunctionMap.get(functionName); - } - - /** - * 是否提前执行. - * - * @param functionName - * @return - */ - public boolean isBeforeFunction(String functionName) { - return allFunctionMap.get(functionName) != null && allFunctionMap.get(functionName).executeBefore(); - } - -} diff --git a/hippo4j-tools/log-record-tool/src/test/java/cn/hippo4j/tools/logrecord/LogRecordToolApplicationTests.java b/hippo4j-tools/log-record-tool/src/test/java/cn/hippo4j/tools/logrecord/LogRecordToolApplicationTests.java deleted file mode 100644 index dac03fc1..00000000 --- a/hippo4j-tools/log-record-tool/src/test/java/cn/hippo4j/tools/logrecord/LogRecordToolApplicationTests.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.hippo4j.tools.logrecord; - -import org.junit.jupiter.api.Test; - -class LogRecordToolApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/hippo4j-tools/open-change-tool/.gitignore b/hippo4j-tools/open-change-tool/.gitignore deleted file mode 100644 index 549e00a2..00000000 --- a/hippo4j-tools/open-change-tool/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/EnableOpenChangeNotify.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/EnableOpenChangeNotify.java deleted file mode 100644 index 6ed552d3..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/EnableOpenChangeNotify.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import org.springframework.context.annotation.Import; - -import java.lang.annotation.*; - -/** - * Change timed task. - * - * @author chen.ma - * @date 2021/10/31 13:39 - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Import(OpenChangeNotifyConfig.class) -@Documented -public @interface EnableOpenChangeNotify { -} diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/GitHubRemote.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/GitHubRemote.java deleted file mode 100644 index 31f95349..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/GitHubRemote.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import com.dtflys.forest.annotation.Get; - -/** - * GitHub remote. - * - * @author chen.ma - * @date 2021/10/31 10:45 - */ -public interface GitHubRemote { - - /** - * 获取 GitHub 仓库详细信息. - * - * @return - */ - @Get("https://api.github.com/repos/acmenlt/dynamic-threadpool") - OpenChangeInfo getGitHubItemInfo(); - -} diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeInfo.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeInfo.java deleted file mode 100644 index 9d104579..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeInfo.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import lombok.Data; - -/** - * Open change info. - * - * @author chen.ma - * @date 2021/10/31 10:33 - */ -@Data -public class OpenChangeInfo { - - /** - * name - */ - private String name; - - /** - * stars - */ - private Long stargazers_count; - - /** - * forks - */ - private Long forks_count; - - /** - * open issues - */ - private Long open_issues_count; - - /** - * url - */ - private String html_url; - - /** - * subscribers - */ - private Long subscribers_count; - - /** - * default branch - */ - private String default_branch; - - /** - * star_add - */ - private Long star_add; - - /** - * fork_add - */ - - private Long fork_add; - -} diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyBootstrapProperties.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyBootstrapProperties.java deleted file mode 100644 index 5b37c80c..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyBootstrapProperties.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -/** - * Bootstrap properties. - * - * @author chen.ma - * @date 2021/6/22 09:14 - */ -@Slf4j -@Getter -@Setter -@Configuration -@ConfigurationProperties(prefix = OpenChangeNotifyBootstrapProperties.PREFIX) -public class OpenChangeNotifyBootstrapProperties { - - public static final String PREFIX = "spring.dynamic.thread-pool"; - - /** - * notifyInterval - */ - private Long notifyInterval; - - /** - * notifys - */ - private List notifys; - - @Data - public static class NotifyConfig { - - /** - * type - */ - private String type; - - /** - * url - */ - private String url; - - /** - * token - */ - private String token; - - } - -} diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyConfig.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyConfig.java deleted file mode 100644 index c0c81c19..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeNotifyConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import com.dtflys.forest.springboot.annotation.ForestScan; -import lombok.AllArgsConstructor; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.scheduling.annotation.EnableScheduling; - -/** - * 项目变更通知配置. - * - * @author chen.ma - * @date 2021/10/31 10:23 - */ -@EnableScheduling -@AllArgsConstructor -@ImportAutoConfiguration(OpenChangeNotifyBootstrapProperties.class) -@ForestScan(basePackages = "com.github.dynamic.threadpool.openchange") -public class OpenChangeNotifyConfig { - - private final GitHubRemote gitHubRemote; - - private final OpenChangeNotifyBootstrapProperties bootstrapProperties; - - @Bean - public OpenChangeTimedTask changeTimedTask() { - return new OpenChangeTimedTask(gitHubRemote, bootstrapProperties); - } - -} diff --git a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeTimedTask.java b/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeTimedTask.java deleted file mode 100644 index bd8e3713..00000000 --- a/hippo4j-tools/open-change-tool/src/main/java/cn/hippo4j/tools/openchange/OpenChangeTimedTask.java +++ /dev/null @@ -1,139 +0,0 @@ -package cn.hippo4j.tools.openchange; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.thread.ThreadUtil; -import cn.hutool.json.JSONUtil; -import com.dingtalk.api.DefaultDingTalkClient; -import com.dingtalk.api.DingTalkClient; -import com.dingtalk.api.request.OapiRobotSendRequest; -import com.taobao.api.ApiException; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.scheduling.annotation.Scheduled; - -import java.util.concurrent.TimeUnit; - -/** - * Change timed task. - * - * @author chen.ma - * @date 2021/10/31 10:39 - */ -@Slf4j -@RequiredArgsConstructor -public class OpenChangeTimedTask implements InitializingBean { - - @NonNull - private final GitHubRemote gitHubRemote; - - @NonNull - private final OpenChangeNotifyBootstrapProperties bootstrapProperties; - - private OpenChangeInfo lastChangeInfo; - - @Scheduled(cron = "0 0/5 * * * ?") - public void execute() { - OpenChangeInfo itemInfo = null; - try { - itemInfo = gitHubRemote.getGitHubItemInfo(); - // 防止初始化调用 GitHub 403 - if (lastChangeInfo == null) { - lastChangeInfo = itemInfo; - log.info("Init... GitHub Item Info :: {}", JSONUtil.toJsonStr(lastChangeInfo)); - return; - } - } catch (Throwable ex) { - log.error("Failed to call GitHub API interface.", ex); - - // 担心 GitHub 限制访问 403, 如异常则睡眠 5 分钟 - ThreadUtil.sleep(5, TimeUnit.MINUTES); - return; - } - - long addStarNum, addForkChange; - boolean starChange = (addStarNum = (itemInfo.getStargazers_count() - lastChangeInfo.getStargazers_count())) > 0; - if (starChange) { - itemInfo.setStar_add(addStarNum); - } - - boolean forkChange = (addForkChange = (itemInfo.getForks_count() - lastChangeInfo.getForks_count())) > 0; - if (forkChange) { - itemInfo.setFork_add(addForkChange); - } - - if (starChange == false && forkChange == false) { - log.info("Star and fork are unchanged."); - return; - } - - sendDingMessage(itemInfo); - lastChangeInfo = itemInfo; - } - - public void sendDingMessage(OpenChangeInfo itemInfo) { - String gitHubItemUrl = itemInfo.getHtml_url(); - String markdownText = String.format( - "[通知] GitHub Star Fork 变更通知 \n\n" + - " --- \n\n " + - "项目名称:HIPPO-JAVA \n\n" + - "项目地址:[%s](%s) \n\n" + - " --- \n\n " + - "Hippo Stars Add:%s \n\n " + - "Hippo Forks Add:%s \n\n " + - " --- \n\n " + - "Hippo Now Star:[%d](" + gitHubItemUrl + "/stargazers) \n\n" + - "Hippo Now Fork:[%d](" + gitHubItemUrl + "/members) \n\n" + - "Hippo Open Issue:[%d](" + gitHubItemUrl + "/issues) \n\n" + - "Hippo Subscribers Count:[%d](" + gitHubItemUrl + "/watchers) \n\n" + - " --- \n\n " + - "友情提示:5 分钟内 Star Fork 有变更则通知(可配置) \n\n" + - "OWNER:Long-Tai \n\n" + - " --- \n\n " + - "**播报时间:%s**", - - itemInfo.getName().toUpperCase(), - gitHubItemUrl, - - itemInfo.getStar_add() == null ? "-" : itemInfo.getStar_add().toString() + "+", - itemInfo.getFork_add() == null ? "-" : itemInfo.getFork_add().toString() + "+", - - itemInfo.getStargazers_count(), - itemInfo.getForks_count(), - itemInfo.getOpen_issues_count(), - itemInfo.getSubscribers_count(), - - DateUtil.now() - ); - - OpenChangeNotifyBootstrapProperties.NotifyConfig notifyConfig = bootstrapProperties.getNotifys().get(0); - String serverUrl = notifyConfig.getUrl() + notifyConfig.getToken(); - DingTalkClient dingTalkClient = new DefaultDingTalkClient(serverUrl); - OapiRobotSendRequest request = new OapiRobotSendRequest(); - request.setMsgtype("markdown"); - - OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown(); - markdown.setTitle("GitHub Star Fork 变更通知"); - markdown.setText(markdownText); - request.setMarkdown(markdown); - - try { - dingTalkClient.execute(request); - } catch (ApiException ex) { - log.error("Ding failed to send message.", ex.getMessage()); - } - } - - @Override - public void afterPropertiesSet() throws Exception { - try { - lastChangeInfo = gitHubRemote.getGitHubItemInfo(); - } catch (Throwable ex) { - log.error("Init error..."); - } - - log.info("Init success... GitHub Item Info :: {}", JSONUtil.toJsonStr(lastChangeInfo)); - } - -} diff --git a/pom.xml b/pom.xml index 406bb7c1..1256f752 100644 --- a/pom.xml +++ b/pom.xml @@ -7,61 +7,69 @@ hippo4j-all ${revision} pom - - ${project.artifactId} - https://github.com/acmenlt/dynamic-threadpool - 🔥 强大的动态线程池,附带监控报警功能(没有依赖中间件) - - - - - + Dynamic observable thread pool framework + hippo4j-adapter hippo4j-auth hippo4j-common - hippo4j-console - hippo4j-server hippo4j-config + hippo4j-console + hippo4j-core hippo4j-discovery hippo4j-example - hippo4j-tools - hippo4j-spring-boot-starter + hippo4j-message + hippo4j-monitor + hippo4j-server + hippo4j-spring-boot - 1.8 - 1.0.0-RC3 + 1.4.0-SNAPSHOT + 6.5.0 - 29.0-jre - 3.8.1 - 5.4.7 - 1.2.75 + 30.0-jre + 3.12.0 + 5.4.7 3.12.0 6.1.5.Final 2.12.1 1.5.11 0.9.0 + 2.11.1 + 2.0.0 - 1.0.1 - + 1.7.7 - 1.2.3 + 1.2.9 + 1.8.4 + 2.0.4 3.4.2 2.3.2.RELEASE - + 1.9.1 + 2.2.2 + 4.1.56.Final + 9.0.55 + 5.1.0 + 2.2.6.RELEASE + 2.2.9.RELEASE + 2.2.5.RELEASE + + + 1.8 + true + false false UTF-8 UTF-8 UTF-8 - - 3.6.1 3.0.0 3.0.1 3.0.2 3.0 + 2.22.1 @@ -76,21 +84,14 @@ com.squareup.okhttp3 - logging-interceptor + okhttp ${okhttp3.version} - true - - - - com.alibaba - fastjson - ${fastjson.version} cn.hutool hutool-all - ${hutool-core.version} + ${hutool-all.version} @@ -101,43 +102,19 @@ cn.hippo4j - hippo4j-common + hippo4j-message ${revision} cn.hippo4j - hippo4j-config + hippo4j-core ${revision} cn.hippo4j - hippo4j-console - ${revision} - - - - cn.hippo4j - hippo4j-discovery - ${revision} - - - - cn.hippo4j - log-record-tool - ${revision} - - - - cn.hippo4j - hippo4j-auth - ${revision} - - - - cn.hippo4j - open-change-tool + hippo4j-adapter-base ${revision} @@ -177,12 +154,6 @@ ${hibernate-validator.version} - - com.dtflys.forest - forest-spring-boot-starter - ${forest.version} - - org.slf4j slf4j-api @@ -200,30 +171,21 @@ logback-classic ${logback.version} - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - acmenlt - chen.ma - m7798432@163.com - https://github.com/acmenlt - - + + org.springframework.boot + spring-boot-starter-json + ${spring-boot.version} + compile + - - Github Issue - https://github.com/acmenlt/dynamic-threadpool/issues - + + io.netty + netty-all + ${netty.version} + + + ${project.artifactId} @@ -240,7 +202,6 @@ -Xlint:unchecked - maven-jar-plugin ${maven.jar.plugin.version} @@ -252,7 +213,6 @@ - org.codehaus.mojo flatten-maven-plugin @@ -264,41 +224,41 @@ flatten - process-resources flatten + process-resources flatten.clean - clean clean + clean - org.springframework.boot spring-boot-maven-plugin ${spring-boot.version} - org.apache.maven.plugins maven-gpg-plugin 1.6 + + ${skip.gpg} + - verify sign + verify - org.apache.maven.plugins maven-javadoc-plugin @@ -307,7 +267,6 @@ ${javadoc.opts} - org.apache.maven.plugins maven-source-plugin @@ -317,44 +276,114 @@ - package jar-no-fork + package + + + + + com.diffplug.spotless + spotless-maven-plugin + ${spotless-maven-plugin.version} + + ${skip.spotless.apply} + + + ${maven.multiModuleProjectDirectory}/dev-support/hippo4j_spotless_formatter.xml + + + ${maven.multiModuleProjectDirectory}/dev-support/license-header + + + + + UTF-8 + 4 + true + false + true + true + false + false + custom_1 + false + false + + + + + + + apply + + compile - - - - disable-javadoc-doclint - - [1.8,) - - - -Xdoclint:none - - - + https://github.com/opengoofy/hippo4j + + + + The Apache Software License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + chen.ma + machen@apache.org + https://github.com/mabaiwan + OpenGoofy + https://github.com/opengoofy + + Project lead + + + + shining-stars-lk + 1031900093@qq.com + https://github.com/shining-stars-lk + + - scm:git@github.com:acmenlt/dynamic-threadpool - scm:git@github.com:acmenlt/dynamic-threadpool.git - git@github.com:acmenlt/dynamic-threadpool.git + scm:git@github.com:opengoofy/hippo4j + scm:git@github.com:opengoofy/hippo4j.git + git@github.com:opengoofy/hippo4j.git + + Github Issue + https://github.com/opengoofy/hippo4j/issues + + - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - ossrh https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + + disable-javadoc-doclint + + [1.8,) + + + -Xdoclint:none + + +