diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index ca08366e..7fc0ffe4 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -3,16 +3,16 @@ name: "BUG 报告" about: 提交问题缺陷帮助我们更好的改进 --- -## Bug Report +## BUG 报告 在开始报告错误之前,请确保认真查看了以下步骤: - 搜索打开和关闭的 [GitHub 问题](https://github.com/opengoofy/hippo4j/issues) -- 阅读 [常见问题文档](https://hippo4j.cn/pages/9cc27d/) +- 阅读 [常见问题文档](https://hippo4j.cn/docs/user_docs/other/issue) 请在提交问题之前回答这些问题,谢谢。 -### 你使用了哪个项目?Hippo-4J Server 还是 Hippo-4J Core? +### 你使用了哪个项目?hippo4j config 还是 hippo4j server? ### 你使用了哪个版本? diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index 2422175e..b832a38a 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -3,11 +3,10 @@ name: "需求建议" about: 提出针对本项目的想法和建议 --- -## Feature Request +## 需求建议 请在提交问题之前回答这些问题,谢谢。 ### 您的功能请求是否与问题有关? ### 描述你想要的功能 - diff --git a/.github/ISSUE_TEMPLATE/question-report.md b/.github/ISSUE_TEMPLATE/question-report.md index 54af7154..87d00572 100644 --- a/.github/ISSUE_TEMPLATE/question-report.md +++ b/.github/ISSUE_TEMPLATE/question-report.md @@ -3,16 +3,16 @@ name: "问题支持" about: 文档或讨论中未回答的使用问题 --- -## Question Report +## 问题支持 在开始报告问题之前,请确保认真查看了以下步骤: - 搜索打开和关闭的 [GitHub 问题](https://github.com/opengoofy/hippo4j/issues) -- 阅读 [常见问题文档](https://hippo4j.cn/pages/9cc27d/) +- 阅读 [常见问题文档](https://hippo4j.cn/docs/user_docs/other/issue) 请在提交问题之前回答这些问题,谢谢。 -### 你使用了哪个项目?Hippo-4J Server 还是 Hippo-4J Core? +### 你使用了哪个项目?hippo4j config 还是 hippo4j server? ### 你使用了哪个版本? diff --git a/README.md b/README.md index d1907836..4319d233 100644 --- a/README.md +++ b/README.md @@ -2,31 +2,41 @@ # 动态可观测线程池框架,提高线上运行保障能力 -[![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) +[![Gitee](https://gitee.com/agentart/hippo4j/badge/star.svg?theme=gvp)](https://gitee.com/agentart/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 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。 +## 线程池痛点 -- 🏗 全局管控 - 管理应用线程池实例; +线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。 -- ⚡️ 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等; +如果有在项目中实际使用线程池,相信你可能会遇到以下痛点: -- 🐳 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长; +- 线程池随便定义,线程资源过多,造成服务器高负载。 -- 👀 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示; +- 线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。 +- 线程池任务执行时间超过平均执行周期,开发人员无法感知。 +- 线程池任务堆积,触发拒绝策略,影响既有业务正常运行。 +- 当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。 +- 原生线程池不支持运行时变量的传递,比如 MDC 上下文遇到线程池就 GG。 +- 无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。 +- 线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。 -- 👐 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务; +## 什么是 Hippo-4J -- 👯‍♀️ 多种模式 - 内置两种使用模式:[依赖配置中心](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-core-start) 和 [无中间件依赖](https://hippo4j.cn/docs/user_docs/getting-started/hippo4j-server-start); +Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。 -- 🛠 容器管理 - Tomcat、Jetty、Undertow 容器线程池运行时查看和线程数变更; +- 全局管控 - 管理应用线程池实例; -- 🌈 中间件适配 - Apache RocketMQ、Dubbo、RabbitMQ、Hystrix 消费线程池运行时数据查看和线程数变更。 +- 动态变更 - 应用运行时动态变更线程池参数,包括不限于:核心、最大线程数、阻塞队列容量、拒绝策略等; +- 通知报警 - 内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长; +- 运行监控 - 实时查看线程池运行时数据,最近半小时线程池运行数据图表展示; +- 功能扩展 - 支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务; +- 多种模式 - 内置两种使用模式:[依赖配置中心](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 消费线程池运行时数据查看和线程数变更。 -> 看完有收获,右上角帮忙点个小星星,开源作者为爱发电也不容易 🤣 +> 开源作者为爱发电不容易,看完有收获,右上角帮忙点个小星星 🤩 ## 快速开始 @@ -36,32 +46,35 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 - http://console.hippo4j.cn/index.html - 用户名/密码:hippo4j/hippo4j -## 安全检测 - -[![OSCS Status](https://www.oscs1024.com/platform/badge/opengoofy/hippo4j.svg?size=large)](https://www.murphysec.com/dr/s285JA1FVHD7tayWLt) +## 荣誉墙 -## 联系我 +Hippo-4J 获得了一些宝贵的荣誉,肯定了 Hippo-4J 作为一款开源框架所带来的价值。 -图片加载不出来,访问 [官网站点](https://hippo4j.cn/docs/user_docs/other/group) +image -![image](https://user-images.githubusercontent.com/77398366/180110548-7a05b74d-0316-4066-96f4-1c9331638633.png) ## 开发者 -感谢所有为 Hippo-4J 做出贡献的开发者! - - +Hippo-4J 获得的成就属于每一位对 Hippo-4J 做出过贡献的成员,感谢各位的贡献。 -## 我们的荣誉 +如果屏幕前的同学有意提交 Hippo-4J,请参考 [good first issue](https://github.com/opengoofy/hippo4j/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 或者 [good pro issue](https://github.com/opengoofy/hippo4j/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+pro+issue%22) 任务列表。 -Hippo-4J 获得了一些宝贵的荣誉,这属于每一位对 Hippo-4J 做出过贡献的成员,谢谢各位的付出。 + -image ## 友情链接 -- [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):消息推送平台,支持短信、邮件、微信公众号、企业微信、钉钉等多种消息类型。 +- [[ Sa-Token ]](https://github.com/dromara/sa-token):一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! + +- [[ HertzBeat ]](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需 Agent, 强大自定义监控能力。 + +- [[ JavaGuide ]](https://github.com/Snailclimb/JavaGuide):一份涵盖大部分 Java 程序员所需要掌握的核心知识。 + +- [[ toBeBetterJavaer ]](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的 Java 学习指南。 + + +## 联系我 + +![image](https://user-images.githubusercontent.com/77398366/185774220-c11951f9-e130-4d60-8204-afb5c51d4401.png) + +扫码添加微信,备注:hippo4j,邀您加入群聊。若图片加载不出来,访问 [官网站点](https://hippo4j.cn/docs/user_docs/other/group) diff --git a/docs/docs/community/contributor.md b/docs/docs/community/contributor.md index e5ce5c9a..5847a0af 100644 --- a/docs/docs/community/contributor.md +++ b/docs/docs/community/contributor.md @@ -2,18 +2,19 @@ sidebar_position: 1 --- -# 开发者指南 +# 贡献指南 +Git Commit Log 尽量使用英文。 -为了让您的 id 显示在 contributor 列表中,别忘了以下设置: +为了让您的 ID 显示在 Contributor 列表中,别忘了以下设置: ```shell git config --global user.name "username" -git config --global user.email "github账号邮箱" +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/dev_convention/_category_.json b/docs/docs/community/dev_convention/_category_.json new file mode 100644 index 00000000..cb875453 --- /dev/null +++ b/docs/docs/community/dev_convention/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "贡献规约", + "position": 2, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/community/dev_convention/code.md b/docs/docs/community/dev_convention/code.md new file mode 100644 index 00000000..f91acdbe --- /dev/null +++ b/docs/docs/community/dev_convention/code.md @@ -0,0 +1,8 @@ +--- +sidebar_position: 2 +--- + +# 代码规约 + +1. 代码提交前,执行 `mvn spotless:apply` 保证代码格式符合规范。 +2. 代码中不要出现无意义的空行。 diff --git a/docs/docs/community/dev_convention/document.md b/docs/docs/community/dev_convention/document.md new file mode 100644 index 00000000..923ad81d --- /dev/null +++ b/docs/docs/community/dev_convention/document.md @@ -0,0 +1,227 @@ +--- +sidebar_position: 1 +--- + +# 文档规约 + +文档引用自:[中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines) + +## 空格 + +> 「有研究顯示,打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。 +> +> 與大家共勉之。」——[vinta/paranoid-auto-spacing](https://github.com/vinta/pangu.js) + +### 中英文之間需要增加空格 + +正確: + +> 在 LeanCloud 上,數據儲存是圍繞 `AVObject` 進行的。 + +錯誤: + +> 在LeanCloud上,數據儲存是圍繞`AVObject`進行的。 + +> 在 LeanCloud上,數據儲存是圍繞`AVObject` 進行的。 + +完整的正確用法: + +> 在 LeanCloud 上,數據儲存是圍繞 `AVObject` 進行的。每個 `AVObject` 都包含了與 JSON 兼容的 key-value 對應的數據。數據是 schema-free 的,你不需要在每個 `AVObject` 上提前指定存在哪些键,只要直接設定對應的 key-value 即可。 + +例外:「豆瓣FM」等產品名詞,按照官方所定義的格式書寫。 + +### 中文與數字之間需要增加空格 + +正確: + +> 今天出去買菜花了 5000 元。 + +錯誤: + +> 今天出去買菜花了 5000元。 + +> 今天出去買菜花了5000元。 + +### 數字與單位之間需要增加空格 + +正確: + +> 我家的光纖入屋寬頻有 10 Gbps,SSD 一共有 20 TB。 + +錯誤: + +> 我家的光纖入屋寬頻有 10Gbps,SSD 一共有 20TB。 + +例外:度數/百分比與數字之間不需要增加空格: + +正確: + +> 角度為 90° 的角,就是直角。 + +> 新 MacBook Pro 有 15% 的 CPU 性能提升。 + +錯誤: + +> 角度為 90 ° 的角,就是直角。 + +> 新 MacBook Pro 有 15 % 的 CPU 性能提升。 + +### 全形標點與其他字符之間不加空格 + +正確: + +> 剛剛買了一部 iPhone,好開心! + +錯誤: + +> 剛剛買了一部 iPhone ,好開心! + +> 剛剛買了一部 iPhone, 好開心! + +### `text-spacing` to the rescue? + +CSS Text Module Level 4 的 [`text-spacing`](https://www.w3.org/TR/css-text-4/#text-spacing-property) 和 Microsoft 的 [`-ms-text-autospace`](https://msdn.microsoft.com/library/ms531164(v=vs.85).aspx) 可以實現自動為中英文之間增加空白。不過目前並未普及,另外在其他應用場景,例如 macOS、iOS、Windows 等用戶介面目前並不存在這個特性,所以請繼續保持隨手加空格的習慣。 + +## 標點符號 + +### 不重複使用標點符號 + +即使中國大陸的標點符號用法允許重複使用標點符號,但是這麼做會破壞句子的美觀性。 + +正確: + +> 德國隊竟然戰勝了巴西隊! + +> 她竟然對你說「喵」?! + +錯誤: + +> 德國隊竟然戰勝了巴西隊!! + +> 德國隊竟然戰勝了巴西隊!!!!!!!! + +> 她竟然對你說「喵」??!! + +> 她竟然對你說「喵」?!?!??!! + +## 全形和半形 + +不明白什麼是全形(全角)與半形(半角)符號?請查看維基百科條目『[全形和半形](https://zh.wikipedia.org/wiki/%E5%85%A8%E5%BD%A2%E5%92%8C%E5%8D%8A%E5%BD%A2)』。 + +### 使用全形中文標點 + +正確: + +> 嗨!你知道嘛?今天前台的小妹跟我說「喵」了哎! + +> 核磁共振成像(NMRI)是什麼原理都不知道?JFGI! + +錯誤: + +> 嗨! 你知道嘛? 今天前台的小妹跟我說 "喵" 了哎! + +> 嗨!你知道嘛?今天前台的小妹跟我說"喵"了哎! + +> 核磁共振成像 (NMRI) 是什麼原理都不知道? JFGI! + +> 核磁共振成像(NMRI)是什麼原理都不知道?JFGI! + +### 數字使用半形字符 + +正確: + +> 這件蛋糕只賣 1000 元。 + +錯誤: + +> 這件蛋糕只賣 1000 元。 + +例外:在設計稿、宣傳海報中如出現極少量數字的情形時,為方便文字對齊,是可以使用全形數字的。 + +### 遇到完整的英文整句、特殊名詞,其內容使用半形標點 + +正確: + +> 賈伯斯那句話是怎麼說的?「Stay hungry, stay foolish.」 + +> 推薦你閱讀《Hackers & Painters: Big Ideas from the Computer Age》,非常的有趣。 + +錯誤: + +> 賈伯斯那句話是怎麼說的?「Stay hungry,stay foolish。」 + +> 推薦你閱讀《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。 + +## 名詞 + +### 專有名詞使用正確的大小寫 + +大小寫相關用法原屬於英文書寫範疇,不屬於本 wiki 討論內容,在這裡只對部分易錯用法進行簡述。 + +正確: + +> 使用 GitHub 登錄 + +> 我們的客戶有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。 + +錯誤: + +> 使用 github 登錄 + +> 使用 GITHUB 登錄 + +> 使用 Github 登錄 + +> 使用 gitHub 登錄 + +> 使用 gイんĤЦ8 登錄 + +> 我們的客戶有 github、foursquare、microsoft corporation、google、facebook, inc.。 + +> 我們的客戶有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。 + +> 我們的客戶有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。 + +> 我們的客戶有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。 + +> 我們的客戶有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。 + +注意:當網頁中需要配合整體視覺風格而出現全部大寫/小寫的情形,HTML 中請使用標準的大小寫規範進行書寫;並通過 `text-transform: uppercase;`/`text-transform: lowercase;` 對表現形式進行定義。 + +### 不要使用不道地的縮寫 + +正確: + +> 我們需要一位熟悉 TypeScript、HTML5,至少理解一種框架(如 React、Next.js)的前端開發者。 + +錯誤: + +> 我們需要一位熟悉 Ts、h5,至少理解一種框架(如 RJS、nextjs)的 FED。 + +## 爭議 + +以下用法略帶有個人色彩,即:無論是否遵循下述規則,從語法的角度來講都是**正確**的。 + +### 超連結之間增加空格 + +用法: + +> 請 [提交一個 issue](#) 並分配给相關同事。 + +> 訪問我們網站的最新動態,請 [點擊這裡](#) 進行訂閱! + +對比用法: + +> 請[提交一個 issue](#) 並分配给相關同事。 + +> 訪問我們網站的最新動態,請[點擊這裡](#)進行訂閱! + +### 簡體中文使用直角引號 + +用法: + +> 「老师,『有条不紊』的『紊』是什么意思?」 + +對比用法: + +> “老师,‘有条不紊’的‘紊’是什么意思?” diff --git a/docs/docs/community/developer.md b/docs/docs/community/developer.md index 3c9c9f45..11a011bb 100644 --- a/docs/docs/community/developer.md +++ b/docs/docs/community/developer.md @@ -4,10 +4,53 @@ sidebar_position: 2 # 核心开发者 - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

马称

陆宽
姓名GitHub ID博客地址角色联系方式
马称agentart小马哥的技术专栏项目发起者machen@apache.org
陆宽shining-stars-lk宽仔的代码之路核心开发者1031900093@qq.com
王杰iwangjie-核心开发者wangchenmo1025@gmail.com
魏虎weihubeatsweihubeats核心开发者weihubeats@163.com
李剑鑫BigXin0109Only丶Big核心开发者1064730540@qq.com
diff --git a/docs/docs/community/powered-by.md b/docs/docs/community/powered-by.md index fc94c050..301f9e89 100644 --- a/docs/docs/community/powered-by.md +++ b/docs/docs/community/powered-by.md @@ -12,7 +12,7 @@ sidebar_position: 3 ## 谁在使用 Hippo4J -共计 14+ 家公司生产接入 Hippo4J。按照公司登记时间排序。 +共计 18+ 家公司生产接入 Hippo4J。按照公司登记时间排序。 - [身边云](https://serviceshare.com) - [Medbanks](https://www.medbanks.cn) @@ -27,4 +27,8 @@ sidebar_position: 3 - [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 +- [众合云科(51社保)](https://home.101hr.com/) +- [好货云店](https://pc.haohuoyundian.com/) +- [斗象科技](https://www.tophant.com/) +- [深圳航天信息有限公司](http://sz.aisino.com/) +- [新东方教育科技集团](https://www.xdf.cn/) diff --git a/docs/docs/community/sponsor.md b/docs/docs/community/sponsor.md index c1f19fb3..5a7e851d 100644 --- a/docs/docs/community/sponsor.md +++ b/docs/docs/community/sponsor.md @@ -2,27 +2,18 @@ sidebar_position: 4 --- - # 支持开源 -如果您正在使用这个项目并感觉良好,或者是想支持我继续开发,您可以通过如下 `任意` 方式支持我: - -1. Github star 并分享动态线程池框架 [hippo4j](https://github.com/longtai-cn/hippo4j) :rocket: -2. 通过以下二维码 一次性捐款。 我多半会买一杯 ~~咖啡~~ 茶。:tea: +如果您正在使用这个项目并感觉良好,或者是想支持我继续开发。通过以下二维码 一次性捐款,我多半会买一杯咖啡或茶~ -谢谢! :heart: +> [GitHub](https://github.com/opengoofy/hippo4j) 或 [Gitee](https://gitee.com/agentart/hippo4j) Star 才是最大动力~ -| 微信赞赏 | 支付宝 | -| :---: | :---: | -| ![](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) | - -### 致谢 +![](https://images-machen.oss-cn-beijing.aliyuncs.com/IMG_6719_2.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 | 代码设计很优雅的一款框架,继续加油! | +| | ID | 赞赏金额 | 时间 | 备注 | +|-----| ------- | ---- | ---------- | ------------------------------------ | +| 1 | 六月飞雪 | 30.00 | 2021-12-30 | 代码设计很优雅的一款框架,继续加油! | +| 2 | 孙大圣 | 26.6 | 2022-03-23 | 学习一下😁😁 | +| 3 | Easy 点 | 66.00 | 2022-04-09 | 好货好技术当加赏 | diff --git a/docs/docs/user_docs/dev_manual/rejected-policy-custom.md b/docs/docs/user_docs/dev_manual/rejected-policy-custom.md index 041adef8..970511f5 100644 --- a/docs/docs/user_docs/dev_manual/rejected-policy-custom.md +++ b/docs/docs/user_docs/dev_manual/rejected-policy-custom.md @@ -34,9 +34,9 @@ public class ErrorLogRejectedExecutionHandler implements CustomRejectedExecution } ``` -创建 `src/main/resources/META-INF/services` 目录,创建 SPI 自定义拒绝策略文件 `cn.hippo4j.core.spi.CustomRejectedExecutionHandler`。 +创建 `src/main/resources/META-INF/services` 目录,创建 SPI 自定义拒绝策略文件 `cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler`。 -`cn.hippo4j.core.spi.CustomRejectedExecutionHandler` 文件内仅放一行自定义拒绝策略全限定名即可,示例: +`cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler` 文件内仅放一行自定义拒绝策略全限定名即可,示例: ```text cn.hippo4j.example.core.handler.ErrorLogRejectedExecutionHandler @@ -44,7 +44,7 @@ cn.hippo4j.example.core.handler.ErrorLogRejectedExecutionHandler 创建、修改线程池页面选择 `CustomRejectedPolicy(自定义 SPI 策略)`。 -![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220801213735751.png) +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220813173907814.png) 拒绝策略触发时,完成上述代码效果,仅打印异常日志提示。 diff --git a/docs/docs/user_docs/getting-started/difference.md b/docs/docs/user_docs/getting-started/difference.md index f3707fb8..8f81e25d 100644 --- a/docs/docs/user_docs/getting-started/difference.md +++ b/docs/docs/user_docs/getting-started/difference.md @@ -8,32 +8,30 @@ sidebar_position: 0 ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220319154626314.png) -### hippo4j-core +### hippo4j-config **轻量级动态线程池管理**,依赖 Apollo、Nacos、Zookeeper 等三方配置中心(任选其一)完成线程池参数动态变更,支持运行时报警、监控等功能。 > 监控功能配置详见:[线程池监控](/docs/user_docs/getting-started/hippo4j-core-monitor) -![](./img/grafana-monitor.jpg) +![](https://images-machen.oss-cn-beijing.aliyuncs.com/20220814_hippo4j_monitor.jpg) ### hippo4j-server **部署 hippo4j-server 服务**,通过可视化 Web 界面完成线程池的创建、变更以及查看,不依赖三方中间件。 -相比较 hippo4j-core,功能会更强大,但同时也引入了一定的复杂性。需要部署一个 Java 服务,以及依赖 MySQL 数据库。 +相比较 hippo4j-config,功能会更强大,但同时也引入了一定的复杂性。需要部署一个 Java 服务,以及依赖 MySQL 数据库。 ![](https://images-machen.oss-cn-beijing.aliyuncs.com/1644032018254-min.gif) - - ### 使用总结 -| | hippo4j-core | hippo4j-server | +| | hippo4j-config | hippo4j-server | | ---- | ---------------------------------------------------- | ------------------------------------------------------------ | | 依赖 | Nacos、Apollo、Zookeeper 配置中心(任选其一) | 部署 Hippo-4J Server(内部无依赖中间件) | | 使用 | 配置中心补充线程池相关参数 | Hippo-4J Server Web 控制台添加线程池记录 | | 功能 | 包含基础功能:参数动态化、运行时监控、报警等 | 基础功能之外扩展控制台界面、线程池堆栈查看、线程池运行信息实时查看、历史运行信息查看、线程池配置集群个性化等 | -使用建议:根据公司情况选择,如果基本功能可以满足使用,选择 hippo4j-core 使用即可;如果希望更多的功能,可以选择 hippo4j-server。 +使用建议:根据公司情况选择,如果基本功能可以满足使用,选择 hippo4j-config 使用即可;如果希望更多的功能,可以选择 hippo4j-server。 **两者在进行替换的时候,无需修改业务代码**。 diff --git a/docs/docs/user_docs/getting-started/hippo4j-adapter.md b/docs/docs/user_docs/getting-started/hippo4j-adapter.md index 3608bd9b..807cc8cc 100644 --- a/docs/docs/user_docs/getting-started/hippo4j-adapter.md +++ b/docs/docs/user_docs/getting-started/hippo4j-adapter.md @@ -10,7 +10,9 @@ Hippo4J 目前已支持的三方框架线程池列表: - Hystrix - RabbitMQ - RocketMQ +- AlibabaDubbo - RocketMQSpringCloudStream +- RabbitMQSpringCloudStream 引入 Hippo4J Server 或 Core 的 Maven Jar 坐标后,还需要引入对应的框架适配 Jar: @@ -19,6 +21,8 @@ Hippo4J 目前已支持的三方框架线程池列表: cn.hippo4j hippo4j-spring-boot-starter-adapter-dubbo + + hippo4j-spring-boot-starter-adapter-alibaba-dubbo hippo4j-spring-boot-starter-adapter-hystrix @@ -27,7 +31,9 @@ Hippo4J 目前已支持的三方框架线程池列表: hippo4j-spring-boot-starter-adapter-rocketmq hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq - 1.3.1 + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq + 1.4.0-RC ``` @@ -37,7 +43,7 @@ Hippo4J 目前已支持的三方框架线程池列表: cn.hippo4j hippo4j-spring-boot-starter-adapter-all - 1.3.1 + 1.4.0-RC ``` @@ -47,9 +53,9 @@ Hippo4J Server 仅需要引入上述 Jar 包,即可在 Hippo4J Server 的控 ![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220531194810047.png) -## Hippo4J Core +## Hippo4J Config -Hippo4J Core 除了依赖上述适配 Jar 包外,还需要在配置中心添加以下配置项。 +Hippo4J Config 除了依赖上述适配 Jar 包外,还需要在配置中心添加以下配置项。 ```yaml spring: diff --git a/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md b/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md index 26c10f1c..29e67c56 100644 --- a/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md +++ b/docs/docs/user_docs/getting-started/hippo4j-core-monitor.md @@ -2,9 +2,9 @@ sidebar_position: 2 --- -# hippo4j core 线程池监控 +# hippo4j config 线程池监控 -已完成 hippo4j-core 的 [接入工作](/docs/user_docs/getting-started/hippo4j-core-start) 。 +已完成 hippo4j-config 的 [接入工作](/docs/user_docs/getting-started/hippo4j-core-start) 。 ## 安装 Grafana + Prometheus @@ -85,4 +85,4 @@ Grafana DashBoard 配置。 即可使用 Hippo4j 线程池监控大屏。 -![](./img/grafana-monitor.jpg) +![](https://images-machen.oss-cn-beijing.aliyuncs.com/20220814_hippo4j_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 index aeba5ced..80da9acb 100644 --- a/docs/docs/user_docs/getting-started/hippo4j-core-start.md +++ b/docs/docs/user_docs/getting-started/hippo4j-core-start.md @@ -2,7 +2,7 @@ sidebar_position: 1 --- -# hippo4j core 接入 +# hippo4j config 接入 Nacos、Apollo、Zookeeper 配置中心任选其一。 @@ -11,8 +11,8 @@ Nacos、Apollo、Zookeeper 配置中心任选其一。 ```xml cn.hippo4j - hippo4j-core-spring-boot-starter - 1.3.1 + hippo4j-config-spring-boot-starter + 1.4.0-RC ``` @@ -42,54 +42,79 @@ spring: 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 任选其一 + # 是否开启动态线程池 + enable: true + # 是否打印 banner + banner: true + # 是否开启线程池数据采集,对接 Prometheus、ES、Log 等 + collect: true + # 检查线程池状态,是否达到报警条件,单位毫秒 + check-state-interval: 3000 + # 通知报警平台,请替换为自己创建的群机器人 + notify-platforms: + - platform: 'WECHAT' + token: xxx + - platform: 'DING' + token: xxx + secret: xxx # 加签专属 + - platform: 'LARK' + token: xxx + # nacos apollo、zookeeper 任选其一 + nacos: data-id: xxx group: xxx apollo: namespace: xxxx - config-file-type: yml # 配置中心文件格式 - # tomcat: - # jetty: - undertow: # 三种容器线程池,任选其一 + # 配置中心文件格式 + config-file-type: yml + # tomcat、undertow、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 - # 线程池配置 + # 全局通知配置-是否报警 + alarm: true + # 活跃度报警阈值;假设线程池最大线程数 10,当线程数达到 8 发起报警 + active-alarm: 80 + # 容量报警阈值;假设阻塞队列容量 100,当容量达到 80 发起报警 + capacity-alarm: 80 + # 报警间隔,同一线程池下同一报警纬度,在 interval 时间内只会报警一次,单位秒 + alarm-interval: 8 + # 企业微信填写用户 ID(填写其它将无法达到 @ 效果)、钉钉填手机号、飞书填 ou_ 开头唯一 ID + receives: xxx + # 动态线程池列表 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-consume' + # 核心线程数 + core-pool-size: 1 + # 最大线程数 + maximum-pool-size: 1 + # 阻塞队列名称,参考 BlockingQueueTypeEnum,支持 SPI + blocking-queue: 'LinkedBlockingQueue' + # 阻塞队列大小 + queue-capacity: 1 + # 执行超时时间,超过此时间发起报警,单位毫秒 + execute-time-out: 1000 + # 拒绝策略名称,参考 RejectedPolicyTypeEnum,支持 SPI + rejected-handler: 'AbortPolicy' + # 线程存活时间,单位秒 + keep-alive-time: 1024 + # 是否允许核心线程超时 + allow-core-thread-time-out: true + # 线程工厂名称前缀 + thread-name-prefix: 'message-consume' + # 是否报警 + alarm: true + # 活跃度报警阈值;假设线程池最大线程数 10,当线程数达到 8 发起报警 + active-alarm: 80 + # 容量报警阈值;假设阻塞队列容量 100,当容量达到 80 发起报警 + capacity-alarm: 80 + # 通知配置,线程池中通知配置如果存在,则会覆盖全局通知配置 + notify: + # 报警间隔,同一线程池下同一报警纬度,在 interval 时间内只会报警一次,单位分钟 + interval: 8 + # 企业微信填写用户 ID(填写其它将无法达到 @ 效果)、钉钉填手机号、飞书填 ou_ 开头唯一 ID + receives: xxx - thread-pool-id: 'message-produce' core-pool-size: 1 maximum-pool-size: 1 @@ -100,12 +125,12 @@ spring: keep-alive-time: 1024 allow-core-thread-time-out: true thread-name-prefix: 'message-consume' + alarm: true + active-alarm: 80 + capacity-alarm: 80 notify: - is-alarm: true - active-alarm: 80 - capacity-alarm: 80 interval: 8 - receive: xxx + receives: xxx ``` ## ThreadPoolExecutor 适配 diff --git a/docs/docs/user_docs/getting-started/hippo4j-server-start.md b/docs/docs/user_docs/getting-started/hippo4j-server-start.md index 859776b1..c7317a6b 100644 --- a/docs/docs/user_docs/getting-started/hippo4j-server-start.md +++ b/docs/docs/user_docs/getting-started/hippo4j-server-start.md @@ -22,7 +22,7 @@ SpringBoot Pom 引入 Hippo4j Starter Jar。 cn.hippo4j hippo4j-spring-boot-starter - 1.3.1 + 1.4.0-RC ``` diff --git a/docs/docs/user_docs/intro.md b/docs/docs/user_docs/intro.md index 51652b6e..d86f3009 100644 --- a/docs/docs/user_docs/intro.md +++ b/docs/docs/user_docs/intro.md @@ -42,7 +42,7 @@ Hippo-4J 通过对 JDK 线程池增强,以及扩展三方框架底层线程池 感谢所有为 Hippo-4J 做出贡献的开发者! - + ## 我们的荣誉 @@ -56,8 +56,13 @@ Hippo-4J 获得了一些宝贵的荣誉,这属于每一位对 Hippo-4J 做出 ## 友情链接 -- [HertzBeat](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需Agent, 强大自定义监控能力。 -- [toBeBetterJavaer](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程等核心知识点。 +- [[ Sa-Token ]](https://github.com/dromara/sa-token):一个轻量级 java 权限认证框架,让鉴权变得简单、优雅! + +- [[ HertzBeat ]](https://github.com/dromara/hertzbeat):易用友好的云监控系统, 无需 Agent, 强大自定义监控能力。 + +- [[ JavaGuide ]](https://github.com/Snailclimb/JavaGuide):一份涵盖大部分 Java 程序员所需要掌握的核心知识。 + +- [[ toBeBetterJavaer ]](https://github.com/itwanger/toBeBetterJavaer):一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程等核心知识点。 ## 鸣谢 diff --git a/docs/docs/user_docs/ops/hippo4j-server-deploy.md b/docs/docs/user_docs/ops/hippo4j-server-deploy.md index a3b16dc9..d605704a 100644 --- a/docs/docs/user_docs/ops/hippo4j-server-deploy.md +++ b/docs/docs/user_docs/ops/hippo4j-server-deploy.md @@ -4,8 +4,7 @@ sidebar_position: 1 # hippo4j server 部署 - -[RELEASE](https://github.com/longtai-cn/hippo4j/releases) 页面下载对应版本并进行解压。 +[RELEASE](https://github.com/opengoofy/hippo4j/releases) 页面下载对应版本并进行解压。 ## 初始化 @@ -15,12 +14,14 @@ sidebar_position: 1 /conf/application.properties ``` -数据库执行 SQL 脚本。 +如果是新运行 Hippo-4J,数据库执行下述 SQL 脚本即可。 ```txt /conf/hippo4j_manager.sql ``` +如果是对已运行 Hippo-4J 升级,请查看 `/conf/sql-upgrade` 目录下,是否有目标版本对应的升级脚本。 + ## 直接运行 Mac Linux 启动执行。 diff --git a/docs/docs/user_docs/ops/server-docker.md b/docs/docs/user_docs/ops/server-docker.md new file mode 100644 index 00000000..6eca1e89 --- /dev/null +++ b/docs/docs/user_docs/ops/server-docker.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 2 +--- + +# docker hippo4j server 构建 + +可以通过以下命令快速构建 Hippo4J Server: + +方式一: + +```shell +# 进入到 hippo4j-server 工程路径下 +mvn clean package +# 默认打包是打包的 tag 是 latest +docker build -t hippo4j-server ../hippo4j-server +``` + +方式二: +通过 `maven docker plugin` + +```shell +# 进入到 hippo4j-server 工程路径下 +mvn clean package -DskipTests docker:build +``` + +## Docker 镜像方式搭建 Hippo4J Server + +- 下载镜像 + +```shell +# Docker地址:https://hub.docker.com/r/xxxx/hippo4j-server/(建议指定版本号) +docker pull hippo4j-server +``` + +- 创建容器并运行 + +```shell +docker run -p 6691:6691 --name hippo4j-server -d hippo4j-server:{指定版本} + +/** +* 暂时只暴露以下参数 +* MYSQL_HOST、MYSQL_PORT、MYSQL_DB、MYSQL_USERNAME、MYSQL_PASSWORD +*/ +docker run -p 6691:6691 --name hippo4j-server \ +-e MYSQL_HOST=127.0.0.1 \ +-e MYSQL_PORT=3306 \ +-e MYSQL_DB=hippo4j_manager \ +-e MYSQL_USERNAME=root \ +-e MYSQL_PASSWORD=mysql \ +-d hippo4j-server +``` diff --git a/docs/docs/user_docs/other/issue.md b/docs/docs/user_docs/other/issue.md index 5aad7bbf..554a1bab 100644 --- a/docs/docs/user_docs/other/issue.md +++ b/docs/docs/user_docs/other/issue.md @@ -4,8 +4,8 @@ sidebar_position: 2 # 常见问题 - - 租户和项目在 Hippo4J 中是什么意思 +- 控制台线程池管理和线程池实例的区别 - 示例项目为什么会有跨域请求 - 更新代码后运行时服务端SQL报错 - okHttp3 call.timeout() 方法不存在 @@ -22,6 +22,13 @@ Hippo4J 按照租户、项目、线程池的维度划分。 举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目。 +## 控制台线程池管理和线程池实例的区别 + +在线程池管理中修改线程池参数,客户端并不能实时感知到并变更参数,需要重启客户端。而线程池实例中去对具体的实例修改参数时,客户端无需重启,可以实时感知到参数变化。如果二者针对同一线程 +池的参数配置不同,则在重启客户端时,客户端会去拉去线程池管理中的参数配置。 + +二者对应的定位:线程池管理中的配置是常态化配置。而线程池实例里的配置变更像是一种临时修改,比如突发的流量激增等场景,并不具备普适性。 + ## 示例项目为什么会有跨域请求 ~~正常大家在部署时,服务端项目和客户端都在同一网络下,进行内网通信,是没有问题的。~~ @@ -80,15 +87,10 @@ Hippo4J 发布时可能会涉及到两端发布,分别是 Server 和 Starter 重启客户端项目,会重新拉取最新报警推送配置,问题解决。 ## 设置线程池参数优先级问题 -- 当使用`@DynamicThreadPool`进行修饰的方法中和在管理界面设置中同时存在的话,则管理界面设置的优先级最高; -- 如果连接service端失败的话,使用`@DynamicThreadPool`进行修饰设置的优先级最高。 -## 线程池实例中修改队列容量参数问题 - -在线程池管理中添加时,只有当选择队列类型为`ResizableCapacityLinkedBlockingQueue`时,后续再进行修改容量大小时才会实时的刷新修改成功。 +- 当使用 `@DynamicThreadPool` 进行修饰的方法中和在管理界面设置中同时存在的话,则管理界面设置的优先级最高; +- 如果连接 server 端失败的话,使用 `@DynamicThreadPool` 进行修饰设置的优先级最高。 -## 动态线程池中线程池管理和线程池实例的区别 +## 线程池实例中修改队列容量参数问题 -在线程池管理中修改线程池参数,客户端并不能实时感知到并变更参数,需要重启客户端。而线程池实例中去对具体的实例修改参数时,客户端无需重启,可以实时感知到参数变化。如果二者针对同一线程 -池的参数配置不同,则在重启客户端时,客户端会去拉去线程池管理中的参数配置。 -二者对应的定位:线程池管理中的配置是常态化配置。而线程池实例里的配置变更像是一种临时修改,比如突发的流量激增等场景,并不具备普适性。 +在线程池管理中添加时,只有当选择队列类型为 `ResizableCapacityLinkedBlockingQueue` 时,后续再进行修改容量大小时才会实时的刷新修改成功。 diff --git a/docs/docs/user_docs/user_guide/framework.md b/docs/docs/user_docs/user_guide/framework.md index 6403dec0..a6b245f4 100644 --- a/docs/docs/user_docs/user_guide/framework.md +++ b/docs/docs/user_docs/user_guide/framework.md @@ -38,15 +38,6 @@ Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar ![](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 内置了很多需要通知的事件,比如:线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等。 diff --git a/docs/docs/user_docs/user_guide/quick-start.md b/docs/docs/user_docs/user_guide/quick-start.md index 487f3dd4..01fabf3c 100644 --- a/docs/docs/user_docs/user_guide/quick-start.md +++ b/docs/docs/user_docs/user_guide/quick-start.md @@ -5,7 +5,8 @@ sidebar_position: 3 # 快速开始 :::tip -Hippo4J 支持两种运行模式,依赖配置中心(Hippo4J-Core)或 Hippo4J Server,下文描述接入 Hippo4J Server,[Hippo4J-Core 接入参考此处](/docs/user_docs/getting-started/hippo4j-core-start.md) 。 +Hippo4J 支持两种运行模式,依赖配置中心(Hippo4J-Config)或 Hippo4J Server,下文描述接入 Hippo4J +Server,[Hippo4J-Config 接入参考此处](/docs/user_docs/getting-started/hippo4j-core-start.md) 。 ::: ## 如何运行 Demo @@ -14,49 +15,27 @@ Clone Hippo4J [源代码](https://github.com/longtai-cn/hippo4j),导入初始 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 控制台日志输出,日志输出包括不限于此信息即为成功。 +3. 启动 [hippo4J-spring-boot-starter-example](https://github.com/opengoofy/hippo4j/tree/develop/hippo4j-example/hippo4j-spring-boot-starter-example) 模块下 Hippo4JServerExampleApplication 应用类。 -```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`。 +通过 Server 控制台访问,路径:`http://localhost:6691/index.html#/hippo4j/dynamic/thread-pool/instance`。 默认用户名密码:admin / 123456 -::: +![](https://images-machen.oss-cn-beijing.aliyuncs.com/image-20220813173811668.png) -另外,当 Client 集群部署时,可以选择修改所有实例或某一实例。 +修改相关参数, 观察 Hippo4j-Example 控制台日志输出,日志输出包括不限于此信息即为成功。 -修改请求路径:`http://localhost:6691/hippo4j/v1/cs/configs?identify=xxx`,Body 体同上。 +```tex +2022-08-13 21:26:25.814 INFO 38972 --- [change.config-5] c.h.s.s.c.ServerThreadPoolDynamicRefresh : [message-consume] Dynamic thread pool change parameter. + corePoolSize: [5 => 5] + maximumPoolSize: [6 => 7] + capacity: [10 => 10] + keepAliveTime: [3 => 3] + executeTimeOut: [0 => 0] + rejectedType: [CustomErrorLogRejectedExecutionHandler => CustomErrorLogRejectedExecutionHandler] + allowCoreThreadTimeOut: [false => false] +``` -`identify`:代表客户端唯一标识,参数不传或为空,会修改该线程池 Client 集群下所有线程池实例参数。 +另外,当 Client 集群部署时,可以修改某一个实例,或选择 `全部修改` 按钮,修改所有实例线程池信息。 线程池参数动态变更通知,或线程池运行时报警,详情参考 [通知报警](/docs/user_docs/user_guide/alarm.md)。 - diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 4294cffc..50df8518 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -6,7 +6,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'HIPPO-4J 文档', + title: 'HIPPO-4J', tagline: '动态可观测线程池框架,为业务系统提高线上运行保障能力', url: 'https://hippo4j.cn', baseUrl: '/', @@ -64,7 +64,7 @@ const config = { // content: `👉 《小马哥的代码实战课》官方知识星球来啦!!!`, }, navbar: { - title: '4J', + title: 'HIPPO-4J', logo: { alt: 'HIPPO-4J 动态可观测线程池框架', src: 'img/web.png', @@ -84,27 +84,19 @@ const config = { 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'},*/ + /*{to: '/blog', label: '博客', position: 'left'},*/ { href: 'http://console.hippo4j.cn/index.html', label: '控制台样例', - position: 'right', + position: 'left', + }, + { + href: 'https://xiaomage.info/knowledge-planet', + label: '🥇代码实战课', + position: 'left', }, + {type: 'localeDropdown', position: 'right'}, + /*{ href: 'https://gitee.com/mabaiwancn/hippo4j', label: 'Gitee', diff --git a/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/pom.xml b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/pom.xml new file mode 100644 index 00000000..c85db4a9 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-alibaba-dubbo + + + 2.6.12 + + + + + cn.hippo4j + hippo4j-adapter-base + + + + com.alibaba + dubbo + ${alibaba-dubbo.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-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java new file mode 100644 index 00000000..216fab25 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/adapter/alibaba/dubbo/AlibabaDubboThreadPoolAdapter.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS 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.alibaba.dubbo; + +import cn.hippo4j.adapter.base.ThreadPoolAdapter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterParameter; +import cn.hippo4j.adapter.base.ThreadPoolAdapterState; +import com.alibaba.dubbo.common.extension.ExtensionLoader; +import com.alibaba.dubbo.common.store.DataStore; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +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.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * Alibaba Dubbo thread-pool adapter. + */ +@Slf4j +public class AlibabaDubboThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private final Map DUBBO_PROTOCOL_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return "AlibabaDubbo"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState threadPoolAdapterState = new ThreadPoolAdapterState(); + ThreadPoolExecutor executor = DUBBO_PROTOCOL_EXECUTOR.get(identify); + if (executor == null) { + log.warn("[{}] Alibaba 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("[{}] Alibaba 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("[{}] Alibaba 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) { + String poolKey = ExecutorService.class.getName(); + try { + DataStore dataStore = ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension(); + Map executors = dataStore.get(poolKey); + executors.forEach((key, value) -> DUBBO_PROTOCOL_EXECUTOR.put(key, (ThreadPoolExecutor) value)); + } catch (Exception ex) { + log.error("Failed to get Alibaba Dubbo protocol thread pool", ex); + } + } +} 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 index a8d8e97b..ba7521a8 100644 --- 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 @@ -48,12 +48,7 @@ public class RabbitMQThreadPoolAdapter implements ThreadPoolAdapter, Application 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 abstractConnectionFactoryMap; private final Map RABBITMQ_THREAD_POOL_TASK_EXECUTOR = Maps.newHashMap(); @@ -103,15 +98,18 @@ public class RabbitMQThreadPoolAdapter implements ThreadPoolAdapter, Application @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"); + abstractConnectionFactoryMap.forEach((beanName, abstractConnectionFactor) -> { + ExecutorService executor = (ExecutorService) ReflectUtil.getFieldValue(abstractConnectionFactor, FiledName); + if (Objects.nonNull(executor)) { + if (executor instanceof ThreadPoolExecutor) { + ThreadPoolExecutor threadPoolTaskExecutor = (ThreadPoolExecutor) executor; + RABBITMQ_THREAD_POOL_TASK_EXECUTOR.put(beanName, threadPoolTaskExecutor); + log.info("Rabbitmq executor name {}", beanName); + } else { + log.warn("Custom thread pools only support ThreadPoolExecutor"); + } } - } + + }); } } diff --git a/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/pom.xml b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/pom.xml new file mode 100644 index 00000000..d700d8a6 --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-adapter + ${revision} + + hippo4j-adapter-spring-cloud-stream-rabbitmq + + + + cn.hippo4j + hippo4j-adapter-base + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + ${spring-cloud-starter-stream-rabbitmq.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-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.java new file mode 100644 index 00000000..ca71513b --- /dev/null +++ b/hippo4j-adapter/hippo4j-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQThreadPoolAdapter.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.springcloud.stream.rabbitmq; + +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.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; +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 org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMITER; + +/** + * Spring cloud stream rabbimq thread-pool adapter. + */ +@Slf4j +public class SpringCloudStreamRabbitMQThreadPoolAdapter implements ThreadPoolAdapter, ApplicationListener { + + private final Map ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR = Maps.newHashMap(); + + @Override + public String mark() { + return "RabbitMQSpringCloudStream"; + } + + @Override + public ThreadPoolAdapterState getThreadPoolState(String identify) { + ThreadPoolAdapterState result = new ThreadPoolAdapterState(); + AbstractMessageListenerContainer messageListenerContainer = ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.get(identify); + if (messageListenerContainer != null) { + result.setThreadPoolKey(identify); + if (messageListenerContainer instanceof SimpleMessageListenerContainer) { + int concurrentConsumers = (int) ReflectUtil.getFieldValue(messageListenerContainer, "concurrentConsumers"); + result.setCoreSize(concurrentConsumers); + Object maxConcurrentConsumers = ReflectUtil.getFieldValue(messageListenerContainer, "maxConcurrentConsumers"); + if (maxConcurrentConsumers != null) { + result.setMaximumSize((Integer) maxConcurrentConsumers); + } else { + result.setMaximumSize(concurrentConsumers); + } + } else if (messageListenerContainer instanceof DirectMessageListenerContainer) { + int consumersPerQueue = (int) ReflectUtil.getFieldValue(messageListenerContainer, "consumersPerQueue"); + result.setCoreSize(consumersPerQueue); + result.setMaximumSize(consumersPerQueue); + } + return result; + } + log.warn("[{}] RabbitMQ 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(); + AbstractMessageListenerContainer messageListenerContainer = ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.get(threadPoolKey); + if (messageListenerContainer != null) { + synchronized (ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR) { + Integer corePoolSize = threadPoolAdapterParameter.getCorePoolSize(); + Integer maximumPoolSize = threadPoolAdapterParameter.getMaximumPoolSize(); + if (messageListenerContainer instanceof SimpleMessageListenerContainer) { + int originalCoreSize = (int) ReflectUtil.getFieldValue(messageListenerContainer, "concurrentConsumers"); + Object maxConcurrentConsumers = ReflectUtil.getFieldValue(messageListenerContainer, "maxConcurrentConsumers"); + int originalMaximumPoolSize; + if (maxConcurrentConsumers != null) { + originalMaximumPoolSize = (Integer) maxConcurrentConsumers; + } else { + originalMaximumPoolSize = originalCoreSize; + } + SimpleMessageListenerContainer simpleMessageListenerContainer = (SimpleMessageListenerContainer) messageListenerContainer; + if (originalCoreSize > maximumPoolSize) { + simpleMessageListenerContainer.setConcurrentConsumers(corePoolSize); + simpleMessageListenerContainer.setMaxConcurrentConsumers(maximumPoolSize); + } else { + simpleMessageListenerContainer.setMaxConcurrentConsumers(maximumPoolSize); + simpleMessageListenerContainer.setConcurrentConsumers(corePoolSize); + } + log.info("[{}] RabbitMQ consumption thread pool parameter change. coreSize: {}, maximumSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, corePoolSize), + String.format(CHANGE_DELIMITER, originalMaximumPoolSize, maximumPoolSize)); + } else if (messageListenerContainer instanceof DirectMessageListenerContainer) { + int originalCoreSize = (int) ReflectUtil.getFieldValue(messageListenerContainer, "consumersPerQueue"); + DirectMessageListenerContainer directMessageListenerContainer = (DirectMessageListenerContainer) messageListenerContainer; + directMessageListenerContainer.setConsumersPerQueue(maximumPoolSize); + log.info("[{}] RabbitMQ consumption thread pool parameter change. coreSize: {}", + threadPoolKey, + String.format(CHANGE_DELIMITER, originalCoreSize, corePoolSize)); + } else { + log.warn("[{}] RabbitMQ consuming thread pool not support. messageListenerContainer: {}", threadPoolKey, messageListenerContainer.getClass()); + return false; + } + } + return true; + } + log.warn("[{}] RabbitMQ 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."); + return; + } + try { + for (Binding each : inputBindings) { + String bindingName = each.getBindingName(); + DefaultBinding defaultBinding = (DefaultBinding) each; + Object lifecycle = ReflectUtil.getFieldValue(defaultBinding, "lifecycle"); + if (lifecycle instanceof AmqpInboundChannelAdapter) { + AbstractMessageListenerContainer rabbitMQListenerContainer = (AbstractMessageListenerContainer) ReflectUtil.getFieldValue(lifecycle, "messageListenerContainer"); + ROCKET_MQ_SPRING_CLOUD_STREAM_CONSUME_EXECUTOR.put(bindingName, rabbitMQListenerContainer); + } + } + } catch (Exception ex) { + log.error("Failed to get input-bindings thread pool.", 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 index bfdc5b7d..90ba9b7f 100644 --- 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 @@ -27,7 +27,7 @@ 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.embedded.undertow.UndertowServletWebServer; import org.springframework.boot.web.server.WebServer; import org.springframework.util.ReflectionUtils; import org.xnio.Options; @@ -50,11 +50,12 @@ public class UndertowWebThreadPoolHandler extends AbstractWebThreadPoolService { @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); + // Springboot 2-3 version, can directly through reflection to obtain the undertow property + UndertowServletWebServer undertowServletWebServer = (UndertowServletWebServer) webServer; + Field undertowField = ReflectionUtils.findField(UndertowServletWebServer.class, UNDERTOW_NAME); ReflectionUtils.makeAccessible(undertowField); - Undertow undertow = (Undertow) ReflectionUtils.getField(undertowField, undertowWebServer); + Undertow undertow = (Undertow) ReflectionUtils.getField(undertowField, undertowServletWebServer); return Objects.isNull(undertow) ? null : undertow.getWorker(); } diff --git a/hippo4j-adapter/pom.xml b/hippo4j-adapter/pom.xml index ce2bd837..d1c0624a 100644 --- a/hippo4j-adapter/pom.xml +++ b/hippo4j-adapter/pom.xml @@ -13,12 +13,14 @@ hippo4j-adapter-base hippo4j-adapter-dubbo + hippo4j-adapter-alibaba-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-spring-cloud-stream-rabbitmq hippo4j-adapter-web 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 61c202e9..2bfc097a 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 @@ -102,7 +102,7 @@ public class GlobalSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { - String[] ignores = Stream.of("/hippo4j/v1/cs/auth/users/apply/token/**", "/hippo4j/v1/cs/configs/**").toArray(String[]::new); + String[] ignores = Stream.of("/hippo4j/v1/cs/auth/users/apply/token/**").toArray(String[]::new); web.ignoring().antMatchers(ignores); } } diff --git a/hippo4j-common/pom.xml b/hippo4j-common/pom.xml index 70cca0a9..7b6c6fec 100644 --- a/hippo4j-common/pom.xml +++ b/hippo4j-common/pom.xml @@ -14,7 +14,6 @@ 5.2.15.RELEASE 5.2.21.RELEASE 5.2.22.RELEASE - 2.12.6.1 @@ -45,7 +44,6 @@ com.fasterxml.jackson.core jackson-databind - ${jackson-databind.version} @@ -72,6 +70,12 @@ cn.hutool hutool-all + + + org.springframework.boot + spring-boot-starter-test + test + 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 index eb72bfb9..c5f3213f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/api/JsonFacade.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/api/JsonFacade.java @@ -17,6 +17,8 @@ package cn.hippo4j.common.api; +import com.fasterxml.jackson.core.type.TypeReference; + import java.util.List; /** @@ -42,6 +44,16 @@ public interface JsonFacade { */ T parseObject(String text, Class clazz); + /** + * Parse object. + * + * @param text + * @param valueTypeRef + * @param + * @return + */ + T parseObject(String text, TypeReference valueTypeRef); + /** * Parse array. * 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 index 959d4af1..1a19fdc3 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/constant/ChangeThreadPoolConstants.java @@ -22,15 +22,20 @@ package cn.hippo4j.common.constant; */ public class ChangeThreadPoolConstants { - public static final String CHANGE_THREAD_POOL_TEXT = "Dynamic thread pool change parameter: [{}]" + + /** + * Dynamic thread pool parameter change text + */ + 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: [{}]"; + /** + * Dynamic thread pool parameter change separator + */ public static final String CHANGE_DELIMITER = "%s => %s"; } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java similarity index 91% rename from hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java index f605d6ea..a2c29693 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/QueueTypeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/BlockingQueueTypeEnum.java @@ -15,10 +15,10 @@ * limitations under the License. */ -package cn.hippo4j.core.executor.support; +package cn.hippo4j.common.executor.support; -import cn.hippo4j.core.spi.CustomBlockingQueue; -import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; +import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; +import lombok.Getter; import java.util.Arrays; import java.util.Collection; @@ -28,9 +28,9 @@ import java.util.concurrent.*; import java.util.stream.Stream; /** - * Queue type enum. + * Blocking queue type enum. */ -public enum QueueTypeEnum { +public enum BlockingQueueTypeEnum { /** * {@link java.util.concurrent.ArrayBlockingQueue} @@ -67,11 +67,13 @@ public enum QueueTypeEnum { */ RESIZABLE_LINKED_BLOCKING_QUEUE(9, "ResizableCapacityLinkedBlockingQueue"); - public Integer type; + @Getter + private Integer type; - public String name; + @Getter + private String name; - QueueTypeEnum(int type, String name) { + BlockingQueueTypeEnum(int type, String name) { this.type = type; this.name = name; } @@ -82,7 +84,7 @@ public enum QueueTypeEnum { public static BlockingQueue createBlockingQueue(String blockingQueueName, Integer capacity) { BlockingQueue blockingQueue = null; - QueueTypeEnum queueTypeEnum = Stream.of(QueueTypeEnum.values()) + BlockingQueueTypeEnum queueTypeEnum = Stream.of(BlockingQueueTypeEnum.values()) .filter(each -> Objects.equals(each.name, blockingQueueName)) .findFirst() .orElse(null); @@ -105,7 +107,6 @@ public enum QueueTypeEnum { if (capacity == null || capacity <= 0) { temCapacity = 1024; } - return new LinkedBlockingQueue(temCapacity); })); return blockingQueue; @@ -139,7 +140,7 @@ public enum QueueTypeEnum { } public static String getBlockingQueueNameByType(int type) { - Optional queueTypeEnum = Arrays.stream(QueueTypeEnum.values()) + Optional queueTypeEnum = Arrays.stream(BlockingQueueTypeEnum.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/spi/CustomBlockingQueue.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomBlockingQueue.java similarity index 96% rename from hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomBlockingQueue.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomBlockingQueue.java index 893ee11f..6800b06a 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomBlockingQueue.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomBlockingQueue.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.spi; +package cn.hippo4j.common.executor.support; import java.util.concurrent.BlockingQueue; diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomRejectedExecutionHandler.java similarity index 96% rename from hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomRejectedExecutionHandler.java index 8cdb7f8b..c76fcc7b 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/CustomRejectedExecutionHandler.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/CustomRejectedExecutionHandler.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.spi; +package cn.hippo4j.common.executor.support; import java.util.concurrent.RejectedExecutionHandler; diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java similarity index 84% rename from hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java index ac8e8e43..597751fd 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedTypeEnum.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RejectedPolicyTypeEnum.java @@ -15,10 +15,10 @@ * limitations under the License. */ -package cn.hippo4j.core.executor.support; +package cn.hippo4j.common.executor.support; -import cn.hippo4j.core.spi.CustomRejectedExecutionHandler; -import cn.hippo4j.core.spi.DynamicThreadPoolServiceLoader; +import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; +import lombok.Getter; import java.util.Collection; import java.util.Objects; @@ -28,9 +28,9 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Stream; /** - * Reject policy type Enum. + * Rejected policy type Enum. */ -public enum RejectedTypeEnum { +public enum RejectedPolicyTypeEnum { CALLER_RUNS_POLICY(1, "CallerRunsPolicy", new ThreadPoolExecutor.CallerRunsPolicy()), @@ -40,17 +40,19 @@ public enum RejectedTypeEnum { DISCARD_OLDEST_POLICY(4, "DiscardOldestPolicy", new ThreadPoolExecutor.DiscardOldestPolicy()), - RUNS_OLDEST_TASK_POLICY(5, "RunsOldestTaskPolicy", new RejectedPolicies.RunsOldestTaskPolicy()), + RUNS_OLDEST_TASK_POLICY(5, "RunsOldestTaskPolicy", new RunsOldestTaskPolicy()), - SYNC_PUT_QUEUE_POLICY(6, "SyncPutQueuePolicy", new RejectedPolicies.SyncPutQueuePolicy()); + SYNC_PUT_QUEUE_POLICY(6, "SyncPutQueuePolicy", new SyncPutQueuePolicy()); - public Integer type; + @Getter + private Integer type; - public String name; + @Getter + private String name; public RejectedExecutionHandler rejectedHandler; - RejectedTypeEnum(Integer type, String name, RejectedExecutionHandler rejectedHandler) { + RejectedPolicyTypeEnum(Integer type, String name, RejectedExecutionHandler rejectedHandler) { this.type = type; this.name = name; this.rejectedHandler = rejectedHandler; @@ -61,7 +63,7 @@ public enum RejectedTypeEnum { } public static RejectedExecutionHandler createPolicy(String name) { - RejectedTypeEnum rejectedTypeEnum = Stream.of(RejectedTypeEnum.values()) + RejectedPolicyTypeEnum rejectedTypeEnum = Stream.of(RejectedPolicyTypeEnum.values()) .filter(each -> Objects.equals(each.name, name)) .findFirst() .orElse(null); @@ -78,7 +80,7 @@ public enum RejectedTypeEnum { } public static RejectedExecutionHandler createPolicy(int type) { - Optional rejectedTypeEnum = Stream.of(RejectedTypeEnum.values()) + Optional rejectedTypeEnum = Stream.of(RejectedPolicyTypeEnum.values()) .filter(each -> Objects.equals(type, each.type)) .map(each -> each.rejectedHandler) .findFirst(); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java similarity index 97% rename from hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java index 77fccccb..9e9a8d10 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ResizableCapacityLinkedBlockingQueue.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/ResizableCapacityLinkedBlockingQueue.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.executor.support; +package cn.hippo4j.common.executor.support; import cn.hutool.core.util.ReflectUtil; import lombok.extern.slf4j.Slf4j; diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RunsOldestTaskPolicy.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RunsOldestTaskPolicy.java new file mode 100644 index 00000000..26dac5a6 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/RunsOldestTaskPolicy.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.common.executor.support; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Run the oldest task policy. + */ +public 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); + } + } +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/SyncPutQueuePolicy.java b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/SyncPutQueuePolicy.java new file mode 100644 index 00000000..961b80f6 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/executor/support/SyncPutQueuePolicy.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.executor.support; + +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Synchronous put queue policy. + */ +@Slf4j +public 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-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java index f990b56c..be74b478 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameter.java @@ -23,91 +23,98 @@ package cn.hippo4j.common.model; public interface ThreadPoolParameter { /** - * tenantId + * Get tenant id * * @return */ String getTenantId(); /** - * itemId + * Get item id * * @return */ String getItemId(); /** - * tpId + * Get thread-pool id * * @return */ String getTpId(); /** - * coreSize + * Get core size * * @return */ Integer getCoreSize(); /** - * maxSize + * Get max size * * @return */ Integer getMaxSize(); /** - * queueType + * Get queue type * * @return */ Integer getQueueType(); /** - * capacity + * Get capacity * * @return */ Integer getCapacity(); /** - * keepAliveTime + * Get keep alive time * * @return */ Integer getKeepAliveTime(); /** - * rejectedType + * Get execute time out + * + * @return + */ + Long getExecuteTimeOut(); + + /** + * Get rejected type * * @return */ Integer getRejectedType(); /** - * isAlarm + * Get is alarm * * @return */ Integer getIsAlarm(); /** - * capacityAlarm + * Get capacity alarm * * @return */ Integer getCapacityAlarm(); /** - * livenessAlarm + * Get liveness alarm * * @return */ Integer getLivenessAlarm(); /** - * allowCoreThreadTimeOut + * Get allow core thread timeOut * * @return */ 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 index 8a6a5ef8..48bf529d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameterInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/ThreadPoolParameterInfo.java @@ -17,6 +17,7 @@ package cn.hippo4j.common.model; +import com.fasterxml.jackson.annotation.JsonAlias; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -50,6 +51,7 @@ public class ThreadPoolParameterInfo implements ThreadPoolParameter, Serializabl /** * Thread-pool id */ + @JsonAlias("threadPoolId") private String tpId; /** @@ -94,6 +96,11 @@ public class ThreadPoolParameterInfo implements ThreadPoolParameter, Serializabl */ private Integer keepAliveTime; + /** + * Execute time out + */ + private Long executeTimeOut; + /** * Rejected type */ @@ -112,6 +119,7 @@ public class ThreadPoolParameterInfo implements ThreadPoolParameter, Serializabl /** * Liveness alarm */ + @JsonAlias("activeAlarm") private Integer livenessAlarm; /** 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 index 85d8bd9b..608cb7ca 100644 --- 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 @@ -17,6 +17,9 @@ package cn.hippo4j.common.model.register; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import com.fasterxml.jackson.annotation.JsonAlias; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -53,9 +56,9 @@ public class DynamicThreadPoolRegisterParameter { private Integer maximumPoolSize; /** - * Queue type + * Blocking queue type */ - private Integer queueType; + private BlockingQueueTypeEnum blockingQueueType; /** * Capacity @@ -65,17 +68,17 @@ public class DynamicThreadPoolRegisterParameter { /** * Keep alive time */ - private Integer keepAliveTime; + private Long keepAliveTime; /** - * Rejected type + * Rejected policy type */ - private Integer rejectedType; + private RejectedPolicyTypeEnum rejectedPolicyType; /** * Is alarm */ - private Integer isAlarm; + private Boolean isAlarm; /** * Capacity alarm @@ -83,12 +86,31 @@ public class DynamicThreadPoolRegisterParameter { private Integer capacityAlarm; /** - * Liveness alarm + * Active alarm */ - private Integer livenessAlarm; + @JsonAlias("livenessAlarm") + private Integer activeAlarm; /** * Allow core thread timeout */ - private Integer allowCoreThreadTimeOut; + private Boolean allowCoreThreadTimeOut; + + /** + * Thread name prefix + */ + private String threadNamePrefix; + + /** + * Execute timeout + */ + private Long executeTimeOut; + + public Integer getIsAlarm() { + return this.isAlarm ? 1 : 0; + } + + public Integer getAllowCoreThreadTimeOut() { + return this.allowCoreThreadTimeOut ? 1 : 0; + } } 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 index cdbd455f..a543223e 100644 --- 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 @@ -17,6 +17,8 @@ package cn.hippo4j.common.model.register; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterCoreNotifyParameter; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterServerNotifyParameter; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -31,6 +33,15 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class DynamicThreadPoolRegisterWrapper { + // Hippo4j common ---------------------------------------------------------------------- + + /** + * Dynamic thread-pool register parameter + */ + private DynamicThreadPoolRegisterParameter dynamicThreadPoolRegisterParameter; + + // Hippo4j server ---------------------------------------------------------------------- + /** * Tenant id */ @@ -44,10 +55,22 @@ public class DynamicThreadPoolRegisterWrapper { /** * Update if exists */ - private Boolean updateIfExists = Boolean.TRUE; + private Boolean updateIfExists = Boolean.FALSE; /** - * Dynamic thread-pool register parameter + * Notify update if exists */ - private DynamicThreadPoolRegisterParameter dynamicThreadPoolRegisterParameter; + private Boolean notifyUpdateIfExists = Boolean.FALSE; + + /** + * Dynamic thread-pool server notify parameter + */ + private DynamicThreadPoolRegisterServerNotifyParameter dynamicThreadPoolRegisterServerNotifyParameter; + + // Hippo4j core ---------------------------------------------------------------------- + + /** + * Dynamic thread-pool core notify parameter + */ + private DynamicThreadPoolRegisterCoreNotifyParameter dynamicThreadPoolRegisterCoreNotifyParameter; } diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.java new file mode 100644 index 00000000..fc61c5cd --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterCoreNotifyParameter.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.common.model.register.notify; + +import lombok.*; + +/** + * Dynamic thread-pool register core notify parameter. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolRegisterCoreNotifyParameter { + + /** + * Interval + */ + private Integer interval; + + /** + * Receive + */ + private String receives; +} diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterServerNotifyParameter.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterServerNotifyParameter.java new file mode 100644 index 00000000..d549b2d8 --- /dev/null +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/register/notify/DynamicThreadPoolRegisterServerNotifyParameter.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.notify; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Dynamic thread-pool register server notify parameter. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolRegisterServerNotifyParameter { + + /** + * Platform + */ + private String platform; + + /** + * Access token + */ + private String accessToken; + + /** + * Interval + */ + private Integer interval; + + /** + * Receives + */ + private String receives; +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java similarity index 90% rename from hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java index e0a817bb..529a9896 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/DynamicThreadPoolServiceLoader.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/DynamicThreadPoolServiceLoader.java @@ -15,8 +15,9 @@ * limitations under the License. */ -package cn.hippo4j.core.spi; +package cn.hippo4j.common.spi; +import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -84,9 +85,9 @@ public class DynamicThreadPoolServiceLoader { */ private static Object newServiceInstance(final Class clazz) { try { - return clazz.newInstance(); - } catch (final InstantiationException | IllegalAccessException ex) { - throw new ServiceLoaderInstantiationException(clazz, ex); + return clazz.getDeclaredConstructor().newInstance(); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + throw new ServiceLoaderInstantiationException(clazz, e); } } } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/ServiceLoaderInstantiationException.java similarity index 97% rename from hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java rename to hippo4j-common/src/main/java/cn/hippo4j/common/spi/ServiceLoaderInstantiationException.java index c5806119..496d44dd 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/spi/ServiceLoaderInstantiationException.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/spi/ServiceLoaderInstantiationException.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.spi; +package cn.hippo4j.common.spi; /** * Service loader instantiation exception. 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 index b181692f..102ba478 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ByteConvertUtil.java @@ -17,29 +17,27 @@ package cn.hippo4j.common.toolkit; +import java.text.DecimalFormat; + /** * Byte conversion tool class */ public class ByteConvertUtil { + public static final Integer KB_SIZE = 2 << 9; + public static final Integer MB_SIZE = 2 << 19; + public static final Integer GB_SIZE = 2 << 29; + public static String getPrintSize(long size) { - long covertNum = 1024; - if (size < covertNum) { + DecimalFormat df = new DecimalFormat("#.00"); + if (size < KB_SIZE) { return size + "B"; + } else if (size < MB_SIZE) { + return df.format((double) size / KB_SIZE) + "KB"; + } else if (size < GB_SIZE) { + return df.format((double) size / MB_SIZE) + "MB"; } 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"; + return df.format((double) size / GB_SIZE) + "GB"; } } } 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 5a79cce6..430db1c1 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 @@ -36,6 +36,7 @@ public class ContentUtil { .setQueueType(parameter.getQueueType()) .setCapacity(parameter.getCapacity()) .setKeepAliveTime(parameter.getKeepAliveTime()) + .setExecuteTimeOut(parameter.getExecuteTimeOut()) .setIsAlarm(parameter.getIsAlarm()) .setCapacityAlarm(parameter.getCapacityAlarm()) .setLivenessAlarm(parameter.getLivenessAlarm()) 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 index 33dbe282..56af7f81 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JSONUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JSONUtil.java @@ -18,6 +18,7 @@ package cn.hippo4j.common.toolkit; import cn.hippo4j.common.api.JsonFacade; +import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; @@ -32,7 +33,6 @@ public class JSONUtil { if (object == null) { return null; } - return JSON_FACADE.toJSONString(object); } @@ -40,15 +40,20 @@ public class JSONUtil { if (StringUtil.isBlank(text)) { return null; } - return JSON_FACADE.parseObject(text, clazz); } - public static List parseArray(String text, Class clazz) { + public static T parseObject(String text, TypeReference valueTypeRef) { if (StringUtil.isBlank(text)) { return null; } + return JSON_FACADE.parseObject(text, valueTypeRef); + } + 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 index 4e0a4676..1ba3d273 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JacksonHandler.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/JacksonHandler.java @@ -20,6 +20,7 @@ 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.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; @@ -61,6 +62,12 @@ public class JacksonHandler implements JsonFacade { return MAPPER.readValue(text, javaType); } + @Override + @SneakyThrows + public T parseObject(String text, TypeReference valueTypeRef) { + return MAPPER.readValue(text, valueTypeRef); + } + @Override @SneakyThrows public List parseArray(String text, Class clazz) { 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 index 671f61b5..fdf529f9 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/MessageConvert.java @@ -17,15 +17,15 @@ package cn.hippo4j.common.toolkit; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + 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. */ @@ -60,7 +60,7 @@ public class MessageConvert { */ @SneakyThrows public static Message convert(MessageWrapper messageWrapper) { - AbstractMessage message = (AbstractMessage) messageWrapper.getResponseClass().newInstance(); + AbstractMessage message = (AbstractMessage) messageWrapper.getResponseClass().getDeclaredConstructor().newInstance(); List> contentParams = messageWrapper.getContentParams(); List messages = new ArrayList(); contentParams.forEach(each -> { 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 index 56b58ed2..db5c343d 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/ReflectUtil.java @@ -94,9 +94,7 @@ public class ReflectUtil { } 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]; - } + System.arraycopy(declaredFields, 0, allFields, length, declaredFields.length); } searchType = withSuperClassFields ? searchType.getSuperclass() : null; } 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 index 13bdb67c..a092278f 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/toolkit/StringUtil.java @@ -26,6 +26,36 @@ public class StringUtil { public static final char UNDERLINE = '_'; + /** + * Returns the given string if it is nonempty; {@code null} otherwise. + * + * @param str + * @return + */ + public static String emptyToNull(String str) { + return (str == null || str.isEmpty()) ? null : str; + } + + /** + * Returns the given string if it is non-null; the empty string otherwise. + * + * @param str + * @return + */ + public static String nullToEmpty(String str) { + return str == null ? "" : str; + } + + /** + * Returns {@code true} if the given string is null or is the empty string. + * + * @param str + * @return + */ + public static boolean isNullOrEmpty(String str) { + return str == null || str.isEmpty(); + } + /** * Is blank. * diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.java new file mode 100644 index 00000000..358dfd9f --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ArrayUtilTest.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.common.toolkit; + +import cn.hippo4j.common.function.Matcher; +import com.google.common.base.Strings; +import org.checkerframework.checker.units.qual.A; +import org.junit.Test; + +import java.lang.reflect.Array; + +public class ArrayUtilTest { + + @Test + public void assertIsEmpty() { + String[] array = new String[0]; + Assert.isTrue(ArrayUtil.isEmpty(array)); + } + + @Test + public void assertIsNotEmpty() { + String[] array = new String[0]; + Assert.isTrue(!ArrayUtil.isNotEmpty(array)); + } + + @Test + public void assertFirstMatch() { + Matcher matcher = (str) -> "1".equalsIgnoreCase(str); + + String[] array = new String[0]; + Assert.isTrue(Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + + array = new String[]{"0"}; + Assert.isTrue(Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + + array = new String[]{"1"}; + Assert.isTrue(!Strings.isNullOrEmpty(ArrayUtil.firstMatch(matcher, array))); + } + + @Test + public void assertAddAll() { + String[] array = new String[]{"1"}; + Assert.isTrue(ArrayUtil.addAll(array, null).length == 1); + Assert.isTrue(ArrayUtil.addAll(null, array).length == 1); + + Assert.isTrue(ArrayUtil.addAll(array, new String[]{"1"}).length == 2); + } + + @Test + public void assertClone() { + Assert.isNull(ArrayUtil.clone(null)); + + String[] array = new String[0]; + Assert.isTrue(array != ArrayUtil.clone(array)); + Assert.isTrue(array.length == ArrayUtil.clone(array).length); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.java new file mode 100644 index 00000000..e8112b89 --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/BooleanUtilTest.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.common.toolkit; + +import org.junit.Test; + +public class BooleanUtilTest { + + @Test + public void assertToBoolean() { + Assert.isTrue(BooleanUtil.toBoolean("true")); + Assert.isTrue(BooleanUtil.toBoolean("yes")); + Assert.isTrue(BooleanUtil.toBoolean("1")); + } + + @Test + public void assertIsTrue() { + Assert.isTrue(BooleanUtil.isTrue(true)); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ByteConvertUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ByteConvertUtilTest.java new file mode 100644 index 00000000..a23e4a4c --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ByteConvertUtilTest.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.common.toolkit; + +import org.junit.Test; + +import java.util.Objects; + +public class ByteConvertUtilTest { + + @Test + public void assertGetPrintSize() { + Assert.isTrue(Objects.equals(ByteConvertUtil.getPrintSize(220), "220B")); + Assert.isTrue(Objects.equals(ByteConvertUtil.getPrintSize(2200), "2.15KB")); + Assert.isTrue(Objects.equals(ByteConvertUtil.getPrintSize(2200000), "2.10MB")); + Assert.isTrue(Objects.equals(ByteConvertUtil.getPrintSize(2200000000L), "2.05GB")); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CalculateUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CalculateUtilTest.java new file mode 100644 index 00000000..715c71c6 --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CalculateUtilTest.java @@ -0,0 +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.toolkit; + +import org.junit.Test; + +public class CalculateUtilTest { + + @Test + public void assertDivide() { + Assert.isTrue(CalculateUtil.divide(200, 100) == 200); + Assert.isTrue(CalculateUtil.divide(100, 200) == 50); + Assert.isTrue(CalculateUtil.divide(100, 100) == 100); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java new file mode 100644 index 00000000..b0be6add --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/CollectionUtilTest.java @@ -0,0 +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.common.toolkit; + +import com.google.common.collect.Maps; +import org.assertj.core.util.Lists; +import org.junit.Test; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class CollectionUtilTest { + + @Test + public void assertGetFirst() { + Assert.isNull(CollectionUtil.getFirst(null)); + + String first = CollectionUtil.getFirst(Lists.newArrayList("1", "2")); + Assert.notEmpty(first); + } + + @Test + public void assertIsEmpty() { + List list = null; + Assert.isTrue(CollectionUtil.isEmpty(list)); + + list = Lists.newArrayList(); + Assert.isTrue(CollectionUtil.isEmpty(list)); + + list = Lists.newArrayList("1"); + Assert.isTrue(!CollectionUtil.isEmpty(list)); + + Map map = null; + Assert.isTrue(CollectionUtil.isEmpty(map)); + + map = Maps.newHashMap(); + Assert.isTrue(CollectionUtil.isEmpty(map)); + + map.put("key", "value"); + Assert.isTrue(!CollectionUtil.isEmpty(map)); + + Iterator iterator = null; + Assert.isTrue(CollectionUtil.isEmpty(iterator)); + + iterator = Lists.emptyList().iterator(); + Assert.isTrue(CollectionUtil.isEmpty(iterator)); + + iterator = Lists.newArrayList("1").iterator(); + Assert.isTrue(!CollectionUtil.isEmpty(iterator)); + } + + @Test + public void assertIsNotEmpty() { + List list = null; + Assert.isTrue(!CollectionUtil.isNotEmpty(list)); + + list = Lists.newArrayList(); + Assert.isTrue(!CollectionUtil.isNotEmpty(list)); + + list = Lists.newArrayList("1"); + Assert.isTrue(CollectionUtil.isNotEmpty(list)); + + Map map = null; + Assert.isTrue(!CollectionUtil.isNotEmpty(map)); + + map = Maps.newHashMap(); + Assert.isTrue(!CollectionUtil.isNotEmpty(map)); + + map.put("key", "value"); + Assert.isTrue(CollectionUtil.isNotEmpty(map)); + + Iterator iterator = null; + Assert.isTrue(!CollectionUtil.isNotEmpty(iterator)); + + iterator = Lists.emptyList().iterator(); + Assert.isTrue(!CollectionUtil.isNotEmpty(iterator)); + + iterator = Lists.newArrayList("1").iterator(); + Assert.isTrue(CollectionUtil.isNotEmpty(iterator)); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ConditionUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ConditionUtilTest.java new file mode 100644 index 00000000..bf7dbdd8 --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ConditionUtilTest.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.common.toolkit; + +import cn.hippo4j.common.function.NoArgsConsumer; +import org.junit.Test; + +import java.util.concurrent.atomic.AtomicBoolean; + +public class ConditionUtilTest { + + @Test + public void assertCondition() { + // init consumer + AtomicBoolean checkValue = new AtomicBoolean(false); + NoArgsConsumer trueConsumer = () -> checkValue.set(true); + NoArgsConsumer falseConsumer = () -> checkValue.set(false); + // test trueConsumer run + ConditionUtil.condition(true, trueConsumer, falseConsumer); + Assert.isTrue(checkValue.get()); + // test falseConsumer run + ConditionUtil.condition(false, trueConsumer, falseConsumer); + Assert.isTrue(!checkValue.get()); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ContentUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ContentUtilTest.java new file mode 100644 index 00000000..9fe6d1bb --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/ContentUtilTest.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.toolkit; + +import org.junit.Test; + +public class ContentUtilTest { + + @Test + public void assertGetPoolContent() { + + } + + @Test + public void assertGetGroupKey() { + + } + + @Test + public void assertGetGroupKeys() { + + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.java new file mode 100644 index 00000000..972480ca --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/FileUtilTest.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.common.toolkit; + +import org.junit.Test; + +public class FileUtilTest { + + @Test + public void assertReadUtf8String() { + String testText = "abcd简体繁体\uD83D\uDE04\uD83D\uDD25& *\n" + + "second line\n" + + "empty line next\n"; + String testFilePath = "test/test_utf8.txt"; + String contentByFileUtil = FileUtil.readUtf8String(testFilePath); + Assert.isTrue(testText.equals(contentByFileUtil)); + } +} diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.java new file mode 100644 index 00000000..62ea2f17 --- /dev/null +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/toolkit/JSONUtilTest.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.toolkit; + +import com.fasterxml.jackson.core.type.TypeReference; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +/** + * JSON util test. + */ +public class JSONUtilTest { + + private static final Foo EXPECTED_FOO = new Foo(1, "foo1", new Foo(2, "foo2", null)); + private static final List EXPECTED_FOO_ARRAY = Arrays.asList(EXPECTED_FOO, EXPECTED_FOO); + private static final String EXPECTED_FOO_JSON = "{\"id\":1,\"name\":\"foo1\",\"foo\":{\"id\":2,\"name\":\"foo2\"}}"; + private static final String EXPECTED_FOO_JSON_ARRAY = "[" + EXPECTED_FOO_JSON + "," + EXPECTED_FOO_JSON + "]"; + + @Test + public void assertToJSONString() { + Assert.assertNull(JSONUtil.toJSONString(null)); + Assert.assertEquals(EXPECTED_FOO_JSON, JSONUtil.toJSONString(EXPECTED_FOO)); + } + + @Test + public void assertParseObject() { + Assert.assertNull(JSONUtil.parseObject(null, Foo.class)); + Assert.assertNull(JSONUtil.parseObject(" ", Foo.class)); + Assert.assertEquals(EXPECTED_FOO, JSONUtil.parseObject(EXPECTED_FOO_JSON, Foo.class)); + } + + @Test + public void assertParseObjectTypeReference() { + Assert.assertNull(JSONUtil.parseObject(null, new TypeReference>() {})); + Assert.assertNull(JSONUtil.parseObject(" ", new TypeReference>() {})); + Assert.assertEquals( + EXPECTED_FOO_ARRAY, + JSONUtil.parseObject(EXPECTED_FOO_JSON_ARRAY, new TypeReference>() {}) + ); + } + + @Test + public void assertParseArray() { + Assert.assertNull(JSONUtil.parseArray(null, Foo.class)); + Assert.assertNull(JSONUtil.parseArray(" ", Foo.class)); + Assert.assertEquals( + EXPECTED_FOO_ARRAY, + JSONUtil.parseArray(EXPECTED_FOO_JSON_ARRAY, Foo.class) + ); + } + + @EqualsAndHashCode + @AllArgsConstructor + @NoArgsConstructor + @Data + private static class Foo { + private Integer id; + private String name; + private Foo foo; + } + +} diff --git a/hippo4j-common/src/test/resources/test/test_utf8.txt b/hippo4j-common/src/test/resources/test/test_utf8.txt new file mode 100644 index 00000000..08790c5c --- /dev/null +++ b/hippo4j-common/src/test/resources/test/test_utf8.txt @@ -0,0 +1,3 @@ +abcd简体繁体😄🔥& * +second line +empty line next 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 60eddf3d..fe7fbcc2 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 @@ -17,7 +17,9 @@ package cn.hippo4j.config.model; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -81,6 +83,12 @@ public class ConfigInfoBase implements Serializable { */ private Integer keepAliveTime; + /** + * executeTimeOut + */ + @TableField(updateStrategy = FieldStrategy.IGNORED) + private Long executeTimeOut; + /** * rejectedType */ 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 3c5a41b4..23f9c89d 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 @@ -18,6 +18,7 @@ package cn.hippo4j.config.model.biz.notify; import lombok.Data; +import lombok.experimental.Accessors; /** * Notify req DTO. @@ -26,6 +27,7 @@ import lombok.Data; * @date 2021/11/18 20:15 */ @Data +@Accessors(chain = true) public class NotifyReqDTO { /** @@ -58,6 +60,11 @@ public class NotifyReqDTO { */ private String platform; + /** + * Type + */ + private String type; + /** * Config type */ 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 3c4fa030..323df555 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 @@ -78,6 +78,11 @@ public class ThreadPoolRespDTO { */ private Integer keepAliveTime; + /** + * Execute time out + */ + private Long executeTimeOut; + /** * Is alarm */ 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 fe25cdaf..f9aeb6a5 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 @@ -70,6 +70,11 @@ public class ThreadPoolSaveOrUpdateReqDTO { */ private Integer keepAliveTime; + /** + * Execute time out + */ + private Long executeTimeOut; + /** * Is alarm */ 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 index 4cc8beb8..d27c04e8 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/ThreadPoolAdapterService.java @@ -30,6 +30,7 @@ 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.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -105,7 +106,8 @@ public class ThreadPoolAdapterService { try { String resultStr = HttpUtil.get(urlString, param, HTTP_EXECUTE_TIMEOUT); if (StringUtil.isNotBlank(resultStr)) { - Result restResult = JSONUtil.parseObject(resultStr, Result.class); + Result restResult = JSONUtil.parseObject(resultStr, new TypeReference>() { + }); result.add(restResult.getData()); } } catch (Throwable ex) { 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 bfc764be..fbad36ef 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 @@ -60,6 +60,14 @@ public interface NotifyService { */ void update(NotifyReqDTO reqDTO); + /** + * Save or update. + * + * @param notifyUpdateIfExists + * @param reqDTO + */ + void saveOrUpdate(boolean notifyUpdateIfExists, NotifyReqDTO reqDTO); + /** * Delete. * 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 636b105e..5162b11b 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 @@ -21,27 +21,24 @@ import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterServerNotifyParameter; 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.model.*; +import cn.hippo4j.config.model.biz.notify.NotifyReqDTO; import cn.hippo4j.config.service.ConfigCacheService; import cn.hippo4j.config.service.ConfigChangePublisher; -import cn.hippo4j.config.service.biz.ConfigService; -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.service.biz.*; 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.Wrappers; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -68,6 +65,8 @@ public class ConfigServiceImpl implements ConfigService { private final OperationLogService operationLogService; + private final NotifyService notifyService; + @Override public ConfigAllInfo findConfigAllInfo(String tpId, String itemId, String tenantId) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(ConfigAllInfo.class) @@ -139,11 +138,7 @@ public class ConfigServiceImpl implements ConfigService { @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()); + ConfigAllInfo configAllInfo = parseConfigAllInfo(registerWrapper); TenantService tenantService = ApplicationContextHolder.getBean(TenantService.class); ItemService itemService = ApplicationContextHolder.getBean(ItemService.class); Assert.isTrue(tenantService.getTenantByTenantId(registerWrapper.getTenantId()) != null, "Tenant does not exist"); @@ -155,6 +150,41 @@ public class ConfigServiceImpl implements ConfigService { ConfigServiceImpl configService = ApplicationContextHolder.getBean(this.getClass()); configService.updateConfigInfo(null, false, configAllInfo); } + DynamicThreadPoolRegisterServerNotifyParameter serverNotifyParameter = registerWrapper.getDynamicThreadPoolRegisterServerNotifyParameter(); + if (serverNotifyParameter != null) { + ArrayList notifyTypes = Lists.newArrayList("CONFIG", "ALARM"); + notifyTypes.forEach(each -> { + NotifyReqDTO notifyReqDTO = new NotifyReqDTO(); + notifyReqDTO.setType(each) + .setEnable(1) + .setTenantId(registerWrapper.getTenantId()) + .setItemId(registerWrapper.getItemId()) + .setTpId(configAllInfo.getTpId()) + .setPlatform(serverNotifyParameter.getPlatform()) + .setReceives(serverNotifyParameter.getReceives()) + .setSecretKey(serverNotifyParameter.getAccessToken()); + if (Objects.equals(each, "ALARM")) { + notifyReqDTO.setInterval(serverNotifyParameter.getInterval()); + notifyReqDTO.setAlarmType(true); + } else { + notifyReqDTO.setConfigType(true); + } + notifyService.saveOrUpdate(registerWrapper.getNotifyUpdateIfExists(), notifyReqDTO); + }); + } + } + + private ConfigAllInfo parseConfigAllInfo(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()); + configAllInfo.setLivenessAlarm(registerParameter.getActiveAlarm()); + configAllInfo.setQueueType(registerParameter.getBlockingQueueType().getType()); + configAllInfo.setRejectedType(registerParameter.getRejectedPolicyType().getType()); + configAllInfo.setAllowCoreThreadTimeOut(registerParameter.getAllowCoreThreadTimeOut()); + return configAllInfo; } private void verification(String identify) { 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 b555e13b..0a597c5d 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 @@ -119,6 +119,26 @@ public class NotifyServiceImpl implements NotifyService { } } + @Override + public void saveOrUpdate(boolean notifyUpdateIfExists, NotifyReqDTO reqDTO) { + try { + existNotify(reqDTO.getType(), reqDTO); + save(reqDTO); + } catch (Exception ignored) { + if (!notifyUpdateIfExists) { + return; + } + 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()); + List notifyInfos = notifyInfoMapper.selectList(queryWrapper); + notifyInfos.forEach(each -> update(reqDTO.setId(String.valueOf(each.getId())))); + } + } + @Override public void delete(NotifyReqDTO reqDTO) { LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(NotifyInfo.class) 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 921b5c24..9bb67cdf 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 @@ -40,7 +40,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; -import java.util.Optional; +import java.util.Objects; /** * Thread pool service impl. @@ -82,7 +82,10 @@ public class ThreadPoolServiceImpl implements ThreadPoolService { @Override public void saveOrUpdateThreadPoolConfig(String identify, ThreadPoolSaveOrUpdateReqDTO reqDTO) { - configService.insertOrUpdate(identify, false, BeanUtil.convert(reqDTO, ConfigAllInfo.class)); + ConfigAllInfo configAllInfo = BeanUtil.convert(reqDTO, ConfigAllInfo.class); + Long executeTimeOut = Objects.equals(configAllInfo.getExecuteTimeOut(), 0L) ? null : configAllInfo.getExecuteTimeOut(); + configAllInfo.setExecuteTimeOut(executeTimeOut); + configService.insertOrUpdate(identify, false, configAllInfo); } @Override @@ -99,7 +102,7 @@ public class ThreadPoolServiceImpl implements ThreadPoolService { LogRecordInfo logRecordInfo = LogRecordInfo.builder() .bizKey(requestParam.getItemId() + "_" + requestParam.getTpId()) .bizNo(requestParam.getItemId() + "_" + requestParam.getTpId()) - .operator(Optional.ofNullable(UserContext.getUserName()).orElse("-")) + .operator(UserContext.getUserName()) .action("删除线程池: " + requestParam.getTpId()) .category("THREAD_POOL_DELETE") .detail(JSONUtil.toJSONString(requestParam)) diff --git a/hippo4j-console/src/main/resources/static/index.html b/hippo4j-console/src/main/resources/static/index.html index d27ade6b..c7f42de3 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.72b19615.css b/hippo4j-console/src/main/resources/static/static/css/app.a8e822b9.css similarity index 94% rename from hippo4j-console/src/main/resources/static/static/css/app.72b19615.css rename to hippo4j-console/src/main/resources/static/static/css/app.a8e822b9.css index 6709a397..846a8b71 100644 --- a/hippo4j-console/src/main/resources/static/static/css/app.72b19615.css +++ b/hippo4j-console/src/main/resources/static/static/css/app.a8e822b9.css @@ -1 +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 +@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}.el-table .el-table__header-wrapper th{word-break:break-word;background-color:#f8f8f9;color:#515a6e;height:40px;font-size:13px}.el-table--border th.el-table__cell{background-color:#f8f8f9}.el-table thead{color:#515a6e}#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-247f955b.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-149a43cf.35874984.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-247f955b.35874984.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-149a43cf.35874984.css 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-1b3cdbc8.35874984.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-62bd3ba2.35874984.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-1b3cdbc8.35874984.css 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-3a6f2dc9.35874984.css similarity index 100% rename from hippo4j-console/src/main/resources/static/static/css/chunk-6e7ca1a9.35874984.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-3a6f2dc9.35874984.css 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-9ffdbb12.c31f98fb.css similarity index 85% rename from hippo4j-console/src/main/resources/static/static/css/chunk-073ce7f8.52ff3c91.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-9ffdbb12.c31f98fb.css index 26bf4c9e..e65888bf 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-073ce7f8.52ff3c91.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-9ffdbb12.c31f98fb.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}.dashboard-editor-container[data-v-001a3100]{padding:32px;background-color:#f0f2f5;position:relative;min-height:100vh} \ 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}.dashboard-editor-container[data-v-58ed3ad9]{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-a89383d2.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-a89383d2.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-a89383d2.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-adca2a60.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-adca2a60.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-adca2a60.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-2b98613f.119e6d52.css b/hippo4j-console/src/main/resources/static/static/css/chunk-cf1b9b08.81578b8c.css similarity index 62% rename from hippo4j-console/src/main/resources/static/static/css/chunk-2b98613f.119e6d52.css rename to hippo4j-console/src/main/resources/static/static/css/chunk-cf1b9b08.81578b8c.css index d76a2792..f9660237 100644 --- a/hippo4j-console/src/main/resources/static/static/css/chunk-2b98613f.119e6d52.css +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-cf1b9b08.81578b8c.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-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 +.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-65a213ee]::-webkit-scrollbar{width:8px;height:8px}[data-v-65a213ee]::-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-65a213ee]::-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-65a213ee]{height:400px;overflow:auto}.stack-info>li[data-v-65a213ee]{margin-bottom:24px}.stack-info>li p[data-v-65a213ee]:first-child{color:#06f;font-weight:600;margin-top:10px}.stack-info>li ul[data-v-65a213ee]{margin-left:30px}.stack-info>li ul li[data-v-65a213ee]{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-d6c1d344.35874984.css b/hippo4j-console/src/main/resources/static/static/css/chunk-d6c1d344.35874984.css new file mode 100644 index 00000000..5dc77f68 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/css/chunk-d6c1d344.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/js/app.146dd351.js b/hippo4j-console/src/main/resources/static/static/js/app.040fc680.js similarity index 63% rename from hippo4j-console/src/main/resources/static/static/js/app.146dd351.js rename to hippo4j-console/src/main/resources/static/static/js/app.040fc680.js index fc155216..0841370a 100644 --- a/hippo4j-console/src/main/resources/static/static/js/app.146dd351.js +++ b/hippo4j-console/src/main/resources/static/static/js/app.040fc680.js @@ -1 +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 +(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 q})),n.d(a,"numberFormatter",(function(){return I})),n.d(a,"toThousandFilter",(function(){return P})),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"),m=Object(p["a"])(u,r,d,!1,null,null,null),v=m.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 q(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 P(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),Q={admin:{token:"admin-token"},editor:{token:"editor-token"}},X={"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"}},Y=[{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=X[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,m=(n("bb12"),n("3749"),n("2877")),v=Object(m["a"])(p,d,h,!1,null,"92459f82",null),f=v.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(m["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(m["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,q=(n("b36c"),Object(m["a"])($,S,T,!1,null,"be34583a",null)),I=q.exports,P={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=P,N=(n("07c6"),Object(m["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"}}},Q=K,X=(n("98fb"),Object(m["a"])(Q,J,Z,!1,null,"24887324",null)),Y=X.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(m["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(m["a"])(ue,re,de,!1,null,null,null),me=pe.exports,ve={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:me},mixins:[ve],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(m["a"])(we,ee,te,!1,null,null,null),be=ge.exports,xe=n("cf1e"),ye=n.n(xe),ze={components:{SidebarItem:be,Logo:Y},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(m["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(m["a"])(je,Ce,ke,!1,null,"c64b5a6c",null)),qe=$e.exports,Ie=n("4360"),Pe=document,Re=Pe.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/chunk-05d50b2c.ae6ae56c.js b/hippo4j-console/src/main/resources/static/static/js/chunk-05d50b2c.ae6ae56c.js new file mode 100644 index 00000000..97a89d16 --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-05d50b2c.ae6ae56c.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-05d50b2c"],{"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,"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=[];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 l=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}();function o(e){document.documentElement.scrollTop=e,document.body.parentNode.scrollTop=e,document.body.scrollTop=e}function r(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function s(e,t,a){var i=r(),n=e-i,s=20,c=0;t="undefined"===typeof t?500:t;var u=function e(){c+=s;var r=Math.easeInOutQuad(c,i,n,t);o(r),c0,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-05d50b2c.ea729c3b.js b/hippo4j-console/src/main/resources/static/static/js/chunk-05d50b2c.ea729c3b.js deleted file mode 100644 index 492ddd42..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-05d50b2c.ea729c3b.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-05d50b2c"],{"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,"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=[];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 l=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}();function o(e){document.documentElement.scrollTop=e,document.body.parentNode.scrollTop=e,document.body.scrollTop=e}function r(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function s(e,t,a){var i=r(),n=e-i,s=20,c=0;t="undefined"===typeof t?500:t;var u=function e(){c+=s;var r=Math.easeInOutQuad(c,i,n,t);o(r),c0,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 deleted file mode 100644 index c2de4e70..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-073ce7f8.056a0bda.js +++ /dev/null @@ -1 +0,0 @@ -(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 deleted file mode 100644 index e3de5a15..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-078a7535.1bbab392.js +++ /dev/null @@ -1 +0,0 @@ -(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: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: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(" "),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"}},[e.isEdit?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._e(),e._v(" "),e.isEdit?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._e(),e._v(" "),e.isEdit?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._e(),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:""},isEdit:!1,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(" "),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(" 取消 ")]),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-5ee8c90c.b1999dd4.js b/hippo4j-console/src/main/resources/static/static/js/chunk-5ee8c90c.b1999dd4.js deleted file mode 100644 index ce382dff..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-5ee8c90c.b1999dd4.js +++ /dev/null @@ -1 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5ee8c90c"],{"333d":function(e,t,a){"use strict";var n=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,"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)},i=[];a("c5f6");Math.easeInOutQuad=function(e,t,a,n){return e/=n/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 o(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 l(e,t,a){var n=s(),i=e-n,l=20,u=0;t="undefined"===typeof t?500:t;var c=function e(){u+=l;var s=Math.easeInOutQuad(u,n,i,t);o(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.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 deleted file mode 100644 index 65ad9dbb..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-60c39f89.6e27baf6.js +++ /dev/null @@ -1 +0,0 @@ -(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(" "),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",staticStyle:{width:"500px","margin-left":"50px"},attrs:{rules:e.rules,model:e.temp,"label-width":"80px"}},[e.isEdit?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):e._e(),e._v(" "),e.isEdit?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):e._e(),e._v(" "),e.isEdit?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):e._e(),e._v(" "),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),e._v(" "),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),e._v(" "),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),e._v(" "),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),e._v(" "),i("el-form-item",{attrs:{label:"执行超时",prop:"executeTimeOut"}},[i("el-input-number",{attrs:{placeholder:"执行超时(毫秒)","controls-position":"right"},model:{value:e.temp.executeTimeOut,callback:function(t){e.$set(e.temp,"executeTimeOut",t)},expression:"temp.executeTimeOut"}})],1),e._v(" "),i("el-form-item",{attrs:{label:"空闲回收",prop:"keepAliveTime"}},[i("el-input-number",{attrs:{placeholder:"空闲回收(秒)","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),e._v(" "),i("el-form-item",{attrs:{label:"是否超时",prop:"allowCoreThreadTimeOut"}},[[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),e._v(" "),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),e._v(" "),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%")]),e._v(" "),i("el-radio-button",{attrs:{label:"90"}},[e._v("90%")])],1)],1)]],2),e._v(" "),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%")]),e._v(" "),i("el-radio-button",{attrs:{label:"90"}},[e._v("90%")])],1)],1)]],2),e._v(" "),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),e._v(" "),e.isRejectShow?i("el-form-item",{attrs:{label:"自定义拒绝策略",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):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},rejectedTypeFilter: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{isRejectShow:!1,isEdit:!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"}],queueType:[{required:!0,message:"this is required",trigger:"blur"}],allowCoreThreadTimeOut:[{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"}],capacity:[{required:!0,message:"this is required",trigger:"blur"}],executeTimeOut:[{required:!0,message:"this is required",trigger:"blur"}]},temp:{id:void 0,tenantId:"",itemId:"",rejectedType:null,customRejectedType:null,coreSize:4,maxSize:8},visible:!0}},created:function(){this.fetchData(),this.initSelect()},mounted:function(){this.isEditDisabled="admin"!==this.$cookie.get("userName")},methods:{onInput:function(){this.$forceUpdate()},fetchData:function(){var e=this;this.listLoading=!0,s["e"](this.listQuery).then((function(t){var i=t.records,a=t.total;e.total=a,e.list=i,e.listLoading=!1}))},changeAlarm:function(e){var t=this;s["a"](e).then((function(){t.fetchData(),t.$notify({title:"Success",message:"Update Successfully",type:"success",duration:2e3})}))},initSelect:function(){var e=this;r["c"]({size:this.size}).then((function(t){for(var i=t.records,a=0;a0,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: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-90a072fe.a22e41ae.js b/hippo4j-console/src/main/resources/static/static/js/chunk-90a072fe.a22e41ae.js deleted file mode 100644 index f3c163e8..00000000 --- a/hippo4j-console/src/main/resources/static/static/js/chunk-90a072fe.a22e41ae.js +++ /dev/null @@ -1 +0,0 @@ -(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-9ffdbb12.65e64b89.js b/hippo4j-console/src/main/resources/static/static/js/chunk-9ffdbb12.65e64b89.js new file mode 100644 index 00000000..aff5d84d --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-9ffdbb12.65e64b89.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-9ffdbb12"],{"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("section",[i("el-card",{attrs:{shadow:"hover"}},[i("el-descriptions",{attrs:{column:3,border:""}},[i("el-descriptions-item",{attrs:{label:"实例 ID"}},[t._v(t._s(t.listQuery.identify))]),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(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("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 ")])],1)],1),t._v(" "),i("el-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:10}},[i("el-col",{attrs:{span:8}},[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:8}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData2,times:t.times}})],1)],1),t._v(" "),i("el-col",{attrs:{span:8}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData5,times:t.times}})],1)],1)],1),t._v(" "),i("el-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:10}},[i("el-col",{attrs:{span:8}},[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:8}},[i("el-card",{attrs:{shadow:"hover"}},[i("line-chart",{attrs:{"chart-data":t.lineChartData4,times:t.times}})],1)],1),t._v(" "),i("el-col",{attrs:{span:8}},[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"),w=i("397f"),g=i("b775");function O(t){return Object(g["a"])({url:"/hippo4j/v1/cs/monitor/info",method:"post",data:t})}function j(t){return Object(g["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];w["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("52a5"),Object(p["a"])(C,n,a,!1,null,"58ed3ad9",null));e["default"]=I.exports},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"})}},"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"})}},"52a5":function(t,e,i){"use strict";i("bd73")},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){},bd73: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-a89383d2.7fa25e2e.js b/hippo4j-console/src/main/resources/static/static/js/chunk-a89383d2.7fa25e2e.js new file mode 100644 index 00000000..c0ba8bae --- /dev/null +++ b/hippo4j-console/src/main/resources/static/static/js/chunk-a89383d2.7fa25e2e.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-a89383d2"],{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},"89d5":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",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(){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"}]},temp:{id:void 0,tenantId:"",itemId:"",rejectedType:null,allUpdate:"1",customRejectedType:null},visible:!0}},created:function(){this.initSelect()},methods:{onInput:function(){this.$forceUpdate()},fetchData:function(){var e=this;this.listQuery.mark?this.listQuery.tenantId?this.listQuery.itemId?this.listQuery.threadPoolKey?(this.listLoading=!0,s["a"](this.listQuery).then((function(t){null==t&&(e.listLoading=!1),e.list=t,e.listLoading=!1}))):this.$message.warning("线程池标识不允许为空"):this.$message.warning("项目不允许为空"):this.$message.warning("租户不允许为空"):this.$message.warning("线程池类型不允许为空")},initSelect:function(){var e=this;r["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(" "),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},on:{"update:visible":function(t){e.dialogFormVisible=t}}},[i("el-form",{ref:"dataForm",staticStyle:{width:"500px","margin-left":"50px"},attrs:{rules:e.rules,model:e.temp,"label-width":"80px"}},[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),e._v(" "),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),e._v(" "),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),e._v(" "),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),e._v(" "),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),e._v(" "),i("el-form-item",{attrs:{label:"执行超时",prop:"executeTimeOut"}},[i("el-input-number",{attrs:{placeholder:"执行超时(毫秒)","controls-position":"right",min:0,max:999999},model:{value:e.temp.executeTimeOut,callback:function(t){e.$set(e.temp,"executeTimeOut",t)},expression:"temp.executeTimeOut"}})],1),e._v(" "),i("el-form-item",{attrs:{label:"空闲回收",prop:"keepAliveTime"}},[i("el-input-number",{attrs:{placeholder:"空闲回收(秒)","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),e._v(" "),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),e._v(" "),e.isRejectShow?i("el-form-item",{attrs:{label:"自定义拒绝策略",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):e._e(),e._v(" "),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),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"}],executeTimeOut:[{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;n new Thread(r, "client.alarm.notify")); - private final ExecutorService EXECUTE_TIMEOUT_EXECUTOR = ThreadPoolBuilder.builder() + private final ExecutorService ASYNC_ALARM_NOTIFY_EXECUTOR = ThreadPoolBuilder.builder() .poolThreadSize(2, 4) .threadFactory("client.execute.timeout.alarm") .allowCoreThreadTimeOut(true) @@ -109,8 +109,7 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner int queueSize = blockingQueue.size(); int capacity = queueSize + blockingQueue.remainingCapacity(); int divide = CalculateUtil.divide(queueSize, capacity); - boolean isSend = threadPoolNotifyAlarm.getAlarm() - && divide > threadPoolNotifyAlarm.getCapacityAlarm(); + boolean isSend = threadPoolNotifyAlarm.getAlarm() && divide > threadPoolNotifyAlarm.getCapacityAlarm(); if (isSend) { AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); alarmNotifyRequest.setThreadPoolId(threadPoolId); @@ -129,8 +128,7 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner int maximumPoolSize = threadPoolExecutor.getMaximumPoolSize(); int divide = CalculateUtil.divide(activeCount, maximumPoolSize); ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); - boolean isSend = threadPoolNotifyAlarm.getAlarm() - && divide > threadPoolNotifyAlarm.getActiveAlarm(); + boolean isSend = threadPoolNotifyAlarm.getAlarm() && divide > threadPoolNotifyAlarm.getActiveAlarm(); if (isSend) { AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); alarmNotifyRequest.setThreadPoolId(threadPoolId); @@ -139,31 +137,24 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner } /** - * Check pool rejected alarm. + * Async send 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); - } + public void asyncSendRejectedAlarm(String threadPoolId) { + Runnable checkPoolRejectedAlarmTask = () -> { + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = GlobalNotifyAlarmManage.get(threadPoolId); + if (Objects.isNull(threadPoolNotifyAlarm) || !threadPoolNotifyAlarm.getAlarm()) { + return; + } + ThreadPoolExecutor threadPoolExecutor = GlobalThreadPoolManage.getExecutorService(threadPoolId).getExecutor(); + if (threadPoolExecutor instanceof DynamicThreadPoolExecutor) { + AlarmNotifyRequest alarmNotifyRequest = buildAlarmNotifyReq(threadPoolExecutor); + alarmNotifyRequest.setThreadPoolId(threadPoolId); + hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.REJECT, alarmNotifyRequest); + } + }; + ASYNC_ALARM_NOTIFY_EXECUTOR.execute(checkPoolRejectedAlarmTask); } /** @@ -190,7 +181,7 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner alarmNotifyRequest.setExecuteTimeoutTrace(executeTimeoutTrace); } Runnable task = () -> hippoSendMessageService.sendAlarmMessage(NotifyTypeEnum.TIMEOUT, alarmNotifyRequest); - EXECUTE_TIMEOUT_EXECUTOR.execute(task); + ASYNC_ALARM_NOTIFY_EXECUTOR.execute(task); } catch (Throwable ex) { log.error("Send thread pool execution timeout alarm error.", ex); } @@ -220,17 +211,11 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner 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()); @@ -241,13 +226,9 @@ public class ThreadPoolNotifyAlarmHandler implements Runnable, CommandLineRunner 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); 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 index 17c428b1..1fa8672b 100644 --- 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 @@ -21,7 +21,7 @@ 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 cn.hippo4j.core.executor.support.service.DynamicThreadPoolService; import com.google.common.collect.Lists; import java.util.List; 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 index 61f34eec..a1d1975b 100644 --- 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 @@ -145,11 +145,14 @@ public class AbstractBuildThreadPoolTemplate { private Boolean allowCoreThreadTimeOut = false; public ThreadPoolInitParam(String threadNamePrefix, boolean isDaemon) { - this.threadPoolId = threadNamePrefix; this.threadFactory = ThreadFactoryBuilder.builder() .prefix(threadNamePrefix) .daemon(isDaemon) .build(); } + + public ThreadPoolInitParam(ThreadFactory threadFactory) { + this.threadFactory = threadFactory; + } } } 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 index 186dd47c..9da3b6b7 100644 --- 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 @@ -17,6 +17,7 @@ package cn.hippo4j.core.executor.support; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; import cn.hippo4j.core.executor.DynamicThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -32,7 +33,7 @@ public class CommonDynamicThreadPool { .threadFactory(threadPoolId) .poolThreadSize(2, 4) .keepAliveTime(60L, TimeUnit.SECONDS) - .workQueue(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, 1024) + .workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, 1024) .build(); return dynamicThreadPoolExecutor; } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ExecutorContext.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ExecutorContext.java new file mode 100644 index 00000000..7cd2db56 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ExecutorContext.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.executor.support; + +import org.slf4j.MDC; + +import static cn.hippo4j.common.constant.Constants.EXECUTE_TIMEOUT_TRACE; + +/** + * Executor context. + */ +public class ExecutorContext { + + /** + * Put execute timeout trace. + * + * @param executeTimeoutTrace + */ + public static void putExecuteTimeoutTrace(String executeTimeoutTrace) { + MDC.put(EXECUTE_TIMEOUT_TRACE, executeTimeoutTrace); + } +} 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 deleted file mode 100644 index 931d06da..00000000 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/RejectedPolicies.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS 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/TaskQueue.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/TaskQueue.java index 479387c4..3d16c439 100644 --- 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 @@ -45,13 +45,11 @@ public class TaskQueue extends LinkedBlockingQueue 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); } diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java index 6e56dc07..ff78da04 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadFactoryBuilder.java @@ -91,7 +91,7 @@ public class ThreadFactoryBuilder implements Builder { return r -> { final Thread thread = backingThreadFactory.newThread(r); if (null != namePrefix) { - thread.setName(namePrefix + "-" + count.getAndIncrement()); + thread.setName(namePrefix + "_" + count.getAndIncrement()); } if (null != daemon) { thread.setDaemon(daemon); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java index ce51e17f..1aa069c4 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/ThreadPoolBuilder.java @@ -18,6 +18,7 @@ package cn.hippo4j.core.executor.support; import cn.hippo4j.common.design.builder.Builder; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; import cn.hippo4j.common.toolkit.Assert; import org.springframework.core.task.TaskDecorator; @@ -46,9 +47,9 @@ public class ThreadPoolBuilder implements Builder { private int capacity = 512; - private QueueTypeEnum queueType; + private BlockingQueueTypeEnum blockingQueueType = BlockingQueueTypeEnum.LINKED_BLOCKING_QUEUE; - private BlockingQueue workQueue = new LinkedBlockingQueue(capacity); + private BlockingQueue workQueue; private RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.AbortPolicy(); @@ -56,6 +57,8 @@ public class ThreadPoolBuilder implements Builder { private String threadNamePrefix; + private ThreadFactory threadFactory; + private String threadPoolId; private TaskDecorator taskDecorator; @@ -86,6 +89,11 @@ public class ThreadPoolBuilder implements Builder { return this; } + public ThreadPoolBuilder threadFactory(ThreadFactory threadFactory) { + this.threadFactory = threadFactory; + return this; + } + public ThreadPoolBuilder threadFactory(String threadNamePrefix, Boolean isDaemon) { this.threadNamePrefix = threadNamePrefix; this.isDaemon = isDaemon; @@ -149,8 +157,8 @@ public class ThreadPoolBuilder implements Builder { return this; } - public ThreadPoolBuilder workQueue(QueueTypeEnum queueType, int capacity) { - this.queueType = queueType; + public ThreadPoolBuilder workQueue(BlockingQueueTypeEnum queueType, int capacity) { + this.blockingQueueType = queueType; this.capacity = capacity; return this; } @@ -160,8 +168,8 @@ public class ThreadPoolBuilder implements Builder { return this; } - public ThreadPoolBuilder workQueue(QueueTypeEnum queueType) { - this.queueType = queueType; + public ThreadPoolBuilder workQueue(BlockingQueueTypeEnum blockingQueueType) { + this.blockingQueueType = blockingQueueType; return this; } @@ -226,9 +234,13 @@ public class ThreadPoolBuilder implements Builder { } 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); + AbstractBuildThreadPoolTemplate.ThreadPoolInitParam initParam; + if (builder.threadFactory == null) { + Assert.notEmpty(builder.threadNamePrefix, "The thread name prefix cannot be empty or an empty string."); + initParam = new AbstractBuildThreadPoolTemplate.ThreadPoolInitParam(builder.threadNamePrefix, builder.isDaemon); + } else { + initParam = new AbstractBuildThreadPoolTemplate.ThreadPoolInitParam(builder.threadFactory); + } initParam.setCorePoolNum(builder.corePoolSize) .setMaxPoolNum(builder.maxPoolSize) .setKeepAliveTime(builder.keepAliveTime) @@ -245,8 +257,11 @@ public class ThreadPoolBuilder implements Builder { initParam.setAwaitTerminationMillis(builder.awaitTerminationMillis); } if (!builder.isFastPool) { - if (builder.queueType != null) { - builder.workQueue = QueueTypeEnum.createBlockingQueue(builder.queueType.type, builder.capacity); + if (builder.workQueue == null) { + if (builder.blockingQueueType == null) { + builder.blockingQueueType = BlockingQueueTypeEnum.LINKED_BLOCKING_QUEUE; + } + builder.workQueue = BlockingQueueTypeEnum.createBlockingQueue(builder.blockingQueueType.getType(), builder.capacity); } initParam.setWorkQueue(builder.workQueue); } 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 index c203ee5d..1b613483 100644 --- 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 @@ -34,6 +34,7 @@ public class DynamicThreadPoolAdapterChoose { static { DYNAMIC_THREAD_POOL_ADAPTERS.add(new TransmittableThreadLocalExecutorAdapter()); DYNAMIC_THREAD_POOL_ADAPTERS.add(new TransmittableThreadLocalExecutorServiceAdapter()); + DYNAMIC_THREAD_POOL_ADAPTERS.add(new ThreadPoolTaskExecutorAdapter()); } /** diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/ThreadPoolTaskExecutorAdapter.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/ThreadPoolTaskExecutorAdapter.java new file mode 100644 index 00000000..3dea2eb1 --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/adpter/ThreadPoolTaskExecutorAdapter.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS 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 cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.core.task.TaskDecorator; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Spring ThreadPoolTaskExecutor adapter. + */ +public class ThreadPoolTaskExecutorAdapter implements DynamicThreadPoolAdapter { + + private static final String EXECUTOR_FIELD_NAME = "threadPoolExecutor"; + + private static final String WAIT_FOR_TASKS_TO_COMPLETE_ON_SHUTDOWN = "waitForTasksToCompleteOnShutdown"; + + private static final String AWAIT_TERMINATION_MILLIS = "awaitTerminationMillis"; + + private static final String TASK_DECORATOR = "taskDecorator"; + + private static final String BEAN_NAME = "beanName"; + + private static final String QUEUE_CAPACITY = "queueCapacity"; + + private static String MATCH_CLASS_NAME = "ThreadPoolTaskExecutor"; + + @Override + public boolean match(Object executor) { + // Adapt to lower versions of spring. + return Objects.equals(MATCH_CLASS_NAME, executor.getClass().getSimpleName()); + } + + @Override + public DynamicThreadPoolExecutor unwrap(Object executor) { + Object unwrap = ReflectUtil.getFieldValue(executor, EXECUTOR_FIELD_NAME); + if (unwrap == null) { + return null; + } + if (!(unwrap instanceof ThreadPoolExecutor)) { + return null; + } + if (unwrap instanceof DynamicThreadPoolExecutor) { + return (DynamicThreadPoolExecutor) unwrap; + } + boolean waitForTasksToCompleteOnShutdown = (boolean) ReflectUtil.getFieldValue(executor, WAIT_FOR_TASKS_TO_COMPLETE_ON_SHUTDOWN); + long awaitTerminationMillis = (long) ReflectUtil.getFieldValue(executor, AWAIT_TERMINATION_MILLIS); + String beanName = (String) ReflectUtil.getFieldValue(executor, BEAN_NAME); + int queueCapacity = (int) ReflectUtil.getFieldValue(executor, QUEUE_CAPACITY); + ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) unwrap; + ThreadPoolTaskExecutor threadPoolTaskExecutor = (ThreadPoolTaskExecutor) executor; + /** + * Spring {@link ThreadPoolTaskExecutor} to {@link DynamicThreadPoolExecutor}, + * {@link ThreadPoolTaskExecutor} not support {@link DynamicThreadPoolExecutor#executeTimeOut}. + */ + ThreadPoolBuilder threadPoolBuilder = ThreadPoolBuilder.builder() + .dynamicPool() + .corePoolSize(threadPoolTaskExecutor.getCorePoolSize()) + .maxPoolNum(threadPoolTaskExecutor.getMaxPoolSize()) + .keepAliveTime(threadPoolTaskExecutor.getKeepAliveSeconds()) + .timeUnit(TimeUnit.SECONDS) + .allowCoreThreadTimeOut(threadPoolExecutor.allowsCoreThreadTimeOut()) + .waitForTasksToCompleteOnShutdown(waitForTasksToCompleteOnShutdown) + .awaitTerminationMillis(awaitTerminationMillis) + .threadFactory(threadPoolExecutor.getThreadFactory()) + // Thread-pool id default bean name. + .threadPoolId(beanName) + .rejected(threadPoolExecutor.getRejectedExecutionHandler()); + // Use new blocking queue. + threadPoolBuilder.capacity(queueCapacity); + Optional.ofNullable(ReflectUtil.getFieldValue(executor, TASK_DECORATOR)) + .ifPresent((taskDecorator) -> threadPoolBuilder.taskDecorator((TaskDecorator) taskDecorator)); + return (DynamicThreadPoolExecutor) threadPoolBuilder.build(); + } + + @Override + public void replace(Object executor, Executor dynamicThreadPoolExecutor) { + ReflectUtil.setFieldValue(executor, EXECUTOR_FIELD_NAME, dynamicThreadPoolExecutor); + } +} diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/service/AbstractDynamicThreadPoolService.java b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/service/AbstractDynamicThreadPoolService.java new file mode 100644 index 00000000..4348c78a --- /dev/null +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/service/AbstractDynamicThreadPoolService.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.service; + +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Abstract dynamic thread-pool service. + */ +public abstract class AbstractDynamicThreadPoolService implements DynamicThreadPoolService { + + /** + * Build dynamic thread-pool executor. + * + * @param registerParameter + * @return + */ + public ThreadPoolExecutor buildDynamicThreadPoolExecutor(DynamicThreadPoolRegisterParameter registerParameter) { + ThreadPoolExecutor dynamicThreadPoolExecutor = ThreadPoolBuilder.builder() + .threadPoolId(registerParameter.getThreadPoolId()) + .corePoolSize(registerParameter.getCorePoolSize()) + .maxPoolNum(registerParameter.getMaximumPoolSize()) + .workQueue(BlockingQueueTypeEnum.createBlockingQueue(registerParameter.getBlockingQueueType().getType(), registerParameter.getCapacity())) + .threadFactory(registerParameter.getThreadNamePrefix()) + .keepAliveTime(registerParameter.getKeepAliveTime(), TimeUnit.SECONDS) + .executeTimeOut(registerParameter.getExecuteTimeOut()) + .rejected(RejectedPolicyTypeEnum.createPolicy(registerParameter.getRejectedPolicyType().getType())) + .dynamicPool() + .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/service/DynamicThreadPoolService.java similarity index 96% rename from hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/DynamicThreadPoolService.java rename to hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/service/DynamicThreadPoolService.java index b967a08c..dbb6fd5d 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/DynamicThreadPoolService.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/executor/support/service/DynamicThreadPoolService.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.executor.support; +package cn.hippo4j.core.executor.support.service; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; 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 index 7871e1b5..9755cbe6 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandler.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandler.java @@ -20,6 +20,7 @@ package cn.hippo4j.core.proxy; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.core.executor.ThreadPoolNotifyAlarmHandler; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; @@ -29,6 +30,7 @@ import java.util.concurrent.atomic.AtomicLong; /** * Rejected proxy invocation handler. */ +@Slf4j @AllArgsConstructor public class RejectedProxyInvocationHandler implements InvocationHandler { @@ -42,8 +44,12 @@ public class RejectedProxyInvocationHandler implements InvocationHandler { 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 { + ThreadPoolNotifyAlarmHandler alarmHandler = ApplicationContextHolder.getBean(ThreadPoolNotifyAlarmHandler.class); + alarmHandler.asyncSendRejectedAlarm(threadPoolId); + } catch (Throwable ex) { + log.error("Failed to send rejection policy alert.", ex); + } } try { return method.invoke(target, args); diff --git a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/pom.xml similarity index 93% rename from hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml rename to hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/pom.xml index cffc3c06..cf9e6e91 100644 --- a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/pom.xml +++ b/hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/pom.xml @@ -7,7 +7,7 @@ hippo4j-example ${revision} - hippo4j-core-apollo-spring-boot-starter-example + hippo4j-config-apollo-spring-boot-starter-example true @@ -38,7 +38,7 @@ cn.hippo4j - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter ${revision} 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-config-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/apollo/ConfigApolloExampleApplication.java similarity index 86% rename from hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/apollo/Hippo4jCoreApolloExampleApplication.java rename to hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/apollo/ConfigApolloExampleApplication.java index 45fd972c..fb585712 100644 --- a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/apollo/Hippo4jCoreApolloExampleApplication.java +++ b/hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/apollo/ConfigApolloExampleApplication.java @@ -15,18 +15,17 @@ * limitations under the License. */ -package cn.hippo4j.example.core.apollo; +package cn.hippo4j.example.config.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 { +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.config") +public class ConfigApolloExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jCoreApolloExampleApplication.class, args); + SpringApplication.run(ConfigApolloExampleApplication.class, args); } - } diff --git a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties b/hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties similarity index 86% rename from hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties rename to hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties index 454edce8..c99cb42c 100644 --- a/hippo4j-example/hippo4j-core-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties +++ b/hippo4j-example/hippo4j-config-apollo-spring-boot-starter-example/src/main/resources/bootstrap.properties @@ -40,9 +40,8 @@ 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].alarm=true +spring.dynamic.thread-pool.executors[0].active-alarm=80 +spring.dynamic.thread-pool.executors[0].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=chen.ma diff --git a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/pom.xml similarity index 93% rename from hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml rename to hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/pom.xml index a07fe309..f5b7cffa 100644 --- a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/pom.xml +++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/pom.xml @@ -7,9 +7,7 @@ hippo4j-example ${revision} - - hippo4j-core-nacos-spring-boot-starter-example - ${project.artifactId} + hippo4j-config-nacos-spring-boot-starter-example true @@ -40,7 +38,7 @@ cn.hippo4j - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter ${revision} 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-config-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosExampleApplication.java similarity index 86% rename from hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/nacos/Hippo4jCoreNacosExampleApplication.java rename to hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosExampleApplication.java index d6ca7941..76847c66 100644 --- a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/nacos/Hippo4jCoreNacosExampleApplication.java +++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/nacos/ConfigNacosExampleApplication.java @@ -15,18 +15,18 @@ * limitations under the License. */ -package cn.hippo4j.example.core.nacos; +package cn.hippo4j.example.config.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 { +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.config") +public class ConfigNacosExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jCoreNacosExampleApplication.class, args); + SpringApplication.run(ConfigNacosExampleApplication.class, args); } } diff --git a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties b/hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties similarity index 82% rename from hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties rename to hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties index c6c6be70..0e456f90 100644 --- a/hippo4j-example/hippo4j-core-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties +++ b/hippo4j-example/hippo4j-config-nacos-spring-boot-starter-example/src/main/resources/bootstrap.properties @@ -18,7 +18,7 @@ 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.collect-type=prometheus spring.dynamic.thread-pool.check-state-interval=5 spring.dynamic.thread-pool.notify-platforms[0].platform=WECHAT @@ -42,10 +42,8 @@ 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].alarm=true +spring.dynamic.thread-pool.executors[0].active-alarm=80 +spring.dynamic.thread-pool.executors[0].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 +spring.dynamic.thread-pool.executors[0].notify.receives=chen.ma \ No newline at end of file diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/pom.xml similarity index 90% rename from hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml rename to hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/pom.xml index 09b82734..f68529f6 100644 --- a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/pom.xml +++ b/hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/pom.xml @@ -7,7 +7,7 @@ hippo4j-example ${revision} - hippo4j-core-zookeeper-spring-boot-starter-example + hippo4j-config-zookeeper-spring-boot-starter-example true @@ -26,7 +26,7 @@ cn.hippo4j - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter ${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-config-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/zookeeper/ConfigZookeeperExampleApplication.java similarity index 82% rename from hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/zookeeper/Hippo4jCoreZookeeperExampleApplication.java rename to hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/zookeeper/ConfigZookeeperExampleApplication.java index 4f843676..f047a8f3 100644 --- a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/core/zookeeper/Hippo4jCoreZookeeperExampleApplication.java +++ b/hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/java/cn/hippo4j/example/config/zookeeper/ConfigZookeeperExampleApplication.java @@ -15,21 +15,17 @@ * limitations under the License. */ -package cn.hippo4j.example.core.zookeeper; +package cn.hippo4j.example.config.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 { +@SpringBootApplication(scanBasePackages = "cn.hippo4j.example.config") +public class ConfigZookeeperExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jCoreZookeeperExampleApplication.class, args); + SpringApplication.run(ConfigZookeeperExampleApplication.class, args); } } diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/resources/application.properties similarity index 100% rename from hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/application.properties rename to hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/resources/application.properties diff --git a/hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties b/hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties similarity index 100% rename from hippo4j-example/hippo4j-core-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties rename to hippo4j-example/hippo4j-config-zookeeper-spring-boot-starter-example/src/main/resources/zookeeper-demo.properties 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/DynamicThreadPoolConfig.java similarity index 67% rename from hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/ThreadPoolConfig.java rename to hippo4j-example/hippo4j-example-core/src/main/java/cn/hippo4j/example/core/config/DynamicThreadPoolConfig.java index 14f21059..c581863a 100644 --- 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/DynamicThreadPoolConfig.java @@ -25,26 +25,25 @@ import com.alibaba.ttl.threadpool.TtlExecutors; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; +import static cn.hippo4j.common.constant.Constants.AVAILABLE_PROCESSORS; 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 + * Dynamic thread-pool config. */ @Slf4j @Configuration -public class ThreadPoolConfig { +public class DynamicThreadPoolConfig { @Bean @DynamicThreadPool - public ThreadPoolExecutor messageConsumeDynamicThreadPool() { + public Executor messageConsumeTtlDynamicThreadPool() { String threadPoolId = MESSAGE_CONSUME; ThreadPoolExecutor customExecutor = ThreadPoolBuilder.builder() .dynamicPool() @@ -55,7 +54,9 @@ public class ThreadPoolConfig { .awaitTerminationMillis(5000L) .taskDecorator(new TaskTraceBuilderHandler()) .build(); - return customExecutor; + // Ali ttl adaptation use case. + Executor ttlExecutor = TtlExecutors.getTtlExecutor(customExecutor); + return ttlExecutor; } @Bean @@ -70,44 +71,29 @@ public class ThreadPoolConfig { .waitForTasksToCompleteOnShutdown(true) .awaitTerminationMillis(5000L) /** - * 上下文传递,测试用例:{@link TaskDecoratorTest} + * Context passing, test cases: {@link TaskDecoratorTest} */ .taskDecorator(new TaskDecoratorTest.ContextCopyingDecorator()) .build(); return produceExecutor; } - @Bean + /** + * Test spring {@link ThreadPoolTaskExecutor}, Thread-pool id: testSpringThreadPoolTaskExecutor + * + * @return + */ + // @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; + public ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor() { + ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); + threadPoolTaskExecutor.setThreadNamePrefix("test-spring-task-executor_"); + int maxQueueCapacity = 200; + threadPoolTaskExecutor.setCorePoolSize(AVAILABLE_PROCESSORS * 2); + threadPoolTaskExecutor.setMaxPoolSize(AVAILABLE_PROCESSORS * 4); + threadPoolTaskExecutor.setQueueCapacity(maxQueueCapacity); + threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + threadPoolTaskExecutor.setTaskDecorator(new TaskDecoratorTest.ContextCopyingDecorator()); + return threadPoolTaskExecutor; } } 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 index f7137460..45ed4808 100644 --- 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 @@ -19,9 +19,6 @@ package cn.hippo4j.example.core.constant; /** * Global test variables. - * - * @author chen.ma - * @date 2021/8/15 21:06 */ public class GlobalTestConstant { 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 index 67a63b5f..cc5816d7 100644 --- 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 @@ -17,7 +17,7 @@ package cn.hippo4j.example.core.handler; -import cn.hippo4j.core.spi.CustomRejectedExecutionHandler; +import cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,10 +25,7 @@ import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; /** - * 自定义拒绝策略. - * - * @author chen.ma - * @date 2022/1/4 22:19 + * Custom Deny Policy. */ public class ErrorLogRejectedExecutionHandler implements CustomRejectedExecutionHandler { 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 index e6f89c15..d475d6eb 100644 --- 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 @@ -18,6 +18,7 @@ package cn.hippo4j.example.core.handler; import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.core.executor.support.ExecutorContext; import org.slf4j.MDC; import org.springframework.core.task.TaskDecorator; @@ -25,9 +26,6 @@ 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 { @@ -36,10 +34,10 @@ public final class TaskTraceBuilderHandler implements TaskDecorator { String executeTimeoutTrace = MDC.get(EXECUTE_TIMEOUT_TRACE); Runnable taskRun = () -> { if (StringUtil.isNotBlank(executeTimeoutTrace)) { - MDC.put(EXECUTE_TIMEOUT_TRACE, executeTimeoutTrace); + ExecutorContext.putExecuteTimeoutTrace(executeTimeoutTrace); } runnable.run(); - // 此处不用进行清理操作, 统一在线程任务执行后清理 + // There is no need to clean up here, and it will be cleaned up after the thread task is executed. }; 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 index 394b37cc..5fee289d 100644 --- 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 @@ -31,17 +31,14 @@ import java.util.concurrent.TimeUnit; /** * Test alarm send message. - * - * @author chen.ma - * @date 2021/8/15 21:03 */ @Slf4j @Component public class AlarmSendMessageTest { /** - * 测试报警通知. - * 如果需要运行此单测, 方法上添加 @PostConstruct + * Test alarm notification. + * If you need to run this single test, add @PostConstruct to the method. */ @SuppressWarnings("all") public void alarmSendMessageTest() { 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 index eae3e97e..d081f092 100644 --- 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 @@ -19,40 +19,61 @@ package cn.hippo4j.example.core.inittest; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterCoreNotifyParameter; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterServerNotifyParameter; import cn.hippo4j.common.toolkit.JSONUtil; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.message.enums.NotifyPlatformEnum; 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); + public static ThreadPoolExecutor registerDynamicThreadPool(String threadPoolId) { + DynamicThreadPoolRegisterParameter parameterInfo = DynamicThreadPoolRegisterParameter.builder() + .corePoolSize(1) + .maximumPoolSize(2) + .blockingQueueType(BlockingQueueTypeEnum.LINKED_BLOCKING_QUEUE) + .capacity(1024) + // TimeUnit.SECONDS + .keepAliveTime(1024L) + // TimeUnit.MILLISECONDS + .executeTimeOut(1024L) + .rejectedPolicyType(RejectedPolicyTypeEnum.DISCARD_POLICY) + .isAlarm(true) + .allowCoreThreadTimeOut(false) + .capacityAlarm(90) + .activeAlarm(90) + .threadPoolId(threadPoolId) + .threadNamePrefix(threadPoolId) + .build(); + // Core mode and server mode, you can choose one of them. + DynamicThreadPoolRegisterCoreNotifyParameter coreNotifyParameter = DynamicThreadPoolRegisterCoreNotifyParameter.builder() + .receives("chen.ma") + .interval(5) + .build(); + DynamicThreadPoolRegisterServerNotifyParameter serverNotifyParameter = DynamicThreadPoolRegisterServerNotifyParameter.builder() + .platform(NotifyPlatformEnum.WECHAT.name()) + .accessToken("7487d0a0-20ec-40ab-b67b-ce68db406b37") + .interval(10) + .receives("chen.ma") + .build(); DynamicThreadPoolRegisterWrapper registerWrapper = DynamicThreadPoolRegisterWrapper.builder() + .updateIfExists(true) + .notifyUpdateIfExists(true) .dynamicThreadPoolRegisterParameter(parameterInfo) + .dynamicThreadPoolRegisterCoreNotifyParameter(coreNotifyParameter) + .dynamicThreadPoolRegisterServerNotifyParameter(serverNotifyParameter) .build(); ThreadPoolExecutor dynamicThreadPool = GlobalThreadPoolManage.dynamicRegister(registerWrapper); log.info("Dynamic registration thread pool parameter details: {}", JSONUtil.toJSONString(dynamicThreadPool)); + return 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 index 3c48989f..a07f8624 100644 --- 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 @@ -25,7 +25,7 @@ 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.Executor; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -33,24 +33,25 @@ 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 + * Run state handler test. */ @Slf4j @Component public class RunStateHandlerTest { @Resource - private ThreadPoolExecutor messageConsumeDynamicThreadPool; + private Executor messageConsumeTtlDynamicThreadPool; @Resource private ThreadPoolExecutor messageProduceDynamicThreadPool; + /* + * @Resource private ThreadPoolTaskExecutor testSpringThreadPoolTaskExecutor; + */ + private final ThreadPoolExecutor runStateHandlerTestExecutor = new ThreadPoolExecutor( - 2, - 2, + 4, + 4, 0L, TimeUnit.MILLISECONDS, new SynchronousQueue<>(), @@ -66,24 +67,26 @@ public class RunStateHandlerTest { @SuppressWarnings("all") public void runStateHandlerTest() { log.info("Test thread pool runtime state interface..."); - - // 启动动态线程池模拟运行任务 - runTask(messageConsumeDynamicThreadPool); - // 启动动态线程池模拟运行任务 + // Start the dynamic thread pool to simulate running tasks + runTask(messageConsumeTtlDynamicThreadPool); runTask(messageProduceDynamicThreadPool); + // runTask(testThreadPoolTaskExecutor); + // Dynamically register thread pool + ThreadPoolExecutor registerDynamicThreadPool = RegisterDynamicThreadPoolTest.registerDynamicThreadPool("auto-register-dynamic-thread-pool"); + runTask(registerDynamicThreadPool); } - private void runTask(ExecutorService executorService) { - // 模拟任务运行 + private void runTask(Executor executor) { + // Simulate task run runStateHandlerTestExecutor.execute(() -> { /** - * 当线程池任务执行超时, 向 MDC 放入 Trace 标识, 报警时打印出来. + * When the execution of the thread pool task times out, the Trace flag is put into the MDC, and it is printed out when an alarm occurs. */ - MDC.put(EXECUTE_TIMEOUT_TRACE, "https://github.com/opengoofy/hippo4j 感觉不错来个 Star."); + MDC.put(EXECUTE_TIMEOUT_TRACE, "39948722194639841.251.16612352194691531"); ThreadUtil.sleep(5000); for (int i = 0; i < Integer.MAX_VALUE; i++) { try { - executorService.execute(() -> { + executor.execute(() -> { try { int maxRandom = 10; int temp = 2; @@ -94,12 +97,10 @@ public class RunStateHandlerTest { } else { Thread.sleep(3000); } - } catch (InterruptedException e) { - // ignore + } catch (InterruptedException ignored) { } }); - } catch (Exception ex) { - // ignore + } catch (Exception ignored) { } 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 index 3de161f1..4e08a080 100644 --- 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 @@ -32,9 +32,6 @@ import java.util.concurrent.TimeUnit; /** * TaskDecorator test. - * - * @author chen.ma - * @date 2021/11/28 13:01 */ @Slf4j @Component @@ -57,21 +54,17 @@ public class TaskDecoratorTest { new ThreadPoolExecutor.AbortPolicy()); /** - * 测试动态线程池传递 {@link TaskDecorator} - * 如果需要运行此单测, 方法上添加 @PostConstruct + * Test dynamic thread pool passing {@link TaskDecorator} + * If you need to run this single test, add @PostConstruct to the method. */ public void taskDecoratorTest() { taskDecoratorTestExecutor.execute(() -> { - MDC.put(PLACEHOLDER, "查看官网: https://www.hippox.cn"); + MDC.put(PLACEHOLDER, "View the official website: https://www.hippo4j.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)); + log.info("Pass context via taskDecorator MDC: {}", MDC.get(PLACEHOLDER)); }); }); } 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/ServerAdapterKafkaExampleApplication.java similarity index 89% rename from hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/Hippo4jAdapterKafkaExampleApplication.java rename to hippo4j-example/hippo4j-spring-boot-starter-adapter-kafka-example/src/main/java/cn/hippo4j/springboot/starter/adapter/kafka/example/ServerAdapterKafkaExampleApplication.java index e4c0e80a..89b8c40b 100644 --- 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/ServerAdapterKafkaExampleApplication.java @@ -23,9 +23,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDynamicThreadPool -public class Hippo4jAdapterKafkaExampleApplication { +public class ServerAdapterKafkaExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jAdapterKafkaExampleApplication.class, args); + SpringApplication.run(ServerAdapterKafkaExampleApplication.class, args); } } 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/ServerAdapterRabbitMQExampleApplication.java similarity index 89% rename from hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/Hippo4jAdapterRabbitMQExampleApplication.java rename to hippo4j-example/hippo4j-spring-boot-starter-adapter-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rabbitmq/example/ServerAdapterRabbitMQExampleApplication.java index 357de7cf..49d40cc8 100644 --- 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/ServerAdapterRabbitMQExampleApplication.java @@ -23,9 +23,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDynamicThreadPool @SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.springboot.starter.adapter.rabbitmq.example"}) -public class Hippo4jAdapterRabbitMQExampleApplication { +public class ServerAdapterRabbitMQExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jAdapterRabbitMQExampleApplication.class, args); + SpringApplication.run(ServerAdapterRabbitMQExampleApplication.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/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 index ca24ff83..d53d8f30 100644 --- 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 @@ -26,9 +26,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; /** - * @author : wh - * @date : 2022/5/24 10:02 - * @description: + * RabbitMQ thread-pool config. */ @Configuration public class RabbitMQThreadPoolConfig { @@ -36,11 +34,11 @@ public class RabbitMQThreadPoolConfig { @Bean public ThreadPoolTaskExecutor rabbitListenerTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - // 指定线程的最大数量 + // Specify the maximum number of threads. executor.setMaxPoolSize(5); - // 指定线程池维护线程的最少数量 + // Specifies the minimum number of thread pool maintenance threads. executor.setCorePoolSize(5); - // 指定等待处理的任务数 + // Specifies the number of tasks waiting to be processed. executor.setQueueCapacity(1000); executor.setThreadNamePrefix("RabbitListenerTaskExecutor-"); return executor; 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/ServerAdapterRocketMQExampleApplication.java similarity index 89% rename from hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/Hippo4jAdapterRocketMQExampleApplication.java rename to hippo4j-example/hippo4j-spring-boot-starter-adapter-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/rocketmq/example/ServerAdapterRocketMQExampleApplication.java index 00b4348c..25aac473 100644 --- 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/ServerAdapterRocketMQExampleApplication.java @@ -23,9 +23,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDynamicThreadPool @SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.springboot.starter.adapter.rocketmq.example"}) -public class Hippo4jAdapterRocketMQExampleApplication { +public class ServerAdapterRocketMQExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jAdapterRocketMQExampleApplication.class, args); + SpringApplication.run(ServerAdapterRocketMQExampleApplication.class, args); } } diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/pom.xml new file mode 100644 index 00000000..65322198 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-example + ${revision} + + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example + + + true + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-json + + + + com.alibaba + fastjson + 1.2.83 + + + + org.projectlombok + lombok + + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq + ${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-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.java new file mode 100644 index 00000000..29fb37d7 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/MessageProduce.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.adapter.springcloud.stream.rabbitmq.example; + +import cn.hippo4j.example.core.dto.SendMessageDTO; +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.stream.function.StreamBridge; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +/** + * Message produce. + */ +@Slf4j +@RestController +@AllArgsConstructor +public class MessageProduce { + + private final StreamBridge streamBridge; + + @GetMapping("/message/send") + public String sendMessage(@RequestParam(required = false) Integer maxSendSize) { + if (maxSendSize == null) { + maxSendSize = 10; + } + for (int i = 0; i < maxSendSize; i++) { + sendMessage0(); + } + return "success"; + } + + private void sendMessage0() { + String keys = UUID.randomUUID().toString(); + SendMessageDTO payload = SendMessageDTO.builder() + .receiver("156011xxx91") + .uid(keys) + .build(); + long startTime = System.currentTimeMillis(); + boolean sendResult = false; + try { + sendResult = streamBridge.send("demoOutput", payload); + } 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-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/ServerAdapterSpringCloudStreamRabbitMQApplication.java b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/ServerAdapterSpringCloudStreamRabbitMQApplication.java new file mode 100644 index 00000000..1f0f3c74 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/example/ServerAdapterSpringCloudStreamRabbitMQApplication.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.springcloud.stream.rabbitmq.example; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; + +import java.util.function.Consumer; + +@Slf4j +@EnableDynamicThreadPool +@SpringBootApplication +public class ServerAdapterSpringCloudStreamRabbitMQApplication { + + public static void main(String[] args) { + SpringApplication.run(ServerAdapterSpringCloudStreamRabbitMQApplication.class, args); + } + + @Bean + public Consumer> demoInput() { + return message -> { + MessageHeaders headers = message.getHeaders(); + log.info("Input current thread name: {} ,{} received from partition {}", + Thread.currentThread().getName(), + JSON.toJSONString(message.getPayload()), + headers.get(AmqpHeaders.CONSUMER_QUEUE)); + }; + } + +} diff --git a/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/resources/application.properties b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/resources/application.properties new file mode 100644 index 00000000..813a9f87 --- /dev/null +++ b/hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq-example/src/main/resources/application.properties @@ -0,0 +1,28 @@ +server.port=8090 +logging.level.org.springframework.amqp. + +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.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=root +spring.rabbitmq.password=123456 +spring.rabbitmq.virtual-host=/ + +# Please replace the local configuration. +spring.cloud.stream.binders.defaultRabbit.type=rabbit + +# === produce === +spring.cloud.stream.bindings.demoOutput.destination=exchange-demo +spring.cloud.stream.bindings.demoOutput.content-type=application/json + +# === consume === +spring.cloud.stream.bindings.demoInput-in-0.destination=exchange-demo +spring.cloud.stream.bindings.demoInput-in-0.content-type=application/json +spring.cloud.stream.bindings.demoInput-in-0.group=myGroup +spring.cloud.stream.bindings.demoInput-in-0.consumer.concurrency=1 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/ServerAdapterSpringCloudStreamRocketMQApplication.java similarity index 89% rename from 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 rename to hippo4j-example/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rocketmq/example/ServerAdapterSpringCloudStreamRocketMQApplication.java index 0392fab7..9917c82a 100644 --- 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/ServerAdapterSpringCloudStreamRocketMQApplication.java @@ -28,9 +28,9 @@ import org.springframework.cloud.stream.messaging.Source; @EnableDynamicThreadPool @EnableBinding({Source.class, MySink.class}) @SpringBootApplication -public class Hippo4jAdapterSpringCloudStreamRocketMQApplication { +public class ServerAdapterSpringCloudStreamRocketMQApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4jAdapterSpringCloudStreamRocketMQApplication.class, args); + SpringApplication.run(ServerAdapterSpringCloudStreamRocketMQApplication.class, args); } } 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 index 838a0c6b..7ce81a3c 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml +++ b/hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/pom.xml @@ -22,7 +22,7 @@ cn.hippo4j - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter ${revision} @@ -39,7 +39,7 @@ cn.hippo4j - hippo4j-spring-boot-starter-monitor-es + hippo4j-spring-boot-starter-monitor-elasticsearch ${revision} 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/ServerEsMonitorExampleApplication.java similarity index 90% rename from hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/Hippo4JExampleEsMonitorApplication.java rename to hippo4j-example/hippo4j-spring-boot-starter-es-monitor-example/src/main/java/cn/hippo4j/example/es/monitor/ServerEsMonitorExampleApplication.java index 83903493..0a5a1455 100644 --- 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/ServerEsMonitorExampleApplication.java @@ -23,9 +23,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDynamicThreadPool @SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.monitor"}) -public class Hippo4JExampleEsMonitorApplication { +public class ServerEsMonitorExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4JExampleEsMonitorApplication.class, args); + SpringApplication.run(ServerEsMonitorExampleApplication.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 index 76febf01..531e8bfd 100644 --- 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 @@ -35,7 +35,7 @@ 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].alarm=true +spring.dynamic.thread-pool.executors[0].capacity-alarm=20 spring.dynamic.thread-pool.executors[0].notify.interval=2 -spring.dynamic.thread-pool.executors[0].notify.receive=xxx +spring.dynamic.thread-pool.executors[0].notify.receives=chen.ma diff --git a/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml b/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml index 84572a63..b7436599 100644 --- a/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml +++ b/hippo4j-example/hippo4j-spring-boot-starter-example/pom.xml @@ -36,6 +36,12 @@ spring-boot-starter-actuator + + cn.hippo4j + hippo4j-spring-boot-starter-monitor-prometheus + ${revision} + + org.springframework.boot spring-boot-starter-web 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/ServerExampleApplication.java similarity index 90% rename from hippo4j-example/hippo4j-spring-boot-starter-example/src/main/java/cn/hippo4j/example/server/Hippo4JServerExampleApplication.java rename to hippo4j-example/hippo4j-spring-boot-starter-example/src/main/java/cn/hippo4j/example/server/ServerExampleApplication.java index 87871a8d..ce9a3a6d 100644 --- 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/ServerExampleApplication.java @@ -23,9 +23,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDynamicThreadPool @SpringBootApplication(scanBasePackages = {"cn.hippo4j.example.core", "cn.hippo4j.example.server"}) -public class Hippo4JServerExampleApplication { +public class ServerExampleApplication { public static void main(String[] args) { - SpringApplication.run(Hippo4JServerExampleApplication.class, args); + SpringApplication.run(ServerExampleApplication.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.common.executor.support.CustomRejectedExecutionHandler similarity index 100% rename from hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/META-INF/services/cn.hippo4j.core.spi.CustomRejectedExecutionHandler rename to hippo4j-example/hippo4j-spring-boot-starter-example/src/main/resources/META-INF/services/cn.hippo4j.common.executor.support.CustomRejectedExecutionHandler diff --git a/hippo4j-example/pom.xml b/hippo4j-example/pom.xml index c23f118e..a8159637 100644 --- a/hippo4j-example/pom.xml +++ b/hippo4j-example/pom.xml @@ -14,11 +14,12 @@ 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-config-nacos-spring-boot-starter-example + hippo4j-config-apollo-spring-boot-starter-example + hippo4j-config-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-rabbitmq-example hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rocketmq-example hippo4j-spring-boot-starter-adapter-rocketmq-example 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 index 00ae2c63..d0c2f5c9 100644 --- a/hippo4j-message/src/main/java/cn/hippo4j/message/service/ThreadPoolNotifyAlarm.java +++ b/hippo4j-message/src/main/java/cn/hippo4j/message/service/ThreadPoolNotifyAlarm.java @@ -22,8 +22,6 @@ import lombok.NoArgsConstructor; import lombok.NonNull; import lombok.RequiredArgsConstructor; -import java.util.Map; - /** * Thread pool notify alarm. */ @@ -55,16 +53,8 @@ public class ThreadPoolNotifyAlarm { */ 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; + private String receives; } 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/cn/hippo4j/monitor/base/AbstractDynamicThreadPoolMonitor.java similarity index 98% rename from hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/AbstractDynamicThreadPoolMonitor.java rename to hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/AbstractDynamicThreadPoolMonitor.java index ec36de7e..b3944cc4 100644 --- a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/AbstractDynamicThreadPoolMonitor.java +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/AbstractDynamicThreadPoolMonitor.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.example.monitor.base; +package cn.hippo4j.monitor.base; import cn.hippo4j.common.model.ThreadPoolRunStateInfo; import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; 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/cn/hippo4j/monitor/base/DynamicThreadPoolMonitor.java similarity index 96% rename from hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/DynamicThreadPoolMonitor.java rename to hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/DynamicThreadPoolMonitor.java index 171df74e..e3135db4 100644 --- a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/DynamicThreadPoolMonitor.java +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/DynamicThreadPoolMonitor.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.example.monitor.base; +package cn.hippo4j.monitor.base; /** * Dynamic thread-pool monitor. 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/cn/hippo4j/monitor/base/MonitorTypeEnum.java similarity index 93% rename from hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/MonitorTypeEnum.java rename to hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/MonitorTypeEnum.java index 08237364..4c5945db 100644 --- a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/MonitorTypeEnum.java +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/MonitorTypeEnum.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.example.monitor.base; +package cn.hippo4j.monitor.base; /** * Monitor type enum. @@ -38,7 +38,7 @@ public enum MonitorTypeEnum { SERVER, /** - * ES + * ELASTICSEARCH */ - ES + ELASTICSEARCH } 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/cn/hippo4j/monitor/base/ThreadPoolMonitor.java similarity index 96% rename from hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/ThreadPoolMonitor.java rename to hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/ThreadPoolMonitor.java index dc3d0c26..81159992 100644 --- a/hippo4j-monitor/hippo4j-monitor-base/src/main/java/com/example/monitor/base/ThreadPoolMonitor.java +++ b/hippo4j-monitor/hippo4j-monitor-base/src/main/java/cn/hippo4j/monitor/base/ThreadPoolMonitor.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.example.monitor.base; +package cn.hippo4j.monitor.base; /** * Thread-pool monitor. diff --git a/hippo4j-monitor/hippo4j-monitor-es/pom.xml b/hippo4j-monitor/hippo4j-monitor-elasticsearch/pom.xml similarity index 97% rename from hippo4j-monitor/hippo4j-monitor-es/pom.xml rename to hippo4j-monitor/hippo4j-monitor-elasticsearch/pom.xml index 5becf5d8..80dd5dca 100644 --- a/hippo4j-monitor/hippo4j-monitor-es/pom.xml +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/pom.xml @@ -7,7 +7,7 @@ hippo4j-monitor ${revision} - hippo4j-monitor-es + hippo4j-monitor-elasticsearch 6.8.17 diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java similarity index 93% rename from hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java rename to hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java index 0d67adb2..5b524648 100644 --- a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsClientHolder.java @@ -18,6 +18,7 @@ package cn.hippo4j.monitor.es; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.toolkit.StringUtil; import com.google.common.base.Throwables; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; @@ -27,21 +28,22 @@ 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 + * Elastic-search client holder. */ @Slf4j public class EsClientHolder { private static String host; + private static String scheme; + private static String userName; + private static String password; private static RestHighLevelClient client; @@ -53,16 +55,13 @@ public class EsClientHolder { 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)) { + if (StringUtil.isNullOrEmpty(userName) || StringUtil.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) { @@ -72,7 +71,7 @@ public class EsClientHolder { } private static BasicCredentialsProvider getCredentialsProvider() { - if (!Strings.isNullOrEmpty(userName) && !Strings.isNullOrEmpty(password)) { + if (!StringUtil.isNullOrEmpty(userName) && !StringUtil.isNullOrEmpty(password)) { final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); @@ -94,5 +93,4 @@ public class EsClientHolder { } return hosts; } - } diff --git a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java similarity index 96% rename from hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java rename to hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java index e0c358bd..b75a4b76 100644 --- a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/EsMonitorHandler.java @@ -24,8 +24,8 @@ 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 cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; +import cn.hippo4j.monitor.base.MonitorTypeEnum; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.action.admin.indices.alias.Alias; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; @@ -46,6 +46,10 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Elastic-search monitor handler. + */ @Slf4j public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { @@ -59,18 +63,15 @@ public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { 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); @@ -78,13 +79,11 @@ public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { 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) { @@ -144,6 +143,6 @@ public class EsMonitorHandler extends AbstractDynamicThreadPoolMonitor { @Override public String getType() { - return MonitorTypeEnum.ES.name().toLowerCase(); + return MonitorTypeEnum.ELASTICSEARCH.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-elasticsearch/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java similarity index 95% rename from hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java rename to hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java index 3fc0deb7..e4cdcae3 100644 --- a/hippo4j-monitor/hippo4j-monitor-es/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java +++ b/hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/java/cn/hippo4j/monitor/es/model/EsThreadPoolRunStateInfo.java @@ -22,8 +22,7 @@ import lombok.Getter; import lombok.Setter; /** - * Create by yuyang - * 2022/8/4 17:17 + * Elastic-search thread-pool run state info. */ @Getter @Setter @@ -32,5 +31,4 @@ 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-elasticsearch/src/main/resources/mapping.json similarity index 100% rename from hippo4j-monitor/hippo4j-monitor-es/src/main/resources/mapping.json rename to hippo4j-monitor/hippo4j-monitor-elasticsearch/src/main/resources/mapping.json diff --git a/hippo4j-monitor/hippo4j-monitor-log/pom.xml b/hippo4j-monitor/hippo4j-monitor-local-log/pom.xml similarity index 97% rename from hippo4j-monitor/hippo4j-monitor-log/pom.xml rename to hippo4j-monitor/hippo4j-monitor-local-log/pom.xml index e1b346d1..52dcfe16 100644 --- a/hippo4j-monitor/hippo4j-monitor-log/pom.xml +++ b/hippo4j-monitor/hippo4j-monitor-local-log/pom.xml @@ -7,7 +7,7 @@ hippo4j-monitor ${revision} - hippo4j-monitor-log + hippo4j-monitor-local-log diff --git a/hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java b/hippo4j-monitor/hippo4j-monitor-local-log/src/main/java/cn/hippo4j/monitor/local/log/LocalLogMonitorHandler.java similarity index 79% rename from hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java rename to hippo4j-monitor/hippo4j-monitor-local-log/src/main/java/cn/hippo4j/monitor/local/log/LocalLogMonitorHandler.java index c60cf947..83c7b28e 100644 --- a/hippo4j-monitor/hippo4j-monitor-log/src/main/java/cn/hippo4j/monitor/log/LogMonitorHandler.java +++ b/hippo4j-monitor/hippo4j-monitor-local-log/src/main/java/cn/hippo4j/monitor/local/log/LocalLogMonitorHandler.java @@ -15,22 +15,22 @@ * limitations under the License. */ -package cn.hippo4j.monitor.log; +package cn.hippo4j.monitor.local.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 cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; +import cn.hippo4j.monitor.base.MonitorTypeEnum; import lombok.extern.slf4j.Slf4j; /** - * Log monitor handler. + * Local log monitor handler. */ @Slf4j -public class LogMonitorHandler extends AbstractDynamicThreadPoolMonitor { +public class LocalLogMonitorHandler extends AbstractDynamicThreadPoolMonitor { - public LogMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + public LocalLogMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { super(threadPoolRunStateHandler); } 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 index 22e6fc6a..c5dc22c3 100644 --- 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 @@ -21,8 +21,8 @@ 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 cn.hippo4j.monitor.base.AbstractDynamicThreadPoolMonitor; +import cn.hippo4j.monitor.base.MonitorTypeEnum; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import io.micrometer.core.instrument.Metrics; diff --git a/hippo4j-monitor/pom.xml b/hippo4j-monitor/pom.xml index bfbf1079..7921a05c 100644 --- a/hippo4j-monitor/pom.xml +++ b/hippo4j-monitor/pom.xml @@ -12,8 +12,8 @@ hippo4j-monitor-base - hippo4j-monitor-es - hippo4j-monitor-log + hippo4j-monitor-elasticsearch + hippo4j-monitor-local-log hippo4j-monitor-prometheus diff --git a/hippo4j-server/Dockerfile b/hippo4j-server/Dockerfile new file mode 100644 index 00000000..e53fe44c --- /dev/null +++ b/hippo4j-server/Dockerfile @@ -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. + +FROM openjdk:8-jre-slim +MAINTAINER lijianxin + +ENV MYSQL_HOST="127.0.0.1" \ + MYSQL_PORT="3306" \ + MYSQL_DB="hippo4j_manager" \ + MYSQL_USERNAME="root" \ + MYSQL_PASSWORD="root" \ + BASE_DIR="/opt/hippo4j" + +ENV TZ=PRC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +ADD conf/hippo4j-logback.xml ${BASE_DIR}/logback.xml +ADD target/hippo4j-server.jar ${BASE_DIR}/hippo4j-server.jar + +WORKDIR ${BASE_DIR} + +ENTRYPOINT ["sh","-c","java -jar \ + -Xloggc:${BASE_DIR}/hippo4j_gc.log -verbose:gc -XX:+PrintGCDetails \ + -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation \ + -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M \ + -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/java_heapdump.hprof \ + -Xms1024m -Xmx1024m -Xmn512m \ + -Dhippo4j.standalone=true -Dhippo4j.home=${BASE_DIR} \ + hippo4j-server.jar \ + --server.max-http-header-size=524288 --server.tomcat.basedir=${BASE_DIR}/tomcat/ \ + --logging.config=${BASE_DIR}/logback.xml \ + --spring.datasource.url=\"jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT/$MYSQL_DB?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8\" \ + --spring.datasource.username=$MYSQL_USERNAME --spring.datasource.password=$MYSQL_PASSWORD \ + "] \ No newline at end of file diff --git a/hippo4j-server/conf/hippo4j_manager.sql b/hippo4j-server/conf/hippo4j_manager.sql index 7f25d307..f3b4850e 100644 --- a/hippo4j-server/conf/hippo4j_manager.sql +++ b/hippo4j-server/conf/hippo4j_manager.sql @@ -232,3 +232,8 @@ 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 */ + +/* 1.4.0 Upgrade Start */ +ALTER TABLE config Modify COLUMN keep_alive_time int(11) COMMENT '线程存活时间(秒)'; +ALTER TABLE config Add execute_time_out int(11) COMMENT '执行超时时间(毫秒)' AFTER keep_alive_time; +/* 1.4.0 Upgrade Start */ diff --git a/hippo4j-server/conf/sql-upgrade/1.4.0_upgrade.sql b/hippo4j-server/conf/sql-upgrade/1.4.0_upgrade.sql new file mode 100644 index 00000000..9b995aa7 --- /dev/null +++ b/hippo4j-server/conf/sql-upgrade/1.4.0_upgrade.sql @@ -0,0 +1,3 @@ +ALTER TABLE config Modify COLUMN keep_alive_time int(11) COMMENT '线程存活时间(秒)'; + +ALTER TABLE config Add execute_time_out int(11) COMMENT '执行超时时间(毫秒)' AFTER keep_alive_time; diff --git a/hippo4j-server/pom.xml b/hippo4j-server/pom.xml index dbf7d139..35fda466 100644 --- a/hippo4j-server/pom.xml +++ b/hippo4j-server/pom.xml @@ -87,6 +87,23 @@ + + + com.spotify + docker-maven-plugin + 1.2.2 + + ${project.artifactId}:${project.version} + ${project.basedir} + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + + diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml similarity index 91% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml index 6754a642..9c3ed8e7 100644 --- a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/pom.xml +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/pom.xml @@ -7,7 +7,7 @@ hippo4j-spring-boot ${revision} - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter @@ -56,6 +56,14 @@ true + + io.etcd + jetcd-core + ${jetcd.version} + compile + true + + org.springframework.boot spring-boot-configuration-processor @@ -75,7 +83,7 @@ cn.hippo4j - hippo4j-spring-boot-starter-monitor-log + hippo4j-spring-boot-starter-monitor-local-log ${revision} 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/common/ConfigFileTypeEnum.java similarity index 96% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/common/ConfigFileTypeEnum.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/common/ConfigFileTypeEnum.java index 4fc820a1..6a676163 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/common/ConfigFileTypeEnum.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.common; +package cn.hippo4j.config.springboot.starter.common; /** * Config file type enum. 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/AdapterExecutorProperties.java similarity index 95% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/AdapterExecutorProperties.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/AdapterExecutorProperties.java index 9328b6de..f78a2539 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/AdapterExecutorProperties.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.springboot.starter.config; import lombok.Data; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/BootstrapConfigProperties.java similarity index 80% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/BootstrapCoreProperties.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/BootstrapConfigProperties.java index 93696763..8a534f69 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/BootstrapConfigProperties.java @@ -15,24 +15,25 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.springboot.starter.config; + +import java.util.List; +import java.util.Map; import cn.hippo4j.core.config.BootstrapPropertiesInterface; -import cn.hippo4j.core.springboot.starter.parser.ConfigFileTypeEnum; +import cn.hippo4j.config.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; +import org.springframework.boot.context.properties.ConfigurationProperties; /** * Bootstrap core properties. */ @Getter @Setter -@ConfigurationProperties(prefix = BootstrapCoreProperties.PREFIX) -public class BootstrapCoreProperties implements BootstrapPropertiesInterface { +@ConfigurationProperties(prefix = BootstrapConfigProperties.PREFIX) +public class BootstrapConfigProperties implements BootstrapPropertiesInterface { public static final String PREFIX = "spring.dynamic.thread-pool"; @@ -86,6 +87,11 @@ public class BootstrapCoreProperties implements BootstrapPropertiesInterface { */ private Map zookeeper; + /** + * etcd config + */ + private Map etcd; + /** * Tomcat thread pool config. */ @@ -107,43 +113,23 @@ public class BootstrapCoreProperties implements BootstrapPropertiesInterface { */ 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. + * Default dynamic thread pool configuration. */ - private String receive; + private ExecutorProperties defaultExecutor; /** - * Executors. + * Dynamic thread pool configuration collection. */ private List executors; /** - * Adapter executors + * Tripartite framework thread pool adaptation set. */ 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java similarity index 67% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ConfigHandlerConfiguration.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java index ab25a586..0685a0a3 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ConfigHandlerConfiguration.java @@ -15,14 +15,16 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.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 cn.hippo4j.config.springboot.starter.refresher.ApolloRefresherHandler; +import cn.hippo4j.config.springboot.starter.refresher.NacosCloudRefresherHandler; +import cn.hippo4j.config.springboot.starter.refresher.NacosRefresherHandler; +import cn.hippo4j.config.springboot.starter.refresher.ZookeeperRefresherHandler; +import cn.hippo4j.config.springboot.starter.refresher.EtcdRefresherHandler; import com.alibaba.cloud.nacos.NacosConfigManager; import com.alibaba.nacos.api.config.ConfigService; +import io.etcd.jetcd.Client; import lombok.RequiredArgsConstructor; import org.apache.curator.framework.CuratorFramework; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -45,22 +47,24 @@ public class ConfigHandlerConfiguration { private static final String ZOOKEEPER_CONNECT_STR_KEY = "zookeeper.zk-connect-str"; + private static final String ETCD = "endpoints"; + @RequiredArgsConstructor @ConditionalOnClass(ConfigService.class) @ConditionalOnMissingClass(NACOS_CONFIG_MANAGER_KEY) - @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = NACOS_DATA_ID_KEY) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = NACOS_DATA_ID_KEY) static class EmbeddedNacos { - public final BootstrapCoreProperties bootstrapCoreProperties; + public final BootstrapConfigProperties bootstrapConfigProperties; @Bean public NacosRefresherHandler nacosRefresherHandler() { - return new NacosRefresherHandler(bootstrapCoreProperties); + return new NacosRefresherHandler(bootstrapConfigProperties); } } @ConditionalOnClass(NacosConfigManager.class) - @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = NACOS_DATA_ID_KEY) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = NACOS_DATA_ID_KEY) static class EmbeddedNacosCloud { @Bean @@ -70,7 +74,7 @@ public class ConfigHandlerConfiguration { } @ConditionalOnClass(com.ctrip.framework.apollo.ConfigService.class) - @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = APOLLO_NAMESPACE_KEY) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = APOLLO_NAMESPACE_KEY) static class EmbeddedApollo { @Bean @@ -80,7 +84,7 @@ public class ConfigHandlerConfiguration { } @ConditionalOnClass(CuratorFramework.class) - @ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, name = ZOOKEEPER_CONNECT_STR_KEY) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = ZOOKEEPER_CONNECT_STR_KEY) static class EmbeddedZookeeper { @Bean @@ -88,4 +92,15 @@ public class ConfigHandlerConfiguration { return new ZookeeperRefresherHandler(); } } + + @ConditionalOnClass(Client.class) + @ConditionalOnProperty(prefix = BootstrapConfigProperties.PREFIX, name = ETCD) + static class EmbeddedEtcd { + + @Bean + public EtcdRefresherHandler etcdRefresher() { + return new EtcdRefresherHandler(); + } + } + } 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java similarity index 58% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java index ec672a43..fd8ce8f5 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolCoreAutoConfiguration.java @@ -15,21 +15,22 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.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.config.springboot.starter.monitor.DynamicThreadPoolMonitorExecutor; +import cn.hippo4j.config.springboot.starter.notify.CoreNotifyConfigBuilder; +import cn.hippo4j.config.springboot.starter.refresher.event.AdapterExecutorsRefreshListener; +import cn.hippo4j.config.springboot.starter.refresher.event.DynamicThreadPoolRefreshListener; +import cn.hippo4j.config.springboot.starter.refresher.event.PlatformsRefreshListener; +import cn.hippo4j.config.springboot.starter.refresher.event.WebExecutorRefreshListener; +import cn.hippo4j.config.springboot.starter.support.DynamicThreadPoolAdapterRegister; +import cn.hippo4j.config.springboot.starter.support.DynamicThreadPoolConfigService; +import cn.hippo4j.config.springboot.starter.support.DynamicThreadPoolPostProcessor; import cn.hippo4j.message.api.NotifyConfigBuilder; import cn.hippo4j.message.config.MessageConfiguration; import cn.hippo4j.message.service.AlarmControlHandler; @@ -53,16 +54,16 @@ import org.springframework.core.annotation.Order; @Configuration @AllArgsConstructor @ConditionalOnBean(MarkerConfiguration.Marker.class) -@EnableConfigurationProperties(BootstrapCoreProperties.class) +@EnableConfigurationProperties(BootstrapConfigProperties.class) @ImportAutoConfiguration({UtilAutoConfiguration.class, MessageConfiguration.class}) -@ConditionalOnProperty(prefix = BootstrapCoreProperties.PREFIX, value = "enable", matchIfMissing = true, havingValue = "true") +@ConditionalOnProperty(prefix = BootstrapConfigProperties.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; + private final BootstrapConfigProperties bootstrapConfigProperties; @Bean @ConditionalOnMissingBean @@ -73,7 +74,7 @@ public class DynamicThreadPoolCoreAutoConfiguration { @Bean public NotifyConfigBuilder notifyConfigBuilder(AlarmControlHandler alarmControlHandler) { - return new CoreNotifyConfigBuilder(alarmControlHandler, bootstrapCoreProperties); + return new CoreNotifyConfigBuilder(alarmControlHandler, bootstrapConfigProperties); } @Bean @@ -83,44 +84,49 @@ public class DynamicThreadPoolCoreAutoConfiguration { @Bean public DynamicThreadPoolPostProcessor dynamicThreadPoolPostProcessor(ApplicationContextHolder hippo4JApplicationContextHolder) { - return new DynamicThreadPoolPostProcessor(bootstrapCoreProperties); + return new DynamicThreadPoolPostProcessor(bootstrapConfigProperties); } @Bean public DynamicThreadPoolMonitorExecutor hippo4jDynamicThreadPoolMonitorExecutor() { - return new DynamicThreadPoolMonitorExecutor(bootstrapCoreProperties); + return new DynamicThreadPoolMonitorExecutor(bootstrapConfigProperties); } @Bean @SuppressWarnings("all") - public ExecutorsListener hippo4jExecutorsListener(ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler, - CoreNotifyConfigBuilder coreNotifyConfigBuilder, - Hippo4jBaseSendMessageService hippoBaseSendMessageService) { - return new ExecutorsListener(threadPoolNotifyAlarmHandler, coreNotifyConfigBuilder, hippoBaseSendMessageService); + public DynamicThreadPoolRefreshListener hippo4jExecutorsListener(ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler, + CoreNotifyConfigBuilder coreNotifyConfigBuilder, + Hippo4jBaseSendMessageService hippoBaseSendMessageService) { + return new DynamicThreadPoolRefreshListener(threadPoolNotifyAlarmHandler, coreNotifyConfigBuilder, hippoBaseSendMessageService); } @Bean - public AdapterExecutorsListener hippo4jAdapterExecutorsListener() { - return new AdapterExecutorsListener(); + public AdapterExecutorsRefreshListener hippo4jAdapterExecutorsListener() { + return new AdapterExecutorsRefreshListener(); } @Bean - public PlatformsListener hippo4jPlatformsListener() { - return new PlatformsListener(); + public PlatformsRefreshListener hippo4jPlatformsListener() { + return new PlatformsRefreshListener(); } @Bean - public WebExecutorListener hippo4jWebExecutorListener() { - return new WebExecutorListener(); + public WebExecutorRefreshListener hippo4jWebExecutorListener() { + return new WebExecutorRefreshListener(); } @Bean - public ThreadPoolAdapterRegister threadPoolAdapterRegister() { - return new ThreadPoolAdapterRegister(bootstrapCoreProperties); + public DynamicThreadPoolAdapterRegister threadPoolAdapterRegister() { + return new DynamicThreadPoolAdapterRegister(bootstrapConfigProperties); } @Bean public DynamicThreadPoolBannerHandler threadPoolBannerHandler() { - return new DynamicThreadPoolBannerHandler(bootstrapCoreProperties); + return new DynamicThreadPoolBannerHandler(bootstrapConfigProperties); + } + + @Bean + public DynamicThreadPoolConfigService dynamicThreadPoolConfigService() { + return new DynamicThreadPoolConfigService(); } } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolNotifyProperties.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolNotifyProperties.java new file mode 100644 index 00000000..8f94c1a5 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/DynamicThreadPoolNotifyProperties.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.springboot.starter.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Dynamic thread-pool notify properties. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DynamicThreadPoolNotifyProperties { + + /** + * Thread pool run alarm interval. unit: s + */ + private Integer interval; + + /** + * Receives + */ + private String receives; +} 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ExecutorProperties.java similarity index 78% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/ExecutorProperties.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ExecutorProperties.java index dbcf4973..71cc5f69 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/ExecutorProperties.java @@ -15,20 +15,21 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.springboot.starter.config; -import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; -import com.google.common.collect.Maps; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import java.util.Map; -import java.util.Objects; - /** * Executor properties. */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor @Accessors(chain = true) public class ExecutorProperties { @@ -83,11 +84,22 @@ public class ExecutorProperties { private String threadNamePrefix; /** - * Notify + * Whether to enable thread pool running alarm + */ + private Boolean alarm; + + /** + * Active alarm */ - private ThreadPoolNotifyAlarm notify; + private Integer activeAlarm; - public Map receives() { - return Objects.isNull(this.notify) || this.notify.getReceives() == null ? Maps.newHashMap() : this.notify.getReceives(); - } + /** + * Capacity alarm + */ + private Integer capacityAlarm; + + /** + * Notify + */ + private DynamicThreadPoolNotifyProperties notify; } 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/NotifyPlatformProperties.java similarity index 95% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/NotifyPlatformProperties.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/NotifyPlatformProperties.java index 6b645de0..95a5c0ed 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/NotifyPlatformProperties.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.springboot.starter.config; import lombok.Data; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/WebThreadPoolProperties.java similarity index 95% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/config/WebThreadPoolProperties.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/WebThreadPoolProperties.java index 915a0c4d..437f8d8e 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/config/WebThreadPoolProperties.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.config; +package cn.hippo4j.config.springboot.starter.config; import lombok.Data; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java similarity index 90% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java index cc34d5f6..d8808ddd 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/monitor/DynamicThreadPoolMonitorExecutor.java @@ -15,15 +15,15 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.monitor; +package cn.hippo4j.config.springboot.starter.monitor; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; 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 cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; +import cn.hippo4j.monitor.base.DynamicThreadPoolMonitor; +import cn.hippo4j.monitor.base.ThreadPoolMonitor; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -43,7 +43,7 @@ import java.util.concurrent.TimeUnit; @RequiredArgsConstructor public class DynamicThreadPoolMonitorExecutor implements ApplicationRunner { - private final BootstrapCoreProperties properties; + private final BootstrapConfigProperties properties; private ScheduledThreadPoolExecutor collectExecutor; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java similarity index 68% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/notify/CoreNotifyConfigBuilder.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java index b829885e..e4ae0a30 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/notify/CoreNotifyConfigBuilder.java @@ -15,13 +15,13 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.notify; +package cn.hippo4j.config.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.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; import cn.hippo4j.message.service.AlarmControlHandler; import cn.hippo4j.message.dto.NotifyConfigDTO; import cn.hippo4j.message.api.NotifyConfigBuilder; @@ -45,23 +45,23 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { private final AlarmControlHandler alarmControlHandler; - private final BootstrapCoreProperties bootstrapCoreProperties; + private final BootstrapConfigProperties configProperties; @Override public Map> buildNotify() { Map> resultMap = Maps.newHashMap(); - boolean globalAlarm = bootstrapCoreProperties.getAlarm(); - List executors = bootstrapCoreProperties.getExecutors(); + boolean globalAlarm = Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getAlarm()).orElse(true); + List executors = configProperties.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()); + List actual = executors.stream().filter(each -> Optional.ofNullable(each.getAlarm()).orElse(false)).collect(Collectors.toList()); if (!globalAlarm && CollectionUtil.isEmpty(actual)) { return resultMap; } - for (ExecutorProperties executor : executors) { - Map> buildSingleNotifyConfig = buildSingleNotifyConfig(executor); + for (ExecutorProperties executorProperties : executors) { + Map> buildSingleNotifyConfig = buildSingleNotifyConfig(executorProperties); initCacheAndLock(buildSingleNotifyConfig); resultMap.putAll(buildSingleNotifyConfig); } @@ -71,15 +71,15 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { /** * Build single notify config. * - * @param executor + * @param executorProperties * @return */ - public Map> buildSingleNotifyConfig(ExecutorProperties executor) { + public Map> buildSingleNotifyConfig(ExecutorProperties executorProperties) { Map> resultMap = Maps.newHashMap(); - String threadPoolId = executor.getThreadPoolId(); + String threadPoolId = executorProperties.getThreadPoolId(); String alarmBuildKey = threadPoolId + "+ALARM"; List alarmNotifyConfigs = Lists.newArrayList(); - List notifyPlatforms = bootstrapCoreProperties.getNotifyPlatforms(); + List notifyPlatforms = configProperties.getNotifyPlatforms(); for (NotifyPlatformProperties platformProperties : notifyPlatforms) { NotifyConfigDTO notifyConfig = new NotifyConfigDTO(); notifyConfig.setPlatform(platformProperties.getPlatform()); @@ -87,11 +87,11 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { notifyConfig.setType("ALARM"); notifyConfig.setSecret(platformProperties.getSecret()); notifyConfig.setSecretKey(getToken(platformProperties)); - int interval = Optional.ofNullable(executor.getNotify()) + int interval = Optional.ofNullable(executorProperties.getNotify()) .map(each -> each.getInterval()) - .orElseGet(() -> bootstrapCoreProperties.getAlarmInterval() != null ? bootstrapCoreProperties.getAlarmInterval() : 5); + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getNotify()).map(each -> each.getInterval()).orElse(5)); notifyConfig.setInterval(interval); - notifyConfig.setReceives(buildReceive(executor, platformProperties)); + notifyConfig.setReceives(buildReceive(executorProperties)); alarmNotifyConfigs.add(notifyConfig); } resultMap.put(alarmBuildKey, alarmNotifyConfigs); @@ -104,7 +104,7 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { notifyConfig.setType("CONFIG"); notifyConfig.setSecretKey(getToken(platformProperties)); notifyConfig.setSecret(platformProperties.getSecret()); - notifyConfig.setReceives(buildReceive(executor, platformProperties)); + notifyConfig.setReceives(buildReceive(executorProperties)); changeNotifyConfigs.add(notifyConfig); } resultMap.put(changeBuildKey, changeNotifyConfigs); @@ -118,25 +118,12 @@ public class CoreNotifyConfigBuilder implements NotifyConfigBuilder { .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()); - } + private String buildReceive(ExecutorProperties executorProperties) { + String receives = Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getNotify()).map(each -> each.getReceives()).orElse(""); + if (executorProperties.getNotify() != null && StringUtil.isNotEmpty(executorProperties.getNotify().getReceives())) { + receives = executorProperties.getNotify().getReceives(); } - return receive; + return receives; } private String getToken(NotifyPlatformProperties platformProperties) { 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/AbstractConfigParser.java similarity index 95% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/AbstractConfigParser.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/AbstractConfigParser.java index 72822277..38b0c162 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/AbstractConfigParser.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; /** * Abstract config parser 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigFileTypeEnum.java similarity index 96% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigFileTypeEnum.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigFileTypeEnum.java index 91819d60..ae727644 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigFileTypeEnum.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; import lombok.Getter; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParser.java similarity index 96% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParser.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParser.java index e0a98ba7..9b182086 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParser.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; import java.io.IOException; import java.util.List; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java similarity index 97% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/ConfigParserHandler.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java index 0a02d466..c1ae1182 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/ConfigParserHandler.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; import com.google.common.collect.Lists; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java similarity index 96% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/PropertiesConfigParser.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java index 9fb118d2..211fe13c 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/PropertiesConfigParser.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; import com.google.common.collect.Lists; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java similarity index 97% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/parser/YamlConfigParser.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java index 6f78ee23..75a8abbb 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/parser/YamlConfigParser.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.parser; +package cn.hippo4j.config.springboot.starter.parser; import com.google.common.collect.Lists; import com.google.common.collect.Maps; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java similarity index 74% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java index db75f1ca..91defbc4 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/AbstractCoreThreadPoolDynamicRefresh.java @@ -15,15 +15,15 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.springboot.starter.refresher; import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.parser.ConfigParserHandler; +import cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfigDynamicRefreshEvent; 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; @@ -39,12 +39,12 @@ import java.util.concurrent.ExecutorService; @RequiredArgsConstructor public abstract class AbstractCoreThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh, InitializingBean { - protected final BootstrapCoreProperties bootstrapCoreProperties; + protected final BootstrapConfigProperties bootstrapConfigProperties; protected final ExecutorService dynamicRefreshExecutorService = ThreadPoolBuilder.builder().singlePool("client.dynamic.refresh").build(); public AbstractCoreThreadPoolDynamicRefresh() { - bootstrapCoreProperties = ApplicationContextHolder.getBean(BootstrapCoreProperties.class); + bootstrapConfigProperties = ApplicationContextHolder.getBean(BootstrapConfigProperties.class); } @Override @@ -55,12 +55,12 @@ public abstract class AbstractCoreThreadPoolDynamicRefresh implements ThreadPool @Override public void dynamicRefresh(String configContent, Map newValueChangeMap) { try { - Map configInfo = ConfigParserHandler.getInstance().parseConfig(configContent, bootstrapCoreProperties.getConfigFileType()); + Map configInfo = ConfigParserHandler.getInstance().parseConfig(configContent, bootstrapConfigProperties.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)); + BootstrapConfigProperties bindableCoreProperties = BootstrapCorePropertiesBinderAdapt.bootstrapCorePropertiesBinder(configInfo, bootstrapConfigProperties); + ApplicationContextHolder.getInstance().publishEvent(new Hippo4jConfigDynamicRefreshEvent(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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java similarity index 86% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ApolloRefresherHandler.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java index 89ce57aa..4c372684 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ApolloRefresherHandler.java @@ -15,8 +15,9 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.springboot.starter.refresher; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.ConfigChangeListener; import com.ctrip.framework.apollo.ConfigFile; @@ -29,8 +30,6 @@ import org.springframework.beans.factory.annotation.Value; import java.util.Map; -import static cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties.PREFIX; - /** * Apollo refresher handler. */ @@ -46,13 +45,13 @@ public class ApolloRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh public void afterPropertiesSet() { String[] apolloNamespaces = this.namespace.split(","); this.namespace = apolloNamespaces[0]; - Config config = ConfigService.getConfig(String.format("%s.%s", namespace, bootstrapCoreProperties.getConfigFileType().getValue())); + Config config = ConfigService.getConfig(String.format("%s.%s", namespace, bootstrapConfigProperties.getConfigFileType().getValue())); ConfigChangeListener configChangeListener = configChangeEvent -> { - String namespace = this.namespace.replaceAll("." + bootstrapCoreProperties.getConfigFileType().getValue(), ""); - ConfigFileFormat configFileFormat = ConfigFileFormat.fromString(bootstrapCoreProperties.getConfigFileType().getValue()); + String namespace = this.namespace.replaceAll("." + bootstrapConfigProperties.getConfigFileType().getValue(), ""); + ConfigFileFormat configFileFormat = ConfigFileFormat.fromString(bootstrapConfigProperties.getConfigFileType().getValue()); ConfigFile configFile = ConfigService.getConfigFile(namespace, configFileFormat); Map newChangeValueMap = Maps.newHashMap(); - configChangeEvent.changedKeys().stream().filter(each -> each.contains(PREFIX)).forEach(each -> { + configChangeEvent.changedKeys().stream().filter(each -> each.contains(BootstrapConfigProperties.PREFIX)).forEach(each -> { ConfigChange change = configChangeEvent.getChange(each); String newValue = change.getNewValue(); newChangeValueMap.put(each, newValue); 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java similarity index 72% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java index f8bc5311..e8ab3d83 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/BootstrapCorePropertiesBinderAdapt.java @@ -15,15 +15,14 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.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.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.config.DynamicThreadPoolNotifyProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.config.springboot.starter.config.NotifyPlatformProperties; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.google.common.collect.Lists; @@ -36,8 +35,6 @@ import org.springframework.boot.context.properties.source.MapConfigurationProper import java.util.List; import java.util.Map; -import static cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties.PREFIX; - /** * Bootstrap core properties binder adapt. */ @@ -47,15 +44,15 @@ public class BootstrapCorePropertiesBinderAdapt { * Bootstrap core properties binder. * * @param configInfo - * @param bootstrapCoreProperties + * @param bootstrapConfigProperties * @return */ - public static BootstrapCoreProperties bootstrapCorePropertiesBinder(Map configInfo, BootstrapCoreProperties bootstrapCoreProperties) { - BootstrapCoreProperties bindableCoreProperties = null; + public static BootstrapConfigProperties bootstrapCorePropertiesBinder(Map configInfo, BootstrapConfigProperties bootstrapConfigProperties) { + BootstrapConfigProperties bindableCoreProperties = null; try { ConfigurationPropertySource sources = new MapConfigurationPropertySource(configInfo); Binder binder = new Binder(sources); - bindableCoreProperties = binder.bind(PREFIX, Bindable.ofInstance(bootstrapCoreProperties)).get(); + bindableCoreProperties = binder.bind(BootstrapConfigProperties.PREFIX, Bindable.ofInstance(bootstrapConfigProperties)).get(); } catch (Exception ex) { try { Class.forName("org.springframework.boot.context.properties.bind.Binder"); @@ -73,19 +70,19 @@ public class BootstrapCorePropertiesBinderAdapt { * @return */ @Deprecated - private static BootstrapCoreProperties adapt(Map configInfo) { - BootstrapCoreProperties bindableCoreProperties; + private static BootstrapConfigProperties adapt(Map configInfo) { + BootstrapConfigProperties bindableConfigProperties; 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); + && (((String) key).indexOf(BootstrapConfigProperties.PREFIX + ".executors") != -1 + || ((String) key).indexOf(BootstrapConfigProperties.PREFIX + ".notify-platforms") != -1 + || ((String) key).indexOf(BootstrapConfigProperties.PREFIX + ".notifyPlatforms") != -1); if (containFlag) { - String targetKey = key.toString().replace(PREFIX + ".", ""); + String targetKey = key.toString().replace(BootstrapConfigProperties.PREFIX + ".", ""); targetMap.put(targetKey, val); } }); @@ -137,15 +134,8 @@ public class BootstrapCorePropertiesBinderAdapt { 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); + DynamicThreadPoolNotifyProperties alarm = BeanUtil.mapToBean(notifySingleMap, DynamicThreadPoolNotifyProperties.class, true, CopyOptions.create()); + alarm.setReceives(alarm.getReceives()); executorProperties.setNotify(alarm); } executorPropertiesList.add(executorProperties); @@ -158,12 +148,12 @@ public class BootstrapCorePropertiesBinderAdapt { } } } - bindableCoreProperties = new BootstrapCoreProperties(); - bindableCoreProperties.setExecutors(executorPropertiesList); - bindableCoreProperties.setNotifyPlatforms(notifyPropertiesList); + bindableConfigProperties = new BootstrapConfigProperties(); + bindableConfigProperties.setExecutors(executorPropertiesList); + bindableConfigProperties.setNotifyPlatforms(notifyPropertiesList); } catch (Exception ex) { throw ex; } - return bindableCoreProperties; + return bindableConfigProperties; } } diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/EtcdRefresherHandler.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/EtcdRefresherHandler.java new file mode 100644 index 00000000..991d8b17 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/EtcdRefresherHandler.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS 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.springboot.starter.refresher; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Objects; + +import cn.hippo4j.common.toolkit.JSONUtil; +import cn.hippo4j.common.toolkit.StringUtil; +import io.etcd.jetcd.ByteSequence; +import io.etcd.jetcd.Client; +import io.etcd.jetcd.ClientBuilder; +import io.etcd.jetcd.KeyValue; +import io.etcd.jetcd.Watch; +import io.etcd.jetcd.watch.WatchEvent; +import io.etcd.jetcd.watch.WatchResponse; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + *@author : wh + *@date : 2022/8/30 17:59 + *@description: + */ +@Slf4j +public class EtcdRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh implements ApplicationContextAware { + + private ApplicationContext applicationContext; + + private Client client; + + private static final String ENDPOINTS = "endpoints"; + + private static final String USER = "user"; + + private static final String PASSWORD = "password"; + + private static final String CHARSET = "charset"; + + private static final String AUTHORITY = "authority"; + + private static final String KEY = "key"; + + @Override + public void afterPropertiesSet() throws Exception { + Map etcd = bootstrapConfigProperties.getEtcd(); + String user = etcd.get(USER); + String password = etcd.get(PASSWORD); + String endpoints = etcd.get(ENDPOINTS); + String authority = etcd.get(AUTHORITY); + String key = etcd.get(KEY); + Charset charset = StringUtil.isBlank(etcd.get(CHARSET)) ? StandardCharsets.UTF_8 : Charset.forName(etcd.get(CHARSET)); + + ClientBuilder clientBuilder = Client.builder().endpoints(endpoints.split(",")); + + client = applicationContext.getBean(Client.class); + if (Objects.isNull(client)) { + client = StringUtil.isAllNotEmpty(user, password) ? clientBuilder.user(ByteSequence.from(user, charset)) + .password(ByteSequence.from(password, charset)).authority(authority) + .build() : clientBuilder.build(); + } + + // todo Currently only supports json + KeyValue keyValue = client.getKVClient().get(ByteSequence.from(key, charset)).get().getKvs().get(0); + if (Objects.isNull(keyValue)) { + return; + } + + client.getWatchClient().watch(ByteSequence.from(key, charset), new Watch.Listener() { + + @Override + public void onNext(WatchResponse response) { + WatchEvent watchEvent = response.getEvents().get(0); + WatchEvent.EventType eventType = watchEvent.getEventType(); + // todo Currently only supports json + if (Objects.equals(eventType, WatchEvent.EventType.PUT)) { + KeyValue keyValue1 = watchEvent.getKeyValue(); + String value = keyValue1.getValue().toString(charset); + Map map = JSONUtil.parseObject(value, Map.class); + dynamicRefresh(keyValue1.getKey().toString(charset), map); + } + + } + + @Override + public void onError(Throwable throwable) { + log.error("dynamic thread pool etcd config watcher exception ", throwable); + } + + @Override + public void onCompleted() { + log.info("dynamic thread pool etcd config key refreshed, config key {}", key); + } + }); + + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } +} 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosCloudRefresherHandler.java similarity index 94% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosCloudRefresherHandler.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosCloudRefresherHandler.java index 1afb4ad5..4a473988 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosCloudRefresherHandler.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.springboot.starter.refresher; import cn.hippo4j.common.config.ApplicationContextHolder; import com.alibaba.cloud.nacos.NacosConfigManager; @@ -39,7 +39,7 @@ public class NacosCloudRefresherHandler extends AbstractCoreThreadPoolDynamicRef @Override public void afterPropertiesSet() throws Exception { - Map nacosConfig = bootstrapCoreProperties.getNacos(); + Map nacosConfig = bootstrapConfigProperties.getNacos(); nacosConfigManager.getConfigService().addListener(nacosConfig.get("data-id"), nacosConfig.get("group"), new Listener() { 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosRefresherHandler.java similarity index 85% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/NacosRefresherHandler.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosRefresherHandler.java index 652ed484..baf0616b 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/NacosRefresherHandler.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.springboot.starter.refresher; -import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import com.alibaba.nacos.api.annotation.NacosInjected; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; @@ -35,13 +35,13 @@ public class NacosRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh @NacosInjected private ConfigService configService; - public NacosRefresherHandler(BootstrapCoreProperties bootstrapCoreProperties) { - super(bootstrapCoreProperties); + public NacosRefresherHandler(BootstrapConfigProperties bootstrapConfigProperties) { + super(bootstrapConfigProperties); } @Override public void afterPropertiesSet() throws Exception { - Map nacosConfig = bootstrapCoreProperties.getNacos(); + Map nacosConfig = bootstrapConfigProperties.getNacos(); configService.addListener(nacosConfig.get("data-id"), nacosConfig.get("group"), new Listener() { @@ -57,6 +57,5 @@ public class NacosRefresherHandler extends AbstractCoreThreadPoolDynamicRefresh } }); 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java similarity index 91% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/ZookeeperRefresherHandler.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java index 1f7cd9ab..2cbe8100 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/ZookeeperRefresherHandler.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher; +package cn.hippo4j.config.springboot.starter.refresher; import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; @@ -45,7 +45,7 @@ public class ZookeeperRefresherHandler extends AbstractCoreThreadPoolDynamicRefr @Override public void afterPropertiesSet() { - Map zkConfigs = bootstrapCoreProperties.getZookeeper(); + Map zkConfigs = bootstrapConfigProperties.getZookeeper(); curatorFramework = CuratorFrameworkFactory.newClient(zkConfigs.get("zk-connect-str"), new ExponentialBackoffRetry(1000, 3)); String nodePath = ZKPaths.makePath(ZKPaths.makePath(zkConfigs.get("root-node"), @@ -108,13 +108,13 @@ public class ZookeeperRefresherHandler extends AbstractCoreThreadPoolDynamicRefr * Register notify alarm manage. */ public void registerNotifyAlarmManage() { - bootstrapCoreProperties.getExecutors().forEach(executorProperties -> { + bootstrapConfigProperties.getExecutors().forEach(executorProperties -> { ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm( - executorProperties.getNotify().getAlarm(), - executorProperties.getNotify().getCapacityAlarm(), - executorProperties.getNotify().getActiveAlarm()); + executorProperties.getAlarm(), + executorProperties.getCapacityAlarm(), + executorProperties.getActiveAlarm()); threadPoolNotifyAlarm.setInterval(executorProperties.getNotify().getInterval()); - threadPoolNotifyAlarm.setReceives(executorProperties.receives()); + threadPoolNotifyAlarm.setReceives(executorProperties.getNotify().getReceives()); 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java similarity index 74% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/AdapterExecutorsListener.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java index 2bbcb0f1..70fd664e 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/AdapterExecutorsRefreshListener.java @@ -15,13 +15,14 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.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.hippo4j.config.springboot.starter.config.AdapterExecutorProperties; +import cn.hippo4j.config.springboot.starter.support.DynamicThreadPoolAdapterRegister; import cn.hutool.core.bean.BeanUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; @@ -32,26 +33,25 @@ 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; +import static cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfigDynamicRefreshEventOrder.ADAPTER_EXECUTORS_LISTENER; /** - * Adapter executors listener. + * Adapter executors refresh listener. */ @Slf4j @Order(ADAPTER_EXECUTORS_LISTENER) -public class AdapterExecutorsListener implements ApplicationListener { +public class AdapterExecutorsRefreshListener implements ApplicationListener { @Override - public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent event) { + public void onApplicationEvent(Hippo4jConfigDynamicRefreshEvent event) { List adapterExecutors; Map threadPoolAdapterMap = ApplicationContextHolder.getBeansOfType(ThreadPoolAdapter.class); - if (CollectionUtil.isEmpty(adapterExecutors = event.getBootstrapCoreProperties().getAdapterExecutors()) || CollectionUtil.isEmpty(threadPoolAdapterMap)) { + if (CollectionUtil.isEmpty(adapterExecutors = event.getBootstrapConfigProperties().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); + AdapterExecutorProperties adapterExecutorProperties = DynamicThreadPoolAdapterRegister.ADAPTER_EXECUTORS_MAP.get(buildKey); if (adapterExecutorProperties == null) { continue; } @@ -60,7 +60,7 @@ public class AdapterExecutorsListener implements ApplicationListener { if (Objects.equals(val.mark(), each.getMark())) { val.updateThreadPool(BeanUtil.toBean(each, ThreadPoolAdapterParameter.class)); - ADAPTER_EXECUTORS_MAP.put(buildKey, each); + DynamicThreadPoolAdapterRegister.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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java similarity index 56% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/ExecutorsListener.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java index 7b27ca13..8dbc02b3 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/DynamicThreadPoolRefreshListener.java @@ -15,22 +15,22 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.springboot.starter.refresher.event; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.common.executor.support.ResizableCapacityLinkedBlockingQueue; import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.config.springboot.starter.notify.CoreNotifyConfigBuilder; +import cn.hippo4j.config.springboot.starter.support.GlobalCoreThreadPoolManage; 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; @@ -44,6 +44,7 @@ import org.springframework.core.annotation.Order; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -51,15 +52,15 @@ 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; +import static cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfigDynamicRefreshEventOrder.EXECUTORS_LISTENER; /** - * Executors listener. + * Dynamic thread-pool refresh listener. */ @Slf4j @RequiredArgsConstructor @Order(EXECUTORS_LISTENER) -public class ExecutorsListener implements ApplicationListener { +public class DynamicThreadPoolRefreshListener implements ApplicationListener { private final ThreadPoolNotifyAlarmHandler threadPoolNotifyAlarmHandler; @@ -68,41 +69,52 @@ public class ExecutorsListener implements ApplicationListener executors = bindableCoreProperties.getExecutors(); + public void onApplicationEvent(Hippo4jConfigDynamicRefreshEvent event) { + BootstrapConfigProperties bindableConfigProperties = event.getBootstrapConfigProperties(); + List executors = bindableConfigProperties.getExecutors(); for (ExecutorProperties properties : executors) { String threadPoolId = properties.getThreadPoolId(); - // Check whether the notification configuration is consistent. - // this operation will not trigger the notification. + /** + * 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); + GlobalCoreThreadPoolManage.refresh(threadPoolId, failDefaultExecutorProperties(beforeProperties, properties)); + ChangeParameterNotifyRequest changeRequest = buildChangeRequest(beforeProperties, 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())); + String.format(CHANGE_DELIMITER, beforeProperties.getCorePoolSize(), changeRequest.getNowCorePoolSize()), + String.format(CHANGE_DELIMITER, beforeProperties.getMaximumPoolSize(), changeRequest.getNowMaximumPoolSize()), + String.format(CHANGE_DELIMITER, beforeProperties.getQueueCapacity(), changeRequest.getNowQueueCapacity()), + String.format(CHANGE_DELIMITER, beforeProperties.getKeepAliveTime(), changeRequest.getNowKeepAliveTime()), + String.format(CHANGE_DELIMITER, beforeProperties.getExecuteTimeOut(), changeRequest.getNowExecuteTimeOut()), + String.format(CHANGE_DELIMITER, beforeProperties.getRejectedHandler(), changeRequest.getNowRejectedName()), + String.format(CHANGE_DELIMITER, beforeProperties.getAllowCoreThreadTimeOut(), changeRequest.getNowAllowsCoreThreadTimeOut())); try { - threadPoolNotifyAlarmHandler.sendPoolConfigChange(newChangeRequest(beforeProperties, properties)); + threadPoolNotifyAlarmHandler.sendPoolConfigChange(changeRequest); } catch (Throwable ex) { log.error("Failed to send Chang smart application listener notice. Message: {}", ex.getMessage()); } } } + private ExecutorProperties failDefaultExecutorProperties(ExecutorProperties beforeProperties, ExecutorProperties properties) { + return ExecutorProperties.builder() + .corePoolSize(Optional.ofNullable(properties.getCorePoolSize()).orElse(beforeProperties.getCorePoolSize())) + .maximumPoolSize(Optional.ofNullable(properties.getMaximumPoolSize()).orElse(beforeProperties.getMaximumPoolSize())) + .queueCapacity(Optional.ofNullable(properties.getQueueCapacity()).orElse(beforeProperties.getQueueCapacity())) + .keepAliveTime(Optional.ofNullable(properties.getKeepAliveTime()).orElse(beforeProperties.getKeepAliveTime())) + .executeTimeOut(Optional.ofNullable(properties.getExecuteTimeOut()).orElse(beforeProperties.getExecuteTimeOut())) + .rejectedHandler(Optional.ofNullable(properties.getRejectedHandler()).orElse(beforeProperties.getRejectedHandler())) + .allowCoreThreadTimeOut(Optional.ofNullable(properties.getAllowCoreThreadTimeOut()).orElse(beforeProperties.getAllowCoreThreadTimeOut())) + .threadPoolId(beforeProperties.getThreadPoolId()) + .build(); + } + /** * Construct change parameter notify request instance. * @@ -110,23 +122,23 @@ public class ExecutorsListener implements ApplicationListener changeKeys = Lists.newArrayList(); - Map> newDynamicThreadPoolNotifyMap = coreNotifyConfigBuilder.buildSingleNotifyConfig(properties); + Map> newDynamicThreadPoolNotifyMap = coreNotifyConfigBuilder.buildSingleNotifyConfig(executorProperties); Map> notifyConfigs = hippo4jBaseSendMessageService.getNotifyConfigs(); if (CollectionUtil.isNotEmpty(notifyConfigs)) { for (Map.Entry> each : newDynamicThreadPoolNotifyMap.entrySet()) { @@ -162,23 +174,22 @@ public class ExecutorsListener implements ApplicationListener queue = (ResizableCapacityLinkedBlockingQueue) executor.getQueue(); queue.setCapacity(properties.getQueueCapacity()); 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEvent.java similarity index 65% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEvent.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEvent.java index bb979f96..66d20194 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEvent.java @@ -15,24 +15,24 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.springboot.starter.refresher.event; -import cn.hippo4j.core.springboot.starter.config.BootstrapCoreProperties; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; import lombok.Getter; import lombok.Setter; import org.springframework.context.ApplicationEvent; /** - * Hippo-4j core dynamic refresh event. + * Hippo-4j config dynamic refresh event. */ -public class Hippo4jCoreDynamicRefreshEvent extends ApplicationEvent { +public class Hippo4jConfigDynamicRefreshEvent extends ApplicationEvent { @Getter @Setter - private BootstrapCoreProperties bootstrapCoreProperties; + private BootstrapConfigProperties bootstrapConfigProperties; - public Hippo4jCoreDynamicRefreshEvent(Object source, BootstrapCoreProperties bootstrapCoreProperties) { + public Hippo4jConfigDynamicRefreshEvent(Object source, BootstrapConfigProperties bootstrapConfigProperties) { super(source); - this.bootstrapCoreProperties = bootstrapCoreProperties; + this.bootstrapConfigProperties = bootstrapConfigProperties; } } 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEventOrder.java similarity index 85% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/Hippo4jCoreDynamicRefreshEventOrder.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEventOrder.java index 72c4641f..1b7106ad 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/Hippo4jConfigDynamicRefreshEventOrder.java @@ -15,12 +15,12 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.springboot.starter.refresher.event; /** - * Hippo-4j core dynamic refresh event order. + * Hippo-4j config dynamic refresh event order. */ -public interface Hippo4jCoreDynamicRefreshEventOrder { +public interface Hippo4jConfigDynamicRefreshEventOrder { int WEB_EXECUTOR_LISTENER = 0; 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/PlatformsRefreshListener.java similarity index 71% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/PlatformsListener.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/PlatformsRefreshListener.java index e8034ca9..ec380bad 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/PlatformsRefreshListener.java @@ -15,14 +15,14 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.springboot.starter.refresher.event; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.config.springboot.starter.notify.CoreNotifyConfigBuilder; 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; @@ -31,18 +31,18 @@ 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; +import static cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfigDynamicRefreshEventOrder.PLATFORMS_LISTENER; /** - * Platforms listener. + * Platforms refresh listener. */ @Order(PLATFORMS_LISTENER) -public class PlatformsListener implements ApplicationListener { +public class PlatformsRefreshListener implements ApplicationListener { @Override - public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent threadPoolDynamicRefreshEvent) { - BootstrapCoreProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapCoreProperties(); - List executors = bindableCoreProperties.getExecutors(); + public void onApplicationEvent(Hippo4jConfigDynamicRefreshEvent threadPoolDynamicRefreshEvent) { + BootstrapConfigProperties bindableConfigProperties = threadPoolDynamicRefreshEvent.getBootstrapConfigProperties(); + List executors = bindableConfigProperties.getExecutors(); for (ExecutorProperties executorProperties : executors) { String threadPoolId = executorProperties.getThreadPoolId(); DynamicThreadPoolWrapper wrapper = GlobalThreadPoolManage.getExecutorService(threadPoolId); 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/WebExecutorRefreshListener.java similarity index 82% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/refresher/event/WebExecutorListener.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/WebExecutorRefreshListener.java index e191caef..5e01320c 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/refresher/event/WebExecutorRefreshListener.java @@ -15,33 +15,33 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.refresher.event; +package cn.hippo4j.config.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 cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.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; +import static cn.hippo4j.config.springboot.starter.refresher.event.Hippo4jConfigDynamicRefreshEventOrder.WEB_EXECUTOR_LISTENER; /** - * Web executor listener. + * Web executor refresh listener. */ @Slf4j @Order(WEB_EXECUTOR_LISTENER) -public class WebExecutorListener implements ApplicationListener { +public class WebExecutorRefreshListener implements ApplicationListener { @Override - public void onApplicationEvent(Hippo4jCoreDynamicRefreshEvent threadPoolDynamicRefreshEvent) { - BootstrapCoreProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapCoreProperties(); + public void onApplicationEvent(Hippo4jConfigDynamicRefreshEvent threadPoolDynamicRefreshEvent) { + BootstrapConfigProperties bindableCoreProperties = threadPoolDynamicRefreshEvent.getBootstrapConfigProperties(); boolean isNullFlag = bindableCoreProperties.getJetty() == null && bindableCoreProperties.getUndertow() == null && bindableCoreProperties.getTomcat() == null; @@ -65,7 +65,7 @@ public class WebExecutorListener implements ApplicationListener ADAPTER_EXECUTORS_MAP = Maps.newConcurrentMap(); @Override public void run(ApplicationArguments args) throws Exception { List adapterExecutors; - if (CollectionUtil.isEmpty(adapterExecutors = bootstrapCoreProperties.getAdapterExecutors())) { + if (CollectionUtil.isEmpty(adapterExecutors = bootstrapConfigProperties.getAdapterExecutors())) { return; } for (AdapterExecutorProperties each : adapterExecutors) { diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolConfigService.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolConfigService.java new file mode 100644 index 00000000..4b3eee1b --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolConfigService.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS 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.springboot.starter.support; + +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterParameter; +import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper; +import cn.hippo4j.common.model.register.notify.DynamicThreadPoolRegisterCoreNotifyParameter; +import cn.hippo4j.common.toolkit.BooleanUtil; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.core.executor.DynamicThreadPoolWrapper; +import cn.hippo4j.core.executor.manage.GlobalNotifyAlarmManage; +import cn.hippo4j.core.executor.manage.GlobalThreadPoolManage; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.core.executor.support.service.AbstractDynamicThreadPoolService; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * Dynamic thread-pool config service. + */ +public class DynamicThreadPoolConfigService extends AbstractDynamicThreadPoolService { + + @Override + public ThreadPoolExecutor registerDynamicThreadPool(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); + String threadPoolId = registerParameter.getThreadPoolId(); + ThreadPoolExecutor dynamicThreadPoolExecutor = buildDynamicThreadPoolExecutor(registerParameter); + DynamicThreadPoolWrapper dynamicThreadPoolWrapper = DynamicThreadPoolWrapper.builder() + .threadPoolId(threadPoolId) + .executor(dynamicThreadPoolExecutor) + .build(); + // Register pool. + GlobalThreadPoolManage.registerPool(threadPoolId, dynamicThreadPoolWrapper); + ExecutorProperties executorProperties = buildExecutorProperties(registerWrapper); + // Register properties. + GlobalCoreThreadPoolManage.register(threadPoolId, executorProperties); + DynamicThreadPoolRegisterCoreNotifyParameter notifyParameter = registerWrapper.getDynamicThreadPoolRegisterCoreNotifyParameter(); + ThreadPoolNotifyAlarm notifyAlarm = new ThreadPoolNotifyAlarm(true, registerParameter.getActiveAlarm(), registerParameter.getCapacityAlarm()); + notifyAlarm.setReceives(notifyParameter.getReceives()); + notifyAlarm.setInterval(notifyParameter.getInterval()); + // Register notify. + GlobalNotifyAlarmManage.put(threadPoolId, notifyAlarm); + return dynamicThreadPoolExecutor; + } + + private ExecutorProperties buildExecutorProperties(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); + ExecutorProperties executorProperties = ExecutorProperties.builder() + .corePoolSize(registerParameter.getCorePoolSize()) + .maximumPoolSize(registerParameter.getMaximumPoolSize()) + .allowCoreThreadTimeOut(BooleanUtil.toBoolean(String.valueOf(registerParameter.getAllowCoreThreadTimeOut()))) + .keepAliveTime(registerParameter.getKeepAliveTime()) + .blockingQueue(BlockingQueueTypeEnum.getBlockingQueueNameByType(registerParameter.getBlockingQueueType().getType())) + .capacityAlarm(registerParameter.getCapacity()) + .threadNamePrefix(registerParameter.getThreadNamePrefix()) + .rejectedHandler(RejectedPolicyTypeEnum.getRejectedNameByType(registerParameter.getRejectedPolicyType().getType())) + .executeTimeOut(registerParameter.getExecuteTimeOut()) + .threadPoolId(registerParameter.getThreadPoolId()) + .build(); + return executorProperties; + } +} diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolPostProcessor.java b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolPostProcessor.java new file mode 100644 index 00000000..c4a92165 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/DynamicThreadPoolPostProcessor.java @@ -0,0 +1,223 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS 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.springboot.starter.support; + +import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.common.toolkit.StringUtil; +import cn.hippo4j.config.springboot.starter.config.BootstrapConfigProperties; +import cn.hippo4j.config.springboot.starter.config.DynamicThreadPoolNotifyProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; +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.CommonDynamicThreadPool; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import cn.hippo4j.core.executor.support.adpter.DynamicThreadPoolAdapterChoose; +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 BootstrapConfigProperties configProperties; + + @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 DynamicThreadPoolAdapterChoose.match(bean) ? bean : remoteThreadPoolExecutor; + } + if (bean instanceof DynamicThreadPoolWrapper) { + DynamicThreadPoolWrapper wrap = (DynamicThreadPoolWrapper) bean; + fillPoolAndRegister(wrap); + } + return bean; + } + + /** + * 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 (configProperties.getExecutors() != null) { + executorProperties = configProperties.getExecutors() + .stream() + .filter(each -> Objects.equals(threadPoolId, each.getThreadPoolId())) + .findFirst() + .orElseThrow(() -> new RuntimeException("The thread pool id does not exist in the configuration.")); + try { + newDynamicPoolExecutor = buildNewDynamicThreadPool(executorProperties); + } 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); + } + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = buildThreadPoolNotifyAlarm(executorProperties); + GlobalNotifyAlarmManage.put(threadPoolId, threadPoolNotifyAlarm); + DynamicThreadPoolExecutor actualDynamicThreadPoolExecutor = (DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor(); + TaskDecorator taskDecorator = actualDynamicThreadPoolExecutor.getTaskDecorator(); + ((DynamicThreadPoolExecutor) newDynamicPoolExecutor).setTaskDecorator(taskDecorator); + long awaitTerminationMillis = actualDynamicThreadPoolExecutor.awaitTerminationMillis; + boolean waitForTasksToCompleteOnShutdown = actualDynamicThreadPoolExecutor.waitForTasksToCompleteOnShutdown; + ((DynamicThreadPoolExecutor) newDynamicPoolExecutor).setSupportParam(awaitTerminationMillis, waitForTasksToCompleteOnShutdown); + dynamicThreadPoolWrapper.setExecutor(newDynamicPoolExecutor); + } + GlobalThreadPoolManage.registerPool(dynamicThreadPoolWrapper.getThreadPoolId(), dynamicThreadPoolWrapper); + GlobalCoreThreadPoolManage.register( + threadPoolId, + executorProperties == null + ? buildExecutorProperties(threadPoolId, newDynamicPoolExecutor) + : buildActualExecutorProperties(executorProperties)); + return newDynamicPoolExecutor; + } + + private ExecutorProperties buildActualExecutorProperties(ExecutorProperties executorProperties) { + return Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> buildExecutorProperties(executorProperties)).orElse(executorProperties); + } + + 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; + } + + private ThreadPoolExecutor buildNewDynamicThreadPool(ExecutorProperties executorProperties) { + String threadNamePrefix = executorProperties.getThreadNamePrefix(); + ExecutorProperties newExecutorProperties = buildExecutorProperties(executorProperties); + ThreadPoolExecutor newDynamicPoolExecutor = ThreadPoolBuilder.builder() + .threadPoolId(executorProperties.getThreadPoolId()) + .threadFactory(StringUtil.isNotBlank(threadNamePrefix) ? threadNamePrefix : executorProperties.getThreadPoolId()) + .poolThreadSize(newExecutorProperties.getCorePoolSize(), newExecutorProperties.getMaximumPoolSize()) + .workQueue(BlockingQueueTypeEnum.createBlockingQueue(newExecutorProperties.getBlockingQueue(), newExecutorProperties.getQueueCapacity())) + .executeTimeOut(newExecutorProperties.getExecuteTimeOut()) + .keepAliveTime(newExecutorProperties.getKeepAliveTime(), TimeUnit.SECONDS) + .rejected(RejectedPolicyTypeEnum.createPolicy(newExecutorProperties.getRejectedHandler())) + .allowCoreThreadTimeOut(newExecutorProperties.getAllowCoreThreadTimeOut()) + .dynamicPool() + .build(); + return newDynamicPoolExecutor; + } + + private ExecutorProperties buildExecutorProperties(ExecutorProperties executorProperties) { + ExecutorProperties newExecutorProperties = ExecutorProperties.builder() + .corePoolSize(Optional.ofNullable(executorProperties.getCorePoolSize()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getCorePoolSize()).get())) + .maximumPoolSize(Optional.ofNullable(executorProperties.getMaximumPoolSize()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getMaximumPoolSize()).get())) + .allowCoreThreadTimeOut(Optional.ofNullable(executorProperties.getAllowCoreThreadTimeOut()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getAllowCoreThreadTimeOut()).get())) + .keepAliveTime(Optional.ofNullable(executorProperties.getKeepAliveTime()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getKeepAliveTime()).get())) + .blockingQueue(Optional.ofNullable(executorProperties.getBlockingQueue()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getBlockingQueue()).get())) + .executeTimeOut(Optional.ofNullable(executorProperties.getExecuteTimeOut()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getExecuteTimeOut()).orElse(0L))) + .queueCapacity(Optional.ofNullable(executorProperties.getQueueCapacity()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getQueueCapacity()).get())) + .rejectedHandler(Optional.ofNullable(executorProperties.getRejectedHandler()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getRejectedHandler()).get())) + .threadNamePrefix(StringUtil.isBlank(executorProperties.getThreadNamePrefix()) ? executorProperties.getThreadPoolId() : executorProperties.getThreadNamePrefix()) + .threadPoolId(executorProperties.getThreadPoolId()) + .build(); + return newExecutorProperties; + } + + private ThreadPoolNotifyAlarm buildThreadPoolNotifyAlarm(ExecutorProperties executorProperties) { + DynamicThreadPoolNotifyProperties notify = Optional.ofNullable(executorProperties).map(ExecutorProperties::getNotify).orElse(null); + boolean isAlarm = Optional.ofNullable(executorProperties.getAlarm()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getAlarm()).orElse(true)); + int activeAlarm = Optional.ofNullable(executorProperties.getActiveAlarm()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getActiveAlarm()).orElse(80)); + int capacityAlarm = Optional.ofNullable(executorProperties.getCapacityAlarm()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getCapacityAlarm()).orElse(80)); + int interval = Optional.ofNullable(notify) + .map(each -> each.getInterval()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getNotify()).map(each -> each.getInterval()).orElse(5)); + String receive = Optional.ofNullable(notify) + .map(each -> each.getReceives()) + .orElseGet(() -> Optional.ofNullable(configProperties.getDefaultExecutor()).map(each -> each.getNotify()).map(each -> each.getReceives()).orElse("")); + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm(isAlarm, activeAlarm, capacityAlarm); + threadPoolNotifyAlarm.setInterval(interval); + threadPoolNotifyAlarm.setReceives(receive); + return threadPoolNotifyAlarm; + } +} 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java similarity index 93% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/GlobalCoreThreadPoolManage.java rename to hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java index 6c665023..fc8b88a9 100644 --- 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-config-spring-boot-starter/src/main/java/cn/hippo4j/config/springboot/starter/support/GlobalCoreThreadPoolManage.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package cn.hippo4j.core.springboot.starter.support; +package cn.hippo4j.config.springboot.starter.support; -import cn.hippo4j.core.springboot.starter.config.ExecutorProperties; +import cn.hippo4j.config.springboot.starter.config.ExecutorProperties; import com.google.common.collect.Maps; import java.util.Map; diff --git a/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..5f39cf76 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-config-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.config.springboot.starter.config.DynamicThreadPoolCoreAutoConfiguration 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 deleted file mode 100644 index 5a44a5ae..00000000 --- a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/java/cn/hippo4j/core/springboot/starter/support/DynamicThreadPoolPostProcessor.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS 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-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/pom.xml new file mode 100644 index 00000000..e772273f --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + cn.hippo4j + hippo4j-spring-boot-starter-adapter + ${revision} + + hippo4j-spring-boot-starter-adapter-alibaba-dubbo + + + + cn.hippo4j + hippo4j-adapter-alibaba-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-alibaba-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/alibaba/dubbo/AlibabaDubboAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/alibaba/dubbo/AlibabaDubboAdapterAutoConfiguration.java new file mode 100644 index 00000000..03d9fcfb --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/src/main/java/cn/hippo4j/springboot/starter/adapter/alibaba/dubbo/AlibabaDubboAdapterAutoConfiguration.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.alibaba.dubbo; + +import cn.hippo4j.adapter.alibaba.dubbo.AlibabaDubboThreadPoolAdapter; +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; + +/** + * Alibaba Dubbo adapter auto configuration. + */ +@Configuration +public class AlibabaDubboAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty(name = "dubbo.application.name") + public AlibabaDubboThreadPoolAdapter dubboThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new AlibabaDubboThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..383891ec --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-alibaba-dubbo/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.alibaba.dubbo.AlibabaDubboAdapterAutoConfiguration 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 index be2cdc6c..3d872afa 100644 --- 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 @@ -34,6 +34,12 @@ ${revision} + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-alibaba-dubbo + ${revision} + + cn.hippo4j hippo4j-spring-boot-starter-adapter-hystrix 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 index 23ca19da..aec28c6d 100644 --- 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 @@ -17,9 +17,12 @@ package cn.hippo4j.springboot.starter.adapter.rabbitmq; +import java.util.Map; + 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; @@ -33,7 +36,7 @@ import org.springframework.context.annotation.Configuration; @RequiredArgsConstructor public class RabbitMQAdapterAutoConfiguration { - private final AbstractConnectionFactory abstractConnectionFactories; + private final Map stringAbstractConnectionFactoryMap; @Bean @ConditionalOnMissingBean @@ -45,6 +48,6 @@ public class RabbitMQAdapterAutoConfiguration { @SuppressWarnings("all") @ConditionalOnProperty(name = "spring.rabbitmq.host") public RabbitMQThreadPoolAdapter rabbitMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { - return new RabbitMQThreadPoolAdapter(abstractConnectionFactories); + return new RabbitMQThreadPoolAdapter(stringAbstractConnectionFactoryMap); } } diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/pom.xml new file mode 100644 index 00000000..c0f00029 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/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-rabbitmq + hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq + + + + cn.hippo4j + hippo4j-adapter-spring-cloud-stream-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-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQAdapterAutoConfiguration.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQAdapterAutoConfiguration.java new file mode 100644 index 00000000..4d87afb9 --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/src/main/java/cn/hippo4j/springboot/starter/adapter/springcloud/stream/rabbitmq/SpringCloudStreamRabbitMQAdapterAutoConfiguration.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.adapter.springcloud.stream.rabbitmq; + +import cn.hippo4j.adapter.springcloud.stream.rabbitmq.SpringCloudStreamRabbitMQThreadPoolAdapter; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.stream.binder.rabbit.config.RabbitMessageChannelBinderConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Spring cloud stream rabbitmq adapter auto configuration. + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass(RabbitMessageChannelBinderConfiguration.class) +public class SpringCloudStreamRabbitMQAdapterAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ApplicationContextHolder simpleApplicationContextHolder() { + return new ApplicationContextHolder(); + } + + @Bean + @SuppressWarnings("all") + @ConditionalOnProperty("spring.rabbitmq.host") + public SpringCloudStreamRabbitMQThreadPoolAdapter springCloudStreamRabbitMQThreadPoolAdapter(ApplicationContextHolder applicationContextHolder) { + return new SpringCloudStreamRabbitMQThreadPoolAdapter(); + } +} diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..52a54b9c --- /dev/null +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/hippo4j-spring-boot-starter-adapter-spring-cloud-stream-rabbitmq/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.adapter.springcloud.stream.rabbitmq.SpringCloudStreamRabbitMQAdapterAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml index c319c935..136f0878 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-adapter/pom.xml @@ -15,12 +15,14 @@ hippo4j-spring-boot-starter-adapter-all hippo4j-spring-boot-starter-adapter-dubbo + hippo4j-spring-boot-starter-adapter-alibaba-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-spring-cloud-stream-rabbitmq hippo4j-spring-boot-starter-adapter-web 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-elasticsearch/pom.xml similarity index 92% rename from hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/pom.xml rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-elasticsearch/pom.xml index ac000059..252d030b 100644 --- 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-elasticsearch/pom.xml @@ -7,12 +7,12 @@ hippo4j-spring-boot-starter-monitor ${revision} - hippo4j-spring-boot-starter-monitor-log + hippo4j-spring-boot-starter-monitor-elasticsearch cn.hippo4j - hippo4j-monitor-log + hippo4j-monitor-elasticsearch ${revision} 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-elasticsearch/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java similarity index 96% rename from 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 rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-elasticsearch/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java index 25a94b13..010fd673 100644 --- 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-elasticsearch/src/main/java/cn/hippo4j/springboot/starter/monitor/es/EsMonitorAutoConfiguration.java @@ -23,7 +23,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Es monitor auto configuration. + * Elastic-search monitor auto configuration. */ @Configuration public class EsMonitorAutoConfiguration { 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-elasticsearch/src/main/resources/META-INF/spring.factories similarity index 100% rename from hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/src/main/resources/META-INF/spring.factories rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-elasticsearch/src/main/resources/META-INF/spring.factories 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-local-log/pom.xml similarity index 93% rename from hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-es/pom.xml rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-local-log/pom.xml index eb8cbad1..7c6a7946 100644 --- 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-local-log/pom.xml @@ -7,12 +7,12 @@ hippo4j-spring-boot-starter-monitor ${revision} - hippo4j-spring-boot-starter-monitor-es + hippo4j-spring-boot-starter-monitor-local-log cn.hippo4j - hippo4j-monitor-es + hippo4j-monitor-local-log ${revision} 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-local-log/src/main/java/cn/hippo4j/springboot/starter/monitor/local/log/LocalLogMonitorAutoConfiguration.java similarity index 72% rename from 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 rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-local-log/src/main/java/cn/hippo4j/springboot/starter/monitor/local/log/LocalLogMonitorAutoConfiguration.java index 6b4cd63f..3a54c1c1 100644 --- 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-local-log/src/main/java/cn/hippo4j/springboot/starter/monitor/local/log/LocalLogMonitorAutoConfiguration.java @@ -15,21 +15,21 @@ * limitations under the License. */ -package cn.hippo4j.springboot.starter.monitor.log; +package cn.hippo4j.springboot.starter.monitor.local.log; import cn.hippo4j.core.executor.state.ThreadPoolRunStateHandler; -import cn.hippo4j.monitor.log.LogMonitorHandler; +import cn.hippo4j.monitor.local.log.LocalLogMonitorHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Log monitor auto configuration. + * Local log monitor auto configuration. */ @Configuration -public class LogMonitorAutoConfiguration { +public class LocalLogMonitorAutoConfiguration { @Bean - public LogMonitorHandler logMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { - return new LogMonitorHandler(threadPoolRunStateHandler); + public LocalLogMonitorHandler localLogMonitorHandler(ThreadPoolRunStateHandler threadPoolRunStateHandler) { + return new LocalLogMonitorHandler(threadPoolRunStateHandler); } } diff --git a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-local-log/src/main/resources/META-INF/spring.factories similarity index 55% rename from hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories rename to hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-local-log/src/main/resources/META-INF/spring.factories index 203972c7..b1af5e04 100644 --- a/hippo4j-spring-boot/hippo4j-core-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-local-log/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.core.springboot.starter.config.DynamicThreadPoolCoreAutoConfiguration +org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.monitor.local.log.LocalLogMonitorAutoConfiguration 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 deleted file mode 100644 index d386fdc6..00000000 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/hippo4j-spring-boot-starter-monitor-log/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.hippo4j.springboot.starter.monitor.log.LogMonitorAutoConfiguration diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml index 97cda63f..010c7c22 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter-monitor/pom.xml @@ -11,8 +11,8 @@ pom - hippo4j-spring-boot-starter-monitor-es - hippo4j-spring-boot-starter-monitor-log + hippo4j-spring-boot-starter-monitor-elasticsearch + hippo4j-spring-boot-starter-monitor-local-log hippo4j-spring-boot-starter-monitor-prometheus 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 index 24f40176..c4caf35c 100644 --- 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 @@ -26,13 +26,14 @@ 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.executor.support.service.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.Hippo4jBaseSendMessageService; import cn.hippo4j.message.service.Hippo4jSendMessageService; import cn.hippo4j.springboot.starter.controller.ThreadPoolAdapterController; import cn.hippo4j.springboot.starter.controller.WebThreadPoolController; @@ -47,6 +48,8 @@ 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 cn.hippo4j.springboot.starter.support.DynamicThreadPoolConfigService; +import cn.hippo4j.springboot.starter.support.DynamicThreadPoolPostProcessor; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -99,8 +102,10 @@ public class DynamicThreadPoolAutoConfiguration { public DynamicThreadPoolService dynamicThreadPoolConfigService(HttpAgent httpAgent, ClientWorker clientWorker, ServerHealthCheck serverHealthCheck, + ServerNotifyConfigBuilder notifyConfigBuilder, + Hippo4jBaseSendMessageService hippo4jBaseSendMessageService, DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig) { - return new DynamicThreadPoolConfigService(httpAgent, clientWorker, properties, dynamicThreadPoolSubscribeConfig); + return new DynamicThreadPoolConfigService(httpAgent, clientWorker, properties, notifyConfigBuilder, hippo4jBaseSendMessageService, dynamicThreadPoolSubscribeConfig); } @Bean diff --git a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java index 8e0deebe..bc388239 100644 --- a/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java +++ b/hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/ClientWorker.java @@ -209,7 +209,7 @@ public class ClientWorker { if (keyArr.length == 3) { String tenant = keyArr[2]; updateList.add(GroupKey.getKeyTenant(dataId, group, tenant)); - log.info("Refresh thread pool changed. [{}]", dataId); + log.info("[{}] Refresh thread pool changed.", dataId); } else { log.error("[{}] Polling resp invalid dataIdAndGroup error.", dataIdAndGroup); } @@ -252,7 +252,7 @@ public class ClientWorker { this.serverHealthCheck.setHealthStatus(isHealthServer); } - protected void notifyApplicationComplete() { + public void notifyApplicationComplete() { awaitApplicationComplete.countDown(); } } 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 index 78d35543..6e57b6f4 100644 --- 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 @@ -18,7 +18,7 @@ package cn.hippo4j.springboot.starter.core; import cn.hippo4j.common.api.ThreadPoolDynamicRefresh; -import cn.hippo4j.core.executor.support.QueueTypeEnum; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; import cn.hippo4j.core.executor.support.ThreadPoolBuilder; import cn.hippo4j.springboot.starter.config.BootstrapProperties; import lombok.RequiredArgsConstructor; @@ -46,7 +46,7 @@ public class DynamicThreadPoolSubscribeConfig { .maxPoolNum(2) .keepAliveTime(2000) .timeUnit(TimeUnit.MILLISECONDS) - .workQueue(QueueTypeEnum.SYNCHRONOUS_QUEUE) + .workQueue(BlockingQueueTypeEnum.SYNCHRONOUS_QUEUE) .allowCoreThreadTimeOut(true) .threadFactory("client.dynamic.threadPool.change.config") .rejected(new ThreadPoolExecutor.AbortPolicy()) 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 index 77978fb2..8d0feb4d 100644 --- 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 @@ -26,15 +26,16 @@ 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.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; +import cn.hippo4j.common.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.Optional; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -44,7 +45,7 @@ import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_DELIMI import static cn.hippo4j.common.constant.ChangeThreadPoolConstants.CHANGE_THREAD_POOL_TEXT; /** - * Thread pool dynamic refresh. + * Server thread-pool dynamic refresh. */ @Slf4j @AllArgsConstructor @@ -60,13 +61,7 @@ public class ServerThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh refreshDynamicPool(parameter, executor); } - /** - * Refresh dynamic pool. - * - * @param parameter - * @param executor - */ - public void refreshDynamicPool(ThreadPoolParameter parameter, ThreadPoolExecutor executor) { + private void refreshDynamicPool(ThreadPoolParameter parameter, ThreadPoolExecutor executor) { String threadPoolId = parameter.getTpId(); int originalCoreSize = executor.getCorePoolSize(); int originalMaximumPoolSize = executor.getMaximumPoolSize(); @@ -81,48 +76,41 @@ public class ServerThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh 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); + String originalRejected = rejectedExecutionHandler.getClass().getSimpleName(); + Long executeTimeOut = Optional.ofNullable(parameter.getExecuteTimeOut()).orElse(0L); + ChangeParameterNotifyRequest changeNotifyRequest = ChangeParameterNotifyRequest.builder() + .beforeCorePoolSize(originalCoreSize) + .beforeMaximumPoolSize(originalMaximumPoolSize) + .beforeAllowsCoreThreadTimeOut(originalAllowCoreThreadTimeOut) + .beforeKeepAliveTime(originalKeepAliveTime) + .blockingQueueName(originalQuery) + .beforeQueueCapacity(originalCapacity) + .beforeRejectedName(originalRejected) + .beforeExecuteTimeOut(originalExecuteTimeOut) + .nowCorePoolSize(afterExecutor.getCorePoolSize()) + .nowMaximumPoolSize(afterExecutor.getMaximumPoolSize()) + .nowAllowsCoreThreadTimeOut(EnableEnum.getBool(parameter.getAllowCoreThreadTimeOut())) + .nowKeepAliveTime(afterExecutor.getKeepAliveTime(TimeUnit.SECONDS)) + .nowQueueCapacity((afterExecutor.getQueue().remainingCapacity() + afterExecutor.getQueue().size())) + .nowRejectedName(RejectedPolicyTypeEnum.getRejectedNameByType(parameter.getRejectedType())) + .nowExecuteTimeOut(executeTimeOut) + .build(); + changeNotifyRequest.setThreadPoolId(threadPoolId); + threadPoolNotifyAlarmHandler.sendPoolConfigChange(changeNotifyRequest); 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, 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, originalExecuteTimeOut, executeTimeOut), + String.format(CHANGE_DELIMITER, originalRejected, RejectedPolicyTypeEnum.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) { + private void changePoolInfo(ThreadPoolExecutor executor, ThreadPoolParameter parameter) { if (parameter.getCoreSize() != null && parameter.getMaxSize() != null) { if (parameter.getMaxSize() < executor.getMaximumPoolSize()) { executor.setCorePoolSize(parameter.getCoreSize()); @@ -140,7 +128,7 @@ public class ServerThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh } } if (parameter.getCapacity() != null - && Objects.equals(QueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.type, parameter.getQueueType())) { + && Objects.equals(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE.getType(), parameter.getQueueType())) { if (executor.getQueue() instanceof ResizableCapacityLinkedBlockingQueue) { ResizableCapacityLinkedBlockingQueue queue = (ResizableCapacityLinkedBlockingQueue) executor.getQueue(); queue.setCapacity(parameter.getCapacity()); @@ -151,8 +139,12 @@ public class ServerThreadPoolDynamicRefresh implements ThreadPoolDynamicRefresh if (parameter.getKeepAliveTime() != null) { executor.setKeepAliveTime(parameter.getKeepAliveTime(), TimeUnit.SECONDS); } + Long executeTimeOut = Optional.ofNullable(parameter.getExecuteTimeOut()).orElse(0L); + if (executeTimeOut != null && executor instanceof AbstractDynamicExecutorSupport) { + ((DynamicThreadPoolExecutor) executor).setExecuteTimeOut(executeTimeOut); + } if (parameter.getRejectedType() != null) { - RejectedExecutionHandler rejectedExecutionHandler = RejectedTypeEnum.createPolicy(parameter.getRejectedType()); + RejectedExecutionHandler rejectedExecutionHandler = RejectedPolicyTypeEnum.createPolicy(parameter.getRejectedType()); if (executor instanceof AbstractDynamicExecutorSupport) { DynamicThreadPoolExecutor dynamicExecutor = (DynamicThreadPoolExecutor) executor; dynamicExecutor.setRedundancyHandler(rejectedExecutionHandler); 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 index 4055a3b9..62b72066 100644 --- 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 @@ -19,20 +19,21 @@ package cn.hippo4j.springboot.starter.monitor; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.monitor.Message; +import cn.hippo4j.common.spi.DynamicThreadPoolServiceLoader; import cn.hippo4j.common.toolkit.CollectionUtil; +import cn.hippo4j.common.toolkit.StringUtil; 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.monitor.base.DynamicThreadPoolMonitor; +import cn.hippo4j.monitor.base.MonitorTypeEnum; +import cn.hippo4j.monitor.base.ThreadPoolMonitor; 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 com.google.common.collect.Lists; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -109,7 +110,8 @@ public class ReportingEventExecutor implements Runnable, CommandLineRunner, Disp if (!properties.getCollect()) { return; } - String collectType = Optional.ofNullable(Strings.emptyToNull(properties.getCollectType())).orElse(MonitorTypeEnum.SERVER.name().toLowerCase()); + threadPoolMonitors = Lists.newArrayList(); + String collectType = Optional.ofNullable(StringUtil.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()); @@ -117,7 +119,7 @@ public class ReportingEventExecutor implements Runnable, CommandLineRunner, Disp 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())); + || collectType.contains(MonitorTypeEnum.ELASTICSEARCH.name().toLowerCase())); if (customerDynamicThreadPoolMonitorFlag) { // Get all dynamic thread pool monitoring components. Map threadPoolMonitorMap = ApplicationContextHolder.getBeansOfType(ThreadPoolMonitor.class); 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 index 9b51cc2d..4065b27c 100644 --- 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 @@ -55,12 +55,16 @@ public class ServerNotifyConfigBuilder implements NotifyConfigBuilder { @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; + return Maps.newHashMap(); } + return getAndInitNotify(threadPoolIds); + } + + public Map> getAndInitNotify(List threadPoolIds) { + Map> resultMap = Maps.newHashMap(); List groupKeys = Lists.newArrayList(); threadPoolIds.forEach(each -> { String groupKey = GroupKey.getKeyTenant(each, properties.getItemId(), properties.getNamespace()); 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/support/DynamicThreadPoolConfigService.java similarity index 64% rename from hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolConfigService.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolConfigService.java index c000520a..f4230eec 100644 --- 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/support/DynamicThreadPoolConfigService.java @@ -15,28 +15,37 @@ * limitations under the License. */ -package cn.hippo4j.springboot.starter.core; +package cn.hippo4j.springboot.starter.support; 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.BooleanUtil; 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.GlobalNotifyAlarmManage; 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.core.executor.support.service.AbstractDynamicThreadPoolService; +import cn.hippo4j.message.dto.NotifyConfigDTO; +import cn.hippo4j.message.service.Hippo4jBaseSendMessageService; +import cn.hippo4j.message.service.ThreadPoolNotifyAlarm; import cn.hippo4j.springboot.starter.config.BootstrapProperties; +import cn.hippo4j.springboot.starter.core.ClientWorker; +import cn.hippo4j.springboot.starter.core.DynamicThreadPoolSubscribeConfig; import cn.hippo4j.springboot.starter.event.ApplicationCompleteEvent; +import cn.hippo4j.springboot.starter.notify.ServerNotifyConfigBuilder; +import cn.hippo4j.springboot.starter.remote.HttpAgent; +import com.google.common.collect.Lists; import cn.hippo4j.springboot.starter.remote.HttpAgent; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; +import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadPoolExecutor; import static cn.hippo4j.common.constant.Constants.REGISTER_DYNAMIC_THREAD_POOL_PATH; @@ -46,7 +55,7 @@ import static cn.hippo4j.common.constant.Constants.REGISTER_DYNAMIC_THREAD_POOL_ */ @Slf4j @RequiredArgsConstructor -public class DynamicThreadPoolConfigService implements DynamicThreadPoolService, ApplicationListener { +public class DynamicThreadPoolConfigService extends AbstractDynamicThreadPoolService implements ApplicationListener { private final HttpAgent httpAgent; @@ -54,18 +63,28 @@ public class DynamicThreadPoolConfigService implements DynamicThreadPoolService, private final BootstrapProperties properties; + private final ServerNotifyConfigBuilder notifyConfigBuilder; + + private final Hippo4jBaseSendMessageService hippo4jBaseSendMessageService; + private final DynamicThreadPoolSubscribeConfig dynamicThreadPoolSubscribeConfig; + @Override + public ThreadPoolExecutor registerDynamicThreadPool(DynamicThreadPoolRegisterWrapper registerWrapper) { + ThreadPoolExecutor dynamicThreadPoolExecutor = registerExecutor(registerWrapper); + subscribeConfig(registerWrapper); + putNotifyAlarmConfig(registerWrapper); + return dynamicThreadPoolExecutor; + } + @Override public void onApplicationEvent(ApplicationCompleteEvent event) { clientWorker.notifyApplicationComplete(); } - @Override - public ThreadPoolExecutor registerDynamicThreadPool(DynamicThreadPoolRegisterWrapper registerWrapper) { + private ThreadPoolExecutor registerExecutor(DynamicThreadPoolRegisterWrapper registerWrapper) { DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); checkThreadPoolParameter(registerParameter); - ThreadPoolParameterInfo parameter = JSONUtil.parseObject(JSONUtil.toJSONString(registerParameter), ThreadPoolParameterInfo.class); String threadPoolId = registerParameter.getThreadPoolId(); try { failDynamicThreadPoolRegisterWrapper(registerWrapper); @@ -77,29 +96,29 @@ public class DynamicThreadPoolConfigService implements DynamicThreadPoolService, log.error("Dynamic thread pool registration execution error: {}", threadPoolId, ex); throw ex; } + ThreadPoolParameterInfo parameter = JSONUtil.parseObject(JSONUtil.toJSONString(registerParameter), ThreadPoolParameterInfo.class); 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 subscribeConfig(DynamicThreadPoolRegisterWrapper registerWrapper) { + dynamicThreadPoolSubscribeConfig.subscribeConfig(registerWrapper.getDynamicThreadPoolRegisterParameter().getThreadPoolId()); + } + + private void putNotifyAlarmConfig(DynamicThreadPoolRegisterWrapper registerWrapper) { + DynamicThreadPoolRegisterParameter registerParameter = registerWrapper.getDynamicThreadPoolRegisterParameter(); + ThreadPoolNotifyAlarm threadPoolNotifyAlarm = new ThreadPoolNotifyAlarm( + BooleanUtil.toBoolean(String.valueOf(registerParameter.getIsAlarm())), + registerParameter.getActiveAlarm(), + registerParameter.getCapacityAlarm()); + GlobalNotifyAlarmManage.put(registerParameter.getThreadPoolId(), threadPoolNotifyAlarm); + Map> builderNotify = notifyConfigBuilder.getAndInitNotify(Lists.newArrayList(registerParameter.getThreadPoolId())); + hippo4jBaseSendMessageService.putPlatform(builderNotify); } private void checkThreadPoolParameter(DynamicThreadPoolRegisterParameter registerParameter) { 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/support/DynamicThreadPoolPostProcessor.java similarity index 84% rename from hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/core/DynamicThreadPoolPostProcessor.java rename to hippo4j-spring-boot/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/springboot/starter/support/DynamicThreadPoolPostProcessor.java index 256ace32..7cf0ac14 100644 --- 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/support/DynamicThreadPoolPostProcessor.java @@ -15,11 +15,13 @@ * limitations under the License. */ -package cn.hippo4j.springboot.starter.core; +package cn.hippo4j.springboot.starter.support; import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.constant.Constants; import cn.hippo4j.common.enums.EnableEnum; +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.common.executor.support.RejectedPolicyTypeEnum; import cn.hippo4j.common.model.ThreadPoolParameterInfo; import cn.hippo4j.common.toolkit.BooleanUtil; import cn.hippo4j.common.toolkit.JSONUtil; @@ -34,6 +36,7 @@ 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.core.DynamicThreadPoolSubscribeConfig; import cn.hippo4j.springboot.starter.remote.HttpAgent; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -44,6 +47,7 @@ import org.springframework.core.task.TaskDecorator; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -93,7 +97,7 @@ public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { ThreadPoolExecutor remoteThreadPoolExecutor = fillPoolAndRegister(dynamicThreadPoolWrapper); DynamicThreadPoolAdapterChoose.replace(bean, remoteThreadPoolExecutor); subscribeConfig(dynamicThreadPoolWrapper); - return remoteThreadPoolExecutor; + return DynamicThreadPoolAdapterChoose.match(bean) ? bean : remoteThreadPoolExecutor; } if (bean instanceof DynamicThreadPoolWrapper) { DynamicThreadPoolWrapper dynamicThreadPoolWrapper = (DynamicThreadPoolWrapper) bean; @@ -119,6 +123,7 @@ public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { */ protected ThreadPoolExecutor fillPoolAndRegister(DynamicThreadPoolWrapper dynamicThreadPoolWrapper) { String threadPoolId = dynamicThreadPoolWrapper.getThreadPoolId(); + ThreadPoolExecutor executor = dynamicThreadPoolWrapper.getExecutor(); Map queryStrMap = new HashMap(3); queryStrMap.put(TP_ID, threadPoolId); queryStrMap.put(ITEM_ID, properties.getItemId()); @@ -133,29 +138,32 @@ public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { 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()); + BlockingQueue workQueue = BlockingQueueTypeEnum.createBlockingQueue(threadPoolParameterInfo.getQueueType(), threadPoolParameterInfo.getCapacity()); newDynamicThreadPoolExecutor = ThreadPoolBuilder.builder() .dynamicPool() + .threadPoolId(threadPoolId) .workQueue(workQueue) - .threadFactory(threadPoolId) + .threadFactory(executor.getThreadFactory()) .poolThreadSize(threadPoolParameterInfo.corePoolSizeAdapt(), threadPoolParameterInfo.maximumPoolSizeAdapt()) .keepAliveTime(threadPoolParameterInfo.getKeepAliveTime(), TimeUnit.SECONDS) - .rejected(RejectedTypeEnum.createPolicy(threadPoolParameterInfo.getRejectedType())) + .rejected(RejectedPolicyTypeEnum.createPolicy(threadPoolParameterInfo.getRejectedType())) .allowCoreThreadTimeOut(EnableEnum.getBool(threadPoolParameterInfo.getAllowCoreThreadTimeOut())) .build(); // Set dynamic thread pool enhancement parameters. - if (dynamicThreadPoolWrapper.getExecutor() instanceof AbstractDynamicExecutorSupport) { + ThreadPoolExecutor customDynamicThreadPool; + if ((customDynamicThreadPool = executor) 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(); + TaskDecorator taskDecorator = ((DynamicThreadPoolExecutor) customDynamicThreadPool).getTaskDecorator(); ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setTaskDecorator(taskDecorator); - long awaitTerminationMillis = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).awaitTerminationMillis; - boolean waitForTasksToCompleteOnShutdown = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).waitForTasksToCompleteOnShutdown; + long awaitTerminationMillis = ((DynamicThreadPoolExecutor) customDynamicThreadPool).awaitTerminationMillis; + boolean waitForTasksToCompleteOnShutdown = ((DynamicThreadPoolExecutor) customDynamicThreadPool).waitForTasksToCompleteOnShutdown; ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setSupportParam(awaitTerminationMillis, waitForTasksToCompleteOnShutdown); - long executeTimeOut = ((DynamicThreadPoolExecutor) dynamicThreadPoolWrapper.getExecutor()).getExecuteTimeOut(); + long executeTimeOut = Optional.ofNullable(threadPoolParameterInfo.getExecuteTimeOut()) + .orElse(((DynamicThreadPoolExecutor) customDynamicThreadPool).getExecuteTimeOut()); ((DynamicThreadPoolExecutor) newDynamicThreadPoolExecutor).setExecuteTimeOut(executeTimeOut); } dynamicThreadPoolWrapper.setExecutor(newDynamicThreadPoolExecutor); @@ -163,11 +171,11 @@ public final class DynamicThreadPoolPostProcessor implements BeanPostProcessor { } } } catch (Exception ex) { - newDynamicThreadPoolExecutor = dynamicThreadPoolWrapper.getExecutor() != null ? dynamicThreadPoolWrapper.getExecutor() : CommonDynamicThreadPool.getInstance(threadPoolId); + newDynamicThreadPoolExecutor = executor != null ? executor : CommonDynamicThreadPool.getInstance(threadPoolId); dynamicThreadPoolWrapper.setExecutor(newDynamicThreadPoolExecutor); log.error("Failed to initialize thread pool configuration. error message: {}", ex.getMessage()); } finally { - if (Objects.isNull(dynamicThreadPoolWrapper.getExecutor())) { + if (Objects.isNull(executor)) { dynamicThreadPoolWrapper.setExecutor(CommonDynamicThreadPool.getInstance(threadPoolId)); } // Set whether to subscribe to the remote thread pool configuration. diff --git a/hippo4j-spring-boot/pom.xml b/hippo4j-spring-boot/pom.xml index b3cfb92b..45ae7e48 100644 --- a/hippo4j-spring-boot/pom.xml +++ b/hippo4j-spring-boot/pom.xml @@ -11,7 +11,7 @@ pom - hippo4j-core-spring-boot-starter + hippo4j-config-spring-boot-starter hippo4j-spring-boot-starter hippo4j-spring-boot-starter-adapter hippo4j-spring-boot-starter-monitor diff --git a/pom.xml b/pom.xml index 1256f752..ca39d771 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ hippo4j-all ${revision} pom + ${project.artifactId} Dynamic observable thread pool framework @@ -25,7 +26,7 @@ - 1.4.0-SNAPSHOT + 1.4.1-SNAPSHOT 6.5.0 @@ -48,17 +49,19 @@ 3.4.2 2.3.2.RELEASE 1.9.1 + 0.7.3 2.2.2 4.1.56.Final 9.0.55 5.1.0 2.2.6.RELEASE + 3.1.0 2.2.9.RELEASE 2.2.5.RELEASE 1.8 - true + true false false UTF-8 @@ -248,7 +251,7 @@ maven-gpg-plugin 1.6 - ${skip.gpg} + ${skip.maven.gpg.plugin}