diff --git "a/Docker/Docker\345\233\276\345\275\242\345\214\226\345\267\245\345\205\267Portainer\344\273\213\347\273\215\344\270\216\345\256\211\350\243\205/README.md" "b/Docker/Docker\345\233\276\345\275\242\345\214\226\345\267\245\345\205\267Portainer\344\273\213\347\273\215\344\270\216\345\256\211\350\243\205/README.md" index 77d89274..b233d796 100644 --- "a/Docker/Docker\345\233\276\345\275\242\345\214\226\345\267\245\345\205\267Portainer\344\273\213\347\273\215\344\270\216\345\256\211\350\243\205/README.md" +++ "b/Docker/Docker\345\233\276\345\275\242\345\214\226\345\267\245\345\205\267Portainer\344\273\213\347\273\215\344\270\216\345\256\211\350\243\205/README.md" @@ -2,9 +2,9 @@ ## 介绍 -Portainer是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的Docker环境。Portainer部署和使用都非常简单,它提供一个可以运行在任何docker引擎上的容器组成。Portainer提供管理docker的container、images、volumes、networks等等。它兼容独立的docker环境和swarm集群模式。基本满足中小型单位对docker容器的管理工作。 +**Portainer** 是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的 **Docker** 环境。**Portainer** 部署和使用都非常简单,它提供一个可以运行在任何 **Docker** 引擎上的容器组成。**Portainer** 提供管理 **Docker** 的**container**、**images**、**volumes**、**networks** 等等。它兼容独立的 **Docker** 环境和 **swarm** 集群模式。基本满足中小型单位对 **Docker** 容器的管理工作。 -官方提供的Demo演示环境: +官方提供的 **Demo** 演示环境: - 地址:http://demo.portainer.io - 用户名:admin @@ -14,7 +14,7 @@ Portainer是一款轻量级的图形化管理工具,通过它我们可以轻 ## Docker方式安装 -我们可以直接使用Docker的方式来安装 +我们可以直接使用 **Docker** 的方式来安装 首先创建数据卷,实现数据持久化 @@ -22,7 +22,7 @@ Portainer是一款轻量级的图形化管理工具,通过它我们可以轻 docker volume create portainer_db ``` -启动Partainer容器 +启动 **Partainer** 容器 ```bash docker run -d -p 9000:9000 -name portainer -restart always -v /var/run/docker/sock:/var/run/docker.sock -v portainer_db:/data portainer/portainer @@ -52,6 +52,7 @@ http://ip:9000 ```bash # 创建 目录 mkdir docker-compose + # 进入目录 cd docker-compose @@ -109,7 +110,7 @@ http://ip:9000 ## 使用Portainer管理其它主机 -刚刚演示的是使用Portainer管理本地安装的Docker主机,如果我们要使用portainer管理其它地方的主机。我们就需要单独启动一台主机,然后在上面运行Docker,需要注意:我们还需要开启Docker中的 2375端口号 +刚刚演示的是使用 **Portainer** 管理本地安装的 **Docker** 主机,如果我们要使用 **portainer** 管理其它地方的主机。我们就需要单独启动一台主机,然后在上面运行 **Docker** ,需要注意:我们还需要开启Docker中的 2375端口号 首先我们编辑 daemon.json @@ -117,7 +118,7 @@ http://ip:9000 vim /etc/docker/daemon.json ``` -然后加入以下内容即可【注意2375端口号要慎开,不然可能被当肉鸡挖矿】 +然后加入以下内容即可【注意 **2375** 端口号要慎开,不然可能被当肉鸡挖矿】 ```bash { @@ -125,7 +126,7 @@ vim /etc/docker/daemon.json } ``` -然后选择 端点 的 添加端点 +然后选择 **端点** 的 **添加端点** ![image-20201125171521404](images/image-20201125171521404.png) diff --git "a/Docker/Docker\346\223\215\344\275\234\347\263\273\347\273\237\344\271\213Alpine/README.md" "b/Docker/Docker\346\223\215\344\275\234\347\263\273\347\273\237\344\271\213Alpine/README.md" index 5a5bf9da..e93580a7 100644 --- "a/Docker/Docker\346\223\215\344\275\234\347\263\273\347\273\237\344\271\213Alpine/README.md" +++ "b/Docker/Docker\346\223\215\344\275\234\347\263\273\347\273\237\344\271\213Alpine/README.md" @@ -48,8 +48,6 @@ docker pull alpine 目前Docker官方已经开始推荐Alpine替代之前的Ubuntu作为基础镜像环境,这样所带来的好处包括:镜像下载速度更快、镜像安全性提高、主机之间的切换更方便、占用内存更少等特点。 - - ## 使用Alpine镜像 我们通过下面命令,能够非常快的运行一个Alpine容器【本地不存在会去官方下载】,并输出 hello alpine diff --git a/ElasticStack/README.md b/ElasticStack/README.md index b2d68f64..95a7c0b6 100644 --- a/ElasticStack/README.md +++ b/ElasticStack/README.md @@ -10,10 +10,10 @@ > 来源Bilibili黑马程序员的视频:[Elastic Stack(ELK)从入门到实践](https://www.bilibili.com/video/BV1iJ411c7Az) -- [ElasticSearch介绍与安装](./1_ElasticSearch介绍与安装) -- [Beats入门简介](./2_Beats入门简介) -- [Kibana安装与介绍](./3_Kibana安装与介绍) -- [Logstash入门简介](./4_Logstash入门简介) -- [ElasticStack综合案例](./5_ElasticStack综合案例) -- [使用ELK搭建蘑菇博客日志收集](./6_使用ELK搭建蘑菇博客日志收集) +- [ElasticSearch介绍与安装](http://www.moguit.cn/info/375) +- [Beats入门简介](http://www.moguit.cn/info/203) +- [Kibana安装与介绍](http://www.moguit.cn/info/76) +- [Logstash入门简介](http://www.moguit.cn/info/156) +- [ElasticStack综合案例](http://www.moguit.cn/info/32) +- [使用ELK搭建蘑菇博客日志收集](http://www.moguit.cn/info/436) - [源码](./Study_ElasticSearch_Code) \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code.zip" "b/Golang/Gin\346\241\206\346\236\266/Code.zip" new file mode 100644 index 00000000..755f8eef Binary files /dev/null and "b/Golang/Gin\346\241\206\346\236\266/Code.zip" differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/.gitignore" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/.gitignore" deleted file mode 100644 index 73f69e09..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/.gitignore" +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/Code.iml" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/Code.iml" deleted file mode 100644 index 5e764c4f..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/Code.iml" +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/codeStyles/codeStyleConfig.xml" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/codeStyles/codeStyleConfig.xml" deleted file mode 100644 index a55e7a17..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/codeStyles/codeStyleConfig.xml" +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/misc.xml" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/misc.xml" deleted file mode 100644 index 28a804d8..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/misc.xml" +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/modules.xml" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/modules.xml" deleted file mode 100644 index 74258af4..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/modules.xml" +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/vcs.xml" "b/Golang/Gin\346\241\206\346\236\266/Code/.idea/vcs.xml" deleted file mode 100644 index 089bfa0c..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/.idea/vcs.xml" +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/go.mod" "b/Golang/Gin\346\241\206\346\236\266/Code/go.mod" deleted file mode 100644 index 000fa30c..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/go.mod" +++ /dev/null @@ -1,16 +0,0 @@ -module gin_demo - -go 1.14 - -require ( - github.com/gin-gonic/gin v1.6.3 // indirect - github.com/go-playground/validator/v10 v10.3.0 // indirect - github.com/golang/protobuf v1.4.2 // indirect - github.com/jinzhu/gorm v1.9.16 - github.com/json-iterator/go v1.1.10 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 // indirect - google.golang.org/protobuf v1.25.0 // indirect - gopkg.in/yaml.v2 v2.3.0 // indirect -) diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/go.sum" "b/Golang/Gin\346\241\206\346\236\266/Code/go.sum" deleted file mode 100644 index a94f735c..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/go.sum" +++ /dev/null @@ -1,142 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= -github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= -github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson02/hello.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson02/hello.html" deleted file mode 100644 index 477f20ac..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson02/hello.html" +++ /dev/null @@ -1,12 +0,0 @@ - - hello golang - -

- hello Golang! -

-

- hello gin! -

- - - diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson02/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson02/main.go" deleted file mode 100644 index e4d0490f..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson02/main.go" +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "net/http" -) - -// http.ResponseWriter:代表响应,传递到前端的 -// *http.Request:表示请求,从前端传递过来的 -func sayHello(w http.ResponseWriter, r *http.Request) { - html, _ := ioutil.ReadFile("./index2.tmpl") - _, _ = fmt.Fprintln(w, string(html)); -} - -func main() { - http.HandleFunc("/hello", sayHello) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("http server failed, err:%v \n", err) - return - } -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson03/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson03/main.go" deleted file mode 100644 index 1c770458..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson03/main.go" +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "github.com/gin-gonic/gin" -) - -func main() { - // 创建一个默认的路由引擎 - r := gin.Default() - // GET:请求方式;/hello:请求的路径 - // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 - r.GET("/hello", func(c *gin.Context) { - // c.JSON:返回JSON格式的数据 - c.JSON(200, gin.H{ - "message": "Hello world!", - }) - }) - // 启动HTTP服务,默认在0.0.0.0:8080启动服务 - r.Run() -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson04/hello.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson04/hello.tmpl" deleted file mode 100644 index ba56676a..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson04/hello.tmpl" +++ /dev/null @@ -1,11 +0,0 @@ - - - - hello - - -

hello golang

-

hello {{.}}

- - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson04/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson04/main.go" deleted file mode 100644 index 10286b42..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson04/main.go" +++ /dev/null @@ -1,35 +0,0 @@ -package main - -import ( - "fmt" - "html/template" - "net/http" - "os" -) - -func sayHello(w http.ResponseWriter, r *http.Request) { - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - fmt.Println("wd:", wd + "\\lesson04\\index2.tmpl") - // 解析指定文件生成模板对象 - tmpl, err := template.ParseFiles( wd + "\\lesson04\\index2.tmpl") - - if err != nil { - fmt.Println("create templates failed, err:", err) - return - } - // 利用给定数据渲染模板,并将结果写入w - tmpl.Execute(w, "沙河小王子") -} -func main() { - http.HandleFunc("/", sayHello) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("HTTP server failed,err:", err) - return - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson05/hello.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson05/hello.tmpl" deleted file mode 100644 index c7b34730..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson05/hello.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Hello - - -

姓名: {{.Name}}

-

性别: {{.Gender}}

-

年龄: {{.Age}}

- - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson05/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson05/main.go" deleted file mode 100644 index 7ed1909d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson05/main.go" +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "fmt" - "html/template" - "net/http" - "os" -) - -//定义用户结构体 -type User struct { - Name string - Gender string - Age int -} - -func sayHello(w http.ResponseWriter, r *http.Request) { - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - fmt.Println("wd:", wd + "\\lesson05\\index2.tmpl") - // 解析指定文件生成模板对象 - tmpl, err := template.ParseFiles( wd + "\\lesson05\\index2.tmpl") - - if err != nil { - fmt.Println("create templates failed, err:", err) - return - } - - // 采用结构体 - u1 := User{ - Name: "小王子", - Gender: "男", - Age: 10, - } - fmt.Println(u1) - - // 采用一个map - m1 := map[string]interface{}{ - "Name": "小王子", - "Age": 18, - "Gender": "男", - } - - m2 := map[string]interface{}{ - "map": m1, - "users": u1, - } - fmt.Println(m2) - - // 利用给定数据渲染模板,并将结果写入w - tmpl.Execute(w, m1) -} -func main() { - http.HandleFunc("/", sayHello) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("HTTP server failed,err:", err) - return - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson06/hello.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson06/hello.tmpl" deleted file mode 100644 index 4ee24a04..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson06/hello.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - 自定义模板函数 - - -

{{kua .Name}}

-

姓名: {{.Name}}

-

性别: {{.Gender}}

-

年龄: {{.Age}}

- - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson06/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson06/main.go" deleted file mode 100644 index 7e6891a4..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson06/main.go" +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "fmt" - "html/template" - "net/http" - "os" -) - -/** - * @Description f1函数 - * @Param - * @return - **/ -func f1(w http.ResponseWriter, r *http.Request) { - // 定义模板 - // 解析模板 - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 定义一个自定义函数 - // 要么只有一个返回值,要么有两个返回值,第二个返回值必须是error类型 - kua := func(name string)(string, error) { - return name + "年轻又帅气!", nil - } - - // 创建一个名字为f的模板对象。注意,这个名字一定要和模板的名字对应上 - tmpl := template.New("index2.tmpl") - - // 告诉模板引擎,我现在多了一个自定义的函数kua - tmpl.Funcs(template.FuncMap{ - "kua": kua, - }) - - // 解析模板 - _, err = tmpl.ParseFiles( wd + "\\lesson06\\index2.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - // 采用一个map - m1 := map[string]interface{}{ - "Name": "小王子", - "Age": 18, - "Gender": "男", - } - - // 渲染模板 - tmpl.Execute(w, m1) -} -func main() { - http.HandleFunc("/hello", f1) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("HTTP server failed,err:", err) - return - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/home.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/home.tmpl" deleted file mode 100644 index bd532773..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/home.tmpl" +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - 模板继承 - - - -
- -
-

这是home页面

-

hello:{{.}}

-
- -
- - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/index.tmpl" deleted file mode 100644 index e63bd3bb..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/index.tmpl" +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - 模板继承 - - - -
- -
-

这是index页面

-

hello:{{.}}

-
- -
- - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/main.go" deleted file mode 100644 index 5d37c973..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/main.go" +++ /dev/null @@ -1,143 +0,0 @@ -package main - -import ( - "fmt" - "html/template" - "net/http" - "os" -) - -/** - * @Description 首页 - * @Param - * @return - **/ -func index(w http.ResponseWriter, r *http.Request) { - // 定义模板 - // 解析模板 - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 创建一个名字为f的模板对象。注意,这个名字一定要和模板的名字对应上 - tmpl := template.New("index.tmpl") - - // 解析模板 - _, err = tmpl.ParseFiles( wd + "\\lesson07\\index.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - msg := "小公主" - - // 渲染模板 - tmpl.Execute(w, msg) -} - -/** - * @Description 主页 - * @Param - * @return - **/ -func home(w http.ResponseWriter, r *http.Request) { - // 定义模板 - // 解析模板 - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 创建一个名字为f的模板对象。注意,这个名字一定要和模板的名字对应上 - tmpl := template.New("home.tmpl") - - // 解析模板 - _, err = tmpl.ParseFiles( wd + "\\lesson07\\home.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - msg := "小王子" - - // 渲染模板 - tmpl.Execute(w, msg) -} - - -/** - * @Description 首页 - * @Param - * @return - **/ -func index2(w http.ResponseWriter, r *http.Request) { - // 定义模板(使用的模板继承的方式) - // 解析模板 - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 解析模板 - t, err := template.ParseFiles( wd + "\\lesson07\\templates\\base.tmpl", wd + "\\lesson07\\templates\\index2.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - msg := "小公主" - - // 渲染模板 - t.ExecuteTemplate(w, "index2.tmpl", msg) -} - -/** - * @Description 主页 - * @Param - * @return - **/ -func home2(w http.ResponseWriter, r *http.Request) { - // 定义模板(使用的模板继承的方式) - // 解析模板 - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 解析模板 - t, err := template.ParseFiles( wd + "\\lesson07\\templates\\base.tmpl", wd + "\\lesson07\\templates\\home2.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - msg := "小公主" - - // 渲染模板 - t.ExecuteTemplate(w, "home2.tmpl", msg) -} - -func main() { - http.HandleFunc("/index", index) - http.HandleFunc("/home", home) - http.HandleFunc("/index2", index2) - http.HandleFunc("/home2", home2) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("HTTP server failed,err:", err) - return - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/base.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/base.tmpl" deleted file mode 100644 index c53dd9f0..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/base.tmpl" +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - 模板继承 - - - -
- -
- - {{block "content" .}}{{end}} -
- -
- - - - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/home2.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/home2.tmpl" deleted file mode 100644 index 2b2014d3..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/home2.tmpl" +++ /dev/null @@ -1,8 +0,0 @@ -{{/*继承根模板*/}} -{{template "base.tmpl" .}} - -{{/*重新定义块模板*/}} -{{define "content"}} -

这是home2页面

-

hello:{{.}}

-{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/index2.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/index2.tmpl" deleted file mode 100644 index 93993292..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson07/templates/index2.tmpl" +++ /dev/null @@ -1,8 +0,0 @@ -{{/*继承根模板*/}} -{{template "base.tmpl" .}} - -{{/*重新定义块模板*/}} -{{define "content"}} -

这是index2页面

-

hello:{{.}}

-{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/hello.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson08/hello.tmpl" deleted file mode 100644 index d38b2fe8..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/hello.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - 自定义模板函数 - - -

姓名: {[.Name]}

-

性别: {[.Gender]}

-

年龄: {[.Age]}

- - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson08/main.go" deleted file mode 100644 index 2a4175a7..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/main.go" +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @Description 修改模板引擎的默认标识符 - * @author 陌溪 - * @date 2020年9月16日21:41:43 - **/ -package main - -import ( - "fmt" - "html/template" - "net/http" - "os" -) - -/** - * @Description f1函数 - * @Param - * @return - **/ -func f1(w http.ResponseWriter, r *http.Request) { - // 定义模板 - // 解析模板 - - // 获取项目的绝对路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 创建一个名字为f的模板对象。注意,这个名字一定要和模板的名字对应上 - tmpl := template.New("hello.tmpl") - - // 修改默认的标识符 - tmpl = tmpl.Delims("{[", "]}") - - // 解析模板 - _, err = tmpl.ParseFiles( wd + "\\lesson08\\hello.tmpl") - - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - - // 采用一个map - m1 := map[string]interface{}{ - "Name": "小王子", - "Age": 18, - "Gender": "男", - } - - // 渲染模板 - tmpl.Execute(w, m1) -} - -func xss(w http.ResponseWriter, r *http.Request) { - // 定义模板 - - // 解析模板 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - // 创建一个名字为f的模板对象。注意,这个名字一定要和模板的名字对应上 - tmpl := template.New("xss.tmpl") - - // 定义一个安全的函数,让模板对 传递过去的数据不进行转义,直接通过html格式显示 - tmpl = tmpl.Funcs(template.FuncMap{ - "safe": func(str string)template.HTML { - return template.HTML(str) - }, - }) - - // 解析模板 - _, err = tmpl.ParseFiles( wd + "\\lesson08\\xss.tmpl") - if err != nil { - fmt.Printf("parse templates failed, err:%v \n", err) - return - } - // 渲染模板 - str := "" - tmpl.Execute(w, str) -} -func main() { - http.HandleFunc("/hello", f1) - http.HandleFunc("/xss", xss) - err := http.ListenAndServe(":9090", nil) - if err != nil { - fmt.Println("HTTP server failed,err:", err) - return - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/xss.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson08/xss.tmpl" deleted file mode 100644 index f6dd7324..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson08/xss.tmpl" +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - xss - - -

{{safe .}}

- - \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/main.go" deleted file mode 100644 index 61894b70..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/main.go" +++ /dev/null @@ -1,79 +0,0 @@ -/** Gin框架渲染博客 - * @Description - * @Author 陌溪 - * @Date 2020/9/16 22:10 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "os" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - r := gin.Default() - // 模板解析 - - // 使用全局匹配规则 - r.LoadHTMLGlob(wd + "/lesson09-2/templates/*") - - r.Static("/static", wd + "/lesson09-2/static") - - // 博客日记 模板渲染 - r.GET("/bkrj", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "bkrj.tmpl", nil) - }) - - // 关于博主 模板渲染 - r.GET("/gybz", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "gybz.tmpl", nil) - }) - - // 首页 模板渲染 - r.GET("/index", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "index.tmpl", nil) - }) - - // 详情页 模板渲染 - r.GET("/info", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "info.tmpl", nil) - }) - - // 时间轴 模板渲染 - r.GET("/sjz", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "sjz.tmpl", nil) - }) - - // 碎言碎语 模板渲染 - r.GET("/sysy", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "sysy.tmpl", nil) - }) - - // 我的相册 模板渲染 - r.GET("/wdxc", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "wdxc.tmpl", nil) - }) - - // 启动Server - r.Run(":8080") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/css/base.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/css/base.css" deleted file mode 100644 index 59f00c84..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/css/base.css" +++ /dev/null @@ -1,245 +0,0 @@ -@charset "utf-8"; -/* CSS Document */ -* { margin: 0; padding: 0 } -img { border: 0; display: block } /*去除图片默认的1px边框;将图片标签变成块级元素,可清除默认的3px距离*/ -ul li { list-style: none; }/*去除ul li标签前面小点*/ -a { color: #222; text-decoration: none; } /* 所有a 标签的 颜色为#222; 去除默认的下划线*/ -a:hover { color: #f00; }/*所有带访问的链接,鼠标放上去的颜色为红色 */ -h1 { font-size: 28px } -h2 { font-size: 18px } -h3, h4, h5, h6 { font-size: 16px } -body { font: 15px "Microsoft YaHei", Arial, Helvetica, sans-serif; color: #222; background: #f5f5f5 } /*设置 文字大小、字体、颜色、背景*/ -header, main { width: 1200px; margin: auto } -article { width: 860px; float: left; } -aside { width: 320px; float: right; } -footer { width: 100%; padding-bottom: 20px; text-align: center; clear: both } -.touxiang { float: left; width: 50%; margin: 20px 0; } -.touxiang i { width: 100px; height: 100px; background: #fff; display: block; float: left; margin-right: 20px; border-radius: 100%; } -.touxiang i img { width: 101px; } -.touxiang h2 { margin: 20px 0 10px 0; } -.touxiang p { color: #949494; } -.guanzhu { float: right; background: #e01109; color: #fff; width: 120px; line-height: 30px; text-align: center; border-radius: 3px; position: relative; top: 40px; right: 0; cursor: pointer; } -.weixin { display: none; position: absolute; width: 120px; } -.guanzhu:hover .weixin { display: block } -nav { width: 100%; clear: both; height: 50px; line-height: 50px; background: #fff; overflow: hidden; margin-bottom: 20px; box-shadow: rgba(0,0,0,.1) 3px 5px 5px; }/*阴影 颜色透明度,左右,上下,大小*/ -nav ul { text-align: center; font-size: 0; } -nav ul li { display: inline-block; font-size: 15px; position: relative; margin: 0 3px 0 0; } -nav ul li a { display: block; padding: 0 20px; } -nav ul li a:before { content: ""; width: 0; height: 5px; top: 0; left: 0; position: absolute; transition: .5s; } -nav ul li a:hover:before, li.current a:before { width: 100%; background: #af0f09; } -nav ul li a:hover, li.current a { background: #e01109; color: #fff; } -/*blogs*/ -.blogs { } -.blogs li { overflow: hidden; margin-bottom: 20px; background: #fff; padding: 20px; position: relative; } -.top_blog .blogs li::after { position: absolute; content: ""; right: 10px; top: 40px; border-style: solid; border-width: 0 13px 13px 13px; } -.top_blog .blogs li::after { border-color: #e01109 #e01109 transparent #e01109; } -.top_blog .blogs li::before { background: #e01109; position: absolute; content: ""; right: 10px; top: 0; width: 26px; height: 30px; text-align: center; font-size: 16px; font-weight: bold; color: #fff; padding: 10px 0 0 0; } -.top_blog .blogs li:nth-child(1)::before { content: "1" } -.top_blog .blogs li:nth-child(2)::before { content: "2" } -.top_blog .blogs li:nth-child(3)::before { content: "3" } -.blogs li i { display: block; width: 160px; height: 110px; overflow: hidden; float: left; margin-right: 20px; } -.blogs li i img { width: 100%; min-height: 100%; transition: .5s; } -.blogs h2 { margin: 0 0 14px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.blog_smalltext { overflow: hidden; -webkit-box-orient: vertical; display: -webkit-box; -webkit-line-clamp: 2; font-size: 14px; color: #666; margin-bottom: 14px; } -.blog_info { color: #888; font-size: 13px; } -.blog_info span { margin-right: 15px; position: relative; padding-left: 20px; line-height: 20px; } -.blog_info span a { color: #518f97 } -.blog_info span a:hover { color: #e01109; } -.blog_info span:nth-child(n):before { position: absolute; content: ""; width: 20px; height: 20px; left: 0; top: 0; } -.blog_info span:nth-child(1) { background: url(../images/icon.png) no-repeat 0 0; background-size: 18px } -.blog_info span:nth-child(2) { background: url(../images/icon.png) no-repeat 0 -18px; background-size: 18px } -.blog_info span:nth-child(3) { background: url(../images/icon.png) no-repeat 0 -36px; background-size: 18px } -.blog_info span:nth-child(4) { background: url(../images/icon.png) no-repeat 0 -54px; background-size: 18px } -.blog_info span:nth-child(5) { background: url(../images/icon.png) no-repeat 0 -72px; background-size: 18px } -.blogs li:hover { box-shadow: rgba(0,0,0,.1) 3px 5px 5px; } -.blogs li:hover h2 { color: #F00 } -.blogs li:hover img { transform: scale(1.1) } -/*aside*/ -aside div { background: #fff; margin-bottom: 20px } -.search { background: #ed4040; position: relative; border: #ed4040 2px solid; border-radius: 5px; overflow: hidden; } -.search input.input_submit { border: 0; color: #fff; outline: none; position: absolute; top: 0; right: 0; width: 25%; display: block; font-size: 15px; height: 36px; line-height: 36px; text-indent: 1em; cursor: pointer; background: url(../images/search.png) no-repeat left 10px center; background-size: 21px; } -.search input.input_text { border: 0; line-height: 36px; height: 36px; font-size: 14px; width: 75%; outline: none; text-indent: 1em; } -h2.aside_title { padding: 20px; } -.xinqing { } -.xinqing ul { padding: 0 20px 20px; } -.xinqing ul li { margin-bottom: 20px; border: #e4e4e4 1px solid; padding: 10px; font-size: 14px; border-radius: 5px; color: #333; position: relative; } -.xinqing ul li:after { right: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; border-right-color: #e4e4e4; border-width: 10px; top: 10px; } -.xinqing ul li:nth-child(odd) { background: #f5f5f5 } -.pics { overflow: hidden; } -.pics ul { overflow: hidden; margin: 0 20px 20px; } -.pics ul li { width: 33.333%; float: left; } -.pics ul li a { display: block; height: 60px; margin: 2px; overflow: hidden; background: #000 } -.pics ul li img { width: 100%; min-height: 100%; opacity: .8; transition: all .5s; } -.pics ul li a:hover img { opacity: 1; transform: scale(1.1) } -.paihang { } -.paihang ol { padding: 0 20px 20px 40px; } -.paihang ol li { margin-bottom: 20px; padding-left: 10px; } -.links span { float: right; font-size: 16px; font-weight: normal } -.links span a { color: #666; } -.links span a:hover { color: #f00 } -.links ul { padding: 0 20px 20px 20px; overflow: hidden } -.links li { width: 50%; float: left; display: inline-block; line-height: 30px; text-align: center } -.links li a { margin: 5px; border: #666 1px solid; display: block; border-radius: 3px; color: #666 } -.links li a:hover { border: #222 1px solid; color: #000 } -/*footer*/ -footer img { display: inline-block; vertical-align: middle; margin-right: 5px; } -footer p { line-height: 30px; font-size: 14px; color: #666 } -footer p span { margin: 0 10px } -footer a { color: #666 } -/*weizhi*/ -.weizhi { margin: 0 0 20px 0; font-size: 14px; color: #949494; background: url(../images/weizhi.png) no-repeat left center; background-size: 20px; padding-left: 30px } -.weizhi a { color: #949494; } -.weizhi a:hover { color: #000 } -/*suiyan*/ -.suiyan_list { } -.suiyan_list ul { overflow: hidden; } -.suiyan_list ul li { width: 25%; float: left; } -.suiyan_list ul li a { display: block; padding: 20px; margin: 30px auto; background: #fff; box-shadow: rgba(0,0,0,.1) 3px 5px 5px; width: 200px; height: 200px; transform: rotate(-10deg); position: relative; color: #333 } -.suiyan_list ul li:nth-child(even) a { -webkit-transform: rotate(10deg); top: 10px; background: rgb(255, 255, 205); ; } -.suiyan_list ul li:nth-child(3n) a { -webkit-transform: rotate(-5deg); top: -10px; background: rgb(254, 201, 227); } -.suiyan_list ul li:nth-child(5n) a { -webkit-transform: rotate(8deg); top: -10px; background: rgb(210, 251, 253); } -.suiyan_list ul li a:hover { transform: scale(1.1); transition: .2s; box-shadow: rgba(0,0,0,.5) 3px 5px 5px; } -.suiyan_time { font-size: 14px; color: #999; margin-bottom: 10px; } -.suiyan_text { line-height: 30px; } -.suiyan_list span { position: absolute; width: 50px; height: 50px; bottom: 5px; right: 5px; } -.suiyan_5 { background: url(../images/bq5.png) no-repeat; background-size: 48px; } -.suiyan_4 { background: url(../images/bq4.png) no-repeat; background-size: 48px; } -.suiyan_3 { background: url(../images/bq3.png) no-repeat; background-size: 48px; } -.suiyan_2 { background: url(../images/bq2.png) no-repeat; background-size: 48px; } -.suiyan_1 { background: url(../images/bq1.png) no-repeat; background-size: 48px; } -/*tuijian*/ -.tuijian { } -.tuijian ul { padding: 0 20px 20px 20px; } -.tuijian ul li { overflow: hidden; margin-bottom: 20px; } -.tuijian ul li a { } -.tuijian i { display: block; width: 90px; height: 60px; overflow: hidden; margin-right: 20px; float: left; } -.tuijian p { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; margin-top: 8px } -.tuijian img { width: 100%; min-height: 100%; } -/*love*/ -.love { } -.love ul { padding: 0 20px 20px 20px; overflow: hidden } -.love ul li { overflow: hidden; width: 50%; float: left; } -.love ul li a { margin: 0 3px 10px; display: block; overflow: hidden; } -.love i { display: block; width: 100%; height: 90px; overflow: hidden; } -.love p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; } -.love img { width: 100%; min-height: 100%; } -/*tagsclous*/ -.tagsclous h2 { padding-bottom: 0 !important } -.tagsclous ul { padding: 20px; overflow: hidden; position: relative; } -.tagsclous ul:before { animation: linescroll 5s; animation-iteration-count: infinite; content: ""; width: 20px; height: 20px; background: red; position: absolute; z-index: 9 } -.tagsclous a { display: inline-block; background: #ffffff; width: 33.3333%; font-size: 14px; float: left; line-height: 40px; text-align: center; position: relative; } -.tagsclous a:nth-child(3n-1):before { width: 1px; height: 100%; content: ""; position: absolute; background: #eae5e5; left: 0; top: 0; } -.tagsclous a:nth-child(3n-1):after { width: 1px; height: 100%; content: ""; position: absolute; background: #eae5e5; right: 0; top: 0; } -.tagsclous a:nth-child(6n+1) { background: #f5f5f5; } -.tagsclous a:nth-child(6n+2) { background: #f5f5f5; } -.tagsclous a:nth-child(6n+3) { background: #f5f5f5; } -.tagsclous a:hover { background: #e01109; color: #fff } -@keyframes linescroll { 0% { -left:0px; -top:0px; -} -25% { -left:300px; -top:0px; -} -50% { -left:300px; -top:220px; -} -75% { -left:0px; -top:220px; -} -100% { -left:0px; -top:0px; -} -} -/*xiangce*/ -.xiangce_list ul { width: 25%; float: left; overflow: hidden; } -.xiangce_list li { margin: 10px } -.xiangce_list li a { margin: 0 0 30px 0; padding: 12px; background: white; border-radius: 3px; box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.05); display: block; } -.xiangce_list li img { width: 100%; margin: 0 auto 10px } -.xiangce_list li p { color: #666; text-align: center } -.xiangce_list li a:hover { box-shadow: 0px 2px 3px 1px rgba(0, 0, 0, 0.1); transform: translateY(-5px); transition: all .2s; } -.time_list { background: #fff; padding: 20px; } -.time_list li { line-height: 36px; } -.time_list li a { display: block; position: relative; } -.time_list li span { margin: 0 40px 0 0; float: left; color: #999; } -.time_list ul { position: relative; } -.time_list ul:before { position: absolute; content: ""; width: 2px; height: 100%; background: #ccc; left: 102px; top: 0; } -.time_list li a:before { position: absolute; content: ""; width: 12px; height: 12px; background: #fff; border: #ccc 2px solid; border-radius: 100%; left: 95px; top: 10px; } -.time_list li a:hover:before { background: #f00; } -.about { background: #fff; padding: 20px; font-size: 16px; line-height: 24px; } -.about p { margin: 10px 0; } -.about h2 { line-height: 40px; background: #f2f2f2; border-left: #000 4px solid; padding-left: 10px; margin: 10px 0; } -.about img { width: 80% !important; height: auto !important; margin: auto; } -.aside_right { padding: 20px; } -.aside_right h2 { margin: 0 0 10px 0; } -.aside_right ul { overflow: hidden; padding: 0 0 20px 0; } -.aside_right ul li { line-height: 30px; background: #f2f2f2; margin-bottom: 10px; text-indent: 1em; border-radius: 10px; } -.aside_right ol { line-height: 30px; margin-left: 30px; } -.container { background: #fff; padding: 20px; } -.container h1 { font-size: 24px; margin-bottom: 20px; } -.tags { overflow: hidden; margin: 10px 0; } -.tags a { display: block; float: left; background: #e01109; color: #fff; margin-right: 10px; padding: 4px 5px; } -.content { font-size: 16px; line-height: 24px; } -.content p { margin: 20px 0; } -.content img { margin: auto; max-width: 100% !important; height: auto !important; } -.info-pre-next { margin: 20px 0; } -.info-pre-next p { line-height: 30px; } -.info-pre-next p span { margin-right: 10px; font-weight: bold; } -.otherlink { margin: 20px 0; line-height: 26px; } -.otherlink h2, .pinglun_box h2 { margin-bottom: 10px; position: relative; } -.otherlink h2:before, .pinglun_box h2:before { position: absolute; content: ""; width: 4px; height: 100%; background: #f00; left: -20px; } - @media only screen and (max-width: 1200px) { -header, main { width: 90%; } -article { width: 68%; } -aside { width: 30%; } -} - @media only screen and (max-width: 768px) { -article { width: 100%; } -.touxiang { width: 60%; } -aside { display: none; } -nav ul li a { padding: 0 15px; } -img.weixin { z-index: 999; } -.suiyan_list ul { padding: 30px; } -.suiyan_list ul li { width: 33.33333%; } -.suiyan_list ul li a { padding: 10px; width: 180px; } -.suiyan_text { font-size: 14px; } -.suiyan_list ul li a:hover { z-index: 9; } -.xiangce_list li p { font-size: 14px; } -.xiangce_list li a { padding: 5px; } -.xiangce_list li { margin: 5px; } -} - @media only screen and (max-width: 480px) { -header, main { width: 96%; } -.touxiang { width: 100%; margin: 5px 0; } -.touxiang i { width: 60px; height: 60px; margin-right: 10px; } -.touxiang i img { width: 100%; } -.touxiang h2 { margin: 5px 0; } -.guanzhu { position: fixed; z-index: 9; bottom: 0; top: inherit; width: 100%; } -.guanzhu:hover .weixin { bottom: 30px; left: 33%; box-shadow: #b8b1b1 2px 2px 10px; } -footer { padding-bottom: 50px; margin-top: 20px } -nav { overflow-x: scroll; height: 40px; line-height: 40px; } -nav ul { width: max-content; overflow-x: scroll; } -.blogs li { padding: 10px; } -.blogs h2 { font-size: 16px; margin: 0 0 5px 0; } -.blogs li i { width: 90px; height: 60px; margin-right: 10px; } -.top_blog .blogs li::after { display: none; } -.top_blog .blogs li::before { display: none; } -.blog_info span:last-child { display: none; } -.suiyan_list ul li { width: 50%; } -.xiangce_list ul { width: 100% } -.xiangce_list li a { padding: 12px; } -.time_list li span { width: 100%; } -.time_list ul:before { left: 0; } -.time_list li a:before { left: -8px; } -.time_list li a { padding-left: 20px; } -.time_list li span { padding-left: 20px; } -.about img { width: 100% !important; } -.container h1 { font-size: 20px; } -.info-pre-next p, .otherlink li { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -footer p span:last-child { display: block; } -main { overflow: hidden; } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/001.jpg" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/001.jpg" deleted file mode 100644 index d1ac5a24..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/001.jpg" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/002.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/002.png" deleted file mode 100644 index 2b7e8bbc..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/002.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/003.jpg" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/003.jpg" deleted file mode 100644 index 03d26e0d..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/003.jpg" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/004.jpg" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/004.jpg" deleted file mode 100644 index c96f9ba0..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/004.jpg" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/005.jpg" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/005.jpg" deleted file mode 100644 index 6f317b96..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/005.jpg" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/006.jpg" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/006.jpg" deleted file mode 100644 index 9c7d513b..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/006.jpg" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq1.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq1.png" deleted file mode 100644 index 66ee2c17..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq1.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq2.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq2.png" deleted file mode 100644 index de4c2bb8..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq2.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq3.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq3.png" deleted file mode 100644 index 20e7527b..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq3.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq4.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq4.png" deleted file mode 100644 index db35e2d7..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq4.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq5.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq5.png" deleted file mode 100644 index 29946984..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/bq5.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/ga.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/ga.png" deleted file mode 100644 index 41870d16..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/ga.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/icon.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/icon.png" deleted file mode 100644 index 49bb3274..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/icon.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/search.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/search.png" deleted file mode 100644 index 6b16a861..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/search.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/weizhi.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/weizhi.png" deleted file mode 100644 index 5dd63065..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/weizhi.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/wx.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/wx.png" deleted file mode 100644 index 6b0a522b..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/wx.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/yangqq.png" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/yangqq.png" deleted file mode 100644 index 1a03daa6..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/images/yangqq.png" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/js/jquery.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/js/jquery.js" deleted file mode 100644 index dc20a8ab..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/static/js/jquery.js" +++ /dev/null @@ -1,3 +0,0 @@ -// JavaScript Document -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>博客日记

-
- - -
-
    -
  • 标题图片 -

    疫情之下,你在家办公了吗?

    -
    -

    这是一张朋友圈的集赞链接,活动是要求200个赞,我自己点了一个,还差199个,我朋友圈的好友大概2500+,虽然花了1个小时才完成,但是在“企业名录三群”我是第一个先集赞完成的,群里好友纷纷给我点赞,那天还不少朋友加我。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    想折腾也得看运气不是,我是不是太倒霉了?!

    -
    -

    给网站安装服务器系统对我来说已经不是什么问题了,但是安装电脑windows系统,我就是真的小白一枚,而且记不住,别人说,我操作一遍,隔天就能忘记!从我在京东下单购买电脑的记录来看,距离上一次安装windows环境已经一年了。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    从互联网消失的那3年,都去哪儿了?

    -
    -

    不少看过“关于我”页面介绍的朋友,怀着疑问来问我,这三年我都去哪儿了?在干什么?这里有提到过这三年,三年,作为一个女程序员,我从恋爱到结婚生子,到过上了相夫教子的家庭主妇生活。也正是因为怀孕后不能长时间上网,所以我有大把的时间用在了手机上,我离互联网越来越远,离我的个人博客小站也越来越远。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    兴趣支撑梦想,兴趣是支撑我自己前行的动力

    -
    -

    在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    忙碌是自由活着的一种底气

    -
    -

    从我选择从事前端工作开始,有的人总是把这个职业想象的太美好,但当真正从事了这份职业后才发现,高薪的背后其实有太多的心酸和付出,有些是你想都想不到的。

    -

    2020-03-29杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    虽然闭关在家,但一刻也不想闲下来

    -
    -

    从疫情爆发到现在各个省市都开始陆续复工,我天天在家待着,除了带娃,我大部分时间还是在电脑前,甚至现在小朋友大部分时间也在电子产品上。从一月底到现在我一共设计了3套新模板.

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    想折腾也得看运气不是,我是不是太倒霉了?!

    -
    -

    给网站安装服务器系统对我来说已经不是什么问题了,但是安装电脑windows系统,我就是真的小白一枚,而且记不住,别人说,我操作一遍,隔天就能忘记!从我在京东下单购买电脑的记录来看,距离上一次安装windows环境已经一年了。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    从互联网消失的那3年,都去哪儿了?

    -
    -

    不少看过“关于我”页面介绍的朋友,怀着疑问来问我,这三年我都去哪儿了?在干什么?这里有提到过这三年,三年,作为一个女程序员,我从恋爱到结婚生子,到过上了相夫教子的家庭主妇生活。也正是因为怀孕后不能长时间上网,所以我有大把的时间用在了手机上,我离互联网越来越远,离我的个人博客小站也越来越远。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    兴趣支撑梦想,兴趣是支撑我自己前行的动力

    -
    -

    在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
-
- - -
- - - - -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/gybz.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/gybz.tmpl" deleted file mode 100644 index 16e5c983..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/gybz.tmpl" +++ /dev/null @@ -1,78 +0,0 @@ -{{define "gybz.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>我的相册

- - -
-
-

这是一个前所未有、波澜壮阔的时代。七十载奋斗成就斐然,国人居住环境发生了天翻地覆的变化,从平房到筒子楼、单元楼,再到高层住宅、花园洋房、高端别墅,“居者有其屋”的朴素愿望已成昨天。何其有幸,我们生活成长在这样的七十年:搭乘时代的快车,见证了幸福的开花。

-

越努力越幸运

- - 人生就是越努力越幸运! - -

幸福生活的创造,离不开每一位奋斗者的努力。七十年来,一代又一代奋斗者将对“国”的情意融入对品质的执着,对客户的珍视和对社会的担当。过去如此,未来亦然。

-

这些奋斗者不论职位高低,不论年龄大小,有来自一线的建筑工人,有发挥创意的建筑设计师,有兢兢业业的项目经理,有忘我工作的销售顾问,有踏实进取的经纪人。他们在自己平凡的岗位上默默付出,用点滴日夜里的细细耕作,融入美好时代的伟大进程。

-
-
- - - -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/index.tmpl" deleted file mode 100644 index 7a945c21..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/index.tmpl" +++ /dev/null @@ -1,194 +0,0 @@ -{{define "index.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-
- -
-
    -
  • 标题图片 -

    兴趣支撑梦想,兴趣是支撑我自己前行的动力

    -
    -

    在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    忙碌是自由活着的一种底气

    -
    -

    从我选择从事前端工作开始,有的人总是把这个职业想象的太美好,但当真正从事了这份职业后才发现,高薪的背后其实有太多的心酸和付出,有些是你想都想不到的。

    -

    2020-03-29杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    虽然闭关在家,但一刻也不想闲下来

    -
    -

    从疫情爆发到现在各个省市都开始陆续复工,我天天在家待着,除了带娃,我大部分时间还是在电脑前,甚至现在小朋友大部分时间也在电子产品上。从一月底到现在我一共设计了3套新模板.

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
-
- - - -
-
    -
  • 标题图片 -

    疫情之下,你在家办公了吗?

    -
    -

    这是一张朋友圈的集赞链接,活动是要求200个赞,我自己点了一个,还差199个,我朋友圈的好友大概2500+,虽然花了1个小时才完成,但是在“企业名录三群”我是第一个先集赞完成的,群里好友纷纷给我点赞,那天还不少朋友加我。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    想折腾也得看运气不是,我是不是太倒霉了?!

    -
    -

    给网站安装服务器系统对我来说已经不是什么问题了,但是安装电脑windows系统,我就是真的小白一枚,而且记不住,别人说,我操作一遍,隔天就能忘记!从我在京东下单购买电脑的记录来看,距离上一次安装windows环境已经一年了。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    从互联网消失的那3年,都去哪儿了?

    -
    -

    不少看过“关于我”页面介绍的朋友,怀着疑问来问我,这三年我都去哪儿了?在干什么?这里有提到过这三年,三年,作为一个女程序员,我从恋爱到结婚生子,到过上了相夫教子的家庭主妇生活。也正是因为怀孕后不能长时间上网,所以我有大把的时间用在了手机上,我离互联网越来越远,离我的个人博客小站也越来越远。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    兴趣支撑梦想,兴趣是支撑我自己前行的动力

    -
    -

    在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    忙碌是自由活着的一种底气

    -
    -

    从我选择从事前端工作开始,有的人总是把这个职业想象的太美好,但当真正从事了这份职业后才发现,高薪的背后其实有太多的心酸和付出,有些是你想都想不到的。

    -

    2020-03-29杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    虽然闭关在家,但一刻也不想闲下来

    -
    -

    从疫情爆发到现在各个省市都开始陆续复工,我天天在家待着,除了带娃,我大部分时间还是在电脑前,甚至现在小朋友大部分时间也在电子产品上。从一月底到现在我一共设计了3套新模板.

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    想折腾也得看运气不是,我是不是太倒霉了?!

    -
    -

    给网站安装服务器系统对我来说已经不是什么问题了,但是安装电脑windows系统,我就是真的小白一枚,而且记不住,别人说,我操作一遍,隔天就能忘记!从我在京东下单购买电脑的记录来看,距离上一次安装windows环境已经一年了。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    从互联网消失的那3年,都去哪儿了?

    -
    -

    不少看过“关于我”页面介绍的朋友,怀着疑问来问我,这三年我都去哪儿了?在干什么?这里有提到过这三年,三年,作为一个女程序员,我从恋爱到结婚生子,到过上了相夫教子的家庭主妇生活。也正是因为怀孕后不能长时间上网,所以我有大把的时间用在了手机上,我离互联网越来越远,离我的个人博客小站也越来越远。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
  • 标题图片 -

    兴趣支撑梦想,兴趣是支撑我自己前行的动力

    -
    -

    在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。

    -

    2020-04-02杨青青博客人生13991200

    -
  • -
-
- - -
- - - - -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/info.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/info.tmpl" deleted file mode 100644 index 520fa4f9..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/info.tmpl" +++ /dev/null @@ -1,144 +0,0 @@ -{{define "info.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>博客日记

-
-
-

兴趣支撑梦想,兴趣是支撑我自己前行的动力

-

2020-04-02杨青青博客人生13991200

- -
在没有学习前端设计,在没有自己博客之前,我的兴趣爱好很多,比如阅读,看电影,爬山等。这些是生活当中自己排遣娱乐的一种方式。明明觉得自己很喜欢,但有时候还是会半途而废,其实,有兴趣只是起点,保有持久兴趣才是关键。 -

在学校的时候,我的专业是计算机软件,前端是第一学期的第一本书讲的课程。那会儿我不喜欢前端,出于是学校必修课程,所以不得不学,所有做的页面都是Table布局,我一点儿也学不进去。我可以在学校网吧里面熬夜装扮我的QQ空间,我也不愿意用表格去搭建一个网站。装扮QQ空间,我还能去结交点儿朋友,但是做网页,我不知道我要学这个干嘛。

-

-

直到交毕业设计,寝室的同学Copy来一份她高中同学做的网页,我们四个人,看得目瞪口呆。flash视频,音乐播放,图片点击再切换下一图,这些好多效果都在一个页面展示出来了,这样的毕业作品,我们四个人就是复制了他代码,改成自己的都改了好几天。

-

就从改他的源码开始,我觉得网站开发很好玩,做这么漂亮的网页,可以放视频,放照片,放音乐等等,为我埋下一颗兴趣的种子。也许我的兴趣是比较灵动的内在动力,做一个自己的个人博客网站,目的不为赚钱,只为了丰富自己,表现自己。

-

-

人在奋斗与进步的过程中最难办的是如何面对困难以及如何坚持下去。失去了兴趣,坚持不了多久。失去了意志力和自我控制力就难免会被带离初心与原生目标。

-

其实我就想顺着自己的一条道儿走就可以了

-
-
- - -
-

文章评论

-
-
-
- - - - -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sjz.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sjz.tmpl" deleted file mode 100644 index 6190f660..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sjz.tmpl" +++ /dev/null @@ -1,60 +0,0 @@ -{{define "sjz.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>我的相册

- -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sysy.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sysy.tmpl" deleted file mode 100644 index 066983a7..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/sysy.tmpl" +++ /dev/null @@ -1,80 +0,0 @@ -{{define "sysy.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>碎言碎语

- -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/wdxc.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/wdxc.tmpl" deleted file mode 100644 index 159aaa34..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09-2/templates/wdxc.tmpl" +++ /dev/null @@ -1,78 +0,0 @@ -{{define "wdxc.tmpl"}} - - - - -杨青青个人博客 - - - - - - -
-
杨青青 -

杨青青

-

一个爱好前端设计的80后女站长。

-
-

关注我杨青青个人微信号:476847113

- -
- -
-

您现在的位置是:网站首页>我的相册

- -
- - - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09/main.go" deleted file mode 100644 index 0dddb8ff..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/main.go" +++ /dev/null @@ -1,62 +0,0 @@ -/** Gin框架的使用 - * @Description - * @Author 陌溪 - * @Date 2020/9/16 22:10 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "html/template" - "net/http" - "os" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - r := gin.Default() - // 模板解析 - //r.LoadHTMLFiles(wd + "/lesson09/templates/users/index.tmpl", wd + "/lesson09/templates/posts/index.tmpl") - - // Gin框架中添加自定义的函数 - r.SetFuncMap(template.FuncMap{ - "safe": func(str string) template.HTML{ - return template.HTML(str) - }, - }) - - // 使用全局匹配规则 - r.LoadHTMLGlob(wd + "/lesson09/templates/**/*") - - r.Static("/xxx", wd + "/lesson09/static") - - // 模板渲染 - r.GET("/posts/index", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "posts/index.tmpl", gin.H{ - "title": "www.moguit.cn", - }) - }) - - // 模板渲染 - r.GET("/users/index", func(context *gin.Context) { - // HTTP请求 - context.HTML(http.StatusOK, "users/index.tmpl", gin.H{ - "title": "admin.moguit.cn", - }) - }) - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.css" deleted file mode 100644 index f9327168..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.css" +++ /dev/null @@ -1,3 +0,0 @@ -* { - background-color: antiquewhite; -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.js" deleted file mode 100644 index 5556fb31..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/static/index.js" +++ /dev/null @@ -1 +0,0 @@ -alert(1) \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/posts/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/posts/index.tmpl" deleted file mode 100644 index 24388fc9..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/posts/index.tmpl" +++ /dev/null @@ -1,16 +0,0 @@ -{{define "posts/index.tmpl"}} - - - - - - - posts/index - - - -{{safe .title}} - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/users/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/users/index.tmpl" deleted file mode 100644 index 24cb364d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson09/templates/users/index.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ -{{define "users/index.tmpl"}} - - - - - - - posts/index - - -{{.title}} - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson10/main.go" deleted file mode 100644 index 03427cd0..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/main.go" +++ /dev/null @@ -1,60 +0,0 @@ -/** Gin框架使用Json格式返回数据 - * @Description - * @Author 陌溪 - * @Date 2020/9/16 22:10 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" -) - -/** - * @Description 定义一个消息结构体 - **/ -type msg struct{ - Name string - Message string - Age int -} - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - - - // 生成默认的路由 - r := gin.Default() - - r.GET("/json", func(context *gin.Context) { - //data := map[string]interface{}{ - // "name": "小王子", - // "age": 18, - // "message": "hello gin json", - //} - - // gin中的 map[string]interface{} 类型 - data := gin.H{ - "name": "小王子", - "age": 18, - "message": "hello gin json", - } - - data2 := msg{ - Name: "小王子", - Age: 10, - Message: "hello 小王子", - } - fmt.Println(data2) - // Json的序列化,默认是使用Go内部的序列化 - context.JSON(http.StatusOK, data) - }) - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.css" deleted file mode 100644 index f9327168..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.css" +++ /dev/null @@ -1,3 +0,0 @@ -* { - background-color: antiquewhite; -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.js" deleted file mode 100644 index 5556fb31..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/static/index.js" +++ /dev/null @@ -1 +0,0 @@ -alert(1) \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/posts/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/posts/index.tmpl" deleted file mode 100644 index 24388fc9..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/posts/index.tmpl" +++ /dev/null @@ -1,16 +0,0 @@ -{{define "posts/index.tmpl"}} - - - - - - - posts/index - - - -{{safe .title}} - - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/users/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/users/index.tmpl" deleted file mode 100644 index 24cb364d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson10/templates/users/index.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ -{{define "users/index.tmpl"}} - - - - - - - posts/index - - -{{.title}} - - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson11/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson11/main.go" deleted file mode 100644 index 9ae72c51..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson11/main.go" +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @Description Gin框架使用 QueryString,从前台接收参数 - * @Author 陌溪 - * @Date 2020年9月17日14:52:33 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - - // 生成默认的路由 - r := gin.Default() - - // GET请求 URL ?后面是querystring参数 - r.GET("/web", func(context *gin.Context) { - - // 获取浏览器那边发请求携带的query string参数 - // http://localhost:9090/web?keyword=123 -> 这样就能获取到keyword - keyword := context.Query("keyword") - - // 获取UserName,如果不存在就取默认值 - userName := context.DefaultQuery("userName", "default user") - fmt.Println(userName) - - // 取不到就返回false - name, ok := context.GetQuery("name") - if ok { - fmt.Println("没有获取到name") - return - } - fmt.Print(name) - - - // gin中的 map[string]interface{} 类型 - data := gin.H{ - "name": "小王子", - "age": 18, - "message": "hello gin json", - "keyword": keyword, - } - - // Json的序列化,默认是使用Go内部的序列化 - context.JSON(http.StatusOK, data) - }) - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/error.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson12/error.html" deleted file mode 100644 index c3b288c0..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/error.html" +++ /dev/null @@ -1,12 +0,0 @@ -{{define "index.tmpl"}} - - - - - error - - -

错误页面

- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/home.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson12/home.html" deleted file mode 100644 index bc418861..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/home.html" +++ /dev/null @@ -1,12 +0,0 @@ -{{define "home.html"}} - - - - - Home - - -

hello {{.}}

- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/login.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson12/login.html" deleted file mode 100644 index 85afc481..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/login.html" +++ /dev/null @@ -1,22 +0,0 @@ -{{define "login.html"}} - - - - - Login - - -
-
- - -
-
- - -
- -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson12/main.go" deleted file mode 100644 index cd209499..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson12/main.go" +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @Description Gin框架 接收 Form表单提交的参数 - * @Author 陌溪 - * @Date 2020年9月17日15:12:32 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "os" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 生成默认的路由 - r := gin.Default() - - r.LoadHTMLFiles(wd + "/lesson12/login.html", wd + "/lesson12/home.html", wd + "/lesson12/index.tmpl") - - r.GET("/login", func(context *gin.Context) { - context.HTML(http.StatusOK, "login.html", nil) - }) - - r.POST("/login", func(context *gin.Context) { - - username := context.PostForm("username") - password := context.PostForm("password") - - if username == "admin" && password == "admin" { - context.HTML(http.StatusOK, "home.html", username) - } else { - context.HTML(http.StatusOK, "index.tmpl", nil) - } - - }) - - - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson13/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson13/index.tmpl" deleted file mode 100644 index 9b59664a..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson13/index.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ -{{define "index.tmpl"}} - - - - - error - - -

参数信息

-

{{.name}}

-

{{.age}}

- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson13/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson13/main.go" deleted file mode 100644 index 4664823f..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson13/main.go" +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @Description Gin框架 接收 URL Path上的参数 【注意,返回的都是string类型】 - * @Author 陌溪 - * @Date 2020年9月17日16:26:43 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "os" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - - // 生成默认的路由 - r := gin.Default() - - r.LoadHTMLFiles(wd + "/lesson13/index.tmpl") - - r.GET("/user/:name/:age", func(context *gin.Context) { - name := context.Param("name") - age := context.Param("age") - data := gin.H{ - "name": name, - "age": age, - } - context.HTML(http.StatusOK, "index.tmpl", data) - }) - - r.GET("/posts/:name/:age", func(context *gin.Context) { - name := context.Param("name") - age := context.Param("age") - data := gin.H{ - "name": name, - "age": age, - } - context.HTML(http.StatusOK, "index.tmpl", data) - }) - - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson14/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson14/index.tmpl" deleted file mode 100644 index 0bce0691..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson14/index.tmpl" +++ /dev/null @@ -1,14 +0,0 @@ -{{define "index.tmpl"}} - - - - - error - - -

参数信息

-

{{.Username}}

-

{{.Password}}

- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson14/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson14/main.go" deleted file mode 100644 index 19fcf0a4..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson14/main.go" +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @Description Gin框架中的 参数绑定,也就是将结构体和我们的参数进行绑定 - * @Author 陌溪 - * @Date 2020年9月17日17:12:04 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" -) - -type UserInfo struct { - Username string `form:"username" json:"username" binding:"required"` - Password string `form:"password" json:"password" binding:"required"` -} -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - // 生成默认的路由 - r := gin.Default() - - // 请求方式 http://localhost:9090/user?username=zhangsan&password=123 - r.GET("/user", func(context *gin.Context) { - //username := context.Param("username") - //password := context.Param("password") - //u := UserInfo{ - // UserName: username, - // Password: password, - //} - - var userInfo UserInfo - // 传递的是指针,将参数绑定到UserInfo中 - err := context.ShouldBind(&userInfo) - fmt.Println(userInfo) - if err != nil { - context.JSON(http.StatusBadRequest, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, gin.H{ - "status": "ok", - "userInfo": userInfo, - }) - } - }) - - r.GET("/form", func(context *gin.Context) { - var userInfo UserInfo - // 传递的是指针,将参数绑定到UserInfo中 - err := context.ShouldBind(&userInfo) - fmt.Println(userInfo) - if err != nil { - context.JSON(http.StatusBadRequest, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, gin.H{ - "status": "ok", - "userInfo": userInfo, - }) - } - }) - - /** - * @Description 前端发送Json格式的请求 - * @Param - * @return - **/ - r.POST("/json", func(context *gin.Context) { - - var userInfo UserInfo - // 传递的是指针,将参数绑定到UserInfo中 - err := context.ShouldBind(&userInfo) - fmt.Println(userInfo) - if err != nil { - context.JSON(http.StatusBadRequest, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, gin.H{ - "status": "ok", - "userInfo": userInfo, - }) - } - }) - - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson15/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson15/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson15/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson15/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson15/main.go" deleted file mode 100644 index e1c46617..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson15/main.go" +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @Description Gin框架中的 文件上传 - * @Author 陌溪 - * @Date 2020年9月17日17:12:04 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "os" -) - -type UserInfo struct { - Username string `form:"username" json:"username" binding:"required"` - Password string `form:"password" json:"password" binding:"required"` -} -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - // 生成默认的路由 - r := gin.Default() - - // 找到模板路径 - wd, err := os.Getwd() - if err != nil { - fmt.Printf("get wd failed, err:%v \n", wd) - return - } - // 加载模板 - r.LoadHTMLFiles(wd + "/lesson15/index.tmpl") - - /** - * @Description 跳转到文件上传页面 - * @Param - * @return - **/ - r.GET("/index", func(context *gin.Context) { - context.HTML(http.StatusOK, "index.tmpl", nil) - }) - - /** - * @Description 图片上传接口 - * @Param - * @return - **/ - r.POST("/upload", func(context *gin.Context) { - // 从请求中读取文件【和请求中获取携带的参数是一样的】 - fileObj, err := context.FormFile("f1") - if err != nil { - context.JSON(http.StatusBadRequest, gin.H{ - "error": err.Error(), - }) - } else { - // 将读取的文件保存到本地【服务端本地】 - dst := fmt.Sprintf("./%s", fileObj.Filename) - context.SaveUploadedFile(fileObj, dst) - context.JSON(http.StatusOK, gin.H{ - "success": "上传成功", - }) - } - }) - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson16/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson16/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson16/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson16/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson16/main.go" deleted file mode 100644 index 16a24b0a..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson16/main.go" +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @Description Gin框架中的 请求重定向 - * @Author 陌溪 - * @Date 2020年9月17日17:12:04 - **/ -package main - -import ( - "github.com/gin-gonic/gin" - "net/http" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - // 生成默认的路由 - r := gin.Default() - - - /** - * @Description 请求重定向 - * @Param - * @return - **/ - r.GET("/baidu", func(context *gin.Context) { - context.Redirect(http.StatusMovedPermanently, "http://www.baidu.com") - }) - - /** - * @Description 请求重定向【返回的是/b的数据】 - * @Param - * @return - **/ - r.GET("/a", func(context *gin.Context) { - // 把请求的URI修改 - context.Request.URL.Path = "/b" - // 继续后续的处理,重新请求 /b - r.HandleContext(context) - }) - - r.GET("/b", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "success": "我是/b", - }) - }) - - // 启动Server - r.Run(":9090") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson17/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson17/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson17/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson17/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson17/main.go" deleted file mode 100644 index 0f33167e..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson17/main.go" +++ /dev/null @@ -1,102 +0,0 @@ -/** - * @Description Gin框架中的 Gin路由 和 路由组 - * @Author 陌溪 - * @Date 2020年9月17日18:36:05 - **/ -package main - -import ( - "github.com/gin-gonic/gin" - "net/http" -) - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - // 生成默认的路由 - r := gin.Default() - - - /** - * @Description 访问/index的GET请求会走这一条处理逻辑【】 - * @Param - * @return - **/ - r.GET("/index", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "GET", - }) - }) - - r.POST("/index", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "POST", - }) - }) - - /** - * @Description PUT是更新操作 - * @Param - * @return - **/ - r.PUT("/index", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "PUT", - }) - }) - - /** - * @Description DELETE是删除操作 - * @Param - * @return - **/ - r.DELETE("/index", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "DELETE", - }) - }) - - /** - * @Description 当所有的路由都没匹配,返回404页面 - * @Param - * @return - **/ - r.NoRoute(func(context *gin.Context) { - context.JSON(http.StatusNotFound, gin.H{ - "code": "404", - "message": "NoRoute", - }) - }) - - // 路由组,把共用的前缀提取出来,创建一个路由组 - videoGroup := r.Group("/video") - { - videoGroup.GET("/index", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "msg": "/video/index", - }) - }) - videoGroup.GET("/about", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "msg": "/video/about", - }) - }) - videoGroup.GET("/home", func(context *gin.Context) { - context.JSON(http.StatusOK, gin.H{ - "msg": "/video/home", - }) - }) - } - - - // 启动Server - r.Run(":8080") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson18/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson18/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson18/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson18/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson18/main.go" deleted file mode 100644 index 74abbcfd..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson18/main.go" +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @Description Gin框架中的 中间件 - * @Author 陌溪 - * @Date 2020年9月17日20:54:58 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "net/http" - "time" -) - -/** - * @Description 定义一个中间件 - * @Param context - * @return - **/ -func indexHandle(context *gin.Context) { - fmt.Println("index") - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "GET", - }) -} - -/** - * @Description 定义第一个中间件 - * @Param context - * @return - **/ -func timeHandle(context *gin.Context) { - fmt.Println("index2") - // 获取开始时间 - start := time.Now() - time.Sleep(time.Second) - context.JSON(http.StatusOK, gin.H{ - "code": "success", - "message": "GET", - }) - - // 调用该请求的剩余处理程序 - context.Next() - - // 计算耗时 - cost := time.Since(start) - fmt.Println("消耗的时间:", cost) -} - -/** - * @Description 鉴权中间件 - * @Param doCheck 是否开启校验 - * @return - **/ -func authMiddleware(doCheck bool)gin.HandlerFunc { - // 连接数据库 - // 或者一些其它工作 - return func(context *gin.Context) { - // 存放具体的逻辑 - // 是否登录的判断 - // if是登录用户 - // c.Next() - // else - // c.Abort() - } -} - -/** - * @Description 主函数 - * @Param - * @return - **/ -func main() { - // 找到模板路径 - // 生成默认的路由【默认包含了Logger() 和 Recovery() 中间件】 - r := gin.Default() - - // 全局注册中间件【全局注册后,就不需要在其它地方在写一次了】 - r.Use(timeHandle) - - /** - * @Description index方法 - * @Param - * @return - **/ - // r.GET("/index", indexHandle, timeHandle) - - r.GET("/index", indexHandle) - - r.GET("/home", indexHandle) - - r.GET("/about", indexHandle) - - - // 启动Server - r.Run(":8080") -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson19/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson19/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson19/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson19/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson19/main.go" deleted file mode 100644 index df7e6a08..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson19/main.go" +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @Description Gin框架中 使用GORM - * @Author 陌溪 - * @Date 2020年9月17日21:38:50 - **/ -package main - -// 导入mysql驱动 -import ( - "fmt" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" -) - -/** - * @Description UserInfo 用户信息 - **/ -type UserInfo struct { - ID uint - Name string - Gender string - Hobby string -} - -func main() { - db, err := gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - defer db.Close() - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - fmt.Println("connect mysql success") - - // 自动迁移【把结构体和数据表进行对应】 - db.AutoMigrate(&UserInfo{}) - - // 创建记录 - u1 := UserInfo{ - ID: 1, - Name: "陌溪", - Gender: "男", - Hobby: "看书", - } - db.Create(&u1) - - // 查询数据 - var u UserInfo - db.First(&u) - fmt.Printf("u: %#v \n", u) - - // 更新 - db.Model(&u).Update("hobby", "双色球") - - // 删除 - db.Delete(&u) - -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson20/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson20/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson20/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson20/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson20/main.go" deleted file mode 100644 index fe0c19cf..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson20/main.go" +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @Description Gin框架中 使用GORM中的Model - * @Author 陌溪 - * @Date 2020年9月17日21:38:50 - **/ -package main - -// 导入mysql驱动 -import ( - "database/sql" - "fmt" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" - "time" -) - -/** - * @Description 定义模型 - **/ -type User struct { - // 内嵌gorm.Model - gorm.Model - Name string - Age sql.NullInt64 // 零值类型 - Birthday *time.Time - // 建立唯一索引 - Email string `gorm:"type:varchar(100);unique_index"` - Role string `gorm:"size:255"` // 设置字段大小为255 - MemberNumber *string `gorm:"unique;not null"` // 设置会员号(member number)唯一并且不为空 - Num int `gorm:"AUTO_INCREMENT"` // 设置 num 为自增类型 - Address string `gorm:"index:addr"` // 给address字段创建名为addr的索引 - IgnoreMe int `gorm:"-"` // 忽略本字段,不会存在数据库中 -} - -func main() { - - // 关于默认表名的修改函数 - gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string { - return "prefix_" + defaultTableName; - } - - db, err := gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - defer db.Close() - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - fmt.Println("connect mysql success") - - // 禁用表名的负数形式【默认会在表名后面加s】 - db.SingularTable(false) - - // 自动迁移【把结构体和数据表进行对应】 - db.AutoMigrate(&User{}) - - // 创建记录 - u1 := User{ - Name: "陌溪", - } - - db.Create(&u1) - - // 查询数据 - var u User - db.First(&u) - fmt.Printf("u: %#v \n", u) - - // 更新 - db.Model(&u).Update("hobby", "双色球") - - // 删除 - db.Delete(&u) - -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson21/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson21/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson21/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson21/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson21/main.go" deleted file mode 100644 index b3d2b561..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson21/main.go" +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @Description Gin框架中 使用GORM增删改查 - * @Author 陌溪 - * @Date 2020年9月17日21:38:50 - **/ -package main - -// 导入mysql驱动 -import ( - "fmt" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" -) - -/** - * @Description 定义模型 - **/ -type User struct { - ID int64 - Name string - Age int64 - // 设置默认值【注意:通过tag定义字段的默认值,在创建记录时候生成的SQL语句会排除没有值或零值的字段。在将记录插入到数据库后,Gorm会】 - Gender string `gorm:"default:'男'"` -} - -func main() { - - // 关于默认表名的修改函数 - gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string { - return "prefix_" + defaultTableName; - } - - db, err := gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - defer db.Close() - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - fmt.Println("connect mysql success") - - // 禁用表名的负数形式【默认会在表名后面加s】 - db.SingularTable(false) - - // 自动迁移【把结构体和数据表进行对应】 - db.AutoMigrate(&User{}) - - // 在代码层面创建一个结构体对象 - u1 := User{ - Name: "陌溪", - Age: 16, - } - - // 创建结构体 【这里推荐传递一个指针进去,直接传结构体存在一个拷贝的问题,如果结构体比较大,可能会有时间消耗】 - fmt.Println("判断主键是否为空:", db.NewRecord(&u1)) // true 因为数据库中没有记录 - db.Create(&u1) - fmt.Println("判断主键是否为空:", db.NewRecord(&u1)) // false 因为数据库中有记录 - - // 查询数据【&u是接收查询结果的】 - var u User - // 传入u的地址,用于修改u的内容 - db.First(&u) - fmt.Printf("u: %#v \n", u) - - // 查询多条记录 - var users []User - // 通过DEBUG查看执行的SQL语句 - db.Debug().Find(&users) - fmt.Printf("users: %#v \n", users) - - // where条件查询 - var whereUsers []User - db.Where(map[string]interface{}{ - "ID": 1, - }).Debug().Find(&whereUsers) - fmt.Printf("where users: %#v \n", whereUsers) - - - //// 更新 - //db.Model(&u).Update("hobby", "双色球") - // - //// 删除 - //db.Delete(&u) - -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson22/index.tmpl" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson22/index.tmpl" deleted file mode 100644 index cb168e4d..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson22/index.tmpl" +++ /dev/null @@ -1,15 +0,0 @@ -{{define "index.tmpl"}} - - - - - 文件上传 - - -
- - -
- - -{{end}} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson22/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson22/main.go" deleted file mode 100644 index 64c173d0..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson22/main.go" +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @Description Gin框架中 GORM更新操作 - * @Author 陌溪 - * @Date 2020年9月18日10:57:57 - **/ -package main - -// 导入mysql驱动 -import ( - "fmt" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" -) - -/** - * @Description 定义模型 - **/ -type User struct { - gorm.Model - Name string - Age int64 - // 用户是否激活 - Active bool -} - -func main() { - - db, err := gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - defer db.Close() - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - - fmt.Println("connect mysql success") - - // 禁用表名的负数形式【默认会在表名后面加s】 - db.SingularTable(false) - - // 自动迁移【把结构体和数据表进行对应】 - db.AutoMigrate(&User{}) - - // 创建记录 - u1 := User{Name: "moxi", Age: 18, Active: true} - db.Create(&u1) - - u2 := User{Name: "jinzhou", Age: 20, Active: true} - db.Create(&u2) - - // 查询 - var user User - db.First(&user) - fmt.Printf("user: %v \n", user) - - // 修改 - user.Name = "qimi" - user.Age = 99 - // 默认会修改全部的字段 - db.Debug().Save(&user) - - // 更新指定的字段 - db.Debug().Model(&user).Update("name", "小王子") - - // 忽略某个字段 【通过omit忽略active字段】 - m1 := map[string]interface{}{ - "name": "小溪", - "age": 28, - "active": true, - } - db.Model(&user).Omit("active").Updates(m1) - - - - -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.mod" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.mod" deleted file mode 100644 index bab42324..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.mod" +++ /dev/null @@ -1,17 +0,0 @@ -module bubble - -go 1.14 - -require ( - github.com/gin-gonic/gin v1.6.3 // indirect - github.com/go-playground/validator/v10 v10.3.0 // indirect - github.com/golang/protobuf v1.4.2 // indirect - github.com/jinzhu/gorm v1.9.16 // indirect - github.com/json-iterator/go v1.1.10 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/ugorji/go v1.1.8 // indirect - golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20 // indirect - google.golang.org/protobuf v1.25.0 // indirect - gopkg.in/yaml.v2 v2.3.0 // indirect -) diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.sum" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.sum" deleted file mode 100644 index abc31678..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/go.sum" +++ /dev/null @@ -1,146 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= -github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= -github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.1.8 h1:/D9x7IRpfMHDlizVOgxrag5Fh+/NY+LtI8bsr+AswRA= -github.com/ugorji/go v1.1.8/go.mod h1:0lNM99SwWUIRhCXnigEMClngXBk/EmpTXa7mgiewYWA= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.1.8 h1:4dryPvxMP9OtkjIbuNeK2nb27M38XMHLGlfNSNph/5s= -github.com/ugorji/go/codec v1.1.8/go.mod h1:X00B19HDtwvKbQY2DcYjvZxKQp8mzrJoQ6EgoIY/D2E= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20 h1:4X356008q5SA3YXu8PiRap39KFmy4Lf6sGlceJKZQsU= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/main.go" deleted file mode 100644 index 99fb3ddd..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/main.go" +++ /dev/null @@ -1,163 +0,0 @@ -/** - * @Description 待办事项后台接口 - * @Author 陌溪 - * @Date 2020/9/18 16:02 - **/ -package main - -import ( - "fmt" - "github.com/gin-gonic/gin" - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" - "net/http" -) - -/** - * @Description 定义全局的数据库对象 - **/ -var ( - DB *gorm.DB -) - -/** - * @Description 实体类 - * @Param - * @return - **/ -type Todo struct { - ID int `json:"id"` - Title string `json:"title"` - Status bool `json:"status"` -} - -/** - * @Description 初始化mysql - * @Param - * @return err - **/ -func initMySQL() (err error) { - DB, err = gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - // 测试是否能够连通 - return DB.DB().Ping() -} - -func main() { - - err := initMySQL() - if err != nil { - panic(err) - } else { - fmt.Println("connect mysql success") - } - // 延迟关闭数据库 - defer DB.Close() - - // 模型关闭 自动迁移【把结构体和数据表进行对应】 - DB.AutoMigrate(&Todo{}) - - // 定义Gin默认路由 - r := gin.Default() - // 告诉Gin框架模板文件引用的静态文件去哪里找 - r.Static("/static", "static") - // 告诉Gin框架去哪里找模板文件 - r.LoadHTMLGlob("templates/*") - - // 访问待办事项首页 - r.GET("/", func(c *gin.Context) { - c.HTML(http.StatusOK, "index.html", nil) - }) - - // v1 待办事项 - // 前端页面填写代办事项,点击提交就会发送请求到这里 - v1Group := r.Group("v1") - { - // 添加 - v1Group.POST("/todo", func(context *gin.Context) { - // 从请求中把数据取出来 - var todo Todo - context.BindJSON(&todo) - // 存入数据库 - err := DB.Create(&todo).Error - // 响应 - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todo) - } - }) - // 查看【查看所有】 - v1Group.GET("/todo", func(context *gin.Context) { - // 查询所有数据 - var todoList [] Todo - err := DB.Find(&todoList).Error - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todoList) - } - }) - // 查看【查看某个】 - v1Group.GET("/todo/:id", func(context *gin.Context) { - - }) - // 修改 - v1Group.PUT("/todo/:id", func(context *gin.Context) { - id, ok := context.Params.Get("id") - if !ok { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - var todo Todo - err := DB.Where("id=?", id).First(&todo).Error - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - // 将内容进行修改 - context.BindJSON(&todo) - err = DB.Save(&todo).Error - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todo) - } - } - } - }) - - // 删除 - v1Group.DELETE("/todo/:id", func(context *gin.Context) { - id, ok := context.Params.Get("id") - if !ok { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - var todo Todo - err := DB.Where("id=?", id).Delete(todo) - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err, - }) - } else { - context.JSON(http.StatusOK, todo) - } - } - }) - } - - r.Run(":8080") -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/app.224ec165.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/app.224ec165.css" deleted file mode 100644 index 779676cc..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/app.224ec165.css" +++ /dev/null @@ -1 +0,0 @@ -.el-table .warning-row{background:#fdf5e6}.el-table .success-row{text-decoration:line-through}.el-footer,.el-header{background-color:#409eff;color:#fff;text-align:center;line-height:60px}.el-footer{background-color:#909399;display:block;width:100%;position:fixed;bottom:0}body{margin:0} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/chunk-vendors.57db8905.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/chunk-vendors.57db8905.css" deleted file mode 100644 index 384bb016..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/css/chunk-vendors.57db8905.css" +++ /dev/null @@ -1 +0,0 @@ -.el-pagination--small .arrow.disabled,.el-table--hidden,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}@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(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}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:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-dialog,.el-pager li{background:#fff;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-moz-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-pager,.el-table th{-webkit-user-select:none;-ms-user-select:none}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-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 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}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 #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background: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:before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-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:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom: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-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;-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-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform: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:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;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;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item,.el-select .el-tag,.el-table{-webkit-box-sizing:border-box}.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:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0);transform:rotate(0)}.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:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#fff}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform: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%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell,.el-table th div{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{white-space:nowrap;overflow:hidden;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.el-table th div{line-height:40px;white-space:nowrap}.el-table th>.cell,.el-table th div{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;white-space:normal;word-break:break-all;line-height:23px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;-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-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div,.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-moz-user-select:none;user-select:none}.el-date-table,.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-ms-user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{-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:#409eff;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:#409eff}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.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:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;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:#409eff}.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:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;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:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel,.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-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}.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 #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-container,.el-container.is-vertical,.el-drawer,.el-link,.el-steps--vertical{-webkit-box-direction:normal}.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:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:inset 0 0 2px 2px #409eff;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:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;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:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--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}.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__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}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}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.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:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{vertical-align:middle;display:inline-block}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button,.el-slider__button-wrapper,.el-step__icon-inner{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;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{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:#409eff}.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-col-pull-0,.el-col-pull-1,.el-col-pull-2,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-push-0,.el-col-push-1,.el-col-push-2,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}@-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{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform: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-bar,.el-progress-bar__inner:after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner:after{height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{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-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border:1px solid #ebeef5;background-color:#fff;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-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;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox,.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--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{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.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 #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-cascader__tags,.el-collapse-item__wrap,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-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:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-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 #409eff;box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,color-stop(0,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,color-stop(0,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,color-stop(0,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,color-stop(0,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:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__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,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{-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 #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.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;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-button,.el-input__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;-webkit-transition:all .3s;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px}.el-input__icon,.el-input__prefix{-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color: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:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color: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-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:#409eff;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;box-sizing:border-box;min-width:0}.el-aside,.el-container,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-webkit-box-orient:vertical;-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-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;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 #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:-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:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%)}.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-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-backtop,.el-calendar-table td.is-today{color:#409eff}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:-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-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox,.el-checkbox-button__inner,.el-radio{font-weight:500;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.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:#409eff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.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::-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-node,.el-drawer{display:-webkit-box;display:-ms-flexbox}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}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;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ltr{-webkit-animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ttb{-webkit-animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.btt{-webkit-animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.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 20px 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}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s reverse} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.535877f5.woff" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.535877f5.woff" deleted file mode 100644 index 02b9a253..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.535877f5.woff" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.732389de.ttf" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.732389de.ttf" deleted file mode 100644 index 91b74de3..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/fonts/element-icons.732389de.ttf" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/app.1966d06f.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/app.1966d06f.js" deleted file mode 100644 index 32c89158..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/app.1966d06f.js" +++ /dev/null @@ -1 +0,0 @@ -(function(e){function t(t){for(var o,s,i=t[0],l=t[1],c=t[2],d=0,f=[];d ").concat(o),type:"success"})}))},handleDelete:function(e,t){var n=this;this.axios.delete("/v1/todo/"+t).then((function(){n.tableData.splice(e,1),n.$message({showClose:!0,duration:1500,message:"删除待办事项成功",type:"success"})}))},handleAdd:function(){var e=this;""!=this.newTitle?(this.axios.post("/v1/todo",{title:this.newTitle}).then((function(){e.getTodoList(),e.$message({showClose:!0,duration:1500,message:"添加待办事项成功",type:"success"})})),this.newTitle=""):this.$message({showClose:!0,duration:1500,message:"title不能为空哦",type:"warning"})}}}),v=h,w=(n("ed30"),n("2877")),b=Object(w["a"])(v,f,p,!1,null,null,null),m=b.exports,g={name:"Index",components:{TodoList:m}},x=g,y=(n("8fc1"),Object(w["a"])(x,u,d,!1,null,null,null)),j=y.exports,_={name:"app",components:{Index:j}},O=_,T=(n("034f"),Object(w["a"])(O,l,c,!1,null,null,null)),P=T.exports,$=n("5c96"),k=n.n($);n("0fae");o["default"].use(k.a);var C=n("8c4f");o["default"].use(C["a"]);var D=[{path:"/",name:"index",component:j}],S=new C["a"]({routes:D}),E=S;o["default"].config.productionTip=!0,new o["default"]({router:E,render:function(e){return e(P)}}).$mount("#app")},"85ec":function(e,t,n){},"89d2":function(e,t,n){},"8fc1":function(e,t,n){"use strict";var o=n("9272"),r=n.n(o);r.a},9272:function(e,t,n){},ed30:function(e,t,n){"use strict";var o=n("89d2"),r=n.n(o);r.a}}); \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/chunk-vendors.ddcb6f91.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/chunk-vendors.ddcb6f91.js" deleted file mode 100644 index 0eaef868..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/static/js/chunk-vendors.ddcb6f91.js" +++ /dev/null @@ -1,34 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"03d6":function(e,t,n){var i=n("9c0e"),r=n("6ca1"),o=n("39ad")(!1),a=n("5a94")("IE_PROTO");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)n!=a&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},"051b":function(e,t,n){var i=n("1a14"),r=n("10db");e.exports=n("0bad")?function(e,t,n){return i.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},"05f5":function(e,t,n){var i=n("7a41"),r=n("ef08").document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},"06cf":function(e,t,n){var i=n("83ab"),r=n("d1e7"),o=n("5c6c"),a=n("fc6a"),s=n("c04e"),l=n("5135"),c=n("0cfb"),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=a(e),t=s(t,!0),c)try{return u(e,t)}catch(n){}if(l(e,t))return o(!r.f.call(e,t),e[t])}},"072d":function(e,t,n){"use strict";var i=n("0bad"),r=n("9876"),o=n("fed5"),a=n("1917"),s=n("0983"),l=n("9fbb"),c=Object.assign;e.exports=!c||n("4b8b")((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=c({},e)[n]||Object.keys(c({},t)).join("")!=i}))?function(e,t){var n=s(e),c=arguments.length,u=1,d=o.f,h=a.f;while(c>u){var f,p=l(arguments[u++]),m=d?r(p).concat(d(p)):r(p),v=m.length,g=0;while(v>g)f=m[g++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:c},"0983":function(e,t,n){var i=n("c901");e.exports=function(e){return Object(i(e))}},"0a06":function(e,t,n){"use strict";var i=n("2444"),r=n("c532"),o=n("f6b4"),a=n("5270");function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){"string"===typeof e&&(e=r.merge({url:arguments[0]},arguments[1])),e=r.merge(i,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[a,void 0],n=Promise.resolve(e);this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));while(t.length)n=n.then(t.shift(),t.shift());return n},r.forEach(["delete","get","head","options"],(function(e){s.prototype[e]=function(t,n){return this.request(r.merge(n||{},{method:e,url:t}))}})),r.forEach(["post","put","patch"],(function(e){s.prototype[e]=function(t,n,i){return this.request(r.merge(i||{},{method:e,url:t,data:n}))}})),e.exports=s},"0ae2":function(e,t,n){var i=n("9876"),r=n("fed5"),o=n("1917");e.exports=function(e){var t=i(e),n=r.f;if(n){var a,s=n(e),l=o.f,c=0;while(s.length>c)l.call(e,a=s[c++])&&t.push(a)}return t}},"0b99":function(e,t,n){"use strict";var i=n("19fa")(!0);n("393a")(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=i(t,n),this._i+=e.length,{value:e,done:!1})}))},"0bad":function(e,t,n){e.exports=!n("4b8b")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},"0cfb":function(e,t,n){var i=n("83ab"),r=n("d039"),o=n("cc12");e.exports=!i&&!r((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},"0df6":function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},"0e15":function(e,t,n){var i=n("597f");e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},"0fae":function(e,t,n){},1098:function(e,t,n){"use strict";t.__esModule=!0;var i=n("17ed"),r=l(i),o=n("f893"),a=l(o),s="function"===typeof a.default&&"symbol"===typeof r.default?function(e){return typeof e}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":typeof e};function l(e){return e&&e.__esModule?e:{default:e}}t.default="function"===typeof a.default&&"symbol"===s(r.default)?function(e){return"undefined"===typeof e?"undefined":s(e)}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":"undefined"===typeof e?"undefined":s(e)}},"10db":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"12f2":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},"14e9":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=122)}({122:function(e,t,n){"use strict";n.r(t);var i=n(15),r=n(37),o=n.n(r),a=n(3),s=n(2),l={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function c(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var u={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return l[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:c({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(s["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(s["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(s["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(s["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},d={name:"ElScrollbar",components:{Bar:u},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=o()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(a["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var s=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),l=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[s]]),c=void 0;return c=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[s]])]:[l,e(u,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(u,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},c)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(i["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(i["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(d.name,d)}};t["default"]=d},15:function(e,t){e.exports=n("4010")},2:function(e,t){e.exports=n("5924")},3:function(e,t){e.exports=n("8122")},37:function(e,t){e.exports=n("e62d")}})},1609:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},"17ed":function(e,t,n){e.exports={default:n("511f"),__esModule:!0}},1836:function(e,t,n){var i=n("6ca1"),r=n("6438").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):r(i(e))}},1917:function(e,t){t.f={}.propertyIsEnumerable},"19aa":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"19fa":function(e,t,n){var i=n("fc5e"),r=n("c901");e.exports=function(e){return function(t,n){var o,a,s=String(r(t)),l=i(n),c=s.length;return l<0||l>=c?e?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):o:e?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"1a14":function(e,t,n){var i=n("77e9"),r=n("faf5"),o=n("3397"),a=Object.defineProperty;t.f=n("0bad")?Object.defineProperty:function(e,t,n){if(i(e),t=o(t,!0),i(n),r)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},"1be4":function(e,t,n){var i=n("d066");e.exports=i("document","documentElement")},"1c0b":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},"1c7e":function(e,t,n){var i=n("b622"),r=i("iterator"),o=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(l){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(l){}return n}},"1d2b":function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i=51||!i((function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},2266:function(e,t,n){var i=n("825a"),r=n("e95a"),o=n("50c4"),a=n("f8c2"),s=n("35a1"),l=n("9bdd"),c=function(e,t){this.stopped=e,this.result=t},u=e.exports=function(e,t,n,u,d){var h,f,p,m,v,g,b,y=a(t,n,u?2:1);if(d)h=e;else{if(f=s(e),"function"!=typeof f)throw TypeError("Target is not iterable");if(r(f)){for(p=0,m=o(e.length);m>p;p++)if(v=u?y(i(b=e[p])[0],b[1]):y(e[p]),v&&v instanceof c)return v;return new c(!1)}h=f.call(e)}g=h.next;while(!(b=g.call(h)).done)if(v=l(h,y,b.value,u),"object"==typeof v&&v&&v instanceof c)return v;return new c(!1)};u.stop=function(e){return new c(!0,e)}},"23cb":function(e,t,n){var i=n("a691"),r=Math.max,o=Math.min;e.exports=function(e,t){var n=i(e);return n<0?r(n+t,0):o(n,t)}},"23e7":function(e,t,n){var i=n("da84"),r=n("06cf").f,o=n("9112"),a=n("6eeb"),s=n("ce4e"),l=n("e893"),c=n("94ca");e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?i:g?i[m]||s(m,{}):(i[m]||{}).prototype,u)for(d in t){if(f=t[d],e.noTargetGet?(p=r(u,d),h=p&&p.value):h=u[d],n=c(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f===typeof h)continue;l(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},"241c":function(e,t,n){var i=n("ca84"),r=n("7839"),o=r.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,o)}},2444:function(e,t,n){"use strict";(function(t){var i=n("c532"),r=n("c8af"),o={"Content-Type":"application/x-www-form-urlencoded"};function a(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function s(){var e;return"undefined"!==typeof XMLHttpRequest?e=n("b50d"):"undefined"!==typeof t&&(e=n("b50d")),e}var l={adapter:s(),transformRequest:[function(e,t){return r(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){l.headers[e]=i.merge(o)})),e.exports=l}).call(this,n("4362"))},2626:function(e,t,n){"use strict";var i=n("d066"),r=n("9bf2"),o=n("b622"),a=n("83ab"),s=o("species");e.exports=function(e){var t=i(e),n=r.f;a&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},"26dd":function(e,t,n){"use strict";var i=n("6f4f"),r=n("10db"),o=n("92f0"),a={};n("051b")(a,n("cc15")("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=i(a,{next:r(1,n)}),o(e,t+" Iterator")}},2877:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},"299c":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=129)}({129:function(e,t,n){"use strict";n.r(t);var i=n(5),r=n.n(i),o=n(16),a=n.n(o),s=n(2),l=n(3),c=n(7),u=n.n(c),d={name:"ElTooltip",mixins:[r.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new u.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(s["on"])(this.referenceElm,"mouseenter",this.show),Object(s["on"])(this.referenceElm,"mouseleave",this.hide),Object(s["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(s["on"])(this.referenceElm,"blur",this.handleBlur),Object(s["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(s["addClass"])(this.referenceElm,"focusing"):Object(s["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;nl&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"2b0e":function(e,t,n){"use strict";n.r(t),function(e){ -/*! - * Vue.js v2.6.10 - * (c) 2014-2019 Evan You - * Released under the MIT License. - */ -var n=Object.freeze({});function i(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function o(e){return!0===e}function a(e){return!1===e}function s(e){return"string"===typeof e||"number"===typeof e||"symbol"===typeof e||"boolean"===typeof e}function l(e){return null!==e&&"object"===typeof e}var c=Object.prototype.toString;function u(e){return"[object Object]"===c.call(e)}function d(e){return"[object RegExp]"===c.call(e)}function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return r(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function p(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function v(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r-1)return e.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function _(e,t){return y.call(e,t)}function x(e){var t=Object.create(null);return function(n){var i=t[n];return i||(t[n]=e(n))}}var w=/-(\w)/g,C=x((function(e){return e.replace(w,(function(e,t){return t?t.toUpperCase():""}))})),k=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),S=/\B([A-Z])/g,O=x((function(e){return e.replace(S,"-$1").toLowerCase()}));function $(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function D(e,t){return e.bind(t)}var E=Function.prototype.bind?D:$;function T(e,t){t=t||0;var n=e.length-t,i=new Array(n);while(n--)i[n]=e[n+t];return i}function P(e,t){for(var n in t)e[n]=t[n];return e}function M(e){for(var t={},n=0;n0,ne=Q&&Q.indexOf("edge/")>0,ie=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===J),re=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/)),oe={}.watch,ae=!1;if(X)try{var se={};Object.defineProperty(se,"passive",{get:function(){ae=!0}}),window.addEventListener("test-passive",null,se)}catch(Ca){}var le=function(){return void 0===K&&(K=!X&&!Z&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),K},ce=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ue(e){return"function"===typeof e&&/native code/.test(e.toString())}var de,he="undefined"!==typeof Symbol&&ue(Symbol)&&"undefined"!==typeof Reflect&&ue(Reflect.ownKeys);de="undefined"!==typeof Set&&ue(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var fe=I,pe=0,me=function(){this.id=pe++,this.subs=[]};me.prototype.addSub=function(e){this.subs.push(e)},me.prototype.removeSub=function(e){b(this.subs,e)},me.prototype.depend=function(){me.target&&me.target.addDep(this)},me.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(o&&!_(r,"default"))a=!1;else if(""===a||a===O(e)){var l=et(String,r.type);(l<0||s0&&(a=$t(a,(t||"")+"_"+n),Ot(a[0])&&Ot(c)&&(u[l]=we(c.text+a[0].text),a.shift()),u.push.apply(u,a)):s(a)?Ot(c)?u[l]=we(c.text+a):""!==a&&u.push(we(a)):Ot(a)&&Ot(c)?u[l]=we(c.text+a.text):(o(e._isVList)&&r(a.tag)&&i(a.key)&&r(t)&&(a.key="__vlist"+t+"_"+n+"__"),u.push(a)));return u}function Dt(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function Et(e){var t=Tt(e.$options.inject,e);t&&(Ee(!1),Object.keys(t).forEach((function(n){Ne(e,n,t[n])})),Ee(!0))}function Tt(e,t){if(e){for(var n=Object.create(null),i=he?Reflect.ownKeys(e):Object.keys(e),r=0;r0,a=e?!!e.$stable:!o,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&i&&i!==n&&s===i.$key&&!o&&!i.$hasNormal)return i;for(var l in r={},e)e[l]&&"$"!==l[0]&&(r[l]=Nt(t,l,e[l]))}else r={};for(var c in t)c in r||(r[c]=jt(t,c));return e&&Object.isExtensible(e)&&(e._normalized=r),q(r,"$stable",a),q(r,"$key",s),q(r,"$hasNormal",o),r}function Nt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:St(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:i,enumerable:!0,configurable:!0}),i}function jt(e,t){return function(){return e[t]}}function At(e,t){var n,i,o,a,s;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),i=0,o=e.length;i1?T(n):n;for(var i=T(arguments,1),r='event handler for "'+e+'"',o=0,a=n.length;odocument.createEvent("Event").timeStamp&&(Kn=function(){return Gn.now()})}function Xn(){var e,t;for(Yn=Kn(),Wn=!0,zn.sort((function(e,t){return e.id-t.id})),qn=0;qnqn&&zn[n].id>e.id)n--;zn.splice(n+1,0,e)}else zn.push(e);Hn||(Hn=!0,pt(Xn))}}var ti=0,ni=function(e,t,n,i,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ti,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new de,this.newDepIds=new de,this.expression="","function"===typeof t?this.getter=t:(this.getter=Y(t),this.getter||(this.getter=I)),this.value=this.lazy?void 0:this.get()};ni.prototype.get=function(){var e;ge(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(Ca){if(!this.user)throw Ca;tt(Ca,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&vt(e),be(),this.cleanupDeps()}return e},ni.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},ni.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ni.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():ei(this)},ni.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(Ca){tt(Ca,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},ni.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ni.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},ni.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var ii={enumerable:!0,configurable:!0,get:I,set:I};function ri(e,t,n){ii.get=function(){return this[t][n]},ii.set=function(e){this[t][n]=e},Object.defineProperty(e,n,ii)}function oi(e){e._watchers=[];var t=e.$options;t.props&&ai(e,t.props),t.methods&&pi(e,t.methods),t.data?si(e):Ie(e._data={},!0),t.computed&&ui(e,t.computed),t.watch&&t.watch!==oe&&mi(e,t.watch)}function ai(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$options._propKeys=[],o=!e.$parent;o||Ee(!1);var a=function(o){r.push(o);var a=Xe(o,t,n,e);Ne(i,o,a),o in e||ri(e,"_props",o)};for(var s in t)a(s);Ee(!0)}function si(e){var t=e.$options.data;t=e._data="function"===typeof t?li(t,e):t||{},u(t)||(t={});var n=Object.keys(t),i=e.$options.props,r=(e.$options.methods,n.length);while(r--){var o=n[r];0,i&&_(i,o)||W(o)||ri(e,"_data",o)}Ie(t,!0)}function li(e,t){ge();try{return e.call(t,t)}catch(Ca){return tt(Ca,t,"data()"),{}}finally{be()}}var ci={lazy:!0};function ui(e,t){var n=e._computedWatchers=Object.create(null),i=le();for(var r in t){var o=t[r],a="function"===typeof o?o:o.get;0,i||(n[r]=new ni(e,a||I,I,ci)),r in e||di(e,r,o)}}function di(e,t,n){var i=!le();"function"===typeof n?(ii.get=i?hi(t):fi(n),ii.set=I):(ii.get=n.get?i&&!1!==n.cache?hi(t):fi(n.get):I,ii.set=n.set||I),Object.defineProperty(e,t,ii)}function hi(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),me.target&&t.depend(),t.value}}function fi(e){return function(){return e.call(this,this)}}function pi(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?I:E(t[n],e)}function mi(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var r=0;r-1)return this;var n=T(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function Si(e){e.mixin=function(e){return this.options=Ke(this.options,e),this}}function Oi(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var o=e.name||n.options.name;var a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=Ke(n.options,e),a["super"]=n,a.options.props&&$i(a),a.options.computed&&Di(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,z.forEach((function(e){a[e]=n[e]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=P({},a.options),r[i]=a,a}}function $i(e){var t=e.options.props;for(var n in t)ri(e.prototype,"_props",n)}function Di(e){var t=e.options.computed;for(var n in t)di(e.prototype,n,t[n])}function Ei(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Ti(e){return e&&(e.Ctor.options.name||e.tag)}function Pi(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Mi(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var a=n[o];if(a){var s=Ti(a.componentOptions);s&&!t(s)&&Ii(n,o,i,r)}}}function Ii(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,b(n,t)}yi(Ci),gi(Ci),En(Ci),In(Ci),bn(Ci);var Ni=[String,RegExp,Array],ji={name:"keep-alive",abstract:!0,props:{include:Ni,exclude:Ni,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Ii(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Mi(e,(function(e){return Pi(t,e)}))})),this.$watch("exclude",(function(t){Mi(e,(function(e){return!Pi(t,e)}))}))},render:function(){var e=this.$slots.default,t=Cn(e),n=t&&t.componentOptions;if(n){var i=Ti(n),r=this,o=r.include,a=r.exclude;if(o&&(!i||!Pi(o,i))||a&&i&&Pi(a,i))return t;var s=this,l=s.cache,c=s.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;l[u]?(t.componentInstance=l[u].componentInstance,b(c,u),c.push(u)):(l[u]=t,c.push(u),this.max&&c.length>parseInt(this.max)&&Ii(l,c[0],c,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Ai={KeepAlive:ji};function Fi(e){var t={get:function(){return R}};Object.defineProperty(e,"config",t),e.util={warn:fe,extend:P,mergeOptions:Ke,defineReactive:Ne},e.set=je,e.delete=Ae,e.nextTick=pt,e.observable=function(e){return Ie(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,P(e.options.components,Ai),ki(e),Si(e),Oi(e),Ei(e)}Fi(Ci),Object.defineProperty(Ci.prototype,"$isServer",{get:le}),Object.defineProperty(Ci.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ci,"FunctionalRenderContext",{value:Zt}),Ci.version="2.6.10";var Li=v("style,class"),Vi=v("input,textarea,option,select,progress"),zi=function(e,t,n){return"value"===n&&Vi(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Bi=v("contenteditable,draggable,spellcheck"),Ri=v("events,caret,typing,plaintext-only"),Hi=function(e,t){return Ki(t)||"false"===t?"false":"contenteditable"===e&&Ri(t)?t:"true"},Wi=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),qi="http://www.w3.org/1999/xlink",Ui=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Yi=function(e){return Ui(e)?e.slice(6,e.length):""},Ki=function(e){return null==e||!1===e};function Gi(e){var t=e.data,n=e,i=e;while(r(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(t=Xi(i.data,t));while(r(n=n.parent))n&&n.data&&(t=Xi(t,n.data));return Zi(t.staticClass,t.class)}function Xi(e,t){return{staticClass:Ji(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function Zi(e,t){return r(e)||r(t)?Ji(e,Qi(t)):""}function Ji(e,t){return e?t?e+" "+t:e:t||""}function Qi(e){return Array.isArray(e)?er(e):l(e)?tr(e):"string"===typeof e?e:""}function er(e){for(var t,n="",i=0,o=e.length;i-1?sr[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:sr[e]=/HTMLUnknownElement/.test(t.toString())}var cr=v("text,number,password,search,email,tel,url");function ur(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function dr(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function hr(e,t){return document.createElementNS(nr[e],t)}function fr(e){return document.createTextNode(e)}function pr(e){return document.createComment(e)}function mr(e,t,n){e.insertBefore(t,n)}function vr(e,t){e.removeChild(t)}function gr(e,t){e.appendChild(t)}function br(e){return e.parentNode}function yr(e){return e.nextSibling}function _r(e){return e.tagName}function xr(e,t){e.textContent=t}function wr(e,t){e.setAttribute(t,"")}var Cr=Object.freeze({createElement:dr,createElementNS:hr,createTextNode:fr,createComment:pr,insertBefore:mr,removeChild:vr,appendChild:gr,parentNode:br,nextSibling:yr,tagName:_r,setTextContent:xr,setStyleScope:wr}),kr={create:function(e,t){Sr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Sr(e,!0),Sr(t))},destroy:function(e){Sr(e,!0)}};function Sr(e,t){var n=e.data.ref;if(r(n)){var i=e.context,o=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[n])?b(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(o)<0&&a[n].push(o):a[n]=[o]:a[n]=o}}var Or=new ye("",{},[]),$r=["create","activate","update","remove","destroy"];function Dr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Er(e,t)||o(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&i(t.asyncFactory.error))}function Er(e,t){if("input"!==e.tag)return!0;var n,i=r(n=e.data)&&r(n=n.attrs)&&n.type,o=r(n=t.data)&&r(n=n.attrs)&&n.type;return i===o||cr(i)&&cr(o)}function Tr(e,t,n){var i,o,a={};for(i=t;i<=n;++i)o=e[i].key,r(o)&&(a[o]=i);return a}function Pr(e){var t,n,a={},l=e.modules,c=e.nodeOps;for(t=0;t<$r.length;++t)for(a[$r[t]]=[],n=0;nm?(d=i(n[b+1])?null:n[b+1].elm,C(e,d,n,p,b,o)):p>b&&S(e,t,h,m)}function D(e,t,n,i){for(var o=n;o-1?Rr(e,t,n):Wi(t)?Ki(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Bi(t)?e.setAttribute(t,Hi(t,n)):Ui(t)?Ki(n)?e.removeAttributeNS(qi,Yi(t)):e.setAttributeNS(qi,t,n):Rr(e,t,n)}function Rr(e,t,n){if(Ki(n))e.removeAttribute(t);else{if(ee&&!te&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var Hr={create:zr,update:zr};function Wr(e,t){var n=t.elm,o=t.data,a=e.data;if(!(i(o.staticClass)&&i(o.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Gi(t),l=n._transitionClasses;r(l)&&(s=Ji(s,Qi(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var qr,Ur={create:Wr,update:Wr},Yr="__r",Kr="__c";function Gr(e){if(r(e[Yr])){var t=ee?"change":"input";e[t]=[].concat(e[Yr],e[t]||[]),delete e[Yr]}r(e[Kr])&&(e.change=[].concat(e[Kr],e.change||[]),delete e[Kr])}function Xr(e,t,n){var i=qr;return function r(){var o=t.apply(null,arguments);null!==o&&Qr(e,r,n,i)}}var Zr=at&&!(re&&Number(re[1])<=53);function Jr(e,t,n,i){if(Zr){var r=Yn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,ae?{capture:n,passive:i}:n)}function Qr(e,t,n,i){(i||qr).removeEventListener(e,t._wrapper||t,n)}function eo(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};qr=t.elm,Gr(n),_t(n,r,Jr,Qr,Xr,t.context),qr=void 0}}var to,no={create:eo,update:eo};function io(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,o,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in r(l.__ob__)&&(l=t.data.domProps=P({},l)),s)n in l||(a[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),o===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=o;var c=i(o)?"":String(o);ro(a,c)&&(a.value=c)}else if("innerHTML"===n&&rr(a.tagName)&&i(a.innerHTML)){to=to||document.createElement("div"),to.innerHTML=""+o+"";var u=to.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(u.firstChild)a.appendChild(u.firstChild)}else if(o!==s[n])try{a[n]=o}catch(Ca){}}}}function ro(e,t){return!e.composing&&("OPTION"===e.tagName||oo(e,t)||ao(e,t))}function oo(e,t){var n=!0;try{n=document.activeElement!==e}catch(Ca){}return n&&e.value!==t}function ao(e,t){var n=e.value,i=e._vModifiers;if(r(i)){if(i.number)return m(n)!==m(t);if(i.trim)return n.trim()!==t.trim()}return n!==t}var so={create:io,update:io},lo=x((function(e){var t={},n=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function co(e){var t=uo(e.style);return e.staticStyle?P(e.staticStyle,t):t}function uo(e){return Array.isArray(e)?M(e):"string"===typeof e?lo(e):e}function ho(e,t){var n,i={};if(t){var r=e;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=co(r.data))&&P(i,n)}(n=co(e.data))&&P(i,n);var o=e;while(o=o.parent)o.data&&(n=co(o.data))&&P(i,n);return i}var fo,po=/^--/,mo=/\s*!important$/,vo=function(e,t,n){if(po.test(t))e.style.setProperty(t,n);else if(mo.test(n))e.style.setProperty(O(t),n.replace(mo,""),"important");else{var i=bo(t);if(Array.isArray(n))for(var r=0,o=n.length;r-1?t.split(xo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Co(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(xo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" "+(e.getAttribute("class")||"")+" ",i=" "+t+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function ko(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&P(t,So(e.name||"v")),P(t,e),t}return"string"===typeof e?So(e):void 0}}var So=x((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Oo=X&&!te,$o="transition",Do="animation",Eo="transition",To="transitionend",Po="animation",Mo="animationend";Oo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Eo="WebkitTransition",To="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Po="WebkitAnimation",Mo="webkitAnimationEnd"));var Io=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function No(e){Io((function(){Io(e)}))}function jo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),wo(e,t))}function Ao(e,t){e._transitionClasses&&b(e._transitionClasses,t),Co(e,t)}function Fo(e,t,n){var i=Vo(e,t),r=i.type,o=i.timeout,a=i.propCount;if(!r)return n();var s=r===$o?To:Mo,l=0,c=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout((function(){l0&&(n=$o,u=a,d=o.length):t===Do?c>0&&(n=Do,u=c,d=l.length):(u=Math.max(a,c),n=u>0?a>c?$o:Do:null,d=n?n===$o?o.length:l.length:0);var h=n===$o&&Lo.test(i[Eo+"Property"]);return{type:n,timeout:u,propCount:d,hasTransform:h}}function zo(e,t){while(e.length1}function Uo(e,t){!0!==t.data.show&&Ro(t)}var Yo=X?{create:Uo,activate:Uo,remove:function(e,t){!0!==e.data.show?Ho(e,t):t()}}:{},Ko=[Hr,Ur,no,so,_o,Yo],Go=Ko.concat(Vr),Xo=Pr({nodeOps:Cr,modules:Go});te&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&ra(e,"input")}));var Zo={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?xt(n,"postpatch",(function(){Zo.componentUpdated(e,t,n)})):Jo(e,t,n.context),e._vOptions=[].map.call(e.options,ta)):("textarea"===n.tag||cr(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",na),e.addEventListener("compositionend",ia),e.addEventListener("change",ia),te&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Jo(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,ta);if(r.some((function(e,t){return!A(e,i[t])}))){var o=e.multiple?t.value.some((function(e){return ea(e,r)})):t.value!==t.oldValue&&ea(t.value,r);o&&ra(e,"change")}}}};function Jo(e,t,n){Qo(e,t,n),(ee||ne)&&setTimeout((function(){Qo(e,t,n)}),0)}function Qo(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var o,a,s=0,l=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(A(ta(a),i))return void(e.selectedIndex!==s&&(e.selectedIndex=s));r||(e.selectedIndex=-1)}}function ea(e,t){return t.every((function(t){return!A(t,e)}))}function ta(e){return"_value"in e?e._value:e.value}function na(e){e.target.composing=!0}function ia(e){e.target.composing&&(e.target.composing=!1,ra(e.target,"input"))}function ra(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function oa(e){return!e.componentInstance||e.data&&e.data.transition?e:oa(e.componentInstance._vnode)}var aa={bind:function(e,t,n){var i=t.value;n=oa(n);var r=n.data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,Ro(n,(function(){e.style.display=o}))):e.style.display=i?o:"none"},update:function(e,t,n){var i=t.value,r=t.oldValue;if(!i!==!r){n=oa(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,i?Ro(n,(function(){e.style.display=e.__vOriginalDisplay})):Ho(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},sa={model:Zo,show:aa},la={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ca(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?ca(Cn(t.children)):e}function ua(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var o in r)t[C(o)]=r[o];return t}function da(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function ha(e){while(e=e.parent)if(e.data.transition)return!0}function fa(e,t){return t.key===e.key&&t.tag===e.tag}var pa=function(e){return e.tag||wn(e)},ma=function(e){return"show"===e.name},va={name:"transition",props:la,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(pa),n.length)){0;var i=this.mode;0;var r=n[0];if(ha(this.$vnode))return r;var o=ca(r);if(!o)return r;if(this._leaving)return da(e,r);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var l=(o.data||(o.data={})).transition=ua(this),c=this._vnode,u=ca(c);if(o.data.directives&&o.data.directives.some(ma)&&(o.data.show=!0),u&&u.data&&!fa(o,u)&&!wn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=P({},l);if("out-in"===i)return this._leaving=!0,xt(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),da(e,r);if("in-out"===i){if(wn(o))return c;var h,f=function(){h()};xt(l,"afterEnter",f),xt(l,"enterCancelled",f),xt(d,"delayLeave",(function(e){h=e}))}}return r}}},ga=P({tag:String,moveClass:String},la);delete ga.mode;var ba={props:ga,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=Pn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],o=this.children=[],a=ua(this),s=0;sn)t.push(arguments[n++]);return _[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(y),y},m=function(e){delete _[e]},"process"==l(v)?i=function(e){v.nextTick(C(e))}:b&&b.now?i=function(e){b.now(C(e))}:g&&!/(iphone|ipod|ipad).*applewebkit/i.test(h)?(r=new g,o=r.port2,r.port1.onmessage=k,i=c(o.postMessage,o,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(S)?i=x in d("script")?function(e){u.appendChild(d("script"))[x]=function(){u.removeChild(this),w(e)}}:function(e){setTimeout(C(e),0)}:(i=S,a.addEventListener("message",k,!1))),e.exports={set:p,clear:m}},"2d83":function(e,t,n){"use strict";var i=n("387f");e.exports=function(e,t,n,r,o){var a=new Error(e);return i(a,t,n,r,o)}},"2e67":function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"2f9a":function(e,t){e.exports=function(){}},"301c":function(e,t,n){n("e198")("asyncIterator")},"30b5":function(e,t,n){"use strict";var i=n("c532");function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(i.isURLSearchParams(t))o=t.toString();else{var a=[];i.forEach(t,(function(e,t){null!==e&&"undefined"!==typeof e&&(i.isArray(e)?t+="[]":e=[e],i.forEach(e,(function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))})))})),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},3397:function(e,t,n){var i=n("7a41");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},"35a1":function(e,t,n){var i=n("f5df"),r=n("3f8c"),o=n("b622"),a=o("iterator");e.exports=function(e){if(void 0!=e)return e[a]||e["@@iterator"]||r[i(e)]}},"37e8":function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("825a"),a=n("df75");e.exports=i?Object.defineProperties:function(e,t){o(e);var n,i=a(t),s=i.length,l=0;while(s>l)r.f(e,n=i[l++],t[n]);return e}},"387f":function(e,t,n){"use strict";e.exports=function(e,t,n,i,r){return e.config=t,n&&(e.code=n),e.request=i,e.response=r,e}},3934:function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=i.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return function(){return!0}}()},"393a":function(e,t,n){"use strict";var i=n("e444"),r=n("512c"),o=n("ba01"),a=n("051b"),s=n("8a0d"),l=n("26dd"),c=n("92f0"),u=n("ce7a"),d=n("cc15")("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,b,y,_){l(n,t,g);var x,w,C,k=function(e){if(!h&&e in D)return D[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},S=t+" Iterator",O=b==m,$=!1,D=e.prototype,E=D[d]||D[f]||b&&D[b],T=E||k(b),P=b?O?k("entries"):T:void 0,M="Array"==t&&D.entries||E;if(M&&(C=u(M.call(new e)),C!==Object.prototype&&C.next&&(c(C,S,!0),i||"function"==typeof C[d]||a(C,d,v))),O&&E&&E.name!==m&&($=!0,T=function(){return E.call(this)}),i&&!_||!h&&!$&&D[d]||a(D,d,T),s[t]=T,s[S]=v,b)if(x={values:O?T:k(m),keys:y?T:k(p),entries:P},_)for(w in x)w in D||o(D,w,x[w]);else r(r.P+r.F*(h||$),t,x);return x}},"39ad":function(e,t,n){var i=n("6ca1"),r=n("d16a"),o=n("9d11");e.exports=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},"3bbe":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c4e":function(e,t,n){"use strict";var i=function(e){return r(e)&&!o(e)};function r(e){return!!e&&"object"===typeof e}function o(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||l(e)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(e){return e.$$typeof===s}function c(e){return Array.isArray(e)?[]:{}}function u(e,t){var n=t&&!0===t.clone;return n&&i(e)?f(c(e),e,t):e}function d(e,t,n){var r=e.slice();return t.forEach((function(t,o){"undefined"===typeof r[o]?r[o]=u(t,n):i(t)?r[o]=f(e[o],t,n):-1===e.indexOf(t)&&r.push(u(t,n))})),r}function h(e,t,n){var r={};return i(e)&&Object.keys(e).forEach((function(t){r[t]=u(e[t],n)})),Object.keys(t).forEach((function(o){i(t[o])&&e[o]?r[o]=f(e[o],t[o],n):r[o]=u(t[o],n)})),r}function f(e,t,n){var i=Array.isArray(t),r=Array.isArray(e),o=n||{arrayMerge:d},a=i===r;if(a){if(i){var s=o.arrayMerge||d;return s(e,t,n)}return h(e,t,n)}return u(t,n)}f.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return f(e,n,t)}))};var p=f;e.exports=p},"3f6b":function(e,t,n){e.exports={default:n("b9c7"),__esModule:!0}},"3f8c":function(e,t){e.exports={}},4010:function(e,t,n){"use strict";t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var i=n("6dd8"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}var a="undefined"===typeof window,s=function(e){var t=e,n=Array.isArray(t),i=0;for(t=n?t:t[Symbol.iterator]();;){var r;if(n){if(i>=t.length)break;r=t[i++]}else{if(i=t.next(),i.done)break;r=i.value}var o=r,a=o.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){a||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new r.default(s),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"417f":function(e,t,n){"use strict";t.__esModule=!0;var i=n("2b0e"),r=a(i),o=n("5924");function a(e){return e&&e.__esModule?e:{default:e}}var s=[],l="@@clickoutsideContext",c=void 0,u=0;function d(e,t,n){return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(n&&n.context&&i.target&&r.target)||e.contains(i.target)||e.contains(r.target)||e===i.target||n.context.popperElm&&(n.context.popperElm.contains(i.target)||n.context.popperElm.contains(r.target))||(t.expression&&e[l].methodName&&n.context[e[l].methodName]?n.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!r.default.prototype.$isServer&&(0,o.on)(document,"mousedown",(function(e){return c=e})),!r.default.prototype.$isServer&&(0,o.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[l].documentHandler(e,c)}))})),t.default={bind:function(e,t,n){s.push(e);var i=u++;e[l]={id:i,documentHandler:d(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[l].documentHandler=d(e,t,n),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;n\n \n '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",l()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},$=O,D=Object(y["a"])($,x,w,!1,null,null,null);D.options.__file="packages/cascader-panel/src/cascader-menu.vue";var E=D.exports,T=n(21),P=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i1?i-1:0),o=1;o0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},P(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(T["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),j=N;function A(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var F=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},L=function(){function e(t,n){A(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(m["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new j(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new j(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(m["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:F(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(m["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),V=L,z=n(9),B=n.n(z),R=n(39),H=n.n(R),W=n(31),q=n.n(W),U=Object.assign||function(e){for(var t=1;t0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");q()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(m["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},te=ee,ne=Object(y["a"])(te,i,r,!1,null,null,null);ne.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ie=ne.exports;ie.install=function(e){e.component(ie.name,ie)};t["default"]=ie},6:function(e,t){e.exports=n("6b7c")},9:function(e,t){e.exports=n("7f4d")}})},4840:function(e,t,n){var i=n("825a"),r=n("1c0b"),o=n("b622"),a=o("species");e.exports=function(e,t){var n,o=i(e).constructor;return void 0===o||void 0==(n=i(o)[a])?t:r(n)}},4897:function(e,t,n){"use strict";t.__esModule=!0,t.i18n=t.use=t.t=void 0;var i=n("f0d9"),r=d(i),o=n("2b0e"),a=d(o),s=n("3c4e"),l=d(s),c=n("9d7e"),u=d(c);function d(e){return e&&e.__esModule?e:{default:e}}var h=(0,u.default)(a.default),f=r.default,p=!1,m=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return p||(p=!0,a.default.locale(a.default.config.lang,(0,l.default)(f,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},v=t.t=function(e,t){var n=m.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var i=e.split("."),r=f,o=0,a=i.length;o0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var r=i.modalClass.trim().split(/\s+/);r.forEach((function(e){return(0,o.removeClass)(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,o.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",h.modalDom=void 0),(0,o.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(h,"zIndex",{configurable:!0,get:function(){return l||(c=c||(r.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),c},set:function(e){c=e}});var f=function(){if(!r.default.prototype.$isServer&&h.modalStack.length>0){var e=h.modalStack[h.modalStack.length-1];if(!e)return;var t=h.getInstance(e.id);return t}};r.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=f();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=h},"4b8b":function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},"4d20":function(e,t,n){var i=n("1917"),r=n("10db"),o=n("6ca1"),a=n("3397"),s=n("9c0e"),l=n("faf5"),c=Object.getOwnPropertyDescriptor;t.f=n("0bad")?c:function(e,t){if(e=o(e),t=a(t,!0),l)try{return c(e,t)}catch(n){}if(s(e,t))return r(!i.f.call(e,t),e[t])}},"4d64":function(e,t,n){var i=n("fc6a"),r=n("50c4"),o=n("23cb"),a=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},"4d88":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"4e4b":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=60)}([function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},,,function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("6b7c")},,,,,function(e,t){e.exports=n("f3ad")},function(e,t){e.exports=n("417f")},function(e,t){e.exports=n("14e9")},,function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("0e15")},,,,function(e,t){e.exports=n("4897")},function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("12f2")},,,,,,,,,function(e,t){e.exports=n("2a5e")},,function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(s["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,d=n(0),h=Object(d["a"])(u,i,r,!1,null,null,null);h.options.__file="packages/select/src/option.vue";t["a"]=h.exports},,,function(e,t){e.exports=n("8bbc")},,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.deletePrevTag(t):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(22),l=n.n(s),c=n(6),u=n.n(c),d=n(11),h=n.n(d),f=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},p=[];f._withStripped=!0;var m=n(5),v=n.n(m),g={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[v.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},b=g,y=n(0),_=Object(y["a"])(b,f,p,!1,null,null,null);_.options.__file="packages/select/src/select-dropdown.vue";var x=_.exports,w=n(33),C=n(36),k=n.n(C),S=n(13),O=n.n(S),$=n(16),D=n.n($),E=n(12),T=n.n(E),P=n(15),M=n(20),I=n(31),N=n.n(I),j=n(3),A={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},F=n(21),L={mixins:[a.a,u.a,l()("reference"),A],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(j["isIE"])()&&!Object(j["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:h.a,ElSelectMenu:x,ElOption:w["a"],ElTag:k.a,ElScrollbar:O.a},directives:{Clickoutside:T.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(M["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(j["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(F["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");N()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(j["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(j["getValueByPath"])(a.value,this.valueKey)===Object(j["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(j["getValueByPath"])(e,i)===Object(j["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(j["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=D()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=D()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(P["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(P["removeResizeListener"])(this.$el,this.handleResize)}},V=L,z=Object(y["a"])(V,i,r,!1,null,null,null);z.options.__file="packages/select/src/select.vue";var B=z.exports;B.install=function(e){e.component(B.name,B)};t["default"]=B}])},"4e71":function(e,t,n){n("e198")("observable")},"4ebc":function(e,t,n){var i=n("4d88");e.exports=Array.isArray||function(e){return"Array"==i(e)}},"50c4":function(e,t,n){var i=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},"511f":function(e,t,n){n("0b99"),n("658f"),e.exports=n("fcd4").f("iterator")},5128:function(e,t,n){"use strict";t.__esModule=!0,t.PopupManager=void 0;var i=n("2b0e"),r=h(i),o=n("7f4d"),a=h(o),s=n("4b26"),l=h(s),c=n("e62d"),u=h(c),d=n("5924");function h(e){return e&&e.__esModule?e:{default:e}}var f=1,p=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+f++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,r.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var n=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var i=Number(n.openDelay);i>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),i):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,i=e.zIndex;if(i&&(l.default.zIndex=i),n&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,d.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,d.getStyle)(document.body,"paddingRight"),10)),p=(0,u.default)();var r=document.documentElement.clientHeight0&&(r||"scroll"===o)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+p+"px"),(0,d.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,d.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},"512c":function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("9c0c"),a=n("051b"),s=n("9c0e"),l="prototype",c=function(e,t,n){var u,d,h,f=e&c.F,p=e&c.G,m=e&c.S,v=e&c.P,g=e&c.B,b=e&c.W,y=p?r:r[t]||(r[t]={}),_=y[l],x=p?i:m?i[t]:(i[t]||{})[l];for(u in p&&(n=t),n)d=!f&&x&&void 0!==x[u],d&&s(y,u)||(h=d?x[u]:n[u],y[u]=p&&"function"!=typeof x[u]?n[u]:g&&d?o(h,i):b&&x[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((y.virtual||(y.virtual={}))[u]=h,e&c.R&&_&&!_[u]&&a(_,u,h)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},5135:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},5270:function(e,t,n){"use strict";var i=n("c532"),r=n("c401"),o=n("2e67"),a=n("2444"),s=n("d925"),l=n("e683");function c(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){c(e),e.baseURL&&!s(e.url)&&(e.url=l(e.baseURL,e.url)),e.headers=e.headers||{},e.data=r(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]}));var t=e.adapter||a.adapter;return t(e).then((function(t){return c(e),t.data=r(t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(c(e),t&&t.response&&(t.response.data=r(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},5488:function(e,t,n){"use strict";t.__esModule=!0;var i=n("5924");function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(){r(this,e)}return e.prototype.beforeEnter=function(e){(0,i.addClass)(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0},e.prototype.enter=function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"},e.prototype.afterEnter=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow},e.prototype.beforeLeave=function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"},e.prototype.leave=function(e){0!==e.scrollHeight&&((0,i.addClass)(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)},e.prototype.afterLeave=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom},e}();t.default={name:"ElCollapseTransition",functional:!0,render:function(e,t){var n=t.children,i={on:new o};return e("transition",i,n)}}},5524:function(e,t){var n=e.exports={version:"2.6.10"};"number"==typeof __e&&(__e=n)},5692:function(e,t,n){var i=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.3.5",mode:i?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},"56ef":function(e,t,n){var i=n("d066"),r=n("241c"),o=n("7418"),a=n("825a");e.exports=i("Reflect","ownKeys")||function(e){var t=r.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},5924:function(e,t,n){"use strict";t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.hasClass=m,t.addClass=v,t.removeClass=g,t.setStyle=y;var r=n("2b0e"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}var s=o.default.prototype.$isServer,l=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/,u=s?0:Number(document.documentMode),d=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},h=function(e){return e.replace(l,(function(e,t,n,i){return i?n.toUpperCase():n})).replace(c,"Moz$1")},f=t.on=function(){return!s&&document.addEventListener?function(e,t,n){e&&t&&n&&e.addEventListener(t,n,!1)}:function(e,t,n){e&&t&&n&&e.attachEvent("on"+t,n)}}(),p=t.off=function(){return!s&&document.removeEventListener?function(e,t,n){e&&t&&e.removeEventListener(t,n,!1)}:function(e,t,n){e&&t&&e.detachEvent("on"+t,n)}}();t.once=function(e,t,n){var i=function i(){n&&n.apply(this,arguments),p(e,t,i)};f(e,t,i)};function m(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function v(e,t){if(e){for(var n=e.className,i=(t||"").split(" "),r=0,o=i.length;ri.top&&n.right>i.left&&n.lefte?c():!0!==t&&(r=setTimeout(i?u:c,void 0===i?e-s:e))}return("boolean"!==typeof t&&(i=n,n=t,t=void 0),a)}},"5a94":function(e,t,n){var i=n("b367")("keys"),r=n("8b1a");e.exports=function(e){return i[e]||(i[e]=r(e))}},"5c6c":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"5c96":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=44)}([function(e,t){e.exports=n("d940")},function(e,t){e.exports=n("5924")},function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("6b7c")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("2b0e")},function(e,t){e.exports=n("7f4d")},function(e,t){e.exports=n("2bb5")},function(e,t){e.exports=n("f3ad")},function(e,t){e.exports=n("417f")},function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("5128")},function(e,t){e.exports=n("0e15")},function(e,t){e.exports=n("dcdc")},function(e,t){e.exports=n("4897")},function(e,t){e.exports=n("14e9")},function(e,t){e.exports=n("eedf")},function(e,t){e.exports=n("a742")},function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("d7d1")},function(e,t){e.exports=n("5488")},function(e,t){e.exports=n("12f2")},function(e,t){e.exports=n("41f8")},function(e,t){e.exports=n("92fa")},function(e,t){e.exports=n("597f")},function(e,t){e.exports=n("299c")},function(e,t){e.exports=n("2a5e")},function(e,t){e.exports=n("8bbc")},function(e,t){e.exports=n("e62d")},function(e,t){e.exports=n("7fc1")},function(e,t){e.exports=n("c56a")},function(e,t){e.exports=n("c284")},function(e,t){e.exports=n("e452")},function(e,t){e.exports=n("9619")},function(e,t){e.exports=n("4e4b")},function(e,t){e.exports=n("e772")},function(e,t){e.exports=n("845f")},function(e,t){e.exports=n("c098")},function(e,t){e.exports=n("722f")},function(e,t){e.exports=n("a15e")},function(e,t){e.exports=n("e450")},function(e,t){e.exports=n("4726")},function(e,t){e.exports=n("f494")},function(e,t,n){e.exports=n(45)},function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{staticClass:"el-pager",on:{click:e.onPagerClick}},[e.pageCount>0?n("li",{staticClass:"number",class:{active:1===e.currentPage,disabled:e.disabled}},[e._v("1")]):e._e(),e.showPrevMore?n("li",{staticClass:"el-icon more btn-quickprev",class:[e.quickprevIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("left")},mouseleave:function(t){e.quickprevIconClass="el-icon-more"}}}):e._e(),e._l(e.pagers,(function(t){return n("li",{key:t,staticClass:"number",class:{active:e.currentPage===t,disabled:e.disabled}},[e._v(e._s(t))])})),e.showNextMore?n("li",{staticClass:"el-icon more btn-quicknext",class:[e.quicknextIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("right")},mouseleave:function(t){e.quicknextIconClass="el-icon-more"}}}):e._e(),e.pageCount>1?n("li",{staticClass:"number",class:{active:e.currentPage===e.pageCount,disabled:e.disabled}},[e._v(e._s(e.pageCount))]):e._e()],2)},r=[];i._withStripped=!0;var o={name:"ElPager",props:{currentPage:Number,pageCount:Number,pagerCount:Number,disabled:Boolean},watch:{showPrevMore:function(e){e||(this.quickprevIconClass="el-icon-more")},showNextMore:function(e){e||(this.quicknextIconClass="el-icon-more")}},methods:{onPagerClick:function(e){var t=e.target;if("UL"!==t.tagName&&!this.disabled){var n=Number(e.target.textContent),i=this.pageCount,r=this.currentPage,o=this.pagerCount-2;-1!==t.className.indexOf("more")&&(-1!==t.className.indexOf("quickprev")?n=r-o:-1!==t.className.indexOf("quicknext")&&(n=r+o)),isNaN(n)||(n<1&&(n=1),n>i&&(n=i)),n!==r&&this.$emit("change",n)}},onMouseenter:function(e){this.disabled||("left"===e?this.quickprevIconClass="el-icon-d-arrow-left":this.quicknextIconClass="el-icon-d-arrow-right")}},computed:{pagers:function(){var e=this.pagerCount,t=(e-1)/2,n=Number(this.currentPage),i=Number(this.pageCount),r=!1,o=!1;i>e&&(n>e-t&&(r=!0),n4&&e<22&&e%2===1},default:7},currentPage:{type:Number,default:1},layout:{default:"prev, pager, next, jumper, ->, total"},pageSizes:{type:Array,default:function(){return[10,20,30,40,50,100]}},popperClass:String,prevText:String,nextText:String,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean},data:function(){return{internalCurrentPage:1,internalPageSize:0,lastEmittedPage:-1,userChangePageSize:!1}},render:function(e){var t=this.layout;if(!t)return null;if(this.hideOnSinglePage&&(!this.internalPageCount||1===this.internalPageCount))return null;var n=e("div",{class:["el-pagination",{"is-background":this.background,"el-pagination--small":this.small}]}),i={prev:e("prev"),jumper:e("jumper"),pager:e("pager",{attrs:{currentPage:this.internalCurrentPage,pageCount:this.internalPageCount,pagerCount:this.pagerCount,disabled:this.disabled},on:{change:this.handleCurrentChange}}),next:e("next"),sizes:e("sizes",{attrs:{pageSizes:this.pageSizes}}),slot:e("slot",[this.$slots.default?this.$slots.default:""]),total:e("total")},r=t.split(",").map((function(e){return e.trim()})),o=e("div",{class:"el-pagination__rightwrapper"}),a=!1;return n.children=n.children||[],o.children=o.children||[],r.forEach((function(e){"->"!==e?a?o.children.push(i[e]):n.children.push(i[e]):a=!0})),a&&n.children.unshift(o),n},components:{Prev:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage<=1},class:"btn-prev",on:{click:this.$parent.prev}},[this.$parent.prevText?e("span",[this.$parent.prevText]):e("i",{class:"el-icon el-icon-arrow-left"})])}},Next:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage===this.$parent.internalPageCount||0===this.$parent.internalPageCount},class:"btn-next",on:{click:this.$parent.next}},[this.$parent.nextText?e("span",[this.$parent.nextText]):e("i",{class:"el-icon el-icon-arrow-right"})])}},Sizes:{mixins:[g.a],props:{pageSizes:Array},watch:{pageSizes:{immediate:!0,handler:function(e,t){Object(b["valueEquals"])(e,t)||Array.isArray(e)&&(this.$parent.internalPageSize=e.indexOf(this.$parent.pageSize)>-1?this.$parent.pageSize:this.pageSizes[0])}}},render:function(e){var t=this;return e("span",{class:"el-pagination__sizes"},[e("el-select",{attrs:{value:this.$parent.internalPageSize,popperClass:this.$parent.popperClass||"",size:"mini",disabled:this.$parent.disabled},on:{input:this.handleChange}},[this.pageSizes.map((function(n){return e("el-option",{attrs:{value:n,label:n+t.t("el.pagination.pagesize")}})}))])])},components:{ElSelect:d.a,ElOption:f.a},methods:{handleChange:function(e){e!==this.$parent.internalPageSize&&(this.$parent.internalPageSize=e=parseInt(e,10),this.$parent.userChangePageSize=!0,this.$parent.$emit("update:pageSize",e),this.$parent.$emit("size-change",e))}}},Jumper:{mixins:[g.a],components:{ElInput:m.a},data:function(){return{userInput:null}},watch:{"$parent.internalCurrentPage":function(){this.userInput=null}},methods:{handleKeyup:function(e){var t=e.keyCode,n=e.target;13===t&&this.handleChange(n.value)},handleInput:function(e){this.userInput=e},handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.userInput=null}},render:function(e){return e("span",{class:"el-pagination__jump"},[this.t("el.pagination.goto"),e("el-input",{class:"el-pagination__editor is-in-pagination",attrs:{min:1,max:this.$parent.internalPageCount,value:null!==this.userInput?this.userInput:this.$parent.internalCurrentPage,type:"number",disabled:this.$parent.disabled},nativeOn:{keyup:this.handleKeyup},on:{input:this.handleInput,change:this.handleChange}}),this.t("el.pagination.pageClassifier")])}},Total:{mixins:[g.a],render:function(e){return"number"===typeof this.$parent.total?e("span",{class:"el-pagination__total"},[this.t("el.pagination.total",{total:this.$parent.total})]):""}},Pager:c},methods:{handleCurrentChange:function(e){this.internalCurrentPage=this.getValidCurrentPage(e),this.userChangePageSize=!0,this.emitChange()},prev:function(){if(!this.disabled){var e=this.internalCurrentPage-1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("prev-click",this.internalCurrentPage),this.emitChange()}},next:function(){if(!this.disabled){var e=this.internalCurrentPage+1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("next-click",this.internalCurrentPage),this.emitChange()}},getValidCurrentPage:function(e){e=parseInt(e,10);var t="number"===typeof this.internalPageCount,n=void 0;return t?e<1?n=1:e>this.internalPageCount&&(n=this.internalPageCount):(isNaN(e)||e<1)&&(n=1),void 0===n&&isNaN(e)?n=1:0===n&&(n=1),void 0===n?e:n},emitChange:function(){var e=this;this.$nextTick((function(){(e.internalCurrentPage!==e.lastEmittedPage||e.userChangePageSize)&&(e.$emit("current-change",e.internalCurrentPage),e.lastEmittedPage=e.internalCurrentPage,e.userChangePageSize=!1)}))}},computed:{internalPageCount:function(){return"number"===typeof this.total?Math.max(1,Math.ceil(this.total/this.internalPageSize)):"number"===typeof this.pageCount?Math.max(1,this.pageCount):null}},watch:{currentPage:{immediate:!0,handler:function(e){this.internalCurrentPage=this.getValidCurrentPage(e)}},pageSize:{immediate:!0,handler:function(e){this.internalPageSize=isNaN(e)?10:e}},internalCurrentPage:{immediate:!0,handler:function(e){this.$emit("update:currentPage",e),this.lastEmittedPage=-1}},internalPageCount:function(e){var t=this.internalCurrentPage;e>0&&0===t?this.internalCurrentPage=1:t>e&&(this.internalCurrentPage=0===e?1:e,this.userChangePageSize&&this.emitChange()),this.userChangePageSize=!1}},install:function(e){e.component(y.name,y)}},_=y,x=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{key:e.key,ref:"dialog",class:["el-dialog",{"is-fullscreen":e.fullscreen,"el-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"}},[n("div",{staticClass:"el-dialog__header"},[e._t("title",[n("span",{staticClass:"el-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?n("div",{staticClass:"el-dialog__body"},[e._t("default")],2):e._e(),e.$slots.footer?n("div",{staticClass:"el-dialog__footer"},[e._t("footer")],2):e._e()])])])},w=[];x._withStripped=!0;var C=n(12),k=n.n(C),S=n(8),O=n.n(S),$=n(3),D=n.n($),E={name:"ElDialog",mixins:[k.a,D.a,O.a],props:{title:{type:String,default:""},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{closed:!1,key:0}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el)):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("ElSelectDropdown","updatePopper"),this.broadcast("ElDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},T=E,P=s(T,x,w,!1,null,null,null);P.options.__file="packages/dialog/src/component.vue";var M=P.exports;M.install=function(e){e.component(M.name,M)};var I=M,N=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.close,expression:"close"}],staticClass:"el-autocomplete",attrs:{"aria-haspopup":"listbox",role:"combobox","aria-expanded":e.suggestionVisible,"aria-owns":e.id}},[n("el-input",e._b({ref:"input",on:{input:e.handleChange,focus:e.handleFocus,blur:e.handleBlur,clear:e.handleClear},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex-1)},function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex+1)},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleKeyEnter(t):null},function(t){return"button"in t||!e._k(t.keyCode,"tab",9,t.key,"Tab")?e.close(t):null}]}},"el-input",[e.$props,e.$attrs],!1),[e.$slots.prepend?n("template",{slot:"prepend"},[e._t("prepend")],2):e._e(),e.$slots.append?n("template",{slot:"append"},[e._t("append")],2):e._e(),e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),e.$slots.suffix?n("template",{slot:"suffix"},[e._t("suffix")],2):e._e()],2),n("el-autocomplete-suggestions",{ref:"suggestions",class:[e.popperClass?e.popperClass:""],attrs:{"visible-arrow":"","popper-options":e.popperOptions,"append-to-body":e.popperAppendToBody,placement:e.placement,id:e.id}},e._l(e.suggestions,(function(t,i){return n("li",{key:i,class:{highlighted:e.highlightedIndex===i},attrs:{id:e.id+"-item-"+i,role:"option","aria-selected":e.highlightedIndex===i},on:{click:function(n){e.select(t)}}},[e._t("default",[e._v("\n "+e._s(t[e.valueKey])+"\n ")],{item:t})],2)})),0)],1)},j=[];N._withStripped=!0;var A=n(13),F=n.n(A),L=n(10),V=n.n(L),z=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-autocomplete-suggestion el-popper",class:{"is-loading":!e.parent.hideLoading&&e.parent.loading},style:{width:e.dropdownWidth},attrs:{role:"region"}},[n("el-scrollbar",{attrs:{tag:"ul","wrap-class":"el-autocomplete-suggestion__wrap","view-class":"el-autocomplete-suggestion__list"}},[!e.parent.hideLoading&&e.parent.loading?n("li",[n("i",{staticClass:"el-icon-loading"})]):e._t("default")],2)],1)])},B=[];z._withStripped=!0;var R=n(5),H=n.n(R),W=n(16),q=n.n(W),U={components:{ElScrollbar:q.a},mixins:[H.a,D.a],componentName:"ElAutocompleteSuggestions",data:function(){return{parent:this.$parent,dropdownWidth:""}},props:{options:{default:function(){return{gpuAcceleration:!1}}},id:String},methods:{select:function(e){this.dispatch("ElAutocomplete","item-click",e)}},updated:function(){var e=this;this.$nextTick((function(t){e.popperJS&&e.updatePopper()}))},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$refs.input.$refs.input,this.referenceList=this.$el.querySelector(".el-autocomplete-suggestion__list"),this.referenceList.setAttribute("role","listbox"),this.referenceList.setAttribute("id",this.id)},created:function(){var e=this;this.$on("visible",(function(t,n){e.dropdownWidth=n+"px",e.showPopper=t}))}},Y=U,K=s(Y,z,B,!1,null,null,null);K.options.__file="packages/autocomplete/src/autocomplete-suggestions.vue";var G=K.exports,X=n(22),Z=n.n(X),J={name:"ElAutocomplete",mixins:[D.a,Z()("input"),O.a],inheritAttrs:!1,componentName:"ElAutocomplete",components:{ElInput:m.a,ElAutocompleteSuggestions:G},directives:{Clickoutside:V.a},props:{valueKey:{type:String,default:"value"},popperClass:String,popperOptions:Object,placeholder:String,clearable:{type:Boolean,default:!1},disabled:Boolean,name:String,size:String,value:String,maxlength:Number,minlength:Number,autofocus:Boolean,fetchSuggestions:Function,triggerOnFocus:{type:Boolean,default:!0},customItem:String,selectWhenUnmatched:{type:Boolean,default:!1},prefixIcon:String,suffixIcon:String,label:String,debounce:{type:Number,default:300},placement:{type:String,default:"bottom-start"},hideLoading:Boolean,popperAppendToBody:{type:Boolean,default:!0},highlightFirstItem:{type:Boolean,default:!1}},data:function(){return{activated:!1,suggestions:[],loading:!1,highlightedIndex:-1,suggestionDisabled:!1}},computed:{suggestionVisible:function(){var e=this.suggestions,t=Array.isArray(e)&&e.length>0;return(t||this.loading)&&this.activated},id:function(){return"el-autocomplete-"+Object(b["generateId"])()}},watch:{suggestionVisible:function(e){var t=this.getInput();t&&this.broadcast("ElAutocompleteSuggestions","visible",[e,t.offsetWidth])}},methods:{getMigratingConfig:function(){return{props:{"custom-item":"custom-item is removed, use scoped slot instead.",props:"props is removed, use value-key instead."}}},getData:function(e){var t=this;this.suggestionDisabled||(this.loading=!0,this.fetchSuggestions(e,(function(e){t.loading=!1,t.suggestionDisabled||(Array.isArray(e)?(t.suggestions=e,t.highlightedIndex=t.highlightFirstItem?0:-1):console.error("[Element Error][Autocomplete]autocomplete suggestions must be an array"))})))},handleChange:function(e){if(this.$emit("input",e),this.suggestionDisabled=!1,!this.triggerOnFocus&&!e)return this.suggestionDisabled=!0,void(this.suggestions=[]);this.debouncedGetData(e)},handleFocus:function(e){this.activated=!0,this.$emit("focus",e),this.triggerOnFocus&&this.debouncedGetData(this.value)},handleBlur:function(e){this.$emit("blur",e)},handleClear:function(){this.activated=!1,this.$emit("clear")},close:function(e){this.activated=!1},handleKeyEnter:function(e){var t=this;this.suggestionVisible&&this.highlightedIndex>=0&&this.highlightedIndex=this.suggestions.length&&(e=this.suggestions.length-1);var t=this.$refs.suggestions.$el.querySelector(".el-autocomplete-suggestion__wrap"),n=t.querySelectorAll(".el-autocomplete-suggestion__list li"),i=n[e],r=t.scrollTop,o=i.offsetTop;o+i.scrollHeight>r+t.clientHeight&&(t.scrollTop+=i.scrollHeight),o=0&&this.resetTabindex(this.triggerElm),clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!1}),"click"===this.trigger?0:this.hideTimeout))},handleClick:function(){this.triggerElm.disabled||(this.visible?this.hide():this.show())},handleTriggerKeyDown:function(e){var t=e.keyCode;[38,40].indexOf(t)>-1?(this.removeTabindex(),this.resetTabindex(this.menuItems[0]),this.menuItems[0].focus(),e.preventDefault(),e.stopPropagation()):13===t?this.handleClick():[9,27].indexOf(t)>-1&&this.hide()},handleItemKeyDown:function(e){var t=e.keyCode,n=e.target,i=this.menuItemsArray.indexOf(n),r=this.menuItemsArray.length-1,o=void 0;[38,40].indexOf(t)>-1?(o=38===t?0!==i?i-1:0:i-1&&(this.hide(),this.triggerElmFocus())},resetTabindex:function(e){this.removeTabindex(),e.setAttribute("tabindex","0")},removeTabindex:function(){this.triggerElm.setAttribute("tabindex","-1"),this.menuItemsArray.forEach((function(e){e.setAttribute("tabindex","-1")}))},initAria:function(){this.dropdownElm.setAttribute("id",this.listId),this.triggerElm.setAttribute("aria-haspopup","list"),this.triggerElm.setAttribute("aria-controls",this.listId),this.splitButton||(this.triggerElm.setAttribute("role","button"),this.triggerElm.setAttribute("tabindex",this.tabindex),this.triggerElm.setAttribute("class",(this.triggerElm.getAttribute("class")||"")+" el-dropdown-selfdefine"))},initEvent:function(){var e=this,t=this.trigger,n=this.show,i=this.hide,r=this.handleClick,o=this.splitButton,a=this.handleTriggerKeyDown,s=this.handleItemKeyDown;this.triggerElm=o?this.$refs.trigger.$el:this.$slots.default[0].elm;var l=this.dropdownElm;this.triggerElm.addEventListener("keydown",a),l.addEventListener("keydown",s,!0),o||(this.triggerElm.addEventListener("focus",(function(){e.focusing=!0})),this.triggerElm.addEventListener("blur",(function(){e.focusing=!1})),this.triggerElm.addEventListener("click",(function(){e.focusing=!1}))),"hover"===t?(this.triggerElm.addEventListener("mouseenter",n),this.triggerElm.addEventListener("mouseleave",i),l.addEventListener("mouseenter",n),l.addEventListener("mouseleave",i)):"click"===t&&this.triggerElm.addEventListener("click",r)},handleMenuItemClick:function(e,t){this.hideOnClick&&(this.visible=!1),this.$emit("command",e,t)},triggerElmFocus:function(){this.triggerElm.focus&&this.triggerElm.focus()},initDomOperation:function(){this.dropdownElm=this.popperElm,this.menuItems=this.dropdownElm.querySelectorAll("[tabindex='-1']"),this.menuItemsArray=[].slice.call(this.menuItems),this.initEvent(),this.initAria()}},render:function(e){var t=this,n=this.hide,i=this.splitButton,r=this.type,o=this.dropdownSize,a=function(e){t.$emit("click",e),n()},s=i?e("el-button-group",[e("el-button",{attrs:{type:r,size:o},nativeOn:{click:a}},[this.$slots.default]),e("el-button",{ref:"trigger",attrs:{type:r,size:o},class:"el-dropdown__caret-button"},[e("i",{class:"el-dropdown__icon el-icon-arrow-down"})])]):this.$slots.default;return e("div",{class:"el-dropdown",directives:[{name:"clickoutside",value:n}]},[s,this.$slots.dropdown])}},ue=ce,de=s(ue,ne,ie,!1,null,null,null);de.options.__file="packages/dropdown/src/dropdown.vue";var he=de.exports;he.install=function(e){e.component(he.name,he)};var fe=he,pe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("ul",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-dropdown-menu el-popper",class:[e.size&&"el-dropdown-menu--"+e.size]},[e._t("default")],2)])},me=[];pe._withStripped=!0;var ve={name:"ElDropdownMenu",componentName:"ElDropdownMenu",mixins:[H.a],props:{visibleArrow:{type:Boolean,default:!0},arrowOffset:{type:Number,default:0}},data:function(){return{size:this.dropdown.dropdownSize}},inject:["dropdown"],created:function(){var e=this;this.$on("updatePopper",(function(){e.showPopper&&e.updatePopper()})),this.$on("visible",(function(t){e.showPopper=t}))},mounted:function(){this.dropdown.popperElm=this.popperElm=this.$el,this.referenceElm=this.dropdown.$el,this.dropdown.initDomOperation()},watch:{"dropdown.placement":{immediate:!0,handler:function(e){this.currentPlacement=e}}}},ge=ve,be=s(ge,pe,me,!1,null,null,null);be.options.__file="packages/dropdown/src/dropdown-menu.vue";var ye=be.exports;ye.install=function(e){e.component(ye.name,ye)};var _e=ye,xe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-dropdown-menu__item",class:{"is-disabled":e.disabled,"el-dropdown-menu__item--divided":e.divided},attrs:{"aria-disabled":e.disabled,tabindex:e.disabled?null:-1},on:{click:e.handleClick}},[e.icon?n("i",{class:e.icon}):e._e(),e._t("default")],2)},we=[];xe._withStripped=!0;var Ce={name:"ElDropdownItem",mixins:[D.a],props:{command:{},disabled:Boolean,divided:Boolean,icon:String},methods:{handleClick:function(e){this.dispatch("ElDropdown","menu-item-click",[this.command,this])}}},ke=Ce,Se=s(ke,xe,we,!1,null,null,null);Se.options.__file="packages/dropdown/src/dropdown-item.vue";var Oe=Se.exports;Oe.install=function(e){e.component(Oe.name,Oe)};var $e=Oe,De=De||{};De.Utils=De.Utils||{},De.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var n=e.childNodes[t];if(De.Utils.attemptFocus(n)||De.Utils.focusLastDescendant(n))return!0}return!1},De.Utils.attemptFocus=function(e){if(!De.Utils.isFocusable(e))return!1;De.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return De.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},De.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},De.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a=0;t--)e.splice(t,0,e[t]);e=e.join("")}return/^[0-9a-fA-F]{6}$/.test(e)?{red:parseInt(e.slice(0,2),16),green:parseInt(e.slice(2,4),16),blue:parseInt(e.slice(4,6),16)}:{red:255,green:255,blue:255}},mixColor:function(e,t){var n=this.getColorChannels(e),i=n.red,r=n.green,o=n.blue;return t>0?(i*=1-t,r*=1-t,o*=1-t):(i+=(255-i)*t,r+=(255-r)*t,o+=(255-o)*t),"rgb("+Math.round(i)+", "+Math.round(r)+", "+Math.round(o)+")"},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},openMenu:function(e,t){var n=this.openedMenus;-1===n.indexOf(e)&&(this.uniqueOpened&&(this.openedMenus=n.filter((function(e){return-1!==t.indexOf(e)}))),this.openedMenus.push(e))},closeMenu:function(e){var t=this.openedMenus.indexOf(e);-1!==t&&this.openedMenus.splice(t,1)},handleSubmenuClick:function(e){var t=e.index,n=e.indexPath,i=-1!==this.openedMenus.indexOf(t);i?(this.closeMenu(t),this.$emit("close",t,n)):(this.openMenu(t,n),this.$emit("open",t,n))},handleItemClick:function(e){var t=this,n=e.index,i=e.indexPath,r=this.activeIndex,o=null!==e.index;o&&(this.activeIndex=e.index),this.$emit("select",n,i,e),("horizontal"===this.mode||this.collapse)&&(this.openedMenus=[]),this.router&&o&&this.routeToItem(e,(function(e){t.activeIndex=r,e&&console.error(e)}))},initOpenedMenu:function(){var e=this,t=this.activeIndex,n=this.items[t];if(n&&"horizontal"!==this.mode&&!this.collapse){var i=n.indexPath;i.forEach((function(t){var n=e.submenus[t];n&&e.openMenu(t,n.indexPath)}))}},routeToItem:function(e,t){var n=e.route||e.index;try{this.$router.push(n,(function(){}),t)}catch(i){console.error(i)}},open:function(e){var t=this,n=this.submenus[e.toString()].indexPath;n.forEach((function(e){return t.openMenu(e,n)}))},close:function(e){this.closeMenu(e)}},mounted:function(){this.initOpenedMenu(),this.$on("item-click",this.handleItemClick),this.$on("submenu-click",this.handleSubmenuClick),"horizontal"===this.mode&&new Fe(this.$el),this.$watch("items",this.updateActiveIndex)}},ze=Ve,Be=s(ze,je,Ae,!1,null,null,null);Be.options.__file="packages/menu/src/menu.vue";var Re=Be.exports;Re.install=function(e){e.component(Re.name,Re)};var He,We,qe=Re,Ue=n(21),Ye=n.n(Ue),Ke={inject:["rootMenu"],computed:{indexPath:function(){var e=[this.index],t=this.$parent;while("ElMenu"!==t.$options.componentName)t.index&&e.unshift(t.index),t=t.$parent;return e},parentMenu:function(){var e=this.$parent;while(e&&-1===["ElMenu","ElSubmenu"].indexOf(e.$options.componentName))e=e.$parent;return e},paddingStyle:function(){if("vertical"!==this.rootMenu.mode)return{};var e=20,t=this.$parent;if(this.rootMenu.collapse)e=20;else while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return{paddingLeft:e+"px"}}}},Ge={props:{transformOrigin:{type:[Boolean,String],default:!1},offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},data:H.a.data,methods:H.a.methods,beforeDestroy:H.a.beforeDestroy,deactivated:H.a.deactivated},Xe={name:"ElSubmenu",componentName:"ElSubmenu",mixins:[Ke,D.a,Ge],components:{ElCollapseTransition:Ye.a},props:{index:{type:String,required:!0},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0}},data:function(){return{popperJS:null,timeout:null,items:{},submenus:{},mouseInChild:!1}},watch:{opened:function(e){var t=this;this.isMenuPopup&&this.$nextTick((function(e){t.updatePopper()}))}},computed:{appendToBody:function(){return void 0===this.popperAppendToBody?this.isFirstLevel:this.popperAppendToBody},menuTransitionName:function(){return this.rootMenu.collapse?"el-zoom-in-left":"el-zoom-in-top"},opened:function(){return this.rootMenu.openedMenus.indexOf(this.index)>-1},active:function(){var e=!1,t=this.submenus,n=this.items;return Object.keys(n).forEach((function(t){n[t].active&&(e=!0)})),Object.keys(t).forEach((function(n){t[n].active&&(e=!0)})),e},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},isMenuPopup:function(){return this.rootMenu.isMenuPopup},titleStyle:function(){return"horizontal"!==this.mode?{color:this.textColor}:{borderBottomColor:this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent",color:this.active?this.activeTextColor:this.textColor}},isFirstLevel:function(){var e=!0,t=this.$parent;while(t&&t!==this.rootMenu){if(["ElSubmenu","ElMenuItemGroup"].indexOf(t.$options.componentName)>-1){e=!1;break}t=t.$parent}return e}},methods:{handleCollapseToggle:function(e){e?this.initPopper():this.doDestroy()},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},handleClick:function(){var e=this.rootMenu,t=this.disabled;"hover"===e.menuTrigger&&"horizontal"===e.mode||e.collapse&&"vertical"===e.mode||t||this.dispatch("ElMenu","submenu-click",this)},handleMouseenter:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.showTimeout;if("ActiveXObject"in window||"focus"!==e.type||e.relatedTarget){var i=this.rootMenu,r=this.disabled;"click"===i.menuTrigger&&"horizontal"===i.mode||!i.collapse&&"vertical"===i.mode||r||(this.dispatch("ElSubmenu","mouse-enter-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){t.rootMenu.openMenu(t.index,t.indexPath)}),n),this.appendToBody&&this.$parent.$el.dispatchEvent(new MouseEvent("mouseenter")))}},handleMouseleave:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.rootMenu;"click"===n.menuTrigger&&"horizontal"===n.mode||!n.collapse&&"vertical"===n.mode||(this.dispatch("ElSubmenu","mouse-leave-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){!e.mouseInChild&&e.rootMenu.closeMenu(e.index)}),this.hideTimeout),this.appendToBody&&t&&"ElSubmenu"===this.$parent.$options.name&&this.$parent.handleMouseleave(!0))},handleTitleMouseenter:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.hoverBackground)}},handleTitleMouseleave:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.backgroundColor||"")}},updatePlacement:function(){this.currentPlacement="horizontal"===this.mode&&this.isFirstLevel?"bottom-start":"right-start"},initPopper:function(){this.referenceElm=this.$el,this.popperElm=this.$refs.menu,this.updatePlacement()}},created:function(){var e=this;this.$on("toggle-collapse",this.handleCollapseToggle),this.$on("mouse-enter-child",(function(){e.mouseInChild=!0,clearTimeout(e.timeout)})),this.$on("mouse-leave-child",(function(){e.mouseInChild=!1,clearTimeout(e.timeout)}))},mounted:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this),this.initPopper()},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)},render:function(e){var t=this,n=this.active,i=this.opened,r=this.paddingStyle,o=this.titleStyle,a=this.backgroundColor,s=this.rootMenu,l=this.currentPlacement,c=this.menuTransitionName,u=this.mode,d=this.disabled,h=this.popperClass,f=this.$slots,p=this.isFirstLevel,m=e("transition",{attrs:{name:c}},[e("div",{ref:"menu",directives:[{name:"show",value:i}],class:["el-menu--"+u,h],on:{mouseenter:function(e){return t.handleMouseenter(e,100)},mouseleave:function(){return t.handleMouseleave(!0)},focus:function(e){return t.handleMouseenter(e,100)}}},[e("ul",{attrs:{role:"menu"},class:["el-menu el-menu--popup","el-menu--popup-"+l],style:{backgroundColor:s.backgroundColor||""}},[f.default])])]),v=e("el-collapse-transition",[e("ul",{attrs:{role:"menu"},class:"el-menu el-menu--inline",directives:[{name:"show",value:i}],style:{backgroundColor:s.backgroundColor||""}},[f.default])]),g="horizontal"===s.mode&&p||"vertical"===s.mode&&!s.collapse?"el-icon-arrow-down":"el-icon-arrow-right";return e("li",{class:{"el-submenu":!0,"is-active":n,"is-opened":i,"is-disabled":d},attrs:{role:"menuitem","aria-haspopup":"true","aria-expanded":i},on:{mouseenter:this.handleMouseenter,mouseleave:function(){return t.handleMouseleave(!1)},focus:this.handleMouseenter}},[e("div",{class:"el-submenu__title",ref:"submenu-title",on:{click:this.handleClick,mouseenter:this.handleTitleMouseenter,mouseleave:this.handleTitleMouseleave},style:[r,o,{backgroundColor:a}]},[f.title,e("i",{class:["el-submenu__icon-arrow",g]})]),this.isMenuPopup?m:v])}},Ze=Xe,Je=s(Ze,He,We,!1,null,null,null);Je.options.__file="packages/menu/src/submenu.vue";var Qe=Je.exports;Qe.install=function(e){e.component(Qe.name,Qe)};var et=Qe,tt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item",class:{"is-active":e.active,"is-disabled":e.disabled},style:[e.paddingStyle,e.itemStyle,{backgroundColor:e.backgroundColor}],attrs:{role:"menuitem",tabindex:"-1"},on:{click:e.handleClick,mouseenter:e.onMouseEnter,focus:e.onMouseEnter,blur:e.onMouseLeave,mouseleave:e.onMouseLeave}},["ElMenu"===e.parentMenu.$options.componentName&&e.rootMenu.collapse&&e.$slots.title?n("el-tooltip",{attrs:{effect:"dark",placement:"right"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e._t("title")],2),n("div",{staticStyle:{position:"absolute",left:"0",top:"0",height:"100%",width:"100%",display:"inline-block","box-sizing":"border-box",padding:"0 20px"}},[e._t("default")],2)]):[e._t("default"),e._t("title")]],2)},nt=[];tt._withStripped=!0;var it=n(26),rt=n.n(it),ot={name:"ElMenuItem",componentName:"ElMenuItem",mixins:[Ke,D.a],components:{ElTooltip:rt.a},props:{index:{default:null,validator:function(e){return"string"===typeof e||null===e}},route:[String,Object],disabled:Boolean},computed:{active:function(){return this.index===this.rootMenu.activeIndex},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},itemStyle:function(){var e={color:this.active?this.activeTextColor:this.textColor};return"horizontal"!==this.mode||this.isNested||(e.borderBottomColor=this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent"),e},isNested:function(){return this.parentMenu!==this.rootMenu}},methods:{onMouseEnter:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.hoverBackground)},onMouseLeave:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.backgroundColor)},handleClick:function(){this.disabled||(this.dispatch("ElMenu","item-click",this),this.$emit("click",this))}},mounted:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},at=ot,st=s(at,tt,nt,!1,null,null,null);st.options.__file="packages/menu/src/menu-item.vue";var lt=st.exports;lt.install=function(e){e.component(lt.name,lt)};var ct=lt,ut=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item-group"},[n("div",{staticClass:"el-menu-item-group__title",style:{paddingLeft:e.levelPadding+"px"}},[e.$slots.title?e._t("title"):[e._v(e._s(e.title))]],2),n("ul",[e._t("default")],2)])},dt=[];ut._withStripped=!0;var ht={name:"ElMenuItemGroup",componentName:"ElMenuItemGroup",inject:["rootMenu"],props:{title:{type:String}},data:function(){return{paddingLeft:20}},computed:{levelPadding:function(){var e=20,t=this.$parent;if(this.rootMenu.collapse)return 20;while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return e}}},ft=ht,pt=s(ft,ut,dt,!1,null,null,null);pt.options.__file="packages/menu/src/menu-item-group.vue";var mt=pt.exports;mt.install=function(e){e.component(mt.name,mt)};var vt=mt,gt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},bt=[];gt._withStripped=!0;var yt=void 0,_t="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",xt=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function wt(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=xt.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function Ct(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;yt||(yt=document.createElement("textarea"),document.body.appendChild(yt));var i=wt(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;yt.setAttribute("style",s+";"+_t),yt.value=e.value||e.placeholder||"";var l=yt.scrollHeight,c={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),yt.value="";var u=yt.scrollHeight-r;if(null!==t){var d=u*t;"border-box"===a&&(d=d+r+o),l=Math.max(d,l),c.minHeight=d+"px"}if(null!==n){var h=u*n;"border-box"===a&&(h=h+r+o),l=Math.min(h,l)}return c.height=l+"px",yt.parentNode&&yt.parentNode.removeChild(yt),yt=null,c}var kt=n(7),St=n.n(kt),Ot=n(19),$t={name:"ElInput",componentName:"ElInput",mixins:[D.a,O.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return St()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=Ct(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:Ct(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(Ot["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},At=jt,Ft=s(At,Mt,It,!1,null,null,null);Ft.options.__file="packages/input-number/src/input-number.vue";var Lt=Ft.exports;Lt.install=function(e){e.component(Lt.name,Lt)};var Vt=Lt,zt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[n("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[n("span",{staticClass:"el-radio__inner"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),n("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},Bt=[];zt._withStripped=!0;var Rt={name:"ElRadio",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},Ht=Rt,Wt=s(Ht,zt,Bt,!1,null,null,null);Wt.options.__file="packages/radio/src/radio.vue";var qt=Wt.exports;qt.install=function(e){e.component(qt.name,qt)};var Ut=qt,Yt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e._elTag,{tag:"component",staticClass:"el-radio-group",attrs:{role:"radiogroup"},on:{keydown:e.handleKeydown}},[e._t("default")],2)},Kt=[];Yt._withStripped=!0;var Gt=Object.freeze({LEFT:37,UP:38,RIGHT:39,DOWN:40}),Xt={name:"ElRadioGroup",componentName:"ElRadioGroup",inject:{elFormItem:{default:""}},mixins:[D.a],props:{value:{},size:String,fill:String,textColor:String,disabled:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},_elTag:function(){return(this.$vnode.data||{}).tag||"div"},radioGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},created:function(){var e=this;this.$on("handleChange",(function(t){e.$emit("change",t)}))},mounted:function(){var e=this.$el.querySelectorAll("[type=radio]"),t=this.$el.querySelectorAll("[role=radio]")[0];![].some.call(e,(function(e){return e.checked}))&&t&&(t.tabIndex=0)},methods:{handleKeydown:function(e){var t=e.target,n="INPUT"===t.nodeName?"[type=radio]":"[role=radio]",i=this.$el.querySelectorAll(n),r=i.length,o=[].indexOf.call(i,t),a=this.$el.querySelectorAll("[role=radio]");switch(e.keyCode){case Gt.LEFT:case Gt.UP:e.stopPropagation(),e.preventDefault(),0===o?(a[r-1].click(),a[r-1].focus()):(a[o-1].click(),a[o-1].focus());break;case Gt.RIGHT:case Gt.DOWN:o===r-1?(e.stopPropagation(),e.preventDefault(),a[0].click(),a[0].focus()):(a[o+1].click(),a[o+1].focus());break;default:break}}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[this.value])}}},Zt=Xt,Jt=s(Zt,Yt,Kt,!1,null,null,null);Jt.options.__file="packages/radio/src/radio-group.vue";var Qt=Jt.exports;Qt.install=function(e){e.component(Qt.name,Qt)};var en=Qt,tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio-button",class:[e.size?"el-radio-button--"+e.size:"",{"is-active":e.value===e.label},{"is-disabled":e.isDisabled},{"is-focus":e.focus}],attrs:{role:"radio","aria-checked":e.value===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.value=e.isDisabled?e.value:e.label}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"el-radio-button__orig-radio",attrs:{type:"radio",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.value,e.label)},on:{change:[function(t){e.value=e.label},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),n("span",{staticClass:"el-radio-button__inner",style:e.value===e.label?e.activeStyle:null,on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},nn=[];tn._withStripped=!0;var rn={name:"ElRadioButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},props:{label:{},disabled:Boolean,name:String},data:function(){return{focus:!1}},computed:{value:{get:function(){return this._radioGroup.value},set:function(e){this._radioGroup.$emit("input",e)}},_radioGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return e;e=e.$parent}return!1},activeStyle:function(){return{backgroundColor:this._radioGroup.fill||"",borderColor:this._radioGroup.fill||"",boxShadow:this._radioGroup.fill?"-1px 0 0 0 "+this._radioGroup.fill:"",color:this._radioGroup.textColor||""}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._radioGroup.radioGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isDisabled:function(){return this.disabled||this._radioGroup.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this._radioGroup&&this.value!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.dispatch("ElRadioGroup","handleChange",e.value)}))}}},on=rn,an=s(on,tn,nn,!1,null,null,null);an.options.__file="packages/radio/src/radio-button.vue";var sn=an.exports;sn.install=function(e){e.component(sn.name,sn)};var ln=sn,cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},un=[];cn._withStripped=!0;var dn={name:"ElCheckbox",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},hn=dn,fn=s(hn,cn,un,!1,null,null,null);fn.options.__file="packages/checkbox/src/checkbox.vue";var pn=fn.exports;pn.install=function(e){e.component(pn.name,pn)};var mn=pn,vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox-button",class:[e.size?"el-checkbox-button--"+e.size:"",{"is-disabled":e.isDisabled},{"is-checked":e.isChecked},{"is-focus":e.focus}],attrs:{role:"checkbox","aria-checked":e.isChecked,"aria-disabled":e.isDisabled}},[e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox-button__inner",style:e.isChecked?e.activeStyle:null},[e._t("default",[e._v(e._s(e.label))])],2):e._e()])},gn=[];vn._withStripped=!0;var bn={name:"ElCheckboxButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},props:{value:{},label:{},disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number]},computed:{model:{get:function(){return this._checkboxGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this._checkboxGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):void 0!==this.value?this.$emit("input",e):this.selfModel=e}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},_checkboxGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return e;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},activeStyle:function(){return{backgroundColor:this._checkboxGroup.fill||"",borderColor:this._checkboxGroup.fill||"",color:this._checkboxGroup.textColor||"","box-shadow":"-1px 0 0 0 "+this._checkboxGroup.fill}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._checkboxGroup.checkboxGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this._checkboxGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled}},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t._checkboxGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()}},yn=bn,_n=s(yn,vn,gn,!1,null,null,null);_n.options.__file="packages/checkbox/src/checkbox-button.vue";var xn=_n.exports;xn.install=function(e){e.component(xn.name,xn)};var wn=xn,Cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},kn=[];Cn._withStripped=!0;var Sn={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[D.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},On=Sn,$n=s(On,Cn,kn,!1,null,null,null);$n.options.__file="packages/checkbox/src/checkbox-group.vue";var Dn=$n.exports;Dn.install=function(e){e.component(Dn.name,Dn)};var En=Dn,Tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-switch",class:{"is-disabled":e.switchDisabled,"is-checked":e.checked},attrs:{role:"switch","aria-checked":e.checked,"aria-disabled":e.switchDisabled},on:{click:function(t){return t.preventDefault(),e.switchValue(t)}}},[n("input",{ref:"input",staticClass:"el-switch__input",attrs:{type:"checkbox",id:e.id,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:e.switchDisabled},on:{change:e.handleChange,keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.switchValue(t):null}}}),e.inactiveIconClass||e.inactiveText?n("span",{class:["el-switch__label","el-switch__label--left",e.checked?"":"is-active"]},[e.inactiveIconClass?n("i",{class:[e.inactiveIconClass]}):e._e(),!e.inactiveIconClass&&e.inactiveText?n("span",{attrs:{"aria-hidden":e.checked}},[e._v(e._s(e.inactiveText))]):e._e()]):e._e(),n("span",{ref:"core",staticClass:"el-switch__core",style:{width:e.coreWidth+"px"}}),e.activeIconClass||e.activeText?n("span",{class:["el-switch__label","el-switch__label--right",e.checked?"is-active":""]},[e.activeIconClass?n("i",{class:[e.activeIconClass]}):e._e(),!e.activeIconClass&&e.activeText?n("span",{attrs:{"aria-hidden":!e.checked}},[e._v(e._s(e.activeText))]):e._e()]):e._e()])},Pn=[];Tn._withStripped=!0;var Mn={name:"ElSwitch",mixins:[Z()("input"),O.a,D.a],inject:{elForm:{default:""}},props:{value:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},width:{type:Number,default:40},activeIconClass:{type:String,default:""},inactiveIconClass:{type:String,default:""},activeText:String,inactiveText:String,activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},id:String},data:function(){return{coreWidth:this.width}},created:function(){~[this.activeValue,this.inactiveValue].indexOf(this.value)||this.$emit("input",this.inactiveValue)},computed:{checked:function(){return this.value===this.activeValue},switchDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{checked:function(){this.$refs.input.checked=this.checked,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[this.value])}},methods:{handleChange:function(e){var t=this,n=this.checked?this.inactiveValue:this.activeValue;this.$emit("input",n),this.$emit("change",n),this.$nextTick((function(){t.$refs.input.checked=t.checked}))},setBackgroundColor:function(){var e=this.checked?this.activeColor:this.inactiveColor;this.$refs.core.style.borderColor=e,this.$refs.core.style.backgroundColor=e},switchValue:function(){!this.switchDisabled&&this.handleChange()},getMigratingConfig:function(){return{props:{"on-color":"on-color is renamed to active-color.","off-color":"off-color is renamed to inactive-color.","on-text":"on-text is renamed to active-text.","off-text":"off-text is renamed to inactive-text.","on-value":"on-value is renamed to active-value.","off-value":"off-value is renamed to inactive-value.","on-icon-class":"on-icon-class is renamed to active-icon-class.","off-icon-class":"off-icon-class is renamed to inactive-icon-class."}}}},mounted:function(){this.coreWidth=this.width||40,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.$refs.input.checked=this.checked}},In=Mn,Nn=s(In,Tn,Pn,!1,null,null,null);Nn.options.__file="packages/switch/src/component.vue";var jn=Nn.exports;jn.install=function(e){e.component(jn.name,jn)};var An=jn,Fn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.deletePrevTag(t):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},Ln=[];Fn._withStripped=!0;var Vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},zn=[];Vn._withStripped=!0;var Bn={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[H.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},Rn=Bn,Hn=s(Rn,Vn,zn,!1,null,null,null);Hn.options.__file="packages/select/src/select-dropdown.vue";var Wn=Hn.exports,qn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},Un=[];qn._withStripped=!0;var Yn="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kn={mixins:[D.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":Yn(e))&&"object"===("undefined"===typeof t?"undefined":Yn(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(b["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},Gn=Kn,Xn=s(Gn,qn,Un,!1,null,null,null);Xn.options.__file="packages/select/src/option.vue";var Zn=Xn.exports,Jn=n(28),Qn=n.n(Jn),ei=n(11),ti=n(15),ni=n.n(ti),ii=n(27),ri=n.n(ii),oi={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},ai={mixins:[D.a,g.a,Z()("reference"),oi],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(b["isIE"])()&&!Object(b["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:m.a,ElSelectMenu:Wn,ElOption:Zn,ElTag:Qn.a,ElScrollbar:q.a},directives:{Clickoutside:V.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(ti["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(b["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(Ot["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");ri()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(b["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(b["getValueByPath"])(a.value,this.valueKey)===Object(b["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(b["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=F()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=F()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(ei["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(ei["removeResizeListener"])(this.$el,this.handleResize)}},si=ai,li=s(si,Fn,Ln,!1,null,null,null);li.options.__file="packages/select/src/select.vue";var ci=li.exports;ci.install=function(e){e.component(ci.name,ci)};var ui=ci;Zn.install=function(e){e.component(Zn.name,Zn)};var di=Zn,hi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-group__wrap"},[n("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))]),n("li",[n("ul",{staticClass:"el-select-group"},[e._t("default")],2)])])},fi=[];hi._withStripped=!0;var pi={mixins:[D.a],name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:{type:Boolean,default:!1}},data:function(){return{visible:!0}},watch:{disabled:function(e){this.broadcast("ElOption","handleGroupDisabled",e)}},methods:{queryChange:function(){this.visible=this.$children&&Array.isArray(this.$children)&&this.$children.some((function(e){return!0===e.visible}))}},created:function(){this.$on("queryChange",this.queryChange)},mounted:function(){this.disabled&&this.broadcast("ElOption","handleGroupDisabled",this.disabled)}},mi=pi,vi=s(mi,hi,fi,!1,null,null,null);vi.options.__file="packages/select/src/option-group.vue";var gi=vi.exports;gi.install=function(e){e.component(gi.name,gi)};var bi=gi,yi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},_i=[];yi._withStripped=!0;var xi={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},wi=xi,Ci=s(wi,yi,_i,!1,null,null,null);Ci.options.__file="packages/button/src/button.vue";var ki=Ci.exports;ki.install=function(e){e.component(ki.name,ki)};var Si=ki,Oi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-button-group"},[e._t("default")],2)},$i=[];Oi._withStripped=!0;var Di={name:"ElButtonGroup"},Ei=Di,Ti=s(Ei,Oi,$i,!1,null,null,null);Ti.options.__file="packages/button/src/button-group.vue";var Pi=Ti.exports;Pi.install=function(e){e.component(Pi.name,Pi)};var Mi=Pi,Ii=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[n("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[n("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),n("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():n("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[n("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?n("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[n("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},Ni=[];Ii._withStripped=!0;var ji=n(14),Ai=n.n(ji),Fi=n(34),Li=n(38),Vi=n.n(Li),zi="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Bi=function(e,t){e&&e.addEventListener&&e.addEventListener(zi?"DOMMouseScroll":"mousewheel",(function(e){var n=Vi()(e);t&&t.apply(this,[e,n])}))},Ri={bind:function(e,t){Bi(e,t.value)}},Hi=n(6),Wi=n.n(Hi),qi="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ui=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},Yi=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":qi(e))},Ki=function(e,t,n,i,r){if(!t&&!i&&(!r||Array.isArray(r)&&!r.length))return e;n="string"===typeof n?"descending"===n?-1:1:n&&n<0?-1:1;var o=i?null:function(n,i){return r?(Array.isArray(r)||(r=[r]),r.map((function(t){return"string"===typeof t?Object(b["getValueByPath"])(n,t):t(n,i,e)}))):("$key"!==t&&Yi(n)&&"$value"in n&&(n=n.$value),[Yi(n)?Object(b["getValueByPath"])(n,t):n])},a=function(e,t){if(i)return i(e.value,t.value);for(var n=0,r=e.key.length;nt.key[n])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:o?o(e,t):null}})).sort((function(e,t){var i=a(e,t);return i||(i=e.index-t.index),i*n})).map((function(e){return e.value}))},Gi=function(e,t){var n=null;return e.columns.forEach((function(e){e.id===t&&(n=e)})),n},Xi=function(e,t){for(var n=null,i=0;i2&&void 0!==arguments[2]?arguments[2]:"children",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",r=function(e){return!(Array.isArray(e)&&e.length)};function o(e,a,s){t(e,a,s),a.forEach((function(e){if(e[i])t(e,null,s+1);else{var a=e[n];r(a)||o(e,a,s+1)}}))}e.forEach((function(e){if(e[i])t(e,null,0);else{var a=e[n];r(a)||o(e,a,0)}}))}var lr={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.rowKey,r=e.defaultExpandAll,o=e.expandRows;if(r)this.states.expandRows=n.slice();else if(i){var a=Qi(o,i);this.states.expandRows=n.reduce((function(e,t){var n=Ji(t,i),r=a[n];return r&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var n=ar(this.states.expandRows,e,t);n&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,n=t.data,i=t.rowKey,r=Qi(n,i);this.states.expandRows=e.reduce((function(e,t){var n=r[t];return n&&e.push(n.row),e}),[])},isRowExpanded:function(e){var t=this.states,n=t.expandRows,i=void 0===n?[]:n,r=t.rowKey;if(r){var o=Qi(i,r);return!!o[Ji(e,r)]}return-1!==i.indexOf(e)}}},cr={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,n=t.data,i=void 0===n?[]:n,r=t.rowKey,o=null;r&&(o=Object(b["arrayFind"])(i,(function(t){return Ji(t,r)===e}))),t.currentRow=o},updateCurrentRow:function(e){var t=this.states,n=this.table,i=t.currentRow;if(e&&e!==i)return t.currentRow=e,void n.$emit("current-change",e,i);!e&&i&&(t.currentRow=null,n.$emit("current-change",null,i))},updateCurrentRowData:function(){var e=this.states,t=this.table,n=e.rowKey,i=e._currentRowKey,r=e.data||[],o=e.currentRow;if(-1===r.indexOf(o)&&o){if(n){var a=Ji(o,n);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,o)}else i&&(this.setCurrentRowByKey(i),this.restoreCurrentRowKey())}}},ur=Object.assign||function(e){for(var t=1;t0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var n=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(n).concat(e.rightFixedColumns);var i=fr(n),r=fr(e.fixedColumns),o=fr(e.rightFixedColumns);e.leafColumnsLength=i.length,e.fixedLeafColumnsLength=r.length,e.rightFixedLeafColumnsLength=o.length,e.columns=[].concat(r).concat(i).concat(o),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,n=void 0===t?[]:t;return n.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,n=e.rowKey,i=e.selection,r=void 0;if(n){r=[];var o=Qi(i,n),a=Qi(t,n);for(var s in o)o.hasOwnProperty(s)&&!a[s]&&r.push(o[s].row)}else r=i.filter((function(e){return-1===t.indexOf(e)}));if(r.length){var l=i.filter((function(e){return-1===r.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=ar(this.states.selection,e,t);if(i){var r=(this.states.selection||[]).slice();n&&this.table.$emit("select",r,e),this.table.$emit("selection-change",r)}},_toggleAllSelection:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.selection,r=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||i.length);e.isAllSelected=r;var o=!1;n.forEach((function(t,n){e.selectable?e.selectable.call(null,t,n)&&ar(i,t,r)&&(o=!0):ar(i,t,r)&&(o=!0)})),o&&this.table.$emit("selection-change",i?i.slice():[]),this.table.$emit("select-all",i)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.data,r=Qi(t,n);i.forEach((function(e){var i=Ji(e,n),o=r[i];o&&(t[o.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.selectable,r=e.data||[];if(0!==r.length){var o=void 0;n&&(o=Qi(t,n));for(var a=function(e){return o?!!o[Ji(e,n)]:-1!==t.indexOf(e)},s=!0,l=0,c=0,u=r.length;c1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var n=new mr;return n.table=e,n.toggleAllSelection=F()(10,n._toggleAllSelection),Object.keys(t).forEach((function(e){n.states[e]=t[e]})),n}function gr(e){var t={};return Object.keys(e).forEach((function(n){var i=e[n],r=void 0;"string"===typeof i?r=function(){return this.store.states[i]}:"function"===typeof i?r=function(){return i.call(this,this.store.states)}:console.error("invalid value type"),r&&(t[n]=r)})),t}var br=n(29),yr=n.n(br);function _r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var xr=function(){function e(t){for(var n in _r(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=yr()(),t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var n=t.querySelector(".el-table__body"),i=this.scrollY,r=n.offsetHeight>this.bodyHeight;return this.scrollY=r,i!==r}return!1},e.prototype.setHeight=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!Wi.a.prototype.$isServer){var i=this.table.$el;if(e=rr(e),this.height=e,!i&&(e||0===e))return Wi.a.nextTick((function(){return t.setHeight(e,n)}));"number"===typeof e?(i.style[n]=e+"px",this.updateElsHeight()):"string"===typeof e&&(i.style[n]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return Wi.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,n=t.headerWrapper,i=t.appendWrapper,r=t.footerWrapper;if(this.appendHeight=i?i.offsetHeight:0,!this.showHeader||n){var o=n.querySelector(".el-table__header tr"),a=this.headerDisplayNone(o),s=this.headerHeight=this.showHeader?n.offsetHeight:0;if(this.showHeader&&!a&&n.offsetWidth>0&&(this.table.columns||[]).length>0&&s<2)return Wi.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,c=this.footerHeight=r?r.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-s-c+(r?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var u=!this.table.data||0===this.table.data.length;this.viewportHeight=this.scrollX?l-(u?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!Wi.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,n=0,i=this.getFlattenColumns(),r=i.filter((function(e){return"number"!==typeof e.width}));if(i.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),r.length>0&&e){i.forEach((function(e){n+=e.width||e.minWidth||80}));var o=this.scrollY?this.gutterWidth:0;if(n<=t-o){this.scrollX=!1;var a=t-o-n;if(1===r.length)r[0].realWidth=(r[0].minWidth||80)+a;else{var s=r.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/s,c=0;r.forEach((function(e,t){if(0!==t){var n=Math.floor((e.minWidth||80)*l);c+=n,e.realWidth=(e.minWidth||80)+n}})),r[0].realWidth=(r[0].minWidth||80)+a-c}}else this.scrollX=!0,r.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(n,t),this.table.resizeState.width=this.bodyWidth}else i.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,n+=e.realWidth})),this.scrollX=n>t,this.bodyWidth=n;var u=this.store.states.fixedColumns;if(u.length>0){var d=0;u.forEach((function(e){d+=e.realWidth||e.width})),this.fixedWidth=d}var h=this.store.states.rightFixedColumns;if(h.length>0){var f=0;h.forEach((function(e){f+=e.realWidth||e.width})),this.rightFixedWidth=f}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,n=this.observers;n.forEach((function(n){switch(e){case"columns":n.onColumnsChange(t);break;case"scrollable":n.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),wr=xr,Cr={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(){var e=this.$el.querySelectorAll("colgroup > col");if(e.length){var t=this.tableLayout.getFlattenColumns(),n={};t.forEach((function(e){n[e.id]=e}));for(var i=0,r=e.length;i col[name=gutter]"),n=0,i=t.length;n=this.leftFixedLeafCount:"right"===this.fixed?e=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,n,i){var r=1,o=1,a=this.table.spanMethod;if("function"===typeof a){var s=a({row:e,column:t,rowIndex:n,columnIndex:i});Array.isArray(s)?(r=s[0],o=s[1]):"object"===("undefined"===typeof s?"undefined":kr(s))&&(r=s.rowspan,o=s.colspan)}return{rowspan:r,colspan:o}},getRowStyle:function(e,t){var n=this.table.rowStyle;return"function"===typeof n?n.call(null,{row:e,rowIndex:t}):n||null},getRowClass:function(e,t){var n=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&n.push("current-row"),this.stripe&&t%2===1&&n.push("el-table__row--striped");var i=this.table.rowClassName;return"string"===typeof i?n.push(i):"function"===typeof i&&n.push(i.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&n.push("expanded"),n},getCellStyle:function(e,t,n,i){var r=this.table.cellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getCellClass:function(e,t,n,i){var r=[i.id,i.align,i.className];this.isColumnHidden(t)&&r.push("is-hidden");var o=this.table.cellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},getColspanRealWidth:function(e,t,n){if(t<1)return e[n].realWidth;var i=e.map((function(e){var t=e.realWidth;return t})).slice(n,n+t);return i.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var n=this.table,i=Ui(e);if(i){var r=Zi(n,i),o=n.hoverState={cell:i,column:r,row:t};n.$emit("cell-mouse-enter",o.row,o.column,o.cell,e)}var a=e.target.querySelector(".cell");if(Object(Le["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var s=document.createRange();s.setStart(a,0),s.setEnd(a,a.childNodes.length);var l=s.getBoundingClientRect().width,c=(parseInt(Object(Le["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(Le["getStyle"])(a,"paddingRight"),10)||0);if((l+c>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var u=this.$refs.tooltip;this.tooltipContent=i.innerText||i.textContent,u.referenceElm=i,u.$refs.popper&&(u.$refs.popper.style.display="none"),u.doDestroy(),u.setExpectedState(!0),this.activateTooltip(u)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var n=Ui(e);if(n){var i=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",i.row,i.column,i.cell,e)}},handleMouseEnter:F()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:F()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,n){var i=this.table,r=Ui(e),o=void 0;r&&(o=Zi(i,r),o&&i.$emit("cell-"+n,t,o,r,e)),i.$emit("row-"+n,t,o,e)},rowRender:function(e,t,n){var i=this,r=this.$createElement,o=this.treeIndent,a=this.columns,s=this.firstDefaultColumnIndex,l=a.map((function(e,t){return i.isColumnHidden(t)})),c=this.getRowClass(e,t),u=!0;return n&&(c.push("el-table__row--level-"+n.level),u=n.display),r("tr",{directives:[{name:"show",value:u}],style:this.getRowStyle(e,t),class:c,key:this.getKeyOfRow(e,t),on:{dblclick:function(t){return i.handleDoubleClick(t,e)},click:function(t){return i.handleClick(t,e)},contextmenu:function(t){return i.handleContextMenu(t,e)},mouseenter:function(e){return i.handleMouseEnter(t)},mouseleave:this.handleMouseLeave}},[a.map((function(c,u){var d=i.getSpan(e,c,t,u),h=d.rowspan,f=d.colspan;if(!h||!f)return null;var p=Sr({},c);p.realWidth=i.getColspanRealWidth(a,f,u);var m={store:i.store,_self:i.context||i.table.$vnode.context,column:p,row:e,$index:t};return u===s&&n&&(m.treeNode={indent:n.level*o,level:n.level},"boolean"===typeof n.expanded&&(m.treeNode.expanded=n.expanded,"loading"in n&&(m.treeNode.loading=n.loading),"noLazyChildren"in n&&(m.treeNode.noLazyChildren=n.noLazyChildren))),r("td",{style:i.getCellStyle(t,u,e,c),class:i.getCellClass(t,u,e,c),attrs:{rowspan:h,colspan:f},on:{mouseenter:function(t){return i.handleCellMouseEnter(t,e)},mouseleave:i.handleCellMouseLeave}},[c.renderCell.call(i._renderProxy,i.$createElement,m,l[u])])}))])},wrappedRowRender:function(e,t){var n=this,i=this.$createElement,r=this.store,o=r.isRowExpanded,a=r.assertRowKey,s=r.states,l=s.treeData,c=s.lazyTreeNodeMap,u=s.childrenColumnName,d=s.rowKey;if(this.hasExpandColumn&&o(e)){var h=this.table.renderExpanded,f=this.rowRender(e,t);return h?[[f,i("tr",{key:"expanded-row__"+f.key},[i("td",{attrs:{colspan:this.columnsCount},class:"el-table__expanded-cell"},[h(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),f)}if(Object.keys(l).length){a();var p=Ji(e,d),m=l[p],v=null;m&&(v={expanded:m.expanded,level:m.level,display:!0},"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(v.noLazyChildren=!(m.children&&m.children.length)),v.loading=m.loading));var g=[this.rowRender(e,t,v)];if(m){var b=0,y=function e(i,r){i&&i.length&&r&&i.forEach((function(i){var o={display:r.display&&r.expanded,level:r.level+1},a=Ji(i,d);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(m=Sr({},l[a]),m&&(o.expanded=m.expanded,m.level=m.level||o.level,m.display=!(!m.expanded||!o.display),"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(o.noLazyChildren=!(m.children&&m.children.length)),o.loading=m.loading)),b++,g.push(n.rowRender(i,t+b,o)),m){var s=c[a]||i[u];e(s,m)}}))};m.display=!0;var _=c[p]||e[u];y(_,m)}return g}return this.rowRender(e,t)}}},$r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("div",{staticClass:"el-table-filter__content"},[n("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[n("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return n("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),n("div",{staticClass:"el-table-filter__bottom"},[n("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),n("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("ul",{staticClass:"el-table-filter__list"},[n("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return n("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(n){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},Dr=[];$r._withStripped=!0;var Er=[];!Wi.a.prototype.$isServer&&document.addEventListener("click",(function(e){Er.forEach((function(t){var n=e.target;t&&t.$el&&(n===t.$el||t.$el.contains(n)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var Tr={open:function(e){e&&Er.push(e)},close:function(e){var t=Er.indexOf(e);-1!==t&&Er.splice(e,1)}},Pr=n(30),Mr=n.n(Pr),Ir={name:"ElTableFilterPanel",mixins:[H.a,g.a],directives:{Clickoutside:V.a},components:{ElCheckbox:Ai.a,ElCheckboxGroup:Mr.a,ElScrollbar:q.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?Tr.open(e):Tr.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)1;return r&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":r,"has-gutter":this.hasGutter}]},[this._l(i,(function(n,i){return e("tr",{style:t.getHeaderRowStyle(i),class:t.getHeaderRowClass(i)},[n.map((function(r,o){return e("th",{attrs:{colspan:r.colSpan,rowspan:r.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,r)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,r)},click:function(e){return t.handleHeaderClick(e,r)},contextmenu:function(e){return t.handleHeaderContextMenu(e,r)}},style:t.getHeaderCellStyle(i,o,n,r),class:t.getHeaderCellClass(i,o,n,r),key:r.id},[e("div",{class:["cell",r.filteredValue&&r.filteredValue.length>0?"highlight":"",r.labelClassName]},[r.renderHeader?r.renderHeader.call(t._renderProxy,e,{column:r,$index:o,store:t.store,_self:t.$parent.$vnode.context}):r.label,r.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,r)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,r,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,r,"descending")}}})]):"",r.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,r)}}},[e("i",{class:["el-icon-arrow-down",r.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:Ai.a},computed:Fr({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},gr({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,n=t.prop,i=t.order,r=!0;e.store.commit("sort",{prop:n,order:i,init:r})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var n=0,i=0;i=this.leftFixedLeafCount:"right"===this.fixed?n=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],n=this.table.headerRowClassName;return"string"===typeof n?t.push(n):"function"===typeof n&&t.push(n.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,n,i){var r=this.table.headerCellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getHeaderCellClass:function(e,t,n,i){var r=[i.id,i.order,i.headerAlign,i.className,i.labelClassName];0===e&&this.isCellHidden(t,n)&&r.push("is-hidden"),i.children||r.push("is-leaf"),i.sortable&&r.push("is-sortable");var o=this.table.headerCellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},toggleAllSelection:function(e){e.stopPropagation(),this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var n=e.target,i="TH"===n.tagName?n:n.parentNode;if(!Object(Le["hasClass"])(i,"noclick")){i=i.querySelector(".el-table__column-filter-trigger")||i;var r=this.$parent,o=this.filterPanels[t.id];o&&t.filterOpened?o.showPopper=!1:(o||(o=new Wi.a(Ar),this.filterPanels[t.id]=o,t.filterPlacement&&(o.placement=t.filterPlacement),o.table=r,o.cell=i,o.column=t,!this.$isServer&&o.$mount(document.createElement("div"))),setTimeout((function(){o.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var n=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var i=this.$parent,r=i.$el,o=r.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),s=a.getBoundingClientRect(),l=s.left-o+30;Object(Le["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:s.right-o,startColumnLeft:s.left-o,tableLeft:o};var c=i.$refs.resizeProxy;c.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var u=function(e){var t=e.clientX-n.dragState.startMouseLeft,i=n.dragState.startLeft+t;c.style.left=Math.max(l,i)+"px"},d=function r(){if(n.dragging){var o=n.dragState,s=o.startColumnLeft,l=o.startLeft,d=parseInt(c.style.left,10),h=d-s;t.width=t.realWidth=h,i.$emit("header-dragend",t.width,l-s,t,e),n.store.scheduleLayout(),document.body.style.cursor="",n.dragging=!1,n.draggingColumn=null,n.dragState={},i.resizeProxyVisible=!1}document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",r),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(Le["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",u),document.addEventListener("mouseup",d)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var n=e.target;while(n&&"TH"!==n.tagName)n=n.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var i=n.getBoundingClientRect(),r=document.body.style;i.width>12&&i.right-e.pageX<8?(r.cursor="col-resize",Object(Le["hasClass"])(n,"is-sortable")&&(n.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(r.cursor="",Object(Le["hasClass"])(n,"is-sortable")&&(n.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,n=e.sortOrders;if(""===t)return n[0];var i=n.indexOf(t||null);return n[i>n.length-2?0:i+1]},handleSortClick:function(e,t,n){e.stopPropagation();var i=t.order===n?null:n||this.toggleOrder(t),r=e.target;while(r&&"TH"!==r.tagName)r=r.parentNode;if(r&&"TH"===r.tagName&&Object(Le["hasClass"])(r,"noclick"))Object(Le["removeClass"])(r,"noclick");else if(t.sortable){var o=this.store.states,a=o.sortProp,s=void 0,l=o.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),o.sortingColumn=t,a=t.property),s=t.order=i||null,o.sortProp=a,o.sortOrder=s,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},Br=Object.assign||function(e){for(var t=1;t=this.leftFixedLeafCount;if("right"===this.fixed){for(var i=0,r=0;r=this.columnsCount-this.rightFixedCount)},getRowClasses:function(e,t){var n=[e.id,e.align,e.labelClassName];return e.className&&n.push(e.className),this.isCellHidden(t,this.columns,e)&&n.push("is-hidden"),e.children||n.push("is-leaf"),n}}},Hr=Object.assign||function(e){for(var t=1;t0){var i=n.scrollTop;t.pixelY<0&&0!==i&&e.preventDefault(),t.pixelY>0&&n.scrollHeight-n.clientHeight>i&&e.preventDefault(),n.scrollTop+=Math.ceil(t.pixelY/5)}else n.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var n=t.pixelX,i=t.pixelY;Math.abs(n)>=Math.abs(i)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:Object(Fi["throttle"])(20,(function(){var e=this.bodyWrapper,t=e.scrollLeft,n=e.scrollTop,i=e.offsetWidth,r=e.scrollWidth,o=this.$refs,a=o.headerWrapper,s=o.footerWrapper,l=o.fixedBodyWrapper,c=o.rightFixedBodyWrapper;a&&(a.scrollLeft=t),s&&(s.scrollLeft=t),l&&(l.scrollTop=n),c&&(c.scrollTop=n);var u=r-i-1;this.scrollPosition=t>=u?"right":0===t?"left":"middle"})),bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ei["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ei["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,n=this.resizeState,i=n.width,r=n.height,o=t.offsetWidth;i!==o&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&r!==a&&(e=!0),e&&(this.resizeState.width=o,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:Hr({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,n=e.scrollY,i=e.gutterWidth;return t?t-(n?i:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,n=void 0===t?0:t,i=e.bodyHeight,r=e.footerHeight,o=void 0===r?0:r;if(this.height)return{height:i?i+"px":""};if(this.maxHeight){var a=rr(this.maxHeight);if("number"===typeof a)return{"max-height":a-o-(this.showHeader?n:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=rr(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},gr({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+Wr++,this.debouncedUpdateLayout=Object(Fi["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,n=void 0===t?"hasChildren":t,i=e.children,r=void 0===i?"children":i;this.store=vr(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:n,childrenColumnName:r});var o=new wr({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:o,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},Ur=qr,Yr=s(Ur,Ii,Ni,!1,null,null,null);Yr.options.__file="packages/table/src/table.vue";var Kr=Yr.exports;Kr.install=function(e){e.component(Kr.name,Kr)};var Gr=Kr,Xr={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:"",className:"el-table-column--selection"},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Zr={selection:{renderHeader:function(e,t){var n=t.store;return e("el-checkbox",{attrs:{disabled:n.states.data&&0===n.states.data.length,indeterminate:n.states.selection.length>0&&!this.isAllSelected,value:this.isAllSelected},nativeOn:{click:this.toggleAllSelection}})},renderCell:function(e,t){var n=t.row,i=t.column,r=t.store,o=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:r.isSelected(n),disabled:!!i.selectable&&!i.selectable.call(null,n,o)},on:{input:function(){r.commit("rowSelectedChanged",n)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var n=t.column;return n.label||"#"},renderCell:function(e,t){var n=t.$index,i=t.column,r=n+1,o=i.index;return"number"===typeof o?r=n+o:"function"===typeof o&&(r=o(n)),e("div",[r])},sortable:!1},expand:{renderHeader:function(e,t){var n=t.column;return n.label||""},renderCell:function(e,t){var n=t.row,i=t.store,r=["el-table__expand-icon"];i.states.expandRows.indexOf(n)>-1&&r.push("el-table__expand-icon--expanded");var o=function(e){e.stopPropagation(),i.toggleRowExpansion(n)};return e("div",{class:r,on:{click:o}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function Jr(e,t){var n=t.row,i=t.column,r=t.$index,o=i.property,a=o&&Object(b["getPropByPath"])(n,o).v;return i&&i.formatter?i.formatter(n,i,a,r):a}function Qr(e,t){var n=t.row,i=t.treeNode,r=t.store;if(!i)return null;var o=[],a=function(e){e.stopPropagation(),r.loadOrToggle(n)};if(i.indent&&o.push(e("span",{class:"el-table__indent",style:{"padding-left":i.indent+"px"}})),"boolean"!==typeof i.expanded||i.noLazyChildren)o.push(e("span",{class:"el-table__placeholder"}));else{var s=["el-table__expand-icon",i.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];i.loading&&(l=["el-icon-loading"]),o.push(e("div",{class:s,on:{click:a}},[e("i",{class:l})]))}return o}var eo=Object.assign||function(e){for(var t=1;t-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return nr(this.width)},realMinWidth:function(){return ir(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i3&&void 0!==arguments[3]?arguments[3]:"-";if(!e)return null;var r=(mo[n]||mo["default"]).parser,o=t||lo[n];return r(e,o,i)},bo=function(e,t,n){if(!e)return null;var i=(mo[n]||mo["default"]).formatter,r=t||lo[n];return i(e,r)},yo=function(e,t){var n=function(e,t){var n=e instanceof Date,i=t instanceof Date;return n&&i?e.getTime()===t.getTime():!n&&!i&&e===t},i=e instanceof Array,r=t instanceof Array;return i&&r?e.length===t.length&&e.every((function(e,i){return n(e,t[i])})):!i&&!r&&n(e,t)},_o=function(e){return"string"===typeof e||e instanceof String},xo=function(e){return null===e||void 0===e||_o(e)||Array.isArray(e)&&2===e.length&&e.every(_o)},wo={mixins:[D.a,so],inject:{elForm:{default:""},elFormItem:{default:""}},props:{size:String,format:String,valueFormat:String,readonly:Boolean,placeholder:String,startPlaceholder:String,endPlaceholder:String,prefixIcon:String,clearIcon:{type:String,default:"el-icon-circle-close"},name:{default:"",validator:xo},disabled:Boolean,clearable:{type:Boolean,default:!0},id:{default:"",validator:xo},popperClass:String,editable:{type:Boolean,default:!0},align:{type:String,default:"left"},value:{},defaultValue:{},defaultTime:{},rangeSeparator:{default:"-"},pickerOptions:{},unlinkPanels:Boolean,validateEvent:{type:Boolean,default:!0}},components:{ElInput:m.a},directives:{Clickoutside:V.a},data:function(){return{pickerVisible:!1,showClose:!1,userInput:null,valueOnOpen:null,unwatchPickerOptions:null}},watch:{pickerVisible:function(e){this.readonly||this.pickerDisabled||(e?(this.showPicker(),this.valueOnOpen=Array.isArray(this.value)?[].concat(this.value):this.value):(this.hidePicker(),this.emitChange(this.value),this.userInput=null,this.validateEvent&&this.dispatch("ElFormItem","el.form.blur"),this.$emit("blur",this),this.blur()))},parsedValue:{immediate:!0,handler:function(e){this.picker&&(this.picker.value=e)}},defaultValue:function(e){this.picker&&(this.picker.defaultValue=e)},value:function(e,t){yo(e,t)||this.pickerVisible||!this.validateEvent||this.dispatch("ElFormItem","el.form.change",e)}},computed:{ranged:function(){return this.type.indexOf("range")>-1},reference:function(){var e=this.$refs.reference;return e.$el||e},refInput:function(){return this.reference?[].slice.call(this.reference.querySelectorAll("input")):[]},valueIsEmpty:function(){var e=this.value;if(Array.isArray(e)){for(var t=0,n=e.length;t0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.userInput=null,e.pickerVisible=e.picker.visible=n,e.emitInput(t),e.picker.resetView&&e.picker.resetView()})),this.picker.$on("select-range",(function(t,n,i){0!==e.refInput.length&&(i&&"min"!==i?"max"===i&&(e.refInput[1].setSelectionRange(t,n),e.refInput[1].focus()):(e.refInput[0].setSelectionRange(t,n),e.refInput[0].focus()))}))},unmountPicker:function(){this.picker&&(this.picker.$destroy(),this.picker.$off(),"function"===typeof this.unwatchPickerOptions&&this.unwatchPickerOptions(),this.picker.$el.parentNode.removeChild(this.picker.$el))},emitChange:function(e){yo(e,this.valueOnOpen)||(this.$emit("change",e),this.valueOnOpen=e,this.validateEvent&&this.dispatch("ElFormItem","el.form.change",e))},emitInput:function(e){var t=this.formatToValue(e);yo(this.value,t)||this.$emit("input",t)},isValidValue:function(e){return this.picker||this.mountPicker(),!this.picker.isValidValue||e&&this.picker.isValidValue(e)}}},Co=wo,ko=s(Co,ro,oo,!1,null,null,null);ko.options.__file="packages/date-picker/src/picker.vue";var So=ko.exports,Oo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-enter":e.handleEnter,"after-leave":e.handleLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-picker__time-header"},[n("span",{staticClass:"el-date-picker__editor-wrap"},[n("el-input",{attrs:{placeholder:e.t("el.datepicker.selectDate"),value:e.visibleDate,size:"small"},on:{input:function(t){return e.userInputDate=t},change:e.handleVisibleDateChange}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleTimePickClose,expression:"handleTimePickClose"}],staticClass:"el-date-picker__editor-wrap"},[n("el-input",{ref:"input",attrs:{placeholder:e.t("el.datepicker.selectTime"),value:e.visibleTime,size:"small"},on:{focus:function(t){e.timePickerVisible=!0},input:function(t){return e.userInputTime=t},change:e.handleVisibleTimeChange}}),n("time-picker",{ref:"timepicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.timePickerVisible},on:{pick:e.handleTimePick,mounted:e.proxyTimePickerDataProperties}})],1)]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:"time"!==e.currentView,expression:"currentView !== 'time'"}],staticClass:"el-date-picker__header",class:{"el-date-picker__header--bordered":"year"===e.currentView||"month"===e.currentView}},[n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevYear")},on:{click:e.prevYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevMonth")},on:{click:e.prevMonth}}),n("span",{staticClass:"el-date-picker__header-label",attrs:{role:"button"},on:{click:e.showYearPicker}},[e._v(e._s(e.yearLabel))]),n("span",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-date-picker__header-label",class:{active:"month"===e.currentView},attrs:{role:"button"},on:{click:e.showMonthPicker}},[e._v(e._s(e.t("el.datepicker.month"+(e.month+1))))]),n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextYear")},on:{click:e.nextYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextMonth")},on:{click:e.nextMonth}})]),n("div",{staticClass:"el-picker-panel__content"},[n("date-table",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],attrs:{"selection-mode":e.selectionMode,"first-day-of-week":e.firstDayOfWeek,value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"cell-class-name":e.cellClassName,"disabled-date":e.disabledDate},on:{pick:e.handleDatePick}}),n("year-table",{directives:[{name:"show",rawName:"v-show",value:"year"===e.currentView,expression:"currentView === 'year'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleYearPick}}),n("month-table",{directives:[{name:"show",rawName:"v-show",value:"month"===e.currentView,expression:"currentView === 'month'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleMonthPick}})],1)])],2),n("div",{directives:[{name:"show",rawName:"v-show",value:e.footerVisible&&"date"===e.currentView,expression:"footerVisible && currentView === 'date'"}],staticClass:"el-picker-panel__footer"},[n("el-button",{directives:[{name:"show",rawName:"v-show",value:"dates"!==e.selectionMode,expression:"selectionMode !== 'dates'"}],staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.changeToNow}},[e._v("\n "+e._s(e.t("el.datepicker.now"))+"\n ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini"},on:{click:e.confirm}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1)])])},$o=[];Oo._withStripped=!0;var Do=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-panel__content",class:{"has-seconds":e.showSeconds}},[n("time-spinner",{ref:"spinner",attrs:{"arrow-control":e.useArrow,"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,date:e.date},on:{change:e.handleChange,"select-range":e.setSelectionRange}})],1),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:e.handleCancel}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn",class:{confirm:!e.disabled},attrs:{type:"button"},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Eo=[];Do._withStripped=!0;var To=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-time-spinner",class:{"has-seconds":e.showSeconds}},[e.arrowControl?e._e():[n("el-scrollbar",{ref:"hours",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("hours")},mousemove:function(t){e.adjustCurrentSpinner("hours")}}},e._l(e.hoursList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.hours,disabled:t},on:{click:function(n){e.handleClick("hours",{value:i,disabled:t})}}},[e._v(e._s(("0"+(e.amPmMode?i%12||12:i)).slice(-2))+e._s(e.amPm(i)))])})),0),n("el-scrollbar",{ref:"minutes",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("minutes")},mousemove:function(t){e.adjustCurrentSpinner("minutes")}}},e._l(e.minutesList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.minutes,disabled:!t},on:{click:function(t){e.handleClick("minutes",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0),n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.showSeconds,expression:"showSeconds"}],ref:"seconds",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("seconds")},mousemove:function(t){e.adjustCurrentSpinner("seconds")}}},e._l(60,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.seconds},on:{click:function(t){e.handleClick("seconds",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0)],e.arrowControl?[n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("hours")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"hours",staticClass:"el-time-spinner__list"},e._l(e.arrowHourList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.hours,disabled:e.hoursList[t]}},[e._v(e._s(void 0===t?"":("0"+(e.amPmMode?t%12||12:t)).slice(-2)+e.amPm(t)))])})),0)]),n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("minutes")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"minutes",staticClass:"el-time-spinner__list"},e._l(e.arrowMinuteList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.minutes}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]),e.showSeconds?n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("seconds")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"seconds",staticClass:"el-time-spinner__list"},e._l(e.arrowSecondList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.seconds}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]):e._e()]:e._e()],2)},Po=[];To._withStripped=!0;var Mo={components:{ElScrollbar:q.a},directives:{repeatClick:Nt},props:{date:{},defaultValue:{},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""}},computed:{hours:function(){return this.date.getHours()},minutes:function(){return this.date.getMinutes()},seconds:function(){return this.date.getSeconds()},hoursList:function(){return Object(ao["getRangeHours"])(this.selectableRange)},minutesList:function(){return Object(ao["getRangeMinutes"])(this.selectableRange,this.hours)},arrowHourList:function(){var e=this.hours;return[e>0?e-1:void 0,e,e<23?e+1:void 0]},arrowMinuteList:function(){var e=this.minutes;return[e>0?e-1:void 0,e,e<59?e+1:void 0]},arrowSecondList:function(){var e=this.seconds;return[e>0?e-1:void 0,e,e<59?e+1:void 0]}},data:function(){return{selectableRange:[],currentScrollbar:null}},mounted:function(){var e=this;this.$nextTick((function(){!e.arrowControl&&e.bindScrollEvent()}))},methods:{increase:function(){this.scrollDown(1)},decrease:function(){this.scrollDown(-1)},modifyDateField:function(e,t){switch(e){case"hours":this.$emit("change",Object(ao["modifyTime"])(this.date,t,this.minutes,this.seconds));break;case"minutes":this.$emit("change",Object(ao["modifyTime"])(this.date,this.hours,t,this.seconds));break;case"seconds":this.$emit("change",Object(ao["modifyTime"])(this.date,this.hours,this.minutes,t));break}},handleClick:function(e,t){var n=t.value,i=t.disabled;i||(this.modifyDateField(e,n),this.emitSelectRange(e),this.adjustSpinner(e,n))},emitSelectRange:function(e){"hours"===e?this.$emit("select-range",0,2):"minutes"===e?this.$emit("select-range",3,5):"seconds"===e&&this.$emit("select-range",6,8),this.currentScrollbar=e},bindScrollEvent:function(){var e=this,t=function(t){e.$refs[t].wrap.onscroll=function(n){e.handleScroll(t,n)}};t("hours"),t("minutes"),t("seconds")},handleScroll:function(e){var t=Math.min(Math.round((this.$refs[e].wrap.scrollTop-(.5*this.scrollBarHeight(e)-10)/this.typeItemHeight(e)+3)/this.typeItemHeight(e)),"hours"===e?23:59);this.modifyDateField(e,t)},adjustSpinners:function(){this.adjustSpinner("hours",this.hours),this.adjustSpinner("minutes",this.minutes),this.adjustSpinner("seconds",this.seconds)},adjustCurrentSpinner:function(e){this.adjustSpinner(e,this[e])},adjustSpinner:function(e,t){if(!this.arrowControl){var n=this.$refs[e].wrap;n&&(n.scrollTop=Math.max(0,t*this.typeItemHeight(e)))}},scrollDown:function(e){this.currentScrollbar||this.emitSelectRange("hours");var t=this.currentScrollbar,n=this.hoursList,i=this[t];if("hours"===this.currentScrollbar){var r=Math.abs(e);e=e>0?1:-1;var o=n.length;while(o--&&r)i=(i+e+n.length)%n.length,n[i]||r--;if(n[i])return}else i=(i+e+60)%60;this.modifyDateField(t,i),this.adjustSpinner(t,i)},amPm:function(e){var t="a"===this.amPmMode.toLowerCase();if(!t)return"";var n="A"===this.amPmMode,i=e<12?" am":" pm";return n&&(i=i.toUpperCase()),i},typeItemHeight:function(e){return this.$refs[e].$el.querySelector("li").offsetHeight},scrollBarHeight:function(e){return this.$refs[e].$el.offsetHeight}}},Io=Mo,No=s(Io,To,Po,!1,null,null,null);No.options.__file="packages/date-picker/src/basic/time-spinner.vue";var jo=No.exports,Ao={mixins:[g.a],components:{TimeSpinner:jo},props:{visible:Boolean,timeArrowControl:Boolean},watch:{visible:function(e){var t=this;e?(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.spinner.emitSelectRange("hours")}))):this.needInitAdjust=!0},value:function(e){var t=this,n=void 0;e instanceof Date?n=Object(ao["limitTimeRange"])(e,this.selectableRange,this.format):e||(n=this.defaultValue?new Date(this.defaultValue):new Date),this.date=n,this.visible&&this.needInitAdjust&&(this.$nextTick((function(e){return t.adjustSpinners()})),this.needInitAdjust=!1)},selectableRange:function(e){this.$refs.spinner.selectableRange=e},defaultValue:function(e){Object(ao["isDate"])(this.value)||(this.date=e?new Date(e):new Date)}},data:function(){return{popperClass:"",format:"HH:mm:ss",value:"",defaultValue:null,date:new Date,oldValue:new Date,selectableRange:[],selectionRange:[0,2],disabled:!1,arrowControl:!1,needInitAdjust:!0}},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},useArrow:function(){return this.arrowControl||this.timeArrowControl||!1},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},methods:{handleCancel:function(){this.$emit("pick",this.oldValue,!1)},handleChange:function(e){this.visible&&(this.date=Object(ao["clearMilliseconds"])(e),this.isValidValue(this.date)&&this.$emit("pick",this.date,!0))},setSelectionRange:function(e,t){this.$emit("select-range",e,t),this.selectionRange=[e,t]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(!t){var n=Object(ao["clearMilliseconds"])(Object(ao["limitTimeRange"])(this.date,this.selectableRange,this.format));this.$emit("pick",n,e,t)}},handleKeydown:function(e){var t=e.keyCode,n={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var i=n[t];return this.changeSelectionRange(i),void e.preventDefault()}if(38===t||40===t){var r=n[t];return this.$refs.spinner.scrollDown(r),void e.preventDefault()}},isValidValue:function(e){return Object(ao["timeWithinRange"])(e,this.selectableRange,this.format)},adjustSpinners:function(){return this.$refs.spinner.adjustSpinners()},changeSelectionRange:function(e){var t=[0,3].concat(this.showSeconds?[6]:[]),n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length;this.$refs.spinner.emitSelectRange(n[r])}},mounted:function(){var e=this;this.$nextTick((function(){return e.handleConfirm(!0,!0)})),this.$emit("mounted")}},Fo=Ao,Lo=s(Fo,Do,Eo,!1,null,null,null);Lo.options.__file="packages/date-picker/src/panel/time.vue";var Vo=Lo.exports,zo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-year-table",on:{click:e.handleYearTableClick}},[n("tbody",[n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+0)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+1)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+1))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+2)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+2))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+3)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+3))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+4)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+4))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+5)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+5))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+6)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+6))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+7)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+7))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+8)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+8))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+9)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+9))])]),n("td"),n("td")])])])},Bo=[];zo._withStripped=!0;var Ro=function(e){var t=Object(ao["getDayCountOfYear"])(e),n=new Date(e,0,1);return Object(ao["range"])(t).map((function(e){return Object(ao["nextDate"])(n,e)}))},Ho={props:{disabledDate:{},value:{},defaultValue:{validator:function(e){return null===e||e instanceof Date&&Object(ao["isDate"])(e)}},date:{}},computed:{startYear:function(){return 10*Math.floor(this.date.getFullYear()/10)}},methods:{getCellStyle:function(e){var t={},n=new Date;return t.disabled="function"===typeof this.disabledDate&&Ro(e).every(this.disabledDate),t.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(t){return t.getFullYear()===e}))>=0,t.today=n.getFullYear()===e,t.default=this.defaultValue&&this.defaultValue.getFullYear()===e,t},handleYearTableClick:function(e){var t=e.target;if("A"===t.tagName){if(Object(Le["hasClass"])(t.parentNode,"disabled"))return;var n=t.textContent||t.innerText;this.$emit("pick",Number(n))}}}},Wo=Ho,qo=s(Wo,zo,Bo,!1,null,null,null);qo.options.__file="packages/date-picker/src/basic/year-table.vue";var Uo=qo.exports,Yo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-month-table",on:{click:e.handleMonthTableClick,mousemove:e.handleMouseMove}},[n("tbody",e._l(e.rows,(function(t,i){return n("tr",{key:i},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellStyle(t)},[n("div",[n("a",{staticClass:"cell"},[e._v(e._s(e.t("el.datepicker.months."+e.months[t.text])))])])])})),0)})),0)])},Ko=[];Yo._withStripped=!0;var Go=function(e,t){var n=Object(ao["getDayCountOfMonth"])(e,t),i=new Date(e,t,1);return Object(ao["range"])(n).map((function(e){return Object(ao["nextDate"])(i,e)}))},Xo=function(e){return new Date(e.getFullYear(),e.getMonth())},Zo=function(e){return"number"===typeof e||"string"===typeof e?Xo(new Date(e)).getTime():e instanceof Date?Xo(e).getTime():NaN},Jo={props:{disabledDate:{},value:{},selectionMode:{default:"month"},minDate:{},maxDate:{},defaultValue:{validator:function(e){return null===e||Object(ao["isDate"])(e)||Array.isArray(e)&&e.every(ao["isDate"])}},date:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},mixins:[g.a],watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){Zo(e)!==Zo(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){Zo(e)!==Zo(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{months:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tableRows:[[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.date.getFullYear()===n.getFullYear()&&Number(e.text)===n.getMonth()},getCellStyle:function(e){var t=this,n={},i=this.date.getFullYear(),r=new Date,o=e.text,a=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[];return n.disabled="function"===typeof this.disabledDate&&Go(i,o).every(this.disabledDate),n.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(e){return e.getFullYear()===i&&e.getMonth()===o}))>=0,n.today=r.getFullYear()===i&&r.getMonth()===o,n.default=a.some((function(n){return t.cellMatchesDate(e,n)})),e.inRange&&(n["in-range"]=!0,e.start&&(n["start-date"]=!0),e.end&&(n["end-date"]=!0)),n},getMonthOfCell:function(e){var t=this.date.getFullYear();return new Date(t,e,1)},markRange:function(e,t){e=Zo(e),t=Zo(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.rows,r=0,o=i.length;r=e&&d<=t,c.start=e&&d===e,c.end=t&&d===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getMonthOfCell(4*n+i)}}))}}},handleMonthTableClick:function(e){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName&&!Object(Le["hasClass"])(t,"disabled")){var n=t.cellIndex,i=t.parentNode.rowIndex,r=4*i+n,o=this.getMonthOfCell(r);"range"===this.selectionMode?this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0):this.$emit("pick",r)}}},computed:{rows:function(){for(var e=this,t=this.tableRows,n=this.disabledDate,i=[],r=Zo(new Date),o=0;o<3;o++)for(var a=t[o],s=function(t){var s=a[t];s||(s={row:o,column:t,type:"normal",inRange:!1,start:!1,end:!1}),s.type="normal";var l=4*o+t,c=new Date(e.date.getFullYear(),l).getTime();s.inRange=c>=Zo(e.minDate)&&c<=Zo(e.maxDate),s.start=e.minDate&&c===Zo(e.minDate),s.end=e.maxDate&&c===Zo(e.maxDate);var u=c===r;u&&(s.type="today"),s.text=l;var d=new Date(c);s.disabled="function"===typeof n&&n(d),s.selected=Object(b["arrayFind"])(i,(function(e){return e.getTime()===d.getTime()})),e.$set(a,t,s)},l=0;l<4;l++)s(l);return t}}},Qo=Jo,ea=s(Qo,Yo,Ko,!1,null,null,null);ea.options.__file="packages/date-picker/src/basic/month-table.vue";var ta=ea.exports,na=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-date-table",class:{"is-week-mode":"week"===e.selectionMode},attrs:{cellspacing:"0",cellpadding:"0"},on:{click:e.handleClick,mousemove:e.handleMouseMove}},[n("tbody",[n("tr",[e.showWeekNumber?n("th",[e._v(e._s(e.t("el.datepicker.week")))]):e._e(),e._l(e.WEEKS,(function(t,i){return n("th",{key:i},[e._v(e._s(e.t("el.datepicker.weeks."+t)))])}))],2),e._l(e.rows,(function(t,i){return n("tr",{key:i,staticClass:"el-date-table__row",class:{current:e.isWeekActive(t[1])}},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellClasses(t)},[n("div",[n("span",[e._v("\n "+e._s(t.text)+"\n ")])])])})),0)}))],2)])},ia=[];na._withStripped=!0;var ra=["sun","mon","tue","wed","thu","fri","sat"],oa=function(e){return"number"===typeof e||"string"===typeof e?Object(ao["clearTime"])(new Date(e)).getTime():e instanceof Date?Object(ao["clearTime"])(e).getTime():NaN},aa=function(e,t){var n="function"===typeof t?Object(b["arrayFindIndex"])(e,t):e.indexOf(t);return n>=0?[].concat(e.slice(0,n),e.slice(n+1)):e},sa={mixins:[g.a],props:{firstDayOfWeek:{default:7,type:Number,validator:function(e){return e>=1&&e<=7}},value:{},defaultValue:{validator:function(e){return null===e||Object(ao["isDate"])(e)||Array.isArray(e)&&e.every(ao["isDate"])}},date:{},selectionMode:{default:"day"},showWeekNumber:{type:Boolean,default:!1},disabledDate:{},cellClassName:{},minDate:{},maxDate:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},computed:{offsetDay:function(){var e=this.firstDayOfWeek;return e>3?7-e:-e},WEEKS:function(){var e=this.firstDayOfWeek;return ra.concat(ra).slice(e,e+7)},year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},startDate:function(){return Object(ao["getStartDateOfMonth"])(this.year,this.month)},rows:function(){var e=this,t=new Date(this.year,this.month,1),n=Object(ao["getFirstDayOfMonth"])(t),i=Object(ao["getDayCountOfMonth"])(t.getFullYear(),t.getMonth()),r=Object(ao["getDayCountOfMonth"])(t.getFullYear(),0===t.getMonth()?11:t.getMonth()-1);n=0===n?7:n;for(var o=this.offsetDay,a=this.tableRows,s=1,l=this.startDate,c=this.disabledDate,u=this.cellClassName,d="dates"===this.selectionMode?Object(b["coerceTruthyValueToArray"])(this.value):[],h=oa(new Date),f=0;f<6;f++){var p=a[f];this.showWeekNumber&&(p[0]||(p[0]={type:"week",text:Object(ao["getWeekNumber"])(Object(ao["nextDate"])(l,7*f+1))}));for(var m=function(t){var a=p[e.showWeekNumber?t+1:t];a||(a={row:f,column:t,type:"normal",inRange:!1,start:!1,end:!1}),a.type="normal";var m=7*f+t,v=Object(ao["nextDate"])(l,m-o).getTime();a.inRange=v>=oa(e.minDate)&&v<=oa(e.maxDate),a.start=e.minDate&&v===oa(e.minDate),a.end=e.maxDate&&v===oa(e.maxDate);var g=v===h;if(g&&(a.type="today"),f>=0&&f<=1){var y=n+o<0?7+n+o:n+o;t+7*f>=y?a.text=s++:(a.text=r-(y-t%7)+1+7*f,a.type="prev-month")}else s<=i?a.text=s++:(a.text=s++-i,a.type="next-month");var _=new Date(v);a.disabled="function"===typeof c&&c(_),a.selected=Object(b["arrayFind"])(d,(function(e){return e.getTime()===_.getTime()})),a.customClass="function"===typeof u&&u(_),e.$set(p,e.showWeekNumber?t+1:t,a)},v=0;v<7;v++)m(v);if("week"===this.selectionMode){var g=this.showWeekNumber?1:0,y=this.showWeekNumber?7:6,_=this.isWeekActive(p[g+1]);p[g].inRange=_,p[g].start=_,p[y].inRange=_,p[y].end=_}}return a}},watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){oa(e)!==oa(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){oa(e)!==oa(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{tableRows:[[],[],[],[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.year===n.getFullYear()&&this.month===n.getMonth()&&Number(e.text)===n.getDate()},getCellClasses:function(e){var t=this,n=this.selectionMode,i=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[],r=[];return"normal"!==e.type&&"today"!==e.type||e.disabled?r.push(e.type):(r.push("available"),"today"===e.type&&r.push("today")),"normal"===e.type&&i.some((function(n){return t.cellMatchesDate(e,n)}))&&r.push("default"),"day"!==n||"normal"!==e.type&&"today"!==e.type||!this.cellMatchesDate(e,this.value)||r.push("current"),!e.inRange||"normal"!==e.type&&"today"!==e.type&&"week"!==this.selectionMode||(r.push("in-range"),e.start&&r.push("start-date"),e.end&&r.push("end-date")),e.disabled&&r.push("disabled"),e.selected&&r.push("selected"),e.customClass&&r.push(e.customClass),r.join(" ")},getDateOfCell:function(e,t){var n=7*e+(t-(this.showWeekNumber?1:0))-this.offsetDay;return Object(ao["nextDate"])(this.startDate,n)},isWeekActive:function(e){if("week"!==this.selectionMode)return!1;var t=new Date(this.year,this.month,1),n=t.getFullYear(),i=t.getMonth();if("prev-month"===e.type&&(t.setMonth(0===i?11:i-1),t.setFullYear(0===i?n-1:n)),"next-month"===e.type&&(t.setMonth(11===i?0:i+1),t.setFullYear(11===i?n+1:n)),t.setDate(parseInt(e.text,10)),Object(ao["isDate"])(this.value)){var r=(this.value.getDay()-this.firstDayOfWeek+7)%7-1,o=Object(ao["prevDate"])(this.value,r);return o.getTime()===t.getTime()}return!1},markRange:function(e,t){e=oa(e),t=oa(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.startDate,r=this.rows,o=0,a=r.length;o=e&&h<=t,u.start=e&&h===e,u.end=t&&h===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getDateOfCell(n,i)}}))}}},handleClick:function(e){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i="week"===this.selectionMode?1:t.cellIndex,r=this.rows[n][i];if(!r.disabled&&"week"!==r.type){var o=this.getDateOfCell(n,i);if("range"===this.selectionMode)this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0);else if("day"===this.selectionMode)this.$emit("pick",o);else if("week"===this.selectionMode){var a=Object(ao["getWeekNumber"])(o),s=o.getFullYear()+"w"+a;this.$emit("pick",{year:o.getFullYear(),week:a,value:s,date:o})}else if("dates"===this.selectionMode){var l=this.value||[],c=r.selected?aa(l,(function(e){return e.getTime()===o.getTime()})):[].concat(l,[o]);this.$emit("pick",c)}}}}}},la=sa,ca=s(la,na,ia,!1,null,null,null);ca.options.__file="packages/date-picker/src/basic/date-table.vue";var ua=ca.exports,da={mixins:[g.a],directives:{Clickoutside:V.a},watch:{showTime:function(e){var t=this;e&&this.$nextTick((function(e){var n=t.$refs.input.$el;n&&(t.pickerWidth=n.getBoundingClientRect().width+10)}))},value:function(e){"dates"===this.selectionMode&&this.value||(Object(ao["isDate"])(e)?this.date=new Date(e):this.date=this.getDefaultValue())},defaultValue:function(e){Object(ao["isDate"])(this.value)||(this.date=e?new Date(e):new Date)},timePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$refs.timepicker.adjustSpinners()}))},selectionMode:function(e){"month"===e?"year"===this.currentView&&"month"===this.currentView||(this.currentView="month"):"dates"===e&&(this.currentView="date")}},methods:{proxyTimePickerDataProperties:function(){var e=this,t=function(t){e.$refs.timepicker.format=t},n=function(t){e.$refs.timepicker.value=t},i=function(t){e.$refs.timepicker.date=t},r=function(t){e.$refs.timepicker.selectableRange=t};this.$watch("value",n),this.$watch("date",i),this.$watch("selectableRange",r),t(this.timeFormat),n(this.value),i(this.date),r(this.selectableRange)},handleClear:function(){this.date=this.getDefaultValue(),this.$emit("pick",null)},emit:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r0)||Object(ao["timeWithinRange"])(e,this.selectableRange,this.format||"HH:mm:ss")}},components:{TimePicker:Vo,YearTable:Uo,MonthTable:ta,DateTable:ua,ElInput:m.a,ElButton:ae.a},data:function(){return{popperClass:"",date:new Date,value:"",defaultValue:null,defaultTime:null,showTime:!1,selectionMode:"day",shortcuts:"",visible:!1,currentView:"date",disabledDate:"",cellClassName:"",selectableRange:[],firstDayOfWeek:7,showWeekNumber:!1,timePickerVisible:!1,format:"",arrowControl:!1,userInputDate:null,userInputTime:null}},computed:{year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},week:function(){return Object(ao["getWeekNumber"])(this.date)},monthDate:function(){return this.date.getDate()},footerVisible:function(){return this.showTime||"dates"===this.selectionMode},visibleTime:function(){return null!==this.userInputTime?this.userInputTime:Object(ao["formatDate"])(this.value||this.defaultValue,this.timeFormat)},visibleDate:function(){return null!==this.userInputDate?this.userInputDate:Object(ao["formatDate"])(this.value||this.defaultValue,this.dateFormat)},yearLabel:function(){var e=this.t("el.datepicker.year");if("year"===this.currentView){var t=10*Math.floor(this.year/10);return e?t+" "+e+" - "+(t+9)+" "+e:t+" - "+(t+9)}return this.year+" "+e},timeFormat:function(){return this.format?Object(ao["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ao["extractDateFormat"])(this.format):"yyyy-MM-dd"}}},ha=da,fa=s(ha,Oo,$o,!1,null,null,null);fa.options.__file="packages/date-picker/src/panel/date.vue";var pa=fa.exports,ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-range-picker__time-header"},[n("span",{staticClass:"el-date-range-picker__editors-wrap"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{ref:"minInput",staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startDate"),value:e.minVisibleDate},on:{input:function(t){return e.handleDateInput(t,"min")},change:function(t){return e.handleDateChange(t,"min")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMinTimeClose,expression:"handleMinTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startTime"),value:e.minVisibleTime},on:{focus:function(t){e.minTimePickerVisible=!0},input:function(t){return e.handleTimeInput(t,"min")},change:function(t){return e.handleTimeChange(t,"min")}}}),n("time-picker",{ref:"minTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.minTimePickerVisible},on:{pick:e.handleMinTimePick,mounted:function(t){e.$refs.minTimePicker.format=e.timeFormat}}})],1)]),n("span",{staticClass:"el-icon-arrow-right"}),n("span",{staticClass:"el-date-range-picker__editors-wrap is-right"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endDate"),value:e.maxVisibleDate,readonly:!e.minDate},on:{input:function(t){return e.handleDateInput(t,"max")},change:function(t){return e.handleDateChange(t,"max")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMaxTimeClose,expression:"handleMaxTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endTime"),value:e.maxVisibleTime,readonly:!e.minDate},on:{focus:function(t){e.minDate&&(e.maxTimePickerVisible=!0)},input:function(t){return e.handleTimeInput(t,"max")},change:function(t){return e.handleTimeChange(t,"max")}}}),n("time-picker",{ref:"maxTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.maxTimePickerVisible},on:{pick:e.handleMaxTimePick,mounted:function(t){e.$refs.maxTimePicker.format=e.timeFormat}}})],1)])]):e._e(),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevMonth}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.leftNextMonth}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.rightPrevMonth}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",attrs:{type:"button"},on:{click:e.rightNextMonth}}),n("div",[e._v(e._s(e.rightLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2),e.showTime?n("div",{staticClass:"el-picker-panel__footer"},[n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.handleClear}},[e._v("\n "+e._s(e.t("el.datepicker.clear"))+"\n ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm(!1)}}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1):e._e()])])},va=[];ma._withStripped=!0;var ga=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ao["nextDate"])(new Date(e),1)]:[new Date,Object(ao["nextDate"])(new Date,1)]},ba={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.leftDate.getMonth()+1))},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.rightDate.getMonth()+1))},leftYear:function(){return this.leftDate.getFullYear()},leftMonth:function(){return this.leftDate.getMonth()},leftMonthDate:function(){return this.leftDate.getDate()},rightYear:function(){return this.rightDate.getFullYear()},rightMonth:function(){return this.rightDate.getMonth()},rightMonthDate:function(){return this.rightDate.getDate()},minVisibleDate:function(){return null!==this.dateUserInput.min?this.dateUserInput.min:this.minDate?Object(ao["formatDate"])(this.minDate,this.dateFormat):""},maxVisibleDate:function(){return null!==this.dateUserInput.max?this.dateUserInput.max:this.maxDate||this.minDate?Object(ao["formatDate"])(this.maxDate||this.minDate,this.dateFormat):""},minVisibleTime:function(){return null!==this.timeUserInput.min?this.timeUserInput.min:this.minDate?Object(ao["formatDate"])(this.minDate,this.timeFormat):""},maxVisibleTime:function(){return null!==this.timeUserInput.max?this.timeUserInput.max:this.maxDate||this.minDate?Object(ao["formatDate"])(this.maxDate||this.minDate,this.timeFormat):""},timeFormat:function(){return this.format?Object(ao["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ao["extractDateFormat"])(this.format):"yyyy-MM-dd"},enableMonthArrow:function(){var e=(this.leftMonth+1)%12,t=this.leftMonth+1>=12?1:0;return this.unlinkPanels&&new Date(this.leftYear+t,e)=12}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ao["nextMonth"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},showTime:!1,shortcuts:"",visible:"",disabledDate:"",cellClassName:"",firstDayOfWeek:7,minTimePickerVisible:!1,maxTimePickerVisible:!1,format:"",arrowControl:!1,unlinkPanels:!1,dateUserInput:{min:null,max:null},timeUserInput:{min:null,max:null}}},watch:{minDate:function(e){var t=this;this.dateUserInput.min=null,this.timeUserInput.min=null,this.$nextTick((function(){if(t.$refs.maxTimePicker&&t.maxDate&&t.maxDatethis.maxDate&&(this.maxDate=this.minDate)):(this.maxDate=Object(ao["modifyDate"])(this.maxDate,n.getFullYear(),n.getMonth(),n.getDate()),this.maxDatethis.maxDate&&(this.maxDate=this.minDate),this.$refs.minTimePicker.value=this.minDate,this.minTimePickerVisible=!1):(this.maxDate=Object(ao["modifyTime"])(this.maxDate,n.getHours(),n.getMinutes(),n.getSeconds()),this.maxDate1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(ao["modifyWithTimeString"])(e.minDate,i[0]),o=Object(ao["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&!this.showTime&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleMinTimePick:function(e,t,n){this.minDate=this.minDate||new Date,e&&(this.minDate=Object(ao["modifyTime"])(this.minDate,e.getHours(),e.getMinutes(),e.getSeconds())),n||(this.minTimePickerVisible=t),(!this.maxDate||this.maxDate&&this.maxDate.getTime()this.maxDate.getTime()&&(this.minDate=new Date(this.maxDate))},handleMaxTimeClose:function(){this.maxTimePickerVisible=!1},leftPrevYear:function(){this.leftDate=Object(ao["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["nextMonth"])(this.leftDate))},leftPrevMonth:function(){this.leftDate=Object(ao["prevMonth"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["nextMonth"])(this.leftDate))},rightNextYear:function(){this.unlinkPanels?this.rightDate=Object(ao["nextYear"])(this.rightDate):(this.leftDate=Object(ao["nextYear"])(this.leftDate),this.rightDate=Object(ao["nextMonth"])(this.leftDate))},rightNextMonth:function(){this.unlinkPanels?this.rightDate=Object(ao["nextMonth"])(this.rightDate):(this.leftDate=Object(ao["nextMonth"])(this.leftDate),this.rightDate=Object(ao["nextMonth"])(this.leftDate))},leftNextYear:function(){this.leftDate=Object(ao["nextYear"])(this.leftDate)},leftNextMonth:function(){this.leftDate=Object(ao["nextMonth"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ao["prevYear"])(this.rightDate)},rightPrevMonth:function(){this.rightDate=Object(ao["prevMonth"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ao["isDate"])(e[0])&&Object(ao["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{TimePicker:Vo,DateTable:ua,ElInput:m.a,ElButton:ae.a}},ya=ba,_a=s(ya,ma,va,!1,null,null,null);_a.options.__file="packages/date-picker/src/panel/date-range.vue";var xa=_a.exports,wa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("div",[e._v(e._s(e.rightLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2)])])},Ca=[];wa._withStripped=!0;var ka=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ao["nextMonth"])(new Date(e))]:[new Date,Object(ao["nextMonth"])(new Date)]},Sa={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")},leftYear:function(){return this.leftDate.getFullYear()},rightYear:function(){return this.rightDate.getFullYear()===this.leftDate.getFullYear()?this.leftDate.getFullYear()+1:this.rightDate.getFullYear()},enableYearArrow:function(){return this.unlinkPanels&&this.rightYear>this.leftYear+1}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ao["nextYear"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},shortcuts:"",visible:"",disabledDate:"",format:"",arrowControl:!1,unlinkPanels:!1}},watch:{value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(ao["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(ao["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),n=this.maxDate.getFullYear();this.rightDate=t===n?Object(ao["nextYear"])(this.maxDate):this.maxDate}else this.rightDate=Object(ao["nextYear"])(this.leftDate);else this.leftDate=ka(this.defaultValue)[0],this.rightDate=Object(ao["nextYear"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=ka(e),n=t[0],i=t[1];this.leftDate=n,this.rightDate=e&&e[1]&&n.getFullYear()!==i.getFullYear()&&this.unlinkPanels?i:Object(ao["nextYear"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=ka(this.defaultValue)[0],this.rightDate=Object(ao["nextYear"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleRangePick:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(ao["modifyWithTimeString"])(e.minDate,i[0]),o=Object(ao["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},leftPrevYear:function(){this.leftDate=Object(ao["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["prevYear"])(this.rightDate))},rightNextYear:function(){this.unlinkPanels||(this.leftDate=Object(ao["nextYear"])(this.leftDate)),this.rightDate=Object(ao["nextYear"])(this.rightDate)},leftNextYear:function(){this.leftDate=Object(ao["nextYear"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ao["prevYear"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ao["isDate"])(e[0])&&Object(ao["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{MonthTable:ta,ElInput:m.a,ElButton:ae.a}},Oa=Sa,$a=s(Oa,wa,Ca,!1,null,null,null);$a.options.__file="packages/date-picker/src/panel/month-range.vue";var Da=$a.exports,Ea=function(e){return"daterange"===e||"datetimerange"===e?xa:"monthrange"===e?Da:pa},Ta={mixins:[So],name:"ElDatePicker",props:{type:{type:String,default:"date"},timeArrowControl:Boolean},watch:{type:function(e){this.picker?(this.unmountPicker(),this.panel=Ea(e),this.mountPicker()):this.panel=Ea(e)}},created:function(){this.panel=Ea(this.type)},install:function(e){e.component(Ta.name,Ta)}},Pa=Ta,Ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],ref:"popper",staticClass:"el-picker-panel time-select el-popper",class:e.popperClass,style:{width:e.width+"px"}},[n("el-scrollbar",{attrs:{noresize:"","wrap-class":"el-picker-panel__content"}},e._l(e.items,(function(t){return n("div",{key:t.value,staticClass:"time-select-item",class:{selected:e.value===t.value,disabled:t.disabled,default:t.value===e.defaultValue},attrs:{disabled:t.disabled},on:{click:function(n){e.handleClick(t)}}},[e._v(e._s(t.value))])})),0)],1)])},Ia=[];Ma._withStripped=!0;var Na=function(e){var t=(e||"").split(":");if(t.length>=2){var n=parseInt(t[0],10),i=parseInt(t[1],10);return{hours:n,minutes:i}}return null},ja=function(e,t){var n=Na(e),i=Na(t),r=n.minutes+60*n.hours,o=i.minutes+60*i.hours;return r===o?0:r>o?1:-1},Aa=function(e){return(e.hours<10?"0"+e.hours:e.hours)+":"+(e.minutes<10?"0"+e.minutes:e.minutes)},Fa=function(e,t){var n=Na(e),i=Na(t),r={hours:n.hours,minutes:n.minutes};return r.minutes+=i.minutes,r.hours+=i.hours,r.hours+=Math.floor(r.minutes/60),r.minutes=r.minutes%60,Aa(r)},La={components:{ElScrollbar:q.a},watch:{value:function(e){var t=this;e&&this.$nextTick((function(){return t.scrollToOption()}))}},methods:{handleClick:function(e){e.disabled||this.$emit("pick",e.value)},handleClear:function(){this.$emit("pick",null)},scrollToOption:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".selected",t=this.$refs.popper.querySelector(".el-picker-panel__content");ri()(t,t.querySelector(e))},handleMenuEnter:function(){var e=this,t=-1!==this.items.map((function(e){return e.value})).indexOf(this.value),n=-1!==this.items.map((function(e){return e.value})).indexOf(this.defaultValue),i=(t?".selected":n&&".default")||".time-select-item:not(.disabled)";this.$nextTick((function(){return e.scrollToOption(i)}))},scrollDown:function(e){var t=this.items,n=t.length,i=t.length,r=t.map((function(e){return e.value})).indexOf(this.value);while(i--)if(r=(r+e+n)%n,!t[r].disabled)return void this.$emit("pick",t[r].value,!0)},isValidValue:function(e){return-1!==this.items.filter((function(e){return!e.disabled})).map((function(e){return e.value})).indexOf(e)},handleKeydown:function(e){var t=e.keyCode;if(38===t||40===t){var n={40:1,38:-1},i=n[t.toString()];return this.scrollDown(i),void e.stopPropagation()}}},data:function(){return{popperClass:"",start:"09:00",end:"18:00",step:"00:30",value:"",defaultValue:"",visible:!1,minTime:"",maxTime:"",width:0}},computed:{items:function(){var e=this.start,t=this.end,n=this.step,i=[];if(e&&t&&n){var r=e;while(ja(r,t)<=0)i.push({value:r,disabled:ja(r,this.minTime||"-1:-1")<=0||ja(r,this.maxTime||"100:100")>=0}),r=Fa(r,n)}return i}}},Va=La,za=s(Va,Ma,Ia,!1,null,null,null);za.options.__file="packages/date-picker/src/panel/time-select.vue";var Ba=za.exports,Ra={mixins:[So],name:"ElTimeSelect",componentName:"ElTimeSelect",props:{type:{type:String,default:"time-select"}},beforeCreate:function(){this.panel=Ba},install:function(e){e.component(Ra.name,Ra)}},Ha=Ra,Wa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-range-picker el-picker-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-range-picker__content"},[n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.startTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"minSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.minDate},on:{change:e.handleMinChange,"select-range":e.setMinSelectionRange}})],1)]),n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.endTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"maxSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.maxDate},on:{change:e.handleMaxChange,"select-range":e.setMaxSelectionRange}})],1)])]),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:function(t){e.handleCancel()}}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn confirm",attrs:{type:"button",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},qa=[];Wa._withStripped=!0;var Ua=Object(ao["parseDate"])("00:00:00","HH:mm:ss"),Ya=Object(ao["parseDate"])("23:59:59","HH:mm:ss"),Ka=function(e){return Object(ao["modifyDate"])(Ua,e.getFullYear(),e.getMonth(),e.getDate())},Ga=function(e){return Object(ao["modifyDate"])(Ya,e.getFullYear(),e.getMonth(),e.getDate())},Xa=function(e,t){return new Date(Math.min(e.getTime()+t,Ga(e).getTime()))},Za={mixins:[g.a],components:{TimeSpinner:jo},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},offset:function(){return this.showSeconds?11:8},spinner:function(){return this.selectionRange[0]this.maxDate.getTime()},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},data:function(){return{popperClass:"",minDate:new Date,maxDate:new Date,value:[],oldValue:[new Date,new Date],defaultValue:null,format:"HH:mm:ss",visible:!1,selectionRange:[0,2],arrowControl:!1}},watch:{value:function(e){Array.isArray(e)?(this.minDate=new Date(e[0]),this.maxDate=new Date(e[1])):Array.isArray(this.defaultValue)?(this.minDate=new Date(this.defaultValue[0]),this.maxDate=new Date(this.defaultValue[1])):this.defaultValue?(this.minDate=new Date(this.defaultValue),this.maxDate=Xa(new Date(this.defaultValue),36e5)):(this.minDate=new Date,this.maxDate=Xa(new Date,36e5))},visible:function(e){var t=this;e&&(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.minSpinner.emitSelectRange("hours")})))}},methods:{handleClear:function(){this.$emit("pick",null)},handleCancel:function(){this.$emit("pick",this.oldValue)},handleMinChange:function(e){this.minDate=Object(ao["clearMilliseconds"])(e),this.handleChange()},handleMaxChange:function(e){this.maxDate=Object(ao["clearMilliseconds"])(e),this.handleChange()},handleChange:function(){this.isValidValue([this.minDate,this.maxDate])&&(this.$refs.minSpinner.selectableRange=[[Ka(this.minDate),this.maxDate]],this.$refs.maxSpinner.selectableRange=[[this.minDate,Ga(this.maxDate)]],this.$emit("pick",[this.minDate,this.maxDate],!0))},setMinSelectionRange:function(e,t){this.$emit("select-range",e,t,"min"),this.selectionRange=[e,t]},setMaxSelectionRange:function(e,t){this.$emit("select-range",e,t,"max"),this.selectionRange=[e+this.offset,t+this.offset]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.$refs.minSpinner.selectableRange,n=this.$refs.maxSpinner.selectableRange;this.minDate=Object(ao["limitTimeRange"])(this.minDate,t,this.format),this.maxDate=Object(ao["limitTimeRange"])(this.maxDate,n,this.format),this.$emit("pick",[this.minDate,this.maxDate],e)},adjustSpinners:function(){this.$refs.minSpinner.adjustSpinners(),this.$refs.maxSpinner.adjustSpinners()},changeSelectionRange:function(e){var t=this.showSeconds?[0,3,6,11,14,17]:[0,3,8,11],n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length,o=t.length/2;r-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(b["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),t&&(Object(Le["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(Le["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(Le["on"])(n,"focusin",this.handleFocus),Object(Le["on"])(t,"focusout",this.handleBlur),Object(Le["on"])(n,"focusout",this.handleBlur)),Object(Le["on"])(t,"keydown",this.handleKeydown),Object(Le["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(Le["on"])(t,"click",this.doToggle),Object(Le["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(Le["on"])(t,"mouseenter",this.handleMouseEnter),Object(Le["on"])(n,"mouseenter",this.handleMouseEnter),Object(Le["on"])(t,"mouseleave",this.handleMouseLeave),Object(Le["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(Le["on"])(t,"focusin",this.doShow),Object(Le["on"])(t,"focusout",this.doClose)):(Object(Le["on"])(t,"mousedown",this.doShow),Object(Le["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(Le["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(Le["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(Le["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(Le["off"])(e,"click",this.doToggle),Object(Le["off"])(e,"mouseup",this.doClose),Object(Le["off"])(e,"mousedown",this.doShow),Object(Le["off"])(e,"focusin",this.doShow),Object(Le["off"])(e,"focusout",this.doClose),Object(Le["off"])(e,"mousedown",this.doShow),Object(Le["off"])(e,"mouseup",this.doClose),Object(Le["off"])(e,"mouseleave",this.handleMouseLeave),Object(Le["off"])(e,"mouseenter",this.handleMouseEnter),Object(Le["off"])(document,"click",this.handleDocumentClick)}},as=os,ss=s(as,is,rs,!1,null,null,null);ss.options.__file="packages/popover/src/main.vue";var ls=ss.exports,cs=function(e,t,n){var i=t.expression?t.value:t.arg,r=n.context.$refs[i];r&&(Array.isArray(r)?r[0].$refs.reference=e:r.$refs.reference=e)},us={bind:function(e,t,n){cs(e,t,n)},inserted:function(e,t,n){cs(e,t,n)}};Wi.a.directive("popover",us),ls.install=function(e){e.directive("popover",us),e.component(ls.name,ls)},ls.directive=us;var ds=ls,hs={name:"ElTooltip",mixins:[H.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(b["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new Wi.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=F()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(Le["on"])(this.referenceElm,"mouseenter",this.show),Object(Le["on"])(this.referenceElm,"mouseleave",this.hide),Object(Le["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(Le["on"])(this.referenceElm,"blur",this.handleBlur),Object(Le["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(Le["addClass"])(this.referenceElm,"focusing"):Object(Le["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;n0){Ds=Ts.shift();var t=Ds.options;for(var n in t)t.hasOwnProperty(n)&&(Es[n]=t[n]);void 0===t.callback&&(Es.callback=Ps);var i=Es.callback;Es.callback=function(t,n){i(t,n),e()},Object(ks["isVNode"])(Es.message)?(Es.$slots.default=[Es.message],Es.message=null):delete Es.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Es[e]&&(Es[e]=!0)})),document.body.appendChild(Es.$el),Wi.a.nextTick((function(){Es.visible=!0}))}},Ns=function e(t,n){if(!Wi.a.prototype.$isServer){if("string"===typeof t||Object(ks["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!n&&(n=t.callback),"undefined"!==typeof Promise)return new Promise((function(i,r){Ts.push({options:St()({},Os,e.defaults,t),callback:n,resolve:i,reject:r}),Is()}));Ts.push({options:St()({},Os,e.defaults,t),callback:n}),Is()}};Ns.setDefaults=function(e){Ns.defaults=e},Ns.alert=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},n))},Ns.confirm=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,$type:"confirm",showCancelButton:!0},n))},Ns.prompt=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},n))},Ns.close=function(){Es.doClose(),Es.visible=!1,Ts=[],Ds=null};var js=Ns,As=js,Fs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},Ls=[];Fs._withStripped=!0;var Vs={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},zs=Vs,Bs=s(zs,Fs,Ls,!1,null,null,null);Bs.options.__file="packages/breadcrumb/src/breadcrumb.vue";var Rs=Bs.exports;Rs.install=function(e){e.component(Rs.name,Rs)};var Hs=Rs,Ws=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-breadcrumb__item"},[n("span",{ref:"link",class:["el-breadcrumb__inner",e.to?"is-link":""],attrs:{role:"link"}},[e._t("default")],2),e.separatorClass?n("i",{staticClass:"el-breadcrumb__separator",class:e.separatorClass}):n("span",{staticClass:"el-breadcrumb__separator",attrs:{role:"presentation"}},[e._v(e._s(e.separator))])])},qs=[];Ws._withStripped=!0;var Us={name:"ElBreadcrumbItem",props:{to:{},replace:Boolean},data:function(){return{separator:"",separatorClass:""}},inject:["elBreadcrumb"],mounted:function(){var e=this;this.separator=this.elBreadcrumb.separator,this.separatorClass=this.elBreadcrumb.separatorClass;var t=this.$refs.link;t.setAttribute("role","link"),t.addEventListener("click",(function(t){var n=e.to,i=e.$router;n&&i&&(e.replace?i.replace(n):i.push(n))}))}},Ys=Us,Ks=s(Ys,Ws,qs,!1,null,null,null);Ks.options.__file="packages/breadcrumb/src/breadcrumb-item.vue";var Gs=Ks.exports;Gs.install=function(e){e.component(Gs.name,Gs)};var Xs=Gs,Zs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("form",{staticClass:"el-form",class:[e.labelPosition?"el-form--label-"+e.labelPosition:"",{"el-form--inline":e.inline}]},[e._t("default")],2)},Js=[];Zs._withStripped=!0;var Qs={name:"ElForm",componentName:"ElForm",provide:function(){return{elForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:Boolean,validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,this.potentialLabelWidthArr);return e?e+"px":""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("el.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("el.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Element Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise((function(t,n){e=function(e){e?t(e):n(e)}})));var i=!0,r=0;0===this.fields.length&&e&&e(!0);var o={};return this.fields.forEach((function(n){n.validate("",(function(n,a){n&&(i=!1),o=St()({},o,a),"function"===typeof e&&++r===t.fields.length&&e(i,o)}))})),n||void 0}console.warn("[Element Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));n.length?n.forEach((function(e){e.validate("",t)})):console.warn("[Element Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[ElementForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var n=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(n,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},el=Qs,tl=s(el,Zs,Js,!1,null,null,null);tl.options.__file="packages/form/src/form.vue";var nl=tl.exports;nl.install=function(e){e.component(nl.name,nl)};var il=nl,rl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-form-item",class:[{"el-form-item--feedback":e.elForm&&e.elForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.elForm&&e.elForm.hideRequiredAsterisk},e.sizeClass?"el-form-item--"+e.sizeClass:""]},[n("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?n("label",{staticClass:"el-form-item__label",style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),n("div",{staticClass:"el-form-item__content",style:e.contentStyle},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[n("div",{staticClass:"el-form-item__error",class:{"el-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.elForm&&e.elForm.inlineMessage||!1}},[e._v("\n "+e._s(e.validateMessage)+"\n ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},ol=[];rl._withStripped=!0;var al,sl,ll=n(40),cl=n.n(ll),ul={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["elForm","elFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var n=this.elForm.autoLabelWidth,i={};if(n&&"auto"!==n){var r=parseInt(n,10)-this.computedWidth;r&&(i.marginLeft=r+"px")}return e("div",{class:"el-form-item__label-wrap",style:i},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},dl=ul,hl=s(dl,al,sl,!1,null,null,null);hl.options.__file="packages/form/src/label-wrap.vue";var fl=hl.exports,pl={name:"ElFormItem",componentName:"ElFormItem",mixins:[D.a],provide:function(){return{elFormItem:this}},inject:["elForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:fl},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var n=this.labelWidth||this.form.labelWidth;return"auto"===n?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.elForm.autoLabelWidth):e.marginLeft=n,e},form:function(){var e=this.$parent,t=e.$options.componentName;while("ElForm"!==t)"ElFormItem"===t&&(this.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),Object(b["getPropByPath"])(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.elForm.size},elFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.elFormItemSize||(this.$ELEMENT||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b["noop"];this.validateDisabled=!1;var i=this.getFilteredRule(e);if((!i||0===i.length)&&void 0===this.required)return n(),!0;this.validateState="validating";var r={};i&&i.length>0&&i.forEach((function(e){delete e.trigger})),r[this.prop]=i;var o=new cl.a(r),a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},(function(e,i){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,i),t.elForm&&t.elForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,n=this.fieldValue,i=this.prop;-1!==i.indexOf(":")&&(i=i.replace(/:/,"."));var r=Object(b["getPropByPath"])(t,i,!0);this.validateDisabled=!0,Array.isArray(n)?r.o[r.k]=[].concat(this.initialValue):r.o[r.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("ElTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required}:[],i=Object(b["getPropByPath"])(e,this.prop||"");return e=e?i.o[this.prop||""]||i.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return St()({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?e+"px":""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("el.form.blur",this.onFieldBlur),this.$on("el.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("ElForm","el.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("ElForm","el.form.removeField",[this])}},ml=pl,vl=s(ml,rl,ol,!1,null,null,null);vl.options.__file="packages/form/src/form-item.vue";var gl=vl.exports;gl.install=function(e){e.component(gl.name,gl)};var bl=gl,yl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},_l=[];yl._withStripped=!0;var xl={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},n=0,i=0,r=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",o="width"===r?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,o){var s=Object(b["arrayFind"])(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!s)return!1;if(t.active){i=s["client"+a(r)];var l=window.getComputedStyle(s);return"width"===r&&e.tabs.length>1&&(i-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===r&&(n+=parseFloat(l.paddingLeft)),!1}return n+=s["client"+a(r)],!0}));var s="translate"+a(o)+"("+n+"px)";return t[r]=i+"px",t.transform=s,t.msTransform=s,t.webkitTransform=s,t}}}},wl=xl,Cl=s(wl,yl,_l,!1,null,null,null);Cl.options.__file="packages/tabs/src/tab-bar.vue";var kl=Cl.exports;function Sl(){}var Ol,$l,Dl=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},El={name:"TabNav",components:{TabBar:kl},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Sl},onTabRemove:{type:Function,default:Sl},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate"+e+"(-"+this.navOffset+"px)"}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset"+Dl(this.sizeName)],t=this.navOffset;if(t){var n=t>e?t-e:0;this.navOffset=n}},scrollNext:function(){var e=this.$refs.nav["offset"+Dl(this.sizeName)],t=this.$refs.navScroll["offset"+Dl(this.sizeName)],n=this.navOffset;if(!(e-n<=t)){var i=e-n>2*t?n+t:e-t;this.navOffset=i}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var n=this.$refs.navScroll,i=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),a=i?e.offsetWidth-o.width:e.offsetHeight-o.height,s=this.navOffset,l=s;i?(r.lefto.right&&(l=s+r.right-o.right)):(r.topo.bottom&&(l=s+(r.bottom-o.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset"+Dl(e)],n=this.$refs.navScroll["offset"+Dl(e)],i=this.navOffset;if(n0&&(this.navOffset=0)}},changeTab:function(e){var t=e.keyCode,n=void 0,i=void 0,r=void 0;-1!==[37,38,39,40].indexOf(t)&&(r=e.currentTarget.querySelectorAll("[role=tab]"),i=Array.prototype.indexOf.call(r,e.target),n=37===t||38===t?0===i?r.length-1:i-1:i0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"ElTabPane"===e.componentOptions.Ctor.options.name})),i=n.map((function(e){var t=e.componentInstance;return t})),r=!(i.length===this.panes.length&&i.every((function(t,n){return t===e.panes[n]})));(t||r)&&(this.panes=i)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,n){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,n))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,n=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var i=this.beforeLeave(e,this.currentName);i&&i.then?i.then((function(){n(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==i&&n()}else n()}},render:function(e){var t,n=this.type,i=this.handleTabClick,r=this.handleTabRemove,o=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,d=this.stretch,h=l||c?e("span",{class:"el-tabs__new-tab",on:{click:o,keydown:function(e){13===e.keyCode&&o()}},attrs:{tabindex:"0"}},[e("i",{class:"el-icon-plus"})]):null,f={props:{currentName:a,onTabClick:i,onTabRemove:r,editable:l,type:n,panes:s,stretch:d},ref:"nav"},p=e("div",{class:["el-tabs__header","is-"+u]},[h,e("tab-nav",f)]),m=e("div",{class:"el-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"el-tabs":!0,"el-tabs--card":"card"===n},t["el-tabs--"+u]=!0,t["el-tabs--border-card"]="border-card"===n,t)},["bottom"!==u?[p,m]:[m,p]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Al=jl,Fl=s(Al,Ml,Il,!1,null,null,null);Fl.options.__file="packages/tabs/src/tabs.vue";var Ll=Fl.exports;Ll.install=function(e){e.component(Ll.name,Ll)};var Vl=Ll,zl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.lazy||e.loaded||e.active?n("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},Bl=[];zl._withStripped=!0;var Rl={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this.$parent.currentName===(this.name||this.index);return e&&(this.loaded=!0),e},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Hl=Rl,Wl=s(Hl,zl,Bl,!1,null,null,null);Wl.options.__file="packages/tabs/src/tab-pane.vue";var ql=Wl.exports;ql.install=function(e){e.component(ql.name,ql)};var Ul,Yl,Kl=ql,Gl={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},Xl=Gl,Zl=s(Xl,Ul,Yl,!1,null,null,null);Zl.options.__file="packages/tag/src/tag.vue";var Jl=Zl.exports;Jl.install=function(e){e.component(Jl.name,Jl)};var Ql=Jl,ec=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tree",class:{"el-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e._l(e.root.childNodes,(function(t){return n("el-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?n("div",{staticClass:"el-tree__empty-block"},[n("span",{staticClass:"el-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"el-tree__drop-indicator"})],2)},tc=[];ec._withStripped=!0;var nc="$treeNodeId",ic=function(e,t){t&&!t[nc]&&Object.defineProperty(t,nc,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},rc=function(e,t){return e?t[e]:t[nc]},oc=function(e,t){var n=e;while(n&&"BODY"!==n.tagName){if(n.__vue__&&n.__vue__.$options.name===t)return n.__vue__;n=n.parentNode}return null},ac=function(){function e(e,t){for(var n=0;n0&&i.lazy&&i.defaultExpandAll&&this.expand(),Array.isArray(this.data)||ic(this,this.data),this.data){var a=i.defaultExpandedKeys,s=i.key;s&&a&&-1!==a.indexOf(this.key)&&this.expand(null,i.autoExpandParent),s&&void 0!==i.currentNodeKey&&this.key===i.currentNodeKey&&(i.currentNode=this,i.currentNode.isCurrent=!0),i.lazy&&i._initDefaultCheckedNode(this),this.updateLeafState()}}return e.prototype.setData=function(e){Array.isArray(e)||ic(this,e),this.data=e,this.childNodes=[];var t=void 0;t=0===this.level&&this.data instanceof Array?this.data:uc(this,"children")||[];for(var n=0,i=t.length;n1&&void 0!==arguments[1])||arguments[1],n=function n(i){for(var r=i.childNodes||[],o=!1,a=0,s=r.length;a-1&&t.splice(n,1);var i=this.childNodes.indexOf(e);i>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(i,1)),this.updateLeafState()},e.prototype.removeChildByData=function(e){for(var t=null,n=0;n0)i.expanded=!0,i=i.parent}n.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(n.checked?n.setChecked(!0,!0):n.store.checkStrictly||cc(n),i())})):i()},e.prototype.doCreateChildren=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(St()({data:e},n),void 0,!0)}))},e.prototype.collapse=function(){this.expanded=!1},e.prototype.shouldLoadData=function(){return!0===this.store.lazy&&this.store.load&&!this.loaded},e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser},e.prototype.setChecked=function(e,t,n,i){var r=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var o=lc(this.childNodes),a=o.all,s=o.allWithoutDisable;this.isLeaf||a||!s||(this.checked=!1,e=!1);var l=function(){if(t){for(var n=r.childNodes,o=0,a=n.length;o0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var n=this.store.props,i="children";return n&&(i=n.children||"children"),void 0===t[i]&&(t[i]=null),e&&!t[i]&&(t[i]=[]),t[i]},e.prototype.updateChildren=function(){var e=this,t=this.getChildren()||[],n=this.childNodes.map((function(e){return e.data})),i={},r=[];t.forEach((function(e,t){var o=e[nc],a=!!o&&Object(b["arrayFindIndex"])(n,(function(e){return e[nc]===o}))>=0;a?i[o]={index:t,data:e}:r.push({index:t,data:e})})),this.store.lazy||n.forEach((function(t){i[t[nc]]||e.removeChildByData(t)})),r.forEach((function(t){var n=t.index,i=t.data;e.insertChild({data:i},n)})),this.updateLeafState()},e.prototype.loadData=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(n).length)e&&e.call(this);else{this.loading=!0;var i=function(i){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(i,n),t.updateLeafState(),e&&e.call(t,i)};this.store.load(this,i)}},ac(e,[{key:"label",get:function(){return uc(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return uc(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),fc=hc,pc="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function mc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var vc=function(){function e(t){var n=this;for(var i in mc(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(this.nodesMap={},this.root=new fc({data:this.data,store:this}),this.lazy&&this.load){var r=this.load;r(this.root,(function(e){n.root.doCreateChildren(e),n._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return e.prototype.filter=function(e){var t=this.filterNodeMethod,n=this.lazy,i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;if(o.forEach((function(n){n.visible=t.call(n,e,n.data,n),i(n)})),!r.visible&&o.length){var a=!0;a=!o.some((function(e){return e.visible})),r.root?r.root.visible=!1===a:r.visible=!1===a}e&&(!r.visible||r.isLeaf||n||r.expand())};i(this)},e.prototype.setData=function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()},e.prototype.getNode=function(e){if(e instanceof fc)return e;var t="object"!==("undefined"===typeof e?"undefined":pc(e))?e:rc(this.key,e);return this.nodesMap[t]||null},e.prototype.insertBefore=function(e,t){var n=this.getNode(t);n.parent.insertBefore({data:e},n)},e.prototype.insertAfter=function(e,t){var n=this.getNode(t);n.parent.insertAfter({data:e},n)},e.prototype.remove=function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))},e.prototype.append=function(e,t){var n=t?this.getNode(t):this.root;n&&n.insertChild({data:e})},e.prototype._initDefaultCheckedNodes=function(){var e=this,t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach((function(t){var i=n[t];i&&i.setChecked(!0,!e.checkStrictly)}))},e.prototype._initDefaultCheckedNode=function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)},e.prototype.setDefaultCheckedKey=function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())},e.prototype.registerNode=function(e){var t=this.key;if(t&&e&&e.data){var n=e.key;void 0!==n&&(this.nodesMap[e.key]=e)}},e.prototype.deregisterNode=function(e){var t=this,n=this.key;n&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])},e.prototype.getCheckedNodes=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;o.forEach((function(r){(r.checked||t&&r.indeterminate)&&(!e||e&&r.isLeaf)&&n.push(r.data),i(r)}))};return i(this),n},e.prototype.getCheckedKeys=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))},e.prototype.getHalfCheckedNodes=function(){var e=[],t=function t(n){var i=n.root?n.root.childNodes:n.childNodes;i.forEach((function(n){n.indeterminate&&e.push(n.data),t(n)}))};return t(this),e},e.prototype.getHalfCheckedKeys=function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))},e.prototype._getAllNodes=function(){var e=[],t=this.nodesMap;for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},e.prototype.updateChildren=function(e,t){var n=this.nodesMap[e];if(n){for(var i=n.childNodes,r=i.length-1;r>=0;r--){var o=i[r];this.remove(o.data)}for(var a=0,s=t.length;a1&&void 0!==arguments[1]&&arguments[1],n=arguments[2],i=this._getAllNodes().sort((function(e,t){return t.level-e.level})),r=Object.create(null),o=Object.keys(n);i.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,s=i.length;a-1;if(u){var d=l.parent;while(d&&d.level>0)r[d.data[e]]=!0,d=d.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var n=t.childNodes;n.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!r[c]&&l.setChecked(!1,!1)}},e.prototype.setCheckedNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.key,i={};e.forEach((function(e){i[(e||{})[n]]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var n=this.key,i={};e.forEach((function(e){i[e]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setDefaultExpandedKeys=function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var n=t.getNode(e);n&&n.expand(null,t.autoExpandParent)}))},e.prototype.setChecked=function(e,t,n){var i=this.getNode(e);i&&i.setChecked(!!t,n)},e.prototype.getCurrentNode=function(){return this.currentNode},e.prototype.setCurrentNode=function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0},e.prototype.setUserCurrentNode=function(e){var t=e[this.key],n=this.nodesMap[t];this.setCurrentNode(n)},e.prototype.setCurrentNodeKey=function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)},e}(),gc=vc,bc=function(){var e=this,t=this,n=t.$createElement,i=t._self._c||n;return i("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"el-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[i("div",{staticClass:"el-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[i("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"el-tree-node__expand-icon",t.tree.iconClass?t.tree.iconClass:"el-icon-caret-right"],on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?i("el-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?i("span",{staticClass:"el-tree-node__loading-icon el-icon-loading"}):t._e(),i("node-content",{attrs:{node:t.node}})],1),i("el-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?i("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"el-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return i("el-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},yc=[];bc._withStripped=!0;var _c={name:"ElTreeNode",componentName:"ElTreeNode",mixins:[D.a],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{ElCollapseTransition:Ye.a,ElCheckbox:Ai.a,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,n=t.tree,i=this.node,r=i.data,o=i.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:n.$vnode.context,node:i,data:r,store:o}):n.$scopedSlots.default?n.$scopedSlots.default({node:i,data:r}):e("span",{class:"el-tree-node__label"},[i.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){return rc(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",this.node.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node),this.tree.$emit("current-change",e.currentNode?e.currentNode.data:null,e.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&this.handleCheckChange(null,{target:{checked:!this.node.checked}}),this.tree.$emit("node-click",this.node.data,this.node,this)},handleContextMenu:function(e){this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,this.node.data,this.node,this)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node.data,this.node,this),this.node.collapse()):(this.node.expand(),this.$emit("node-expand",this.node.data,this.node,this)))},handleCheckChange:function(e,t){var n=this;this.node.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=n.tree.store;n.tree.$emit("check",n.node.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,n)},handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this,t=this.$parent;t.isTree?this.tree=t:this.tree=t.tree;var n=this.tree;n||console.warn("Can not find node's tree.");var i=n.props||{},r=i["children"]||"children";this.$watch("node.data."+r,(function(){e.node.updateChildren()})),this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(t){e.node!==t&&e.node.collapse()}))}},xc=_c,wc=s(xc,bc,yc,!1,null,null,null);wc.options.__file="packages/tree/src/tree-node.vue";var Cc=wc.exports,kc={name:"ElTree",mixins:[D.a],components:{ElTreeNode:Cc},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0}}},props:{data:{type:Array},emptyText:{type:String,default:function(){return Object(ti["t"])("el.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},iconClass:String},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return rc(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var n=[t.data],i=t.parent;while(i&&i!==this.root)n.push(i.data),i=i.parent;return n.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,n){this.store.setChecked(e,t,n)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,n)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("el-tree-node")){var n=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var i=this.treeItemArray.indexOf(t),r=void 0;[38,40].indexOf(n)>-1&&(e.preventDefault(),r=38===n?0!==i?i-1:0:i-1&&(e.preventDefault(),t.click());var o=t.querySelector('[type="checkbox"]');[13,32].indexOf(n)>-1&&o&&(e.preventDefault(),o.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new gc({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(n,i){if("function"===typeof e.allowDrag&&!e.allowDrag(i.node))return n.preventDefault(),!1;n.dataTransfer.effectAllowed="move";try{n.dataTransfer.setData("text/plain","")}catch(r){}t.draggingNode=i,e.$emit("node-drag-start",i.node,n)})),this.$on("tree-node-drag-over",(function(n,i){var r=oc(n.target,"ElTreeNode"),o=t.dropNode;o&&o!==r&&Object(Le["removeClass"])(o.$el,"is-drop-inner");var a=t.draggingNode;if(a&&r){var s=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(s=e.allowDrop(a.node,r.node,"prev"),u=l=e.allowDrop(a.node,r.node,"inner"),c=e.allowDrop(a.node,r.node,"next")),n.dataTransfer.dropEffect=l?"move":"none",(s||l||c)&&o!==r&&(o&&e.$emit("node-drag-leave",a.node,o.node,n),e.$emit("node-drag-enter",a.node,r.node,n)),(s||l||c)&&(t.dropNode=r),r.node.nextSibling===a.node&&(c=!1),r.node.previousSibling===a.node&&(s=!1),r.node.contains(a.node,!1)&&(l=!1),(a.node===r.node||a.node.contains(r.node))&&(s=!1,l=!1,c=!1);var d=r.$el.getBoundingClientRect(),h=e.$el.getBoundingClientRect(),f=void 0,p=s?l?.25:c?.45:1:-1,m=c?l?.75:s?.55:0:1,v=-9999,g=n.clientY-d.top;f=gd.height*m?"after":l?"inner":"none";var b=r.$el.querySelector(".el-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===f?v=b.top-h.top:"after"===f&&(v=b.bottom-h.top),y.style.top=v+"px",y.style.left=b.right-h.left+"px","inner"===f?Object(Le["addClass"])(r.$el,"is-drop-inner"):Object(Le["removeClass"])(r.$el,"is-drop-inner"),t.showDropIndicator="before"===f||"after"===f,t.allowDrop=t.showDropIndicator||u,t.dropType=f,e.$emit("node-drag-over",a.node,r.node,n)}})),this.$on("tree-node-drag-end",(function(n){var i=t.draggingNode,r=t.dropType,o=t.dropNode;if(n.preventDefault(),n.dataTransfer.dropEffect="move",i&&o){var a={data:i.node.data};"none"!==r&&i.node.remove(),"before"===r?o.node.parent.insertBefore(a,o.node):"after"===r?o.node.parent.insertAfter(a,o.node):"inner"===r&&o.node.insertChild(a),"none"!==r&&e.store.registerNode(a),Object(Le["removeClass"])(o.$el,"is-drop-inner"),e.$emit("node-drag-end",i.node,o.node,r,n),"none"!==r&&e.$emit("node-drop",i.node,o.node,r,n)}i&&!o&&e.$emit("node-drag-end",i.node,null,r,n),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},Sc=kc,Oc=s(Sc,ec,tc,!1,null,null,null);Oc.options.__file="packages/tree/src/tree.vue";var $c=Oc.exports;$c.install=function(e){e.component($c.name,$c)};var Dc=$c,Ec=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-alert-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-alert",class:[e.typeClass,e.center?"is-center":"","is-"+e.effect],attrs:{role:"alert"}},[e.showIcon?n("i",{staticClass:"el-alert__icon",class:[e.iconClass,e.isBigIcon]}):e._e(),n("div",{staticClass:"el-alert__content"},[e.title||e.$slots.title?n("span",{staticClass:"el-alert__title",class:[e.isBoldTitle]},[e._t("title",[e._v(e._s(e.title))])],2):e._e(),e.$slots.default&&!e.description?n("p",{staticClass:"el-alert__description"},[e._t("default")],2):e._e(),e.description&&!e.$slots.default?n("p",{staticClass:"el-alert__description"},[e._v(e._s(e.description))]):e._e(),n("i",{directives:[{name:"show",rawName:"v-show",value:e.closable,expression:"closable"}],staticClass:"el-alert__closebtn",class:{"is-customed":""!==e.closeText,"el-icon-close":""===e.closeText},on:{click:function(t){e.close()}}},[e._v(e._s(e.closeText))])])])])},Tc=[];Ec._withStripped=!0;var Pc={success:"el-icon-success",warning:"el-icon-warning",error:"el-icon-error"},Mc={name:"ElAlert",props:{title:{type:String,default:""},description:{type:String,default:""},type:{type:String,default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,default:"light",validator:function(e){return-1!==["light","dark"].indexOf(e)}}},data:function(){return{visible:!0}},methods:{close:function(){this.visible=!1,this.$emit("close")}},computed:{typeClass:function(){return"el-alert--"+this.type},iconClass:function(){return Pc[this.type]||"el-icon-info"},isBigIcon:function(){return this.description||this.$slots.default?"is-big":""},isBoldTitle:function(){return this.description||this.$slots.default?"is-bold":""}}},Ic=Mc,Nc=s(Ic,Ec,Tc,!1,null,null,null);Nc.options.__file="packages/alert/src/main.vue";var jc=Nc.exports;jc.install=function(e){e.component(jc.name,jc)};var Ac=jc,Fc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-notification-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-notification",e.customClass,e.horizontalClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:function(t){e.clearTimer()},mouseleave:function(t){e.startTimer()},click:e.click}},[e.type||e.iconClass?n("i",{staticClass:"el-notification__icon",class:[e.typeClass,e.iconClass]}):e._e(),n("div",{staticClass:"el-notification__group",class:{"is-with-icon":e.typeClass||e.iconClass}},[n("h2",{staticClass:"el-notification__title",domProps:{textContent:e._s(e.title)}}),n("div",{directives:[{name:"show",rawName:"v-show",value:e.message,expression:"message"}],staticClass:"el-notification__content"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2),e.showClose?n("div",{staticClass:"el-notification__closeBtn el-icon-close",on:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()])])])},Lc=[];Fc._withStripped=!0;var Vc={success:"success",info:"info",warning:"warning",error:"error"},zc={data:function(){return{visible:!1,title:"",message:"",duration:4500,type:"",showClose:!0,customClass:"",iconClass:"",onClose:null,onClick:null,closed:!1,verticalOffset:0,timer:null,dangerouslyUseHTMLString:!1,position:"top-right"}},computed:{typeClass:function(){return this.type&&Vc[this.type]?"el-icon-"+Vc[this.type]:""},horizontalClass:function(){return this.position.indexOf("right")>-1?"right":"left"},verticalProperty:function(){return/^top-/.test(this.position)?"top":"bottom"},positionStyle:function(){var e;return e={},e[this.verticalProperty]=this.verticalOffset+"px",e}},watch:{closed:function(e){e&&(this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},click:function(){"function"===typeof this.onClick&&this.onClick()},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose()},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){46===e.keyCode||8===e.keyCode?this.clearTimer():27===e.keyCode?this.closed||this.close():this.startTimer()}},mounted:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration)),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Bc=zc,Rc=s(Bc,Fc,Lc,!1,null,null,null);Rc.options.__file="packages/notification/src/main.vue";var Hc=Rc.exports,Wc=Wi.a.extend(Hc),qc=void 0,Uc=[],Yc=1,Kc=function e(t){if(!Wi.a.prototype.$isServer){t=St()({},t);var n=t.onClose,i="notification_"+Yc++,r=t.position||"top-right";t.onClose=function(){e.close(i,n)},qc=new Wc({data:t}),Object(ks["isVNode"])(t.message)&&(qc.$slots.default=[t.message],t.message="REPLACED_BY_VNODE"),qc.id=i,qc.$mount(),document.body.appendChild(qc.$el),qc.visible=!0,qc.dom=qc.$el,qc.dom.style.zIndex=C["PopupManager"].nextZIndex();var o=t.offset||0;return Uc.filter((function(e){return e.position===r})).forEach((function(e){o+=e.$el.offsetHeight+16})),o+=16,qc.verticalOffset=o,Uc.push(qc),qc}};["success","warning","info","error"].forEach((function(e){Kc[e]=function(t){return("string"===typeof t||Object(ks["isVNode"])(t))&&(t={message:t}),t.type=e,Kc(t)}})),Kc.close=function(e,t){var n=-1,i=Uc.length,r=Uc.filter((function(t,i){return t.id===e&&(n=i,!0)}))[0];if(r&&("function"===typeof t&&t(r),Uc.splice(n,1),!(i<=1)))for(var o=r.position,a=r.dom.offsetHeight,s=n;s=0;e--)Uc[e].close()};var Gc=Kc,Xc=Gc,Zc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-slider",class:{"is-vertical":e.vertical,"el-slider--with-input":e.showInput},attrs:{role:"slider","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-orientation":e.vertical?"vertical":"horizontal","aria-disabled":e.sliderDisabled}},[e.showInput&&!e.range?n("el-input-number",{ref:"input",staticClass:"el-slider__input",attrs:{step:e.step,disabled:e.sliderDisabled,controls:e.showInputControls,min:e.min,max:e.max,debounce:e.debounce,size:e.inputSize},on:{change:e.emitChange},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}):e._e(),n("div",{ref:"slider",staticClass:"el-slider__runway",class:{"show-input":e.showInput,disabled:e.sliderDisabled},style:e.runwayStyle,on:{click:e.onSliderClick}},[n("div",{staticClass:"el-slider__bar",style:e.barStyle}),n("slider-button",{ref:"button1",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}),e.range?n("slider-button",{ref:"button2",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.secondValue,callback:function(t){e.secondValue=t},expression:"secondValue"}}):e._e(),e._l(e.stops,(function(t,i){return e.showStops?n("div",{key:i,staticClass:"el-slider__stop",style:e.getStopStyle(t)}):e._e()})),e.markList.length>0?[n("div",e._l(e.markList,(function(t,i){return n("div",{key:i,staticClass:"el-slider__stop el-slider__marks-stop",style:e.getStopStyle(t.position)})})),0),n("div",{staticClass:"el-slider__marks"},e._l(e.markList,(function(t,i){return n("slider-marker",{key:i,style:e.getStopStyle(t.position),attrs:{mark:t.mark}})})),1)]:e._e()],2)],1)},Jc=[];Zc._withStripped=!0;var Qc=n(41),eu=n.n(Qc),tu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"button",staticClass:"el-slider__button-wrapper",class:{hover:e.hovering,dragging:e.dragging},style:e.wrapperStyle,attrs:{tabindex:"0"},on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave,mousedown:e.onButtonDown,touchstart:e.onButtonDown,focus:e.handleMouseEnter,blur:e.handleMouseLeave,keydown:[function(t){return"button"in t||!e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])?"button"in t&&0!==t.button?null:e.onLeftKeyDown(t):null},function(t){return"button"in t||!e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])?"button"in t&&2!==t.button?null:e.onRightKeyDown(t):null},function(t){return"button"in t||!e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?(t.preventDefault(),e.onLeftKeyDown(t)):null},function(t){return"button"in t||!e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?(t.preventDefault(),e.onRightKeyDown(t)):null}]}},[n("el-tooltip",{ref:"tooltip",attrs:{placement:"top","popper-class":e.tooltipClass,disabled:!e.showTooltip}},[n("span",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(e.formatValue))]),n("div",{staticClass:"el-slider__button",class:{hover:e.hovering,dragging:e.dragging}})])],1)},nu=[];tu._withStripped=!0;var iu={name:"ElSliderButton",components:{ElTooltip:rt.a},props:{value:{type:Number,default:0},vertical:{type:Boolean,default:!1},tooltipClass:String},data:function(){return{hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:null,oldValue:this.value}},computed:{disabled:function(){return this.$parent.sliderDisabled},max:function(){return this.$parent.max},min:function(){return this.$parent.min},step:function(){return this.$parent.step},showTooltip:function(){return this.$parent.showTooltip},precision:function(){return this.$parent.precision},currentPosition:function(){return(this.value-this.min)/(this.max-this.min)*100+"%"},enableFormat:function(){return this.$parent.formatTooltip instanceof Function},formatValue:function(){return this.enableFormat&&this.$parent.formatTooltip(this.value)||this.value},wrapperStyle:function(){return this.vertical?{bottom:this.currentPosition}:{left:this.currentPosition}}},watch:{dragging:function(e){this.$parent.dragging=e}},methods:{displayTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!0)},hideTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!1)},handleMouseEnter:function(){this.hovering=!0,this.displayTooltip()},handleMouseLeave:function(){this.hovering=!1,this.hideTooltip()},onButtonDown:function(e){this.disabled||(e.preventDefault(),this.onDragStart(e),window.addEventListener("mousemove",this.onDragging),window.addEventListener("touchmove",this.onDragging),window.addEventListener("mouseup",this.onDragEnd),window.addEventListener("touchend",this.onDragEnd),window.addEventListener("contextmenu",this.onDragEnd))},onLeftKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)-this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onRightKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)+this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onDragStart:function(e){this.dragging=!0,this.isClick=!0,"touchstart"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?this.startY=e.clientY:this.startX=e.clientX,this.startPosition=parseFloat(this.currentPosition),this.newPosition=this.startPosition},onDragging:function(e){if(this.dragging){this.isClick=!1,this.displayTooltip(),this.$parent.resetSize();var t=0;"touchmove"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?(this.currentY=e.clientY,t=(this.startY-this.currentY)/this.$parent.sliderSize*100):(this.currentX=e.clientX,t=(this.currentX-this.startX)/this.$parent.sliderSize*100),this.newPosition=this.startPosition+t,this.setPosition(this.newPosition)}},onDragEnd:function(){var e=this;this.dragging&&(setTimeout((function(){e.dragging=!1,e.hideTooltip(),e.isClick||(e.setPosition(e.newPosition),e.$parent.emitChange())}),0),window.removeEventListener("mousemove",this.onDragging),window.removeEventListener("touchmove",this.onDragging),window.removeEventListener("mouseup",this.onDragEnd),window.removeEventListener("touchend",this.onDragEnd),window.removeEventListener("contextmenu",this.onDragEnd))},setPosition:function(e){var t=this;if(null!==e&&!isNaN(e)){e<0?e=0:e>100&&(e=100);var n=100/((this.max-this.min)/this.step),i=Math.round(e/n),r=i*n*(this.max-this.min)*.01+this.min;r=parseFloat(r.toFixed(this.precision)),this.$emit("input",r),this.$nextTick((function(){t.displayTooltip(),t.$refs.tooltip&&t.$refs.tooltip.updatePopper()})),this.dragging||this.value===this.oldValue||(this.oldValue=this.value)}}}},ru=iu,ou=s(ru,tu,nu,!1,null,null,null);ou.options.__file="packages/slider/src/button.vue";var au=ou.exports,su={name:"ElMarker",props:{mark:{type:[String,Object]}},render:function(){var e=arguments[0],t="string"===typeof this.mark?this.mark:this.mark.label;return e("div",{class:"el-slider__marks-text",style:this.mark.style||{}},[t])}},lu={name:"ElSlider",mixins:[D.a],inject:{elForm:{default:""}},props:{min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:{type:[Number,Array],default:0},showInput:{type:Boolean,default:!1},showInputControls:{type:Boolean,default:!0},inputSize:{type:String,default:"small"},showStops:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},formatTooltip:Function,disabled:{type:Boolean,default:!1},range:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},height:{type:String},debounce:{type:Number,default:300},label:{type:String},tooltipClass:String,marks:Object},components:{ElInputNumber:eu.a,SliderButton:au,SliderMarker:su},data:function(){return{firstValue:null,secondValue:null,oldValue:null,dragging:!1,sliderSize:1}},watch:{value:function(e,t){this.dragging||Array.isArray(e)&&Array.isArray(t)&&e.every((function(e,n){return e===t[n]}))||this.setValues()},dragging:function(e){e||this.setValues()},firstValue:function(e){this.range?this.$emit("input",[this.minValue,this.maxValue]):this.$emit("input",e)},secondValue:function(){this.range&&this.$emit("input",[this.minValue,this.maxValue])},min:function(){this.setValues()},max:function(){this.setValues()}},methods:{valueChanged:function(){var e=this;return this.range?![this.minValue,this.maxValue].every((function(t,n){return t===e.oldValue[n]})):this.value!==this.oldValue},setValues:function(){if(this.min>this.max)console.error("[Element Error][Slider]min should not be greater than max.");else{var e=this.value;this.range&&Array.isArray(e)?e[1]this.max?this.$emit("input",[this.max,this.max]):e[0]this.max?this.$emit("input",[e[0],this.max]):(this.firstValue=e[0],this.secondValue=e[1],this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",[this.minValue,this.maxValue]),this.oldValue=e.slice())):this.range||"number"!==typeof e||isNaN(e)||(ethis.max?this.$emit("input",this.max):(this.firstValue=e,this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",e),this.oldValue=e)))}},setPosition:function(e){var t=this.min+e*(this.max-this.min)/100;if(this.range){var n=void 0;n=Math.abs(this.minValue-t)this.secondValue?"button1":"button2",this.$refs[n].setPosition(e)}else this.$refs.button1.setPosition(e)},onSliderClick:function(e){if(!this.sliderDisabled&&!this.dragging){if(this.resetSize(),this.vertical){var t=this.$refs.slider.getBoundingClientRect().bottom;this.setPosition((t-e.clientY)/this.sliderSize*100)}else{var n=this.$refs.slider.getBoundingClientRect().left;this.setPosition((e.clientX-n)/this.sliderSize*100)}this.emitChange()}},resetSize:function(){this.$refs.slider&&(this.sliderSize=this.$refs.slider["client"+(this.vertical?"Height":"Width")])},emitChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.range?[e.minValue,e.maxValue]:e.value)}))},getStopStyle:function(e){return this.vertical?{bottom:e+"%"}:{left:e+"%"}}},computed:{stops:function(){var e=this;if(!this.showStops||this.min>this.max)return[];if(0===this.step)return[];for(var t=(this.max-this.min)/this.step,n=100*this.step/(this.max-this.min),i=[],r=1;r100*(e.maxValue-e.min)/(e.max-e.min)})):i.filter((function(t){return t>100*(e.firstValue-e.min)/(e.max-e.min)}))},markList:function(){var e=this;if(!this.marks)return[];var t=Object.keys(this.marks);return t.map(parseFloat).sort((function(e,t){return e-t})).filter((function(t){return t<=e.max&&t>=e.min})).map((function(t){return{point:t,position:100*(t-e.min)/(e.max-e.min),mark:e.marks[t]}}))},minValue:function(){return Math.min(this.firstValue,this.secondValue)},maxValue:function(){return Math.max(this.firstValue,this.secondValue)},barSize:function(){return this.range?100*(this.maxValue-this.minValue)/(this.max-this.min)+"%":100*(this.firstValue-this.min)/(this.max-this.min)+"%"},barStart:function(){return this.range?100*(this.minValue-this.min)/(this.max-this.min)+"%":"0%"},precision:function(){var e=[this.min,this.max,this.step].map((function(e){var t=(""+e).split(".")[1];return t?t.length:0}));return Math.max.apply(null,e)},runwayStyle:function(){return this.vertical?{height:this.height}:{}},barStyle:function(){return this.vertical?{height:this.barSize,bottom:this.barStart}:{width:this.barSize,left:this.barStart}},sliderDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},mounted:function(){var e=void 0;this.range?(Array.isArray(this.value)?(this.firstValue=Math.max(this.min,this.value[0]),this.secondValue=Math.min(this.max,this.value[1])):(this.firstValue=this.min,this.secondValue=this.max),this.oldValue=[this.firstValue,this.secondValue],e=this.firstValue+"-"+this.secondValue):("number"!==typeof this.value||isNaN(this.value)?this.firstValue=this.min:this.firstValue=Math.min(this.max,Math.max(this.min,this.value)),this.oldValue=this.firstValue,e=this.firstValue),this.$el.setAttribute("aria-valuetext",e),this.$el.setAttribute("aria-label",this.label?this.label:"slider between "+this.min+" and "+this.max),this.resetSize(),window.addEventListener("resize",this.resetSize)},beforeDestroy:function(){window.removeEventListener("resize",this.resetSize)}},cu=lu,uu=s(cu,Zc,Jc,!1,null,null,null);uu.options.__file="packages/slider/src/main.vue";var du=uu.exports;du.install=function(e){e.component(du.name,du)};var hu=du,fu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[n("div",{staticClass:"el-loading-spinner"},[e.spinner?n("i",{class:e.spinner}):n("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?n("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},pu=[];fu._withStripped=!0;var mu={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},vu=mu,gu=s(vu,fu,pu,!1,null,null,null);gu.options.__file="packages/loading/src/loading.vue";var bu=gu.exports,yu=n(31),_u=n.n(yu),xu=Wi.a.extend(bu),wu={install:function(e){if(!e.prototype.$isServer){var t=function(t,i){i.value?e.nextTick((function(){i.modifiers.fullscreen?(t.originalPosition=Object(Le["getStyle"])(document.body,"position"),t.originalOverflow=Object(Le["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=C["PopupManager"].nextZIndex(),Object(Le["addClass"])(t.mask,"is-fullscreen"),n(document.body,t,i)):(Object(Le["removeClass"])(t.mask,"is-fullscreen"),i.modifiers.body?(t.originalPosition=Object(Le["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var n="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[n]+document.documentElement[n]-parseInt(Object(Le["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),n(document.body,t,i)):(t.originalPosition=Object(Le["getStyle"])(t,"position"),n(t,t,i)))})):(_u()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var n=i.modifiers.fullscreen||i.modifiers.body?document.body:t;Object(Le["removeClass"])(n,"el-loading-parent--relative"),Object(Le["removeClass"])(n,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},n=function(t,n,i){n.domVisible||"none"===Object(Le["getStyle"])(n,"display")||"hidden"===Object(Le["getStyle"])(n,"visibility")?n.domVisible&&!0===n.instance.hiding&&(n.instance.visible=!0,n.instance.hiding=!1):(Object.keys(n.maskStyle).forEach((function(e){n.mask.style[e]=n.maskStyle[e]})),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(Le["addClass"])(t,"el-loading-parent--relative"),i.modifiers.fullscreen&&i.modifiers.lock&&Object(Le["addClass"])(t,"el-loading-parent--hidden"),n.domVisible=!0,t.appendChild(n.mask),e.nextTick((function(){n.instance.hiding?n.instance.$emit("after-leave"):n.instance.visible=!0})),n.domInserted=!0)};e.directive("loading",{bind:function(e,n,i){var r=e.getAttribute("element-loading-text"),o=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),s=e.getAttribute("element-loading-custom-class"),l=i.context,c=new xu({el:document.createElement("div"),data:{text:l&&l[r]||r,spinner:l&&l[o]||o,background:l&&l[a]||a,customClass:l&&l[s]||s,fullscreen:!!n.modifiers.fullscreen}});e.instance=c,e.mask=c.$el,e.maskStyle={},n.value&&t(e,n)},update:function(e,n){e.instance.setText(e.getAttribute("element-loading-text")),n.oldValue!==n.value&&t(e,n)},unbind:function(e,n){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:n.modifiers})),e.instance&&e.instance.$destroy()}})}}},Cu=wu,ku=Wi.a.extend(bu),Su={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},Ou=void 0;ku.prototype.originalPosition="",ku.prototype.originalOverflow="",ku.prototype.close=function(){var e=this;this.fullscreen&&(Ou=void 0),_u()(this,(function(t){var n=e.fullscreen||e.body?document.body:e.target;Object(Le["removeClass"])(n,"el-loading-parent--relative"),Object(Le["removeClass"])(n,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var $u=function(e,t,n){var i={};e.fullscreen?(n.originalPosition=Object(Le["getStyle"])(document.body,"position"),n.originalOverflow=Object(Le["getStyle"])(document.body,"overflow"),i.zIndex=C["PopupManager"].nextZIndex()):e.body?(n.originalPosition=Object(Le["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var n="top"===t?"scrollTop":"scrollLeft";i[t]=e.target.getBoundingClientRect()[t]+document.body[n]+document.documentElement[n]+"px"})),["height","width"].forEach((function(t){i[t]=e.target.getBoundingClientRect()[t]+"px"}))):n.originalPosition=Object(Le["getStyle"])(t,"position"),Object.keys(i).forEach((function(e){n.$el.style[e]=i[e]}))},Du=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Wi.a.prototype.$isServer){if(e=St()({},Su,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&Ou)return Ou;var t=e.body?document.body:e.target,n=new ku({el:document.createElement("div"),data:e});return $u(e,t,n),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(Le["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(Le["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(n.$el),Wi.a.nextTick((function(){n.visible=!0})),e.fullscreen&&(Ou=n),n}},Eu=Du,Tu={install:function(e){e.use(Cu),e.prototype.$loading=Eu},directive:Cu,service:Eu},Pu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("i",{class:"el-icon-"+e.name})},Mu=[];Pu._withStripped=!0;var Iu={name:"ElIcon",props:{name:String}},Nu=Iu,ju=s(Nu,Pu,Mu,!1,null,null,null);ju.options.__file="packages/icon/src/icon.vue";var Au=ju.exports;Au.install=function(e){e.component(Au.name,Au)};var Fu=Au,Lu={name:"ElRow",componentName:"ElRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:{type:String,default:"top"}},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-"+this.gutter/2+"px",e.marginRight=e.marginLeft),e}},render:function(e){return e(this.tag,{class:["el-row","start"!==this.justify?"is-justify-"+this.justify:"","top"!==this.align?"is-align-"+this.align:"",{"el-row--flex":"flex"===this.type}],style:this.style},this.$slots.default)},install:function(e){e.component(Lu.name,Lu)}},Vu=Lu,zu="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bu={name:"ElCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"ElRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,n=[],i={};return this.gutter&&(i.paddingLeft=this.gutter/2+"px",i.paddingRight=i.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&n.push("span"!==e?"el-col-"+e+"-"+t[e]:"el-col-"+t[e])})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])n.push("el-col-"+e+"-"+t[e]);else if("object"===zu(t[e])){var i=t[e];Object.keys(i).forEach((function(t){n.push("span"!==t?"el-col-"+e+"-"+t+"-"+i[t]:"el-col-"+e+"-"+i[t])}))}})),e(this.tag,{class:["el-col",n],style:i},this.$slots.default)},install:function(e){e.component(Bu.name,Bu)}},Ru=Bu,Hu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return n("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(n){if(!("button"in n)&&e._k(n.keyCode,"delete",[8,46],n.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?n("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),n("a",{staticClass:"el-upload-list__item-name",on:{click:function(n){e.handleClick(t)}}},[n("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+"\n ")]),n("label",{staticClass:"el-upload-list__item-status-label"},[n("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():n("i",{staticClass:"el-icon-close",on:{click:function(n){e.$emit("remove",t)}}}),e.disabled?e._e():n("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),"uploading"===t.status?n("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-preview",on:{click:function(n){e.handlePreview(t)}}},[n("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():n("span",{staticClass:"el-upload-list__item-delete",on:{click:function(n){e.$emit("remove",t)}}},[n("i",{staticClass:"el-icon-delete"})])]):e._e()],{file:t})],2)})),0)},Wu=[];Hu._withStripped=!0;var qu=n(32),Uu=n.n(qu),Yu={name:"ElUploadList",mixins:[g.a],data:function(){return{focusing:!1}},components:{ElProgress:Uu.a},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},Ku=Yu,Gu=s(Ku,Hu,Wu,!1,null,null,null);Gu.options.__file="packages/upload/src/upload-list.vue";var Xu=Gu.exports,Zu=n(24),Ju=n.n(Zu);function Qu(e,t,n){var i=void 0;i=n.response?""+(n.response.error||n.response):n.responseText?""+n.responseText:"fail to post "+e+" "+n.status;var r=new Error(i);return r.status=n.status,r.method="post",r.url=e,r}function ed(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function td(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,n=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var i=new FormData;e.data&&Object.keys(e.data).forEach((function(t){i.append(t,e.data[t])})),i.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(Qu(n,e,t));e.onSuccess(ed(t))},t.open("post",n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var o in r)r.hasOwnProperty(o)&&null!==r[o]&&t.setRequestHeader(o,r[o]);return t.send(i),t}}var nd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop(t)},dragover:function(t){return t.preventDefault(),e.onDragover(t)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},id=[];nd._withStripped=!0;var rd={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var n=e.type,i=e.name,r=i.indexOf(".")>-1?"."+i.split(".").pop():"",o=n.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?r===e:/\/\*$/.test(e)?o===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&n===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},od=rd,ad=s(od,nd,id,!1,null,null,null);ad.options.__file="packages/upload/src/upload-dragger.vue";var sd,ld,cd=ad.exports,ud={inject:["uploader"],components:{UploadDragger:cd},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:td},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var n=Array.prototype.slice.call(e);this.multiple||(n=n.slice(0,1)),0!==n.length&&n.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var n=this.beforeUpload(e);n&&n.then?n.then((function(n){var i=Object.prototype.toString.call(n);if("[object File]"===i||"[object Blob]"===i){for(var r in"[object Blob]"===i&&(n=new File([n],e.name,{type:e.type})),e)e.hasOwnProperty(r)&&(n[r]=e[r]);t.post(n)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==n?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var n=e;e.uid&&(n=e.uid),t[n]&&t[n].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,n=e.uid,i={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(n){t.onProgress(n,e)},onSuccess:function(i){t.onSuccess(i,e),delete t.reqs[n]},onError:function(i){t.onError(i,e),delete t.reqs[n]}},r=this.httpRequest(i);this.reqs[n]=r,r&&r.then&&r.then(i.onSuccess,i.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,n=this.drag,i=this.name,r=this.handleChange,o=this.multiple,a=this.accept,s=this.listType,l=this.uploadFiles,c=this.disabled,u=this.handleKeydown,d={class:{"el-upload":!0},on:{click:t,keydown:u}};return d.class["el-upload--"+s]=!0,e("div",Ju()([d,{attrs:{tabindex:"0"}}]),[n?e("upload-dragger",{attrs:{disabled:c},on:{file:l}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:i,multiple:o,accept:a},ref:"input",on:{change:r}})])}},dd=ud,hd=s(dd,sd,ld,!1,null,null,null);hd.options.__file="packages/upload/src/upload.vue";var fd=hd.exports;function pd(){}var md,vd,gd={name:"ElUpload",mixins:[O.a],components:{ElProgress:Uu.a,UploadList:Xu,Upload:fd},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,required:!0},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:pd},onChange:{type:Function,default:pd},onPreview:{type:Function},onSuccess:{type:Function,default:pd},onProgress:{type:Function,default:pd},onError:{type:Function,default:pd},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:pd}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(n){return void console.error("[Element Error][Upload]",n)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var n=this.getFile(t);this.onProgress(e,n,this.uploadFiles),n.status="uploading",n.percentage=e.percent||0},handleSuccess:function(e,t){var n=this.getFile(t);n&&(n.status="success",n.response=e,this.onSuccess(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles))},handleError:function(e,t){var n=this.getFile(t),i=this.uploadFiles;n.status="fail",i.splice(i.indexOf(n),1),this.onError(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles)},handleRemove:function(e,t){var n=this;t&&(e=this.getFile(t));var i=function(){n.abort(e);var t=n.uploadFiles;t.splice(t.indexOf(e),1),n.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var r=this.beforeRemove(e,this.uploadFiles);r&&r.then?r.then((function(){i()}),pd):!1!==r&&i()}}else i()},getFile:function(e){var t=this.uploadFiles,n=void 0;return t.every((function(t){return n=e.uid===t.uid?t:null,!n})),n},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t=this,n=void 0;this.showFileList&&(n=e(Xu,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(t.$scopedSlots.file)return t.$scopedSlots.file({file:e.file})}]));var i={props:{type:this.type,drag:this.drag,action:this.action,multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest},ref:"upload-inner"},r=this.$slots.trigger||this.$slots.default,o=e("upload",i,[r]);return e("div",["picture-card"===this.listType?n:"",this.$slots.trigger?[o,this.$slots.default]:o,this.$slots.tip,"picture-card"!==this.listType?n:""])}},bd=gd,yd=s(bd,md,vd,!1,null,null,null);yd.options.__file="packages/upload/src/index.vue";var _d=yd.exports;_d.install=function(e){e.component(_d.name,_d)};var xd=_d,wd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":"round","stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},Cd=[];wd._withStripped=!0;var kd={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;ne)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},Sd=kd,Od=s(Sd,wd,Cd,!1,null,null,null);Od.options.__file="packages/progress/src/progress.vue";var $d=Od.exports;$d.install=function(e){e.component($d.name,$d)};var Dd=$d,Ed=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-spinner"},[n("svg",{staticClass:"el-spinner-inner",style:{width:e.radius/2+"px",height:e.radius/2+"px"},attrs:{viewBox:"0 0 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"25",cy:"25",r:"20",fill:"none",stroke:e.strokeColor,"stroke-width":e.strokeWidth}})])])},Td=[];Ed._withStripped=!0;var Pd={name:"ElSpinner",props:{type:String,radius:{type:Number,default:100},strokeWidth:{type:Number,default:5},strokeColor:{type:String,default:"#efefef"}}},Md=Pd,Id=s(Md,Ed,Td,!1,null,null,null);Id.options.__file="packages/spinner/src/spinner.vue";var Nd=Id.exports;Nd.install=function(e){e.component(Nd.name,Nd)};var jd=Nd,Ad=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?n("i",{class:e.iconClass}):n("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?n("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):n("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?n("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},Fd=[];Ad._withStripped=!0;var Ld={success:"success",info:"info",warning:"warning",error:"error"},Vd={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+Ld[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},zd=Vd,Bd=s(zd,Ad,Fd,!1,null,null,null);Bd.options.__file="packages/message/src/main.vue";var Rd=Bd.exports,Hd=Wi.a.extend(Rd),Wd=void 0,qd=[],Ud=1,Yd=function e(t){if(!Wi.a.prototype.$isServer){t=t||{},"string"===typeof t&&(t={message:t});var n=t.onClose,i="message_"+Ud++;t.onClose=function(){e.close(i,n)},Wd=new Hd({data:t}),Wd.id=i,Object(ks["isVNode"])(Wd.message)&&(Wd.$slots.default=[Wd.message],Wd.message=null),Wd.$mount(),document.body.appendChild(Wd.$el);var r=t.offset||20;return qd.forEach((function(e){r+=e.$el.offsetHeight+16})),Wd.verticalOffset=r,Wd.visible=!0,Wd.$el.style.zIndex=C["PopupManager"].nextZIndex(),qd.push(Wd),Wd}};["success","warning","info","error"].forEach((function(e){Yd[e]=function(t){return"string"===typeof t&&(t={message:t}),t.type=e,Yd(t)}})),Yd.close=function(e,t){for(var n=qd.length,i=-1,r=0;rqd.length-1))for(var o=qd[i].$el.offsetHeight,a=i;a=0;e--)qd[e].close()};var Kd=Yd,Gd=Kd,Xd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-badge"},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-center"}},[n("sup",{directives:[{name:"show",rawName:"v-show",value:!e.hidden&&(e.content||0===e.content||e.isDot),expression:"!hidden && (content || content === 0 || isDot)"}],staticClass:"el-badge__content",class:["el-badge__content--"+e.type,{"is-fixed":e.$slots.default,"is-dot":e.isDot}],domProps:{textContent:e._s(e.content)}})])],2)},Zd=[];Xd._withStripped=!0;var Jd={name:"ElBadge",props:{value:[String,Number],max:Number,isDot:Boolean,hidden:Boolean,type:{type:String,validator:function(e){return["primary","success","warning","info","danger"].indexOf(e)>-1}}},computed:{content:function(){if(!this.isDot){var e=this.value,t=this.max;return"number"===typeof e&&"number"===typeof t&&t0&&e-1this.value,n=this.allowHalf&&this.pointerAtLeftHalf&&e-.5<=this.currentValue&&e>this.currentValue;return t||n},getIconStyle:function(e){var t=this.rateDisabled?this.disabledVoidColor:this.voidColor;return{color:e<=this.currentValue?this.activeColor:t}},selectValue:function(e){this.rateDisabled||(this.allowHalf&&this.pointerAtLeftHalf?(this.$emit("input",this.currentValue),this.$emit("change",this.currentValue)):(this.$emit("input",e),this.$emit("change",e)))},handleKey:function(e){if(!this.rateDisabled){var t=this.currentValue,n=e.keyCode;38===n||39===n?(this.allowHalf?t+=.5:t+=1,e.stopPropagation(),e.preventDefault()):37!==n&&40!==n||(this.allowHalf?t-=.5:t-=1,e.stopPropagation(),e.preventDefault()),t=t<0?0:t,t=t>this.max?this.max:t,this.$emit("input",t),this.$emit("change",t)}},setCurrentValue:function(e,t){if(!this.rateDisabled){if(this.allowHalf){var n=t.target;Object(Le["hasClass"])(n,"el-rate__item")&&(n=n.querySelector(".el-rate__icon")),Object(Le["hasClass"])(n,"el-rate__decimal")&&(n=n.parentNode),this.pointerAtLeftHalf=2*t.offsetX<=n.clientWidth,this.currentValue=this.pointerAtLeftHalf?e-.5:e}else this.currentValue=e;this.hoverIndex=e}},resetCurrentValue:function(){this.rateDisabled||(this.allowHalf&&(this.pointerAtLeftHalf=this.value!==Math.floor(this.value)),this.currentValue=this.value,this.hoverIndex=-1)}},created:function(){this.value||this.$emit("input",0)}},ph=fh,mh=s(ph,uh,dh,!1,null,null,null);mh.options.__file="packages/rate/src/main.vue";var vh=mh.exports;vh.install=function(e){e.component(vh.name,vh)};var gh=vh,bh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-steps",class:[!e.simple&&"el-steps--"+e.direction,e.simple&&"el-steps--simple"]},[e._t("default")],2)},yh=[];bh._withStripped=!0;var _h={name:"ElSteps",mixins:[O.a],props:{space:[Number,String],active:Number,direction:{type:String,default:"horizontal"},alignCenter:Boolean,simple:Boolean,finishStatus:{type:String,default:"finish"},processStatus:{type:String,default:"process"}},data:function(){return{steps:[],stepOffset:0}},methods:{getMigratingConfig:function(){return{props:{center:"center is removed."}}}},watch:{active:function(e,t){this.$emit("change",e,t)},steps:function(e){e.forEach((function(e,t){e.index=t}))}}},xh=_h,wh=s(xh,bh,yh,!1,null,null,null);wh.options.__file="packages/steps/src/steps.vue";var Ch=wh.exports;Ch.install=function(e){e.component(Ch.name,Ch)};var kh=Ch,Sh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-step",class:[!e.isSimple&&"is-"+e.$parent.direction,e.isSimple&&"is-simple",e.isLast&&!e.space&&!e.isCenter&&"is-flex",e.isCenter&&!e.isVertical&&!e.isSimple&&"is-center"],style:e.style},[n("div",{staticClass:"el-step__head",class:"is-"+e.currentStatus},[n("div",{staticClass:"el-step__line",style:e.isLast?"":{marginRight:e.$parent.stepOffset+"px"}},[n("i",{staticClass:"el-step__line-inner",style:e.lineStyle})]),n("div",{staticClass:"el-step__icon",class:"is-"+(e.icon?"icon":"text")},["success"!==e.currentStatus&&"error"!==e.currentStatus?e._t("icon",[e.icon?n("i",{staticClass:"el-step__icon-inner",class:[e.icon]}):e._e(),e.icon||e.isSimple?e._e():n("div",{staticClass:"el-step__icon-inner"},[e._v(e._s(e.index+1))])]):n("i",{staticClass:"el-step__icon-inner is-status",class:["el-icon-"+("success"===e.currentStatus?"check":"close")]})],2)]),n("div",{staticClass:"el-step__main"},[n("div",{ref:"title",staticClass:"el-step__title",class:["is-"+e.currentStatus]},[e._t("title",[e._v(e._s(e.title))])],2),e.isSimple?n("div",{staticClass:"el-step__arrow"}):n("div",{staticClass:"el-step__description",class:["is-"+e.currentStatus]},[e._t("description",[e._v(e._s(e.description))])],2)])])},Oh=[];Sh._withStripped=!0;var $h={name:"ElStep",props:{title:String,icon:String,description:String,status:String},data:function(){return{index:-1,lineStyle:{},internalStatus:""}},beforeCreate:function(){this.$parent.steps.push(this)},beforeDestroy:function(){var e=this.$parent.steps,t=e.indexOf(this);t>=0&&e.splice(t,1)},computed:{currentStatus:function(){return this.status||this.internalStatus},prevStatus:function(){var e=this.$parent.steps[this.index-1];return e?e.currentStatus:"wait"},isCenter:function(){return this.$parent.alignCenter},isVertical:function(){return"vertical"===this.$parent.direction},isSimple:function(){return this.$parent.simple},isLast:function(){var e=this.$parent;return e.steps[e.steps.length-1]===this},stepsCount:function(){return this.$parent.steps.length},space:function(){var e=this.isSimple,t=this.$parent.space;return e?"":t},style:function(){var e={},t=this.$parent,n=t.steps.length,i="number"===typeof this.space?this.space+"px":this.space?this.space:100/(n-(this.isCenter?0:1))+"%";return e.flexBasis=i,this.isVertical?e:(this.isLast?e.maxWidth=100/this.stepsCount+"%":e.marginRight=-this.$parent.stepOffset+"px",e)}},methods:{updateStatus:function(e){var t=this.$parent.$children[this.index-1];e>this.index?this.internalStatus=this.$parent.finishStatus:e===this.index&&"error"!==this.prevStatus?this.internalStatus=this.$parent.processStatus:this.internalStatus="wait",t&&t.calcProgress(this.internalStatus)},calcProgress:function(e){var t=100,n={};n.transitionDelay=150*this.index+"ms",e===this.$parent.processStatus?(this.currentStatus,t=0):"wait"===e&&(t=0,n.transitionDelay=-150*this.index+"ms"),n.borderWidth=t&&!this.isSimple?"1px":0,"vertical"===this.$parent.direction?n.height=t+"%":n.width=t+"%",this.lineStyle=n}},mounted:function(){var e=this,t=this.$watch("index",(function(n){e.$watch("$parent.active",e.updateStatus,{immediate:!0}),e.$watch("$parent.processStatus",(function(){var t=e.$parent.active;e.updateStatus(t)}),{immediate:!0}),t()}))}},Dh=$h,Eh=s(Dh,Sh,Oh,!1,null,null,null);Eh.options.__file="packages/steps/src/step.vue";var Th=Eh.exports;Th.install=function(e){e.component(Th.name,Th)};var Ph=Th,Mh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.carouselClasses,on:{mouseenter:function(t){return t.stopPropagation(),e.handleMouseEnter(t)},mouseleave:function(t){return t.stopPropagation(),e.handleMouseLeave(t)}}},[n("div",{staticClass:"el-carousel__container",style:{height:e.height}},[e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-left"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex>0),expression:"(arrow === 'always' || hover) && (loop || activeIndex > 0)"}],staticClass:"el-carousel__arrow el-carousel__arrow--left",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("left")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex-1)}}},[n("i",{staticClass:"el-icon-arrow-left"})])]):e._e(),e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-right"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex0}))},carouselClasses:function(){var e=["el-carousel","el-carousel--"+this.direction];return"card"===this.type&&e.push("el-carousel--card"),e},indicatorsClasses:function(){var e=["el-carousel__indicators","el-carousel__indicators--"+this.direction];return this.hasLabel&&e.push("el-carousel__indicators--labels"),"outside"!==this.indicatorPosition&&"card"!==this.type||e.push("el-carousel__indicators--outside"),e}},watch:{items:function(e){e.length>0&&this.setActiveItem(this.initialIndex)},activeIndex:function(e,t){this.resetItemPosition(t),t>-1&&this.$emit("change",e,t)},autoplay:function(e){e?this.startTimer():this.pauseTimer()},loop:function(){this.setActiveItem(this.activeIndex)}},methods:{handleMouseEnter:function(){this.hover=!0,this.pauseTimer()},handleMouseLeave:function(){this.hover=!1,this.startTimer()},itemInStage:function(e,t){var n=this.items.length;return t===n-1&&e.inStage&&this.items[0].active||e.inStage&&this.items[t+1]&&this.items[t+1].active?"left":!!(0===t&&e.inStage&&this.items[n-1].active||e.inStage&&this.items[t-1]&&this.items[t-1].active)&&"right"},handleButtonEnter:function(e){var t=this;"vertical"!==this.direction&&this.items.forEach((function(n,i){e===t.itemInStage(n,i)&&(n.hover=!0)}))},handleButtonLeave:function(){"vertical"!==this.direction&&this.items.forEach((function(e){e.hover=!1}))},updateItems:function(){this.items=this.$children.filter((function(e){return"ElCarouselItem"===e.$options.name}))},resetItemPosition:function(e){var t=this;this.items.forEach((function(n,i){n.translateItem(i,t.activeIndex,e)}))},playSlides:function(){this.activeIndex0&&(e=this.items.indexOf(t[0]))}if(e=Number(e),isNaN(e)||e!==Math.floor(e))console.warn("[Element Warn][Carousel]index must be an integer.");else{var n=this.items.length,i=this.activeIndex;this.activeIndex=e<0?this.loop?n-1:0:e>=n?this.loop?0:n-1:e,i===this.activeIndex&&this.resetItemPosition(i)}},prev:function(){this.setActiveItem(this.activeIndex-1)},next:function(){this.setActiveItem(this.activeIndex+1)},handleIndicatorClick:function(e){this.activeIndex=e},handleIndicatorHover:function(e){"hover"===this.trigger&&e!==this.activeIndex&&(this.activeIndex=e)}},created:function(){var e=this;this.throttledArrowClick=jh()(300,!0,(function(t){e.setActiveItem(t)})),this.throttledIndicatorHover=jh()(300,(function(t){e.handleIndicatorHover(t)}))},mounted:function(){var e=this;this.updateItems(),this.$nextTick((function(){Object(ei["addResizeListener"])(e.$el,e.resetItemPosition),e.initialIndex=0&&(e.activeIndex=e.initialIndex),e.startTimer()}))},beforeDestroy:function(){this.$el&&Object(ei["removeResizeListener"])(this.$el,this.resetItemPosition),this.pauseTimer()}},Fh=Ah,Lh=s(Fh,Mh,Ih,!1,null,null,null);Lh.options.__file="packages/carousel/src/main.vue";var Vh=Lh.exports;Vh.install=function(e){e.component(Vh.name,Vh)};var zh=Vh,Bh={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function Rh(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var Hh={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return Bh[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:Rh({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(Le["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(Le["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(Le["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(Le["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},Wh={name:"ElScrollbar",components:{Bar:Hh},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=yr()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(b["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var o=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),a=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[o]]),s=void 0;return s=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[o]])]:[a,e(Hh,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(Hh,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},s)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(ei["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(ei["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(Wh.name,Wh)}},qh=Wh,Uh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"show",rawName:"v-show",value:e.ready,expression:"ready"}],staticClass:"el-carousel__item",class:{"is-active":e.active,"el-carousel__item--card":"card"===e.$parent.type,"is-in-stage":e.inStage,"is-hover":e.hover,"is-animating":e.animating},style:e.itemStyle,on:{click:e.handleItemClick}},["card"===e.$parent.type?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.active,expression:"!active"}],staticClass:"el-carousel__mask"}):e._e(),e._t("default")],2)},Yh=[];Uh._withStripped=!0;var Kh=.83,Gh={name:"ElCarouselItem",props:{name:String,label:{type:[String,Number],default:""}},data:function(){return{hover:!1,translate:0,scale:1,active:!1,ready:!1,inStage:!1,animating:!1}},methods:{processIndex:function(e,t,n){return 0===t&&e===n-1?-1:t===n-1&&0===e?n:e=n/2?n+1:e>t+1&&e-t>=n/2?-2:e},calcCardTranslate:function(e,t){var n=this.$parent.$el.offsetWidth;return this.inStage?n*((2-Kh)*(e-t)+1)/4:e2&&this.$parent.loop&&(e=this.processIndex(e,t,o)),"card"===i)"vertical"===r&&console.warn("[Element Warn][Carousel]vertical directionis not supported in card mode"),this.inStage=Math.round(Math.abs(e-t))<=1,this.active=e===t,this.translate=this.calcCardTranslate(e,t),this.scale=this.active?1:Kh;else{this.active=e===t;var a="vertical"===r;this.translate=this.calcTranslate(e,t,a)}this.ready=!0},handleItemClick:function(){var e=this.$parent;if(e&&"card"===e.type){var t=e.items.indexOf(this);e.setActiveItem(t)}}},computed:{parentDirection:function(){return this.$parent.direction},itemStyle:function(){var e="vertical"===this.parentDirection?"translateY":"translateX",t=e+"("+this.translate+"px) scale("+this.scale+")",n={transform:t};return Object(b["autoprefixer"])(n)}},created:function(){this.$parent&&this.$parent.updateItems()},destroyed:function(){this.$parent&&this.$parent.updateItems()}},Xh=Gh,Zh=s(Xh,Uh,Yh,!1,null,null,null);Zh.options.__file="packages/carousel/src/item.vue";var Jh=Zh.exports;Jh.install=function(e){e.component(Jh.name,Jh)};var Qh=Jh,ef=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse",attrs:{role:"tablist","aria-multiselectable":"true"}},[e._t("default")],2)},tf=[];ef._withStripped=!0;var nf={name:"ElCollapse",componentName:"ElCollapse",props:{accordion:Boolean,value:{type:[Array,String,Number],default:function(){return[]}}},data:function(){return{activeNames:[].concat(this.value)}},provide:function(){return{collapse:this}},watch:{value:function(e){this.activeNames=[].concat(e)}},methods:{setActiveNames:function(e){e=[].concat(e);var t=this.accordion?e[0]:e;this.activeNames=e,this.$emit("input",t),this.$emit("change",t)},handleItemClick:function(e){if(this.accordion)this.setActiveNames(!this.activeNames[0]&&0!==this.activeNames[0]||this.activeNames[0]!==e.name?e.name:"");else{var t=this.activeNames.slice(0),n=t.indexOf(e.name);n>-1?t.splice(n,1):t.push(e.name),this.setActiveNames(t)}}},created:function(){this.$on("item-click",this.handleItemClick)}},rf=nf,of=s(rf,ef,tf,!1,null,null,null);of.options.__file="packages/collapse/src/collapse.vue";var af=of.exports;af.install=function(e){e.component(af.name,af)};var sf=af,lf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse-item",class:{"is-active":e.isActive,"is-disabled":e.disabled}},[n("div",{attrs:{role:"tab","aria-expanded":e.isActive,"aria-controls":"el-collapse-content-"+e.id,"aria-describedby":"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__header",class:{focusing:e.focusing,"is-active":e.isActive},attrs:{role:"button",id:"el-collapse-head-"+e.id,tabindex:e.disabled?void 0:0},on:{click:e.handleHeaderClick,keyup:function(t){return"button"in t||!e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.stopPropagation(),e.handleEnterClick(t)):null},focus:e.handleFocus,blur:function(t){e.focusing=!1}}},[e._t("title",[e._v(e._s(e.title))]),n("i",{staticClass:"el-collapse-item__arrow el-icon-arrow-right",class:{"is-active":e.isActive}})],2)]),n("el-collapse-transition",[n("div",{directives:[{name:"show",rawName:"v-show",value:e.isActive,expression:"isActive"}],staticClass:"el-collapse-item__wrap",attrs:{role:"tabpanel","aria-hidden":!e.isActive,"aria-labelledby":"el-collapse-head-"+e.id,id:"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__content"},[e._t("default")],2)])])],1)},cf=[];lf._withStripped=!0;var uf={name:"ElCollapseItem",componentName:"ElCollapseItem",mixins:[D.a],components:{ElCollapseTransition:Ye.a},data:function(){return{contentWrapStyle:{height:"auto",display:"block"},contentHeight:0,focusing:!1,isClick:!1,id:Object(b["generateId"])()}},inject:["collapse"],props:{title:String,name:{type:[String,Number],default:function(){return this._uid}},disabled:Boolean},computed:{isActive:function(){return this.collapse.activeNames.indexOf(this.name)>-1}},methods:{handleFocus:function(){var e=this;setTimeout((function(){e.isClick?e.isClick=!1:e.focusing=!0}),50)},handleHeaderClick:function(){this.disabled||(this.dispatch("ElCollapse","item-click",this),this.focusing=!1,this.isClick=!0)},handleEnterClick:function(){this.dispatch("ElCollapse","item-click",this)}}},df=uf,hf=s(df,lf,cf,!1,null,null,null);hf.options.__file="packages/collapse/src/collapse-item.vue";var ff=hf.exports;ff.install=function(e){e.component(ff.name,ff)};var pf=ff,mf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:function(){return e.toggleDropDownVisible(!1)},expression:"() => toggleDropDownVisible(false)"}],ref:"reference",class:["el-cascader",e.realSize&&"el-cascader--"+e.realSize,{"is-disabled":e.isDisabled}],on:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1},click:function(){return e.toggleDropDownVisible(!e.readonly||void 0)},keydown:e.handleKeyDown}},[n("el-input",{ref:"input",class:{"is-focus":e.dropDownVisible},attrs:{size:e.realSize,placeholder:e.placeholder,readonly:e.readonly,disabled:e.isDisabled,"validate-event":!1},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput},model:{value:e.multiple?e.presentText:e.inputValue,callback:function(t){e.multiple?e.presentText:e.inputValue=t},expression:"multiple ? presentText : inputValue"}},[n("template",{slot:"suffix"},[e.clearBtnVisible?n("i",{key:"clear",staticClass:"el-input__icon el-icon-circle-close",on:{click:function(t){return t.stopPropagation(),e.handleClear(t)}}}):n("i",{key:"arrow-down",class:["el-input__icon","el-icon-arrow-down",e.dropDownVisible&&"is-reverse"],on:{click:function(t){t.stopPropagation(),e.toggleDropDownVisible()}}})])],2),e.multiple?n("div",{staticClass:"el-cascader__tags"},[e._l(e.presentTags,(function(t,i){return n("el-tag",{key:t.key,attrs:{type:"info",size:e.tagSize,hit:t.hitState,closable:t.closable,"disable-transitions":""},on:{close:function(t){e.deleteTag(i)}}},[n("span",[e._v(e._s(t.text))])])})),e.filterable&&!e.isDisabled?n("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.inputValue,expression:"inputValue",modifiers:{trim:!0}}],staticClass:"el-cascader__search-input",attrs:{type:"text",placeholder:e.presentTags.length?"":e.placeholder},domProps:{value:e.inputValue},on:{input:[function(t){t.target.composing||(e.inputValue=t.target.value.trim())},function(t){return e.handleInput(e.inputValue,t)}],click:function(t){t.stopPropagation(),e.toggleDropDownVisible(!0)},keydown:function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.handleDelete(t):null},blur:function(t){e.$forceUpdate()}}}):e._e()],2):e._e(),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.handleDropdownLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.dropDownVisible,expression:"dropDownVisible"}],ref:"popper",class:["el-popper","el-cascader__dropdown",e.popperClass]},[n("el-cascader-panel",{directives:[{name:"show",rawName:"v-show",value:!e.filtering,expression:"!filtering"}],ref:"panel",attrs:{options:e.options,props:e.config,border:!1,"render-label":e.$scopedSlots.default},on:{"expand-change":e.handleExpandChange,close:function(t){e.toggleDropDownVisible(!1)}},model:{value:e.checkedValue,callback:function(t){e.checkedValue=t},expression:"checkedValue"}}),e.filterable?n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.filtering,expression:"filtering"}],ref:"suggestionPanel",staticClass:"el-cascader__suggestion-panel",attrs:{tag:"ul","view-class":"el-cascader__suggestion-list"},nativeOn:{keydown:function(t){return e.handleSuggestionKeyDown(t)}}},[e.suggestions.length?e._l(e.suggestions,(function(t,i){return n("li",{key:t.uid,class:["el-cascader__suggestion-item",t.checked&&"is-checked"],attrs:{tabindex:-1},on:{click:function(t){e.handleSuggestionClick(i)}}},[n("span",[e._v(e._s(t.text))]),t.checked?n("i",{staticClass:"el-icon-check"}):e._e()])})):e._t("empty",[n("li",{staticClass:"el-cascader__empty-text"},[e._v(e._s(e.t("el.cascader.noMatch")))])])],2):e._e()],1)])],1)},vf=[];mf._withStripped=!0;var gf=n(42),bf=n.n(gf),yf=n(33),_f=n.n(yf),xf=_f.a.keys,wf={expandTrigger:{newProp:"expandTrigger",type:String},changeOnSelect:{newProp:"checkStrictly",type:Boolean},hoverThreshold:{newProp:"hoverThreshold",type:Number}},Cf={props:{placement:{type:String,default:"bottom-start"},appendToBody:H.a.props.appendToBody,visibleArrow:{type:Boolean,default:!0},arrowOffset:H.a.props.arrowOffset,offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},methods:H.a.methods,data:H.a.data,beforeDestroy:H.a.beforeDestroy},kf={medium:36,small:32,mini:28},Sf={name:"ElCascader",directives:{Clickoutside:V.a},mixins:[Cf,D.a,g.a,O.a],inject:{elForm:{default:""},elFormItem:{default:""}},components:{ElInput:m.a,ElTag:Qn.a,ElScrollbar:q.a,ElCascaderPanel:bf.a},props:{value:{},options:Array,props:Object,size:String,placeholder:{type:String,default:function(){return Object(ti["t"])("el.cascader.placeholder")}},disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:Function,separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,debounce:{type:Number,default:300},beforeFilter:{type:Function,default:function(){return function(){}}},popperClass:String},data:function(){return{dropDownVisible:!1,checkedValue:this.value||null,inputHover:!1,inputValue:null,presentText:null,presentTags:[],checkedNodes:[],filtering:!1,suggestions:[],inputInitialHeight:0,pressDeleteCount:0}},computed:{realSize:function(){var e=(this.elFormItem||{}).elFormItemSize;return this.size||e||(this.$ELEMENT||{}).size},tagSize:function(){return["small","mini"].indexOf(this.realSize)>-1?"mini":"small"},isDisabled:function(){return this.disabled||(this.elForm||{}).disabled},config:function(){var e=this.props||{},t=this.$attrs;return Object.keys(wf).forEach((function(n){var i=wf[n],r=i.newProp,o=i.type,a=t[n]||t[Object(b["kebabCase"])(n)];Object(Ot["isDef"])(n)&&!Object(Ot["isDef"])(e[r])&&(o===Boolean&&""===a&&(a=!0),e[r]=a)})),e},multiple:function(){return this.config.multiple},leafOnly:function(){return!this.config.checkStrictly},readonly:function(){return!this.filterable||this.multiple},clearBtnVisible:function(){return!(!this.clearable||this.isDisabled||this.filtering||!this.inputHover)&&(this.multiple?!!this.checkedNodes.filter((function(e){return!e.isDisabled})).length:!!this.presentText)},panel:function(){return this.$refs.panel}},watch:{disabled:function(){this.computePresentContent()},value:function(e){Object(b["isEqual"])(e,this.checkedValue)||(this.checkedValue=e,this.computePresentContent())},checkedValue:function(e){var t=this.value,n=this.dropDownVisible,i=this.config,r=i.checkStrictly,o=i.multiple;Object(b["isEqual"])(e,t)&&!Object(hh["isUndefined"])(t)||(this.computePresentContent(),o||r||!n||this.toggleDropDownVisible(!1),this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",[e]))},options:{handler:function(){this.$nextTick(this.computePresentContent)},deep:!0},presentText:function(e){this.inputValue=e},presentTags:function(e,t){this.multiple&&(e.length||t.length)&&this.$nextTick(this.updateStyle)},filtering:function(e){this.$nextTick(this.updatePopper)}},mounted:function(){var e=this,t=this.$refs.input;t&&t.$el&&(this.inputInitialHeight=t.$el.offsetHeight||kf[this.realSize]||40),Object(b["isEmpty"])(this.value)||this.computePresentContent(),this.filterHandler=F()(this.debounce,(function(){var t=e.inputValue;if(t){var n=e.beforeFilter(t);n&&n.then?n.then(e.getSuggestions):!1!==n?e.getSuggestions():e.filtering=!1}else e.filtering=!1})),Object(ei["addResizeListener"])(this.$el,this.updateStyle)},beforeDestroy:function(){Object(ei["removeResizeListener"])(this.$el,this.updateStyle)},methods:{getMigratingConfig:function(){return{props:{"expand-trigger":"expand-trigger is removed, use `props.expandTrigger` instead.","change-on-select":"change-on-select is removed, use `props.checkStrictly` instead.","hover-threshold":"hover-threshold is removed, use `props.hoverThreshold` instead"},events:{"active-item-change":"active-item-change is renamed to expand-change"}}},toggleDropDownVisible:function(e){var t=this;if(!this.isDisabled){var n=this.dropDownVisible,i=this.$refs.input;e=Object(Ot["isDef"])(e)?e:!n,e!==n&&(this.dropDownVisible=e,e&&this.$nextTick((function(){t.updatePopper(),t.panel.scrollIntoView()})),i.$refs.input.setAttribute("aria-expanded",e),this.$emit("visible-change",e))}},handleDropdownLeave:function(){this.filtering=!1,this.inputValue=this.presentText},handleKeyDown:function(e){switch(e.keyCode){case xf.enter:this.toggleDropDownVisible();break;case xf.down:this.toggleDropDownVisible(!0),this.focusFirstNode(),e.preventDefault();break;case xf.esc:case xf.tab:this.toggleDropDownVisible(!1);break}},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleInput:function(e,t){!this.dropDownVisible&&this.toggleDropDownVisible(!0),t&&t.isComposing||(e?this.filterHandler():this.filtering=!1)},handleClear:function(){this.presentText="",this.panel.clearCheckedNodes()},handleExpandChange:function(e){this.$nextTick(this.updatePopper.bind(this)),this.$emit("expand-change",e),this.$emit("active-item-change",e)},focusFirstNode:function(){var e=this;this.$nextTick((function(){var t=e.filtering,n=e.$refs,i=n.popper,r=n.suggestionPanel,o=null;if(t&&r)o=r.$el.querySelector(".el-cascader__suggestion-item");else{var a=i.querySelector(".el-cascader-menu");o=a.querySelector('.el-cascader-node[tabindex="-1"]')}o&&(o.focus(),!t&&o.click())}))},computePresentContent:function(){var e=this;this.$nextTick((function(){e.config.multiple?(e.computePresentTags(),e.presentText=e.presentTags.length?" ":null):e.computePresentText()}))},computePresentText:function(){var e=this.checkedValue,t=this.config;if(!Object(b["isEmpty"])(e)){var n=this.panel.getNodeByValue(e);if(n&&(t.checkStrictly||n.isLeaf))return void(this.presentText=n.getText(this.showAllLevels,this.separator))}this.presentText=null},computePresentTags:function(){var e=this.isDisabled,t=this.leafOnly,n=this.showAllLevels,i=this.separator,r=this.collapseTags,o=this.getCheckedNodes(t),a=[],s=function(t){return{node:t,key:t.uid,text:t.getText(n,i),hitState:!1,closable:!e&&!t.isDisabled}};if(o.length){var l=o[0],c=o.slice(1),u=c.length;a.push(s(l)),u&&(r?a.push({key:-1,text:"+ "+u,closable:!1}):c.forEach((function(e){return a.push(s(e))})))}this.checkedNodes=o,this.presentTags=a},getSuggestions:function(){var e=this,t=this.filterMethod;Object(hh["isFunction"])(t)||(t=function(e,t){return e.text.includes(t)});var n=this.panel.getFlattedNodes(this.leafOnly).filter((function(n){return!n.isDisabled&&(n.text=n.getText(e.showAllLevels,e.separator)||"",t(n,e.inputValue))}));this.multiple?this.presentTags.forEach((function(e){e.hitState=!1})):n.forEach((function(t){t.checked=Object(b["isEqual"])(e.checkedValue,t.getValueByOption())})),this.filtering=!0,this.suggestions=n,this.$nextTick(this.updatePopper)},handleSuggestionKeyDown:function(e){var t=e.keyCode,n=e.target;switch(t){case xf.enter:n.click();break;case xf.up:var i=n.previousElementSibling;i&&i.focus();break;case xf.down:var r=n.nextElementSibling;r&&r.focus();break;case xf.esc:case xf.tab:this.toggleDropDownVisible(!1);break}},handleDelete:function(){var e=this.inputValue,t=this.pressDeleteCount,n=this.presentTags,i=n.length-1,r=n[i];this.pressDeleteCount=e?0:t+1,r&&this.pressDeleteCount&&(r.hitState?this.deleteTag(i):r.hitState=!0)},handleSuggestionClick:function(e){var t=this.multiple,n=this.suggestions[e];if(t){var i=n.checked;n.doCheck(!i),this.panel.calculateMultiCheckedValue()}else this.checkedValue=n.getValueByOption(),this.toggleDropDownVisible(!1)},deleteTag:function(e){var t=this.checkedValue,n=t[e];this.checkedValue=t.filter((function(t,n){return n!==e})),this.$emit("remove-tag",n)},updateStyle:function(){var e=this.$el,t=this.inputInitialHeight;if(!this.$isServer&&e){var n=this.$refs.suggestionPanel,i=e.querySelector(".el-input__inner");if(i){var r=e.querySelector(".el-cascader__tags"),o=null;if(n&&(o=n.$el)){var a=o.querySelector(".el-cascader__suggestion-list");a.style.minWidth=i.offsetWidth+"px"}if(r){var s=r.offsetHeight,l=Math.max(s+6,t)+"px";i.style.height=l,this.updatePopper()}}}},getCheckedNodes:function(e){return this.panel.getCheckedNodes(e)}}},Of=Sf,$f=s(Of,mf,vf,!1,null,null,null);$f.options.__file="packages/cascader/src/cascader.vue";var Df=$f.exports;Df.install=function(e){e.component(Df.name,Df)};var Ef=Df,Tf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.hide,expression:"hide"}],class:["el-color-picker",e.colorDisabled?"is-disabled":"",e.colorSize?"el-color-picker--"+e.colorSize:""]},[e.colorDisabled?n("div",{staticClass:"el-color-picker__mask"}):e._e(),n("div",{staticClass:"el-color-picker__trigger",on:{click:e.handleTrigger}},[n("span",{staticClass:"el-color-picker__color",class:{"is-alpha":e.showAlpha}},[n("span",{staticClass:"el-color-picker__color-inner",style:{backgroundColor:e.displayedColor}}),e.value||e.showPanelColor?e._e():n("span",{staticClass:"el-color-picker__empty el-icon-close"})]),n("span",{directives:[{name:"show",rawName:"v-show",value:e.value||e.showPanelColor,expression:"value || showPanelColor"}],staticClass:"el-color-picker__icon el-icon-arrow-down"})]),n("picker-dropdown",{ref:"dropdown",class:["el-color-picker__panel",e.popperClass||""],attrs:{color:e.color,"show-alpha":e.showAlpha,predefine:e.predefine},on:{pick:e.confirmValue,clear:e.clearValue},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},Pf=[];Tf._withStripped=!0;var Mf="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function If(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Nf=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},jf=function(e){return"string"===typeof e&&-1!==e.indexOf(".")&&1===parseFloat(e)},Af=function(e){return"string"===typeof e&&-1!==e.indexOf("%")},Ff=function(e,t){jf(e)&&(e="100%");var n=Af(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},Lf={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Vf=function(e){var t=e.r,n=e.g,i=e.b,r=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),n=e%16;return""+(Lf[t]||t)+(Lf[n]||n)};return isNaN(t)||isNaN(n)||isNaN(i)?"":"#"+r(t)+r(n)+r(i)},zf={A:10,B:11,C:12,D:13,E:14,F:15},Bf=function(e){return 2===e.length?16*(zf[e[0].toUpperCase()]||+e[0])+(zf[e[1].toUpperCase()]||+e[1]):zf[e[1].toUpperCase()]||+e[1]},Rf=function(e,t,n){t/=100,n/=100;var i=t,r=Math.max(n,.01),o=void 0,a=void 0;return n*=2,t*=n<=1?n:2-n,i*=r<=1?r:2-r,a=(n+t)/2,o=0===n?2*i/(r+i):2*t/(n+t),{h:e,s:100*o,v:100*a}},Hf=function(e,t,n){e=Ff(e,255),t=Ff(t,255),n=Ff(n,255);var i=Math.max(e,t,n),r=Math.min(e,t,n),o=void 0,a=void 0,s=i,l=i-r;if(a=0===i?0:l/i,i===r)o=0;else{switch(i){case e:o=(t-n)/l+(t2?parseFloat(e):parseInt(e,10)}));if(4===i.length?this._alpha=Math.floor(100*parseFloat(i[3])):3===i.length&&(this._alpha=100),i.length>=3){var r=Rf(i[0],i[1],i[2]),o=r.h,a=r.s,s=r.v;n(o,a,s)}}else if(-1!==e.indexOf("hsv")){var l=e.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));4===l.length?this._alpha=Math.floor(100*parseFloat(l[3])):3===l.length&&(this._alpha=100),l.length>=3&&n(l[0],l[1],l[2])}else if(-1!==e.indexOf("rgb")){var c=e.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===c.length?this._alpha=Math.floor(100*parseFloat(c[3])):3===c.length&&(this._alpha=100),c.length>=3){var u=Hf(c[0],c[1],c[2]),d=u.h,h=u.s,f=u.v;n(d,h,f)}}else if(-1!==e.indexOf("#")){var p=e.replace("#","").trim();if(!/^(?:[0-9a-fA-F]{3}){1,2}$/.test(p))return;var m=void 0,v=void 0,g=void 0;3===p.length?(m=Bf(p[0]+p[0]),v=Bf(p[1]+p[1]),g=Bf(p[2]+p[2])):6!==p.length&&8!==p.length||(m=Bf(p.substring(0,2)),v=Bf(p.substring(2,4)),g=Bf(p.substring(4,6))),8===p.length?this._alpha=Math.floor(Bf(p.substring(6))/255*100):3!==p.length&&6!==p.length||(this._alpha=100);var b=Hf(m,v,g),y=b.h,_=b.s,x=b.v;n(y,_,x)}},e.prototype.compare=function(e){return Math.abs(e._hue-this._hue)<2&&Math.abs(e._saturation-this._saturation)<1&&Math.abs(e._value-this._value)<1&&Math.abs(e._alpha-this._alpha)<1},e.prototype.doOnChange=function(){var e=this._hue,t=this._saturation,n=this._value,i=this._alpha,r=this.format;if(this.enableAlpha)switch(r){case"hsl":var o=Nf(e,t/100,n/100);this.value="hsla("+e+", "+Math.round(100*o[1])+"%, "+Math.round(100*o[2])+"%, "+i/100+")";break;case"hsv":this.value="hsva("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%, "+i/100+")";break;default:var a=Wf(e,t,n),s=a.r,l=a.g,c=a.b;this.value="rgba("+s+", "+l+", "+c+", "+i/100+")"}else switch(r){case"hsl":var u=Nf(e,t/100,n/100);this.value="hsl("+e+", "+Math.round(100*u[1])+"%, "+Math.round(100*u[2])+"%)";break;case"hsv":this.value="hsv("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%)";break;case"rgb":var d=Wf(e,t,n),h=d.r,f=d.g,p=d.b;this.value="rgb("+h+", "+f+", "+p+")";break;default:this.value=Vf(Wf(e,t,n))}},e}(),Uf=qf,Yf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-color-dropdown"},[n("div",{staticClass:"el-color-dropdown__main-wrapper"},[n("hue-slider",{ref:"hue",staticStyle:{float:"right"},attrs:{color:e.color,vertical:""}}),n("sv-panel",{ref:"sl",attrs:{color:e.color}})],1),e.showAlpha?n("alpha-slider",{ref:"alpha",attrs:{color:e.color}}):e._e(),e.predefine?n("predefine",{attrs:{color:e.color,colors:e.predefine}}):e._e(),n("div",{staticClass:"el-color-dropdown__btns"},[n("span",{staticClass:"el-color-dropdown__value"},[n("el-input",{attrs:{"validate-event":!1,size:"mini"},on:{blur:e.handleConfirm},nativeOn:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleConfirm(t):null}},model:{value:e.customInput,callback:function(t){e.customInput=t},expression:"customInput"}})],1),n("el-button",{staticClass:"el-color-dropdown__link-btn",attrs:{size:"mini",type:"text"},on:{click:function(t){e.$emit("clear")}}},[e._v("\n "+e._s(e.t("el.colorpicker.clear"))+"\n ")]),n("el-button",{staticClass:"el-color-dropdown__btn",attrs:{plain:"",size:"mini"},on:{click:e.confirmValue}},[e._v("\n "+e._s(e.t("el.colorpicker.confirm"))+"\n ")])],1)],1)])},Kf=[];Yf._withStripped=!0;var Gf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-svpanel",style:{backgroundColor:e.background}},[n("div",{staticClass:"el-color-svpanel__white"}),n("div",{staticClass:"el-color-svpanel__black"}),n("div",{staticClass:"el-color-svpanel__cursor",style:{top:e.cursorTop+"px",left:e.cursorLeft+"px"}},[n("div")])])},Xf=[];Gf._withStripped=!0;var Zf=!1,Jf=function(e,t){if(!Wi.a.prototype.$isServer){var n=function(e){t.drag&&t.drag(e)},i=function e(i){document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",e),document.onselectstart=null,document.ondragstart=null,Zf=!1,t.end&&t.end(i)};e.addEventListener("mousedown",(function(e){Zf||(document.onselectstart=function(){return!1},document.ondragstart=function(){return!1},document.addEventListener("mousemove",n),document.addEventListener("mouseup",i),Zf=!0,t.start&&t.start(e))}))}},Qf={name:"el-sl-panel",props:{color:{required:!0}},computed:{colorValue:function(){var e=this.color.get("hue"),t=this.color.get("value");return{hue:e,value:t}}},watch:{colorValue:function(){this.update()}},methods:{update:function(){var e=this.color.get("saturation"),t=this.color.get("value"),n=this.$el,i=n.clientWidth,r=n.clientHeight;this.cursorLeft=e*i/100,this.cursorTop=(100-t)*r/100,this.background="hsl("+this.color.get("hue")+", 100%, 50%)"},handleDrag:function(e){var t=this.$el,n=t.getBoundingClientRect(),i=e.clientX-n.left,r=e.clientY-n.top;i=Math.max(0,i),i=Math.min(i,n.width),r=Math.max(0,r),r=Math.min(r,n.height),this.cursorLeft=i,this.cursorTop=r,this.color.set({saturation:i/n.width*100,value:100-r/n.height*100})}},mounted:function(){var e=this;Jf(this.$el,{drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}}),this.update()},data:function(){return{cursorTop:0,cursorLeft:0,background:"hsl(0, 100%, 50%)"}}},ep=Qf,tp=s(ep,Gf,Xf,!1,null,null,null);tp.options.__file="packages/color-picker/src/components/sv-panel.vue";var np=tp.exports,ip=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-hue-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-hue-slider__bar",on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-hue-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},rp=[];ip._withStripped=!0;var op={name:"el-color-hue-slider",props:{color:{required:!0},vertical:Boolean},data:function(){return{thumbLeft:0,thumbTop:0}},computed:{hueValue:function(){var e=this.color.get("hue");return e}},watch:{hueValue:function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb,i=void 0;if(this.vertical){var r=e.clientY-t.top;r=Math.min(r,t.height-n.offsetHeight/2),r=Math.max(n.offsetHeight/2,r),i=Math.round((r-n.offsetHeight/2)/(t.height-n.offsetHeight)*360)}else{var o=e.clientX-t.left;o=Math.min(o,t.width-n.offsetWidth/2),o=Math.max(n.offsetWidth/2,o),i=Math.round((o-n.offsetWidth/2)/(t.width-n.offsetWidth)*360)}this.color.set("hue",i)},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/360)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/360)},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop()}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},ap=op,sp=s(ap,ip,rp,!1,null,null,null);sp.options.__file="packages/color-picker/src/components/hue-slider.vue";var lp=sp.exports,cp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-alpha-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-alpha-slider__bar",style:{background:e.background},on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-alpha-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},up=[];cp._withStripped=!0;var dp={name:"el-color-alpha-slider",props:{color:{required:!0},vertical:Boolean},watch:{"color._alpha":function(){this.update()},"color.value":function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb;if(this.vertical){var i=e.clientY-t.top;i=Math.max(n.offsetHeight/2,i),i=Math.min(i,t.height-n.offsetHeight/2),this.color.set("alpha",Math.round((i-n.offsetHeight/2)/(t.height-n.offsetHeight)*100))}else{var r=e.clientX-t.left;r=Math.max(n.offsetWidth/2,r),r=Math.min(r,t.width-n.offsetWidth/2),this.color.set("alpha",Math.round((r-n.offsetWidth/2)/(t.width-n.offsetWidth)*100))}},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/100)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/100)},getBackground:function(){if(this.color&&this.color.value){var e=this.color.toRgb(),t=e.r,n=e.g,i=e.b;return"linear-gradient(to right, rgba("+t+", "+n+", "+i+", 0) 0%, rgba("+t+", "+n+", "+i+", 1) 100%)"}return null},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop(),this.background=this.getBackground()}},data:function(){return{thumbLeft:0,thumbTop:0,background:null}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},hp=dp,fp=s(hp,cp,up,!1,null,null,null);fp.options.__file="packages/color-picker/src/components/alpha-slider.vue";var pp=fp.exports,mp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-predefine"},[n("div",{staticClass:"el-color-predefine__colors"},e._l(e.rgbaColors,(function(t,i){return n("div",{key:e.colors[i],staticClass:"el-color-predefine__color-selector",class:{selected:t.selected,"is-alpha":t._alpha<100},on:{click:function(t){e.handleSelect(i)}}},[n("div",{style:{"background-color":t.value}})])})),0)])},vp=[];mp._withStripped=!0;var gp={props:{colors:{type:Array,required:!0},color:{required:!0}},data:function(){return{rgbaColors:this.parseColors(this.colors,this.color)}},methods:{handleSelect:function(e){this.color.fromString(this.colors[e])},parseColors:function(e,t){return e.map((function(e){var n=new Uf;return n.enableAlpha=!0,n.format="rgba",n.fromString(e),n.selected=n.value===t.value,n}))}},watch:{"$parent.currentColor":function(e){var t=new Uf;t.fromString(e),this.rgbaColors.forEach((function(e){e.selected=t.compare(e)}))},colors:function(e){this.rgbaColors=this.parseColors(e,this.color)},color:function(e){this.rgbaColors=this.parseColors(this.colors,e)}}},bp=gp,yp=s(bp,mp,vp,!1,null,null,null);yp.options.__file="packages/color-picker/src/components/predefine.vue";var _p=yp.exports,xp={name:"el-color-picker-dropdown",mixins:[H.a,g.a],components:{SvPanel:np,HueSlider:lp,AlphaSlider:pp,ElInput:m.a,ElButton:ae.a,Predefine:_p},props:{color:{required:!0},showAlpha:Boolean,predefine:Array},data:function(){return{customInput:""}},computed:{currentColor:function(){var e=this.$parent;return e.value||e.showPanelColor?e.color.value:""}},methods:{confirmValue:function(){this.$emit("pick")},handleConfirm:function(){this.color.fromString(this.customInput)}},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$el},watch:{showPopper:function(e){var t=this;!0===e&&this.$nextTick((function(){var e=t.$refs,n=e.sl,i=e.hue,r=e.alpha;n&&n.update(),i&&i.update(),r&&r.update()}))},currentColor:{immediate:!0,handler:function(e){this.customInput=e}}}},wp=xp,Cp=s(wp,Yf,Kf,!1,null,null,null);Cp.options.__file="packages/color-picker/src/components/picker-dropdown.vue";var kp=Cp.exports,Sp={name:"ElColorPicker",mixins:[D.a],props:{value:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:String,popperClass:String,predefine:Array},inject:{elForm:{default:""},elFormItem:{default:""}},directives:{Clickoutside:V.a},computed:{displayedColor:function(){return this.value||this.showPanelColor?this.displayedRgb(this.color,this.showAlpha):"transparent"},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},colorSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},colorDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){e?e&&e!==this.color.value&&this.color.fromString(e):this.showPanelColor=!1},color:{deep:!0,handler:function(){this.showPanelColor=!0}},displayedColor:function(e){if(this.showPicker){var t=new Uf({enableAlpha:this.showAlpha,format:this.colorFormat});t.fromString(this.value);var n=this.displayedRgb(t,this.showAlpha);e!==n&&this.$emit("active-change",e)}}},methods:{handleTrigger:function(){this.colorDisabled||(this.showPicker=!this.showPicker)},confirmValue:function(){var e=this.color.value;this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",e),this.showPicker=!1},clearValue:function(){this.$emit("input",null),this.$emit("change",null),null!==this.value&&this.dispatch("ElFormItem","el.form.change",null),this.showPanelColor=!1,this.showPicker=!1,this.resetColor()},hide:function(){this.showPicker=!1,this.resetColor()},resetColor:function(){var e=this;this.$nextTick((function(t){e.value?e.color.fromString(e.value):e.showPanelColor=!1}))},displayedRgb:function(e,t){if(!(e instanceof Uf))throw Error("color should be instance of Color Class");var n=e.toRgb(),i=n.r,r=n.g,o=n.b;return t?"rgba("+i+", "+r+", "+o+", "+e.get("alpha")/100+")":"rgb("+i+", "+r+", "+o+")"}},mounted:function(){var e=this.value;e&&this.color.fromString(e),this.popperElm=this.$refs.dropdown.$el},data:function(){var e=new Uf({enableAlpha:this.showAlpha,format:this.colorFormat});return{color:e,showPicker:!1,showPanelColor:!1}},components:{PickerDropdown:kp}},Op=Sp,$p=s(Op,Tf,Pf,!1,null,null,null);$p.options.__file="packages/color-picker/src/main.vue";var Dp=$p.exports;Dp.install=function(e){e.component(Dp.name,Dp)};var Ep=Dp,Tp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer"},[n("transfer-panel",e._b({ref:"leftPanel",attrs:{data:e.sourceData,title:e.titles[0]||e.t("el.transfer.titles.0"),"default-checked":e.leftDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onSourceCheckedChange}},"transfer-panel",e.$props,!1),[e._t("left-footer")],2),n("div",{staticClass:"el-transfer__buttons"},[n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.rightChecked.length},nativeOn:{click:function(t){return e.addToLeft(t)}}},[n("i",{staticClass:"el-icon-arrow-left"}),void 0!==e.buttonTexts[0]?n("span",[e._v(e._s(e.buttonTexts[0]))]):e._e()]),n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.leftChecked.length},nativeOn:{click:function(t){return e.addToRight(t)}}},[void 0!==e.buttonTexts[1]?n("span",[e._v(e._s(e.buttonTexts[1]))]):e._e(),n("i",{staticClass:"el-icon-arrow-right"})])],1),n("transfer-panel",e._b({ref:"rightPanel",attrs:{data:e.targetData,title:e.titles[1]||e.t("el.transfer.titles.1"),"default-checked":e.rightDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onTargetCheckedChange}},"transfer-panel",e.$props,!1),[e._t("right-footer")],2)],1)},Pp=[];Tp._withStripped=!0;var Mp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer-panel"},[n("p",{staticClass:"el-transfer-panel__header"},[n("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleAllCheckedChange},model:{value:e.allChecked,callback:function(t){e.allChecked=t},expression:"allChecked"}},[e._v("\n "+e._s(e.title)+"\n "),n("span",[e._v(e._s(e.checkedSummary))])])],1),n("div",{class:["el-transfer-panel__body",e.hasFooter?"is-with-footer":""]},[e.filterable?n("el-input",{staticClass:"el-transfer-panel__filter",attrs:{size:"small",placeholder:e.placeholder},nativeOn:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1}},model:{value:e.query,callback:function(t){e.query=t},expression:"query"}},[n("i",{class:["el-input__icon","el-icon-"+e.inputIcon],attrs:{slot:"prefix"},on:{click:e.clearQuery},slot:"prefix"})]):e._e(),n("el-checkbox-group",{directives:[{name:"show",rawName:"v-show",value:!e.hasNoMatch&&e.data.length>0,expression:"!hasNoMatch && data.length > 0"}],staticClass:"el-transfer-panel__list",class:{"is-filterable":e.filterable},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},e._l(e.filteredData,(function(t){return n("el-checkbox",{key:t[e.keyProp],staticClass:"el-transfer-panel__item",attrs:{label:t[e.keyProp],disabled:t[e.disabledProp]}},[n("option-content",{attrs:{option:t}})],1)})),1),n("p",{directives:[{name:"show",rawName:"v-show",value:e.hasNoMatch,expression:"hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noMatch")))]),n("p",{directives:[{name:"show",rawName:"v-show",value:0===e.data.length&&!e.hasNoMatch,expression:"data.length === 0 && !hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noData")))])],1),e.hasFooter?n("p",{staticClass:"el-transfer-panel__footer"},[e._t("default")],2):e._e()])},Ip=[];Mp._withStripped=!0;var Np={mixins:[g.a],name:"ElTransferPanel",componentName:"ElTransferPanel",components:{ElCheckboxGroup:Mr.a,ElCheckbox:Ai.a,ElInput:m.a,OptionContent:{props:{option:Object},render:function(e){var t=function e(t){return"ElTransferPanel"===t.$options.componentName?t:t.$parent?e(t.$parent):t},n=t(this),i=n.$parent||n;return n.renderContent?n.renderContent(e,this.option):i.$scopedSlots.default?i.$scopedSlots.default({option:this.option}):e("span",[this.option[n.labelProp]||this.option[n.keyProp]])}}},props:{data:{type:Array,default:function(){return[]}},renderContent:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},data:function(){return{checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}},watch:{checked:function(e,t){if(this.updateAllChecked(),this.checkChangeByUser){var n=e.concat(t).filter((function(n){return-1===e.indexOf(n)||-1===t.indexOf(n)}));this.$emit("checked-change",e,n)}else this.$emit("checked-change",e),this.checkChangeByUser=!0},data:function(){var e=this,t=[],n=this.filteredData.map((function(t){return t[e.keyProp]}));this.checked.forEach((function(e){n.indexOf(e)>-1&&t.push(e)})),this.checkChangeByUser=!1,this.checked=t},checkableData:function(){this.updateAllChecked()},defaultChecked:{immediate:!0,handler:function(e,t){var n=this;if(!t||e.length!==t.length||!e.every((function(e){return t.indexOf(e)>-1}))){var i=[],r=this.checkableData.map((function(e){return e[n.keyProp]}));e.forEach((function(e){r.indexOf(e)>-1&&i.push(e)})),this.checkChangeByUser=!1,this.checked=i}}}},computed:{filteredData:function(){var e=this;return this.data.filter((function(t){if("function"===typeof e.filterMethod)return e.filterMethod(e.query,t);var n=t[e.labelProp]||t[e.keyProp].toString();return n.toLowerCase().indexOf(e.query.toLowerCase())>-1}))},checkableData:function(){var e=this;return this.filteredData.filter((function(t){return!t[e.disabledProp]}))},checkedSummary:function(){var e=this.checked.length,t=this.data.length,n=this.format,i=n.noChecked,r=n.hasChecked;return i&&r?e>0?r.replace(/\${checked}/g,e).replace(/\${total}/g,t):i.replace(/\${total}/g,t):e+"/"+t},isIndeterminate:function(){var e=this.checked.length;return e>0&&e0&&0===this.filteredData.length},inputIcon:function(){return this.query.length>0&&this.inputHover?"circle-close":"search"},labelProp:function(){return this.props.label||"label"},keyProp:function(){return this.props.key||"key"},disabledProp:function(){return this.props.disabled||"disabled"},hasFooter:function(){return!!this.$slots.default}},methods:{updateAllChecked:function(){var e=this,t=this.checkableData.map((function(t){return t[e.keyProp]}));this.allChecked=t.length>0&&t.every((function(t){return e.checked.indexOf(t)>-1}))},handleAllCheckedChange:function(e){var t=this;this.checked=e?this.checkableData.map((function(e){return e[t.keyProp]})):[]},clearQuery:function(){"circle-close"===this.inputIcon&&(this.query="")}}},jp=Np,Ap=s(jp,Mp,Ip,!1,null,null,null);Ap.options.__file="packages/transfer/src/transfer-panel.vue";var Fp=Ap.exports,Lp={name:"ElTransfer",mixins:[D.a,g.a,O.a],components:{TransferPanel:Fp,ElButton:ae.a},props:{data:{type:Array,default:function(){return[]}},titles:{type:Array,default:function(){return[]}},buttonTexts:{type:Array,default:function(){return[]}},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:function(){return[]}},rightDefaultChecked:{type:Array,default:function(){return[]}},renderContent:Function,value:{type:Array,default:function(){return[]}},format:{type:Object,default:function(){return{}}},filterable:Boolean,props:{type:Object,default:function(){return{label:"label",key:"key",disabled:"disabled"}}},targetOrder:{type:String,default:"original"}},data:function(){return{leftChecked:[],rightChecked:[]}},computed:{dataObj:function(){var e=this.props.key;return this.data.reduce((function(t,n){return(t[n[e]]=n)&&t}),{})},sourceData:function(){var e=this;return this.data.filter((function(t){return-1===e.value.indexOf(t[e.props.key])}))},targetData:function(){var e=this;return"original"===this.targetOrder?this.data.filter((function(t){return e.value.indexOf(t[e.props.key])>-1})):this.value.reduce((function(t,n){var i=e.dataObj[n];return i&&t.push(i),t}),[])},hasButtonTexts:function(){return 2===this.buttonTexts.length}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}},methods:{getMigratingConfig:function(){return{props:{"footer-format":"footer-format is renamed to format."}}},onSourceCheckedChange:function(e,t){this.leftChecked=e,void 0!==t&&this.$emit("left-check-change",e,t)},onTargetCheckedChange:function(e,t){this.rightChecked=e,void 0!==t&&this.$emit("right-check-change",e,t)},addToLeft:function(){var e=this.value.slice();this.rightChecked.forEach((function(t){var n=e.indexOf(t);n>-1&&e.splice(n,1)})),this.$emit("input",e),this.$emit("change",e,"left",this.rightChecked)},addToRight:function(){var e=this,t=this.value.slice(),n=[],i=this.props.key;this.data.forEach((function(t){var r=t[i];e.leftChecked.indexOf(r)>-1&&-1===e.value.indexOf(r)&&n.push(r)})),t="unshift"===this.targetOrder?n.concat(t):t.concat(n),this.$emit("input",t),this.$emit("change",t,"right",this.leftChecked)},clearQuery:function(e){"left"===e?this.$refs.leftPanel.query="":"right"===e&&(this.$refs.rightPanel.query="")}}},Vp=Lp,zp=s(Vp,Tp,Pp,!1,null,null,null);zp.options.__file="packages/transfer/src/main.vue";var Bp=zp.exports;Bp.install=function(e){e.component(Bp.name,Bp)};var Rp=Bp,Hp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"el-container",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},Wp=[];Hp._withStripped=!0;var qp={name:"ElContainer",componentName:"ElContainer",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&(!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"el-header"===t||"el-footer"===t})))}}},Up=qp,Yp=s(Up,Hp,Wp,!1,null,null,null);Yp.options.__file="packages/container/src/main.vue";var Kp=Yp.exports;Kp.install=function(e){e.component(Kp.name,Kp)};var Gp=Kp,Xp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header",{staticClass:"el-header",style:{height:e.height}},[e._t("default")],2)},Zp=[];Xp._withStripped=!0;var Jp={name:"ElHeader",componentName:"ElHeader",props:{height:{type:String,default:"60px"}}},Qp=Jp,em=s(Qp,Xp,Zp,!1,null,null,null);em.options.__file="packages/header/src/main.vue";var tm=em.exports;tm.install=function(e){e.component(tm.name,tm)};var nm=tm,im=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{staticClass:"el-aside",style:{width:e.width}},[e._t("default")],2)},rm=[];im._withStripped=!0;var om={name:"ElAside",componentName:"ElAside",props:{width:{type:String,default:"300px"}}},am=om,sm=s(am,im,rm,!1,null,null,null);sm.options.__file="packages/aside/src/main.vue";var lm=sm.exports;lm.install=function(e){e.component(lm.name,lm)};var cm=lm,um=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("main",{staticClass:"el-main"},[e._t("default")],2)},dm=[];um._withStripped=!0;var hm={name:"ElMain",componentName:"ElMain"},fm=hm,pm=s(fm,um,dm,!1,null,null,null);pm.options.__file="packages/main/src/main.vue";var mm=pm.exports;mm.install=function(e){e.component(mm.name,mm)};var vm=mm,gm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("footer",{staticClass:"el-footer",style:{height:e.height}},[e._t("default")],2)},bm=[];gm._withStripped=!0;var ym={name:"ElFooter",componentName:"ElFooter",props:{height:{type:String,default:"60px"}}},_m=ym,xm=s(_m,gm,bm,!1,null,null,null);xm.options.__file="packages/footer/src/main.vue";var wm=xm.exports;wm.install=function(e){e.component(wm.name,wm)};var Cm,km,Sm=wm,Om={name:"ElTimeline",props:{reverse:{type:Boolean,default:!1}},provide:function(){return{timeline:this}},render:function(){var e=arguments[0],t=this.reverse,n={"el-timeline":!0,"is-reverse":t},i=this.$slots.default||[];return t&&(i=i.reverse()),e("ul",{class:n},[i])}},$m=Om,Dm=s($m,Cm,km,!1,null,null,null);Dm.options.__file="packages/timeline/src/main.vue";var Em=Dm.exports;Em.install=function(e){e.component(Em.name,Em)};var Tm=Em,Pm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-timeline-item"},[n("div",{staticClass:"el-timeline-item__tail"}),e.$slots.dot?e._e():n("div",{staticClass:"el-timeline-item__node",class:["el-timeline-item__node--"+(e.size||""),"el-timeline-item__node--"+(e.type||"")],style:{backgroundColor:e.color}},[e.icon?n("i",{staticClass:"el-timeline-item__icon",class:e.icon}):e._e()]),e.$slots.dot?n("div",{staticClass:"el-timeline-item__dot"},[e._t("dot")],2):e._e(),n("div",{staticClass:"el-timeline-item__wrapper"},[e.hideTimestamp||"top"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-top"},[e._v("\n "+e._s(e.timestamp)+"\n ")]),n("div",{staticClass:"el-timeline-item__content"},[e._t("default")],2),e.hideTimestamp||"bottom"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-bottom"},[e._v("\n "+e._s(e.timestamp)+"\n ")])])])},Mm=[];Pm._withStripped=!0;var Im={name:"ElTimelineItem",inject:["timeline"],props:{timestamp:String,hideTimestamp:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:String,color:String,size:{type:String,default:"normal"},icon:String}},Nm=Im,jm=s(Nm,Pm,Mm,!1,null,null,null);jm.options.__file="packages/timeline/src/item.vue";var Am=jm.exports;Am.install=function(e){e.component(Am.name,Am)};var Fm=Am,Lm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",e._b({class:["el-link",e.type?"el-link--"+e.type:"",e.disabled&&"is-disabled",e.underline&&!e.disabled&&"is-underline"],attrs:{href:e.disabled?null:e.href},on:{click:e.handleClick}},"a",e.$attrs,!1),[e.icon?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",{staticClass:"el-link--inner"},[e._t("default")],2):e._e(),e.$slots.icon?[e.$slots.icon?e._t("icon"):e._e()]:e._e()],2)},Vm=[];Lm._withStripped=!0;var zm={name:"ElLink",props:{type:{type:String,default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:String,icon:String},methods:{handleClick:function(e){this.disabled||this.href||this.$emit("click",e)}}},Bm=zm,Rm=s(Bm,Lm,Vm,!1,null,null,null);Rm.options.__file="packages/link/src/main.vue";var Hm=Rm.exports;Hm.install=function(e){e.component(Hm.name,Hm)};var Wm=Hm,qm=function(e,t){var n=t._c;return n("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?n("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},Um=[];qm._withStripped=!0;var Ym={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},Km=Ym,Gm=s(Km,qm,Um,!0,null,null,null);Gm.options.__file="packages/divider/src/main.vue";var Xm=Gm.exports;Xm.install=function(e){e.component(Xm.name,Xm)};var Zm=Xm,Jm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-image"},[e.loading?e._t("placeholder",[n("div",{staticClass:"el-image__placeholder"})]):e.error?e._t("error",[n("div",{staticClass:"el-image__error"},[e._v(e._s(e.t("el.image.error")))])]):n("img",e._g(e._b({staticClass:"el-image__inner",class:{"el-image__inner--center":e.alignCenter,"el-image__preview":e.preview},style:e.imageStyle,attrs:{src:e.src},on:{click:e.clickHandler}},"img",e.$attrs,!1),e.$listeners)),e.preview&&e.showViewer?n("image-viewer",{attrs:{"z-index":e.zIndex,"on-close":e.closeViewer,"url-list":e.previewSrcList}}):e._e()],2)},Qm=[];Jm._withStripped=!0;var ev=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"viewer-fade"}},[n("div",{staticClass:"el-image-viewer__wrapper",style:{"z-index":e.zIndex}},[n("div",{staticClass:"el-image-viewer__mask"}),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:e.hide}},[n("i",{staticClass:"el-icon-circle-close"})]),e.isSingle?e._e():[n("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{"is-disabled":!e.infinite&&e.isFirst},on:{click:e.prev}},[n("i",{staticClass:"el-icon-arrow-left"})]),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{"is-disabled":!e.infinite&&e.isLast},on:{click:e.next}},[n("i",{staticClass:"el-icon-arrow-right"})])],n("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[n("div",{staticClass:"el-image-viewer__actions__inner"},[n("i",{staticClass:"el-icon-zoom-out",on:{click:function(t){e.handleActions("zoomOut")}}}),n("i",{staticClass:"el-icon-zoom-in",on:{click:function(t){e.handleActions("zoomIn")}}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{class:e.mode.icon,on:{click:e.toggleMode}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{staticClass:"el-icon-refresh-left",on:{click:function(t){e.handleActions("anticlocelise")}}}),n("i",{staticClass:"el-icon-refresh-right",on:{click:function(t){e.handleActions("clocelise")}}})])]),n("div",{staticClass:"el-image-viewer__canvas"},e._l(e.urlList,(function(t,i){return i===e.index?n("img",{key:t,ref:"img",refInFor:!0,staticClass:"el-image-viewer__img",style:e.imgStyle,attrs:{src:e.currentImg},on:{load:e.handleImgLoad,error:e.handleImgError,mousedown:e.handleMouseDown}}):e._e()})),0)],2)])},tv=[];ev._withStripped=!0;var nv=Object.assign||function(e){for(var t=1;t0?e.handleActions("zoomIn",{zoomRate:.015,enableTransition:!1}):e.handleActions("zoomOut",{zoomRate:.015,enableTransition:!1})})),Object(Le["on"])(document,"keydown",this._keyDownHandler),Object(Le["on"])(document,rv,this._mouseWheelHandler)},deviceSupportUninstall:function(){Object(Le["off"])(document,"keydown",this._keyDownHandler),Object(Le["off"])(document,rv,this._mouseWheelHandler),this._keyDownHandler=null,this._mouseWheelHandler=null},handleImgLoad:function(e){this.loading=!1},handleImgError:function(e){this.loading=!1,e.target.alt="加载失败"},handleMouseDown:function(e){var t=this;if(!this.loading&&0===e.button){var n=this.transform,i=n.offsetX,r=n.offsetY,o=e.pageX,a=e.pageY;this._dragHandler=Object(b["rafThrottle"])((function(e){t.transform.offsetX=i+e.pageX-o,t.transform.offsetY=r+e.pageY-a})),Object(Le["on"])(document,"mousemove",this._dragHandler),Object(Le["on"])(document,"mouseup",(function(e){Object(Le["off"])(document,"mousemove",t._dragHandler)})),e.preventDefault()}},reset:function(){this.transform={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}},toggleMode:function(){if(!this.loading){var e=Object.keys(iv),t=Object.values(iv),n=t.indexOf(this.mode),i=(n+1)%e.length;this.mode=iv[e[i]],this.reset()}},prev:function(){if(!this.isFirst||this.infinite){var e=this.urlList.length;this.index=(this.index-1+e)%e}},next:function(){if(!this.isLast||this.infinite){var e=this.urlList.length;this.index=(this.index+1)%e}},handleActions:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.loading){var n=nv({zoomRate:.2,rotateDeg:90,enableTransition:!0},t),i=n.zoomRate,r=n.rotateDeg,o=n.enableTransition,a=this.transform;switch(e){case"zoomOut":a.scale>.2&&(a.scale=parseFloat((a.scale-i).toFixed(3)));break;case"zoomIn":a.scale=parseFloat((a.scale+i).toFixed(3));break;case"clocelise":a.deg+=r;break;case"anticlocelise":a.deg-=r;break}a.enableTransition=o}}},mounted:function(){this.deviceSupportInstall()}},av=ov,sv=s(av,ev,tv,!1,null,null,null);sv.options.__file="packages/image/src/image-viewer.vue";var lv=sv.exports,cv=function(){return void 0!==document.documentElement.style.objectFit},uv={NONE:"none",CONTAIN:"contain",COVER:"cover",FILL:"fill",SCALE_DOWN:"scale-down"},dv={name:"ElImage",mixins:[g.a],inheritAttrs:!1,components:{ImageViewer:lv},props:{src:String,fit:String,lazy:Boolean,scrollContainer:{},previewSrcList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3}},data:function(){return{loading:!0,error:!1,show:!this.lazy,imageWidth:0,imageHeight:0,showViewer:!1}},computed:{imageStyle:function(){var e=this.fit;return!this.$isServer&&e?cv()?{"object-fit":e}:this.getImageStyle(e):{}},alignCenter:function(){return!this.$isServer&&!cv()&&this.fit!==uv.FILL},preview:function(){var e=this.previewSrcList;return Array.isArray(e)&&e.length>0}},watch:{src:function(e){this.show&&this.loadImage()},show:function(e){e&&this.loadImage()}},mounted:function(){this.lazy?this.addLazyLoadListener():this.loadImage()},beforeDestroy:function(){this.lazy&&this.removeLazyLoadListener()},methods:{loadImage:function(){var e=this;if(!this.$isServer){this.loading=!0,this.error=!1;var t=new Image;t.onload=function(n){return e.handleLoad(n,t)},t.onerror=this.handleError.bind(this),Object.keys(this.$attrs).forEach((function(n){var i=e.$attrs[n];t.setAttribute(n,i)})),t.src=this.src}},handleLoad:function(e,t){this.imageWidth=t.width,this.imageHeight=t.height,this.loading=!1},handleError:function(e){this.loading=!1,this.error=!0,this.$emit("error",e)},handleLazyLoad:function(){Object(Le["isInContainer"])(this.$el,this._scrollContainer)&&(this.show=!0,this.removeLazyLoadListener())},addLazyLoadListener:function(){if(!this.$isServer){var e=this.scrollContainer,t=null;t=Object(hh["isHtmlElement"])(e)?e:Object(hh["isString"])(e)?document.querySelector(e):Object(Le["getScrollContainer"])(this.$el),t&&(this._scrollContainer=t,this._lazyLoadHandler=jh()(200,this.handleLazyLoad),Object(Le["on"])(t,"scroll",this._lazyLoadHandler),this.handleLazyLoad())}},removeLazyLoadListener:function(){var e=this._scrollContainer,t=this._lazyLoadHandler;!this.$isServer&&e&&t&&(Object(Le["off"])(e,"scroll",t),this._scrollContainer=null,this._lazyLoadHandler=null)},getImageStyle:function(e){var t=this.imageWidth,n=this.imageHeight,i=this.$el,r=i.clientWidth,o=i.clientHeight;if(!t||!n||!r||!o)return{};var a=t/n<1;if(e===uv.SCALE_DOWN){var s=tr)return console.warn("[ElementCalendar]end time should be greater than start time"),[];if(Object(ao["validateRangeInOneMonth"])(i,r))return[[i,r]];var o=[],a=new Date(i.getFullYear(),i.getMonth()+1,1),s=this.toDate(a.getTime()-Dv);if(!Object(ao["validateRangeInOneMonth"])(a,r))return console.warn("[ElementCalendar]start time and end time interval must not exceed two months"),[];o.push([i,s]);var l=this.realFirstDayOfWeek,c=a.getDay(),u=0;return c!==l&&(0===l?u=7-c:(u=l-c,u=u>0?u:7+u)),a=this.toDate(a.getTime()+u*Dv),a.getDate()6?0:Math.floor(this.firstDayOfWeek)}},data:function(){return{selectedDay:"",now:new Date}}},Tv=Ev,Pv=s(Tv,vv,gv,!1,null,null,null);Pv.options.__file="packages/calendar/src/main.vue";var Mv=Pv.exports;Mv.install=function(e){e.component(Mv.name,Mv)};var Iv=Mv,Nv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-fade-in"}},[e.visible?n("div",{staticClass:"el-backtop",style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[n("el-icon",{attrs:{name:"caret-top"}})])],2):e._e()])},jv=[];Nv._withStripped=!0;var Av={name:"ElBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40}},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return this.bottom+"px"},styleRight:function(){return this.right+"px"}},mounted:function(){this.init(),this.throttledScrollHandler=jh()(300,this.onScroll),this.container.addEventListener("scroll",this.throttledScrollHandler)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: "+this.target);this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=0,n=setInterval((function(){e.scrollTop<=0?clearInterval(n):(t+=10,e.scrollTop-=t)}),20)}},beforeDestroy:function(){this.container.removeEventListener("scroll",this.throttledScrollHandler)}},Fv=Av,Lv=s(Fv,Nv,jv,!1,null,null,null);Lv.options.__file="packages/backtop/src/main.vue";var Vv=Lv.exports;Vv.install=function(e){e.component(Vv.name,Vv)};var zv=Vv,Bv=function(e,t){if(e===window&&(e=document.documentElement),1!==e.nodeType)return[];var n=window.getComputedStyle(e,null);return t?n[t]:n},Rv=function(e){return Object.keys(e||{}).map((function(t){return[t,e[t]]}))},Hv=function(e,t){return e===window||e===document?document.documentElement[t]:e[t]},Wv=function(e){return Hv(e,"offsetHeight")},qv=function(e){return Hv(e,"clientHeight")},Uv="ElInfiniteScroll",Yv={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Kv=function(e,t){return Object(hh["isHtmlElement"])(e)?Rv(Yv).reduce((function(n,i){var r=i[0],o=i[1],a=o.type,s=o.default,l=e.getAttribute("infinite-scroll-"+r);switch(l=Object(hh["isUndefined"])(t[l])?l:t[l],a){case Number:l=Number(l),l=Number.isNaN(l)?s:l;break;case Boolean:l=Object(hh["isDefined"])(l)?"false"!==l&&Boolean(l):s;break;default:l=a(l)}return n[r]=l,n}),{}):{}},Gv=function(e){return e.getBoundingClientRect().top},Xv=function(e){var t=this[Uv],n=t.el,i=t.vm,r=t.container,o=t.observer,a=Kv(n,i),s=a.distance,l=a.disabled;if(!l){var c=!1;if(r===n){var u=r.scrollTop+qv(r);c=r.scrollHeight-u<=s}else{var d=Wv(n)+Gv(n)-Gv(r),h=Wv(r),f=Number.parseFloat(Bv(r,"borderBottomWidth"));c=d-h+f<=s}c&&Object(hh["isFunction"])(e)?e.call(i):o&&(o.disconnect(),this[Uv].observer=null)}},Zv={name:"InfiniteScroll",inserted:function(e,t,n){var i=t.value,r=n.context,o=Object(Le["getScrollContainer"])(e,!0),a=Kv(e,r),s=a.delay,l=a.immediate,c=F()(s,Xv.bind(e,i));if(e[Uv]={el:e,vm:r,container:o,onScroll:c},o&&(o.addEventListener("scroll",c),l)){var u=e[Uv].observer=new MutationObserver(c);u.observe(o,{childList:!0,subtree:!0}),c()}},unbind:function(e){var t=e[Uv],n=t.container,i=t.onScroll;n&&n.removeEventListener("scroll",i)},install:function(e){e.directive(Zv.name,Zv)}},Jv=Zv,Qv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-page-header"},[n("div",{staticClass:"el-page-header__left",on:{click:function(t){e.$emit("back")}}},[n("i",{staticClass:"el-icon-back"}),n("div",{staticClass:"el-page-header__title"},[e._t("title",[e._v(e._s(e.title))])],2)]),n("div",{staticClass:"el-page-header__content"},[e._t("content",[e._v(e._s(e.content))])],2)])},eg=[];Qv._withStripped=!0;var tg={name:"ElPageHeader",props:{title:{type:String,default:function(){return Object(ti["t"])("el.pageHeader.title")}},content:String}},ng=tg,ig=s(ng,Qv,eg,!1,null,null,null);ig.options.__file="packages/page-header/src/main.vue";var rg=ig.exports;rg.install=function(e){e.component(rg.name,rg)};var og=rg,ag=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return n("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},sg=[];ag._withStripped=!0;var lg,cg,ug=n(43),dg=n.n(ug),hg=function(e){return e.stopPropagation()},fg={inject:["panel"],components:{ElCheckbox:Ai.a,ElRadio:dg.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,n=this.node,i=this.isDisabled,r=this.config,o=r.multiple,a=r.checkStrictly;!a&&i||n.loading||(r.lazy&&!n.loaded?t.lazyLoad(n,(function(){var t=e.isLeaf;if(t||e.handleExpand(),o){var i=!!t&&n.checked;e.handleMultiCheckChange(i)}})):t.handleExpand(n))},handleCheckChange:function(){var e=this.panel,t=this.value,n=this.node;e.handleCheckChange(t),e.handleExpand(n)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,n=e[t.level-1]||{};return n.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,n=this.isChecked,i=this.config,r=i.checkStrictly,o=i.multiple;return o?this.renderCheckbox(e):r?this.renderRadio(e):t&&n?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,n=this.isLeaf;return t.loading?this.renderLoadingIcon(e):n?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,n=this.config,i=this.isDisabled,r={on:{change:this.handleMultiCheckChange},nativeOn:{}};return n.checkStrictly&&(r.nativeOn.click=hg),e("el-checkbox",Ju()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:i}},r]))},renderRadio:function(e){var t=this.checkedValue,n=this.value,i=this.isDisabled;return Object(b["isEqual"])(n,t)&&(n=t),e("el-radio",{attrs:{value:t,label:n,disabled:i},on:{change:this.handleCheckChange},nativeOn:{click:hg}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,n=this.node,i=t.renderLabelFn,r=i?i({node:n,data:n.data}):null;return e("span",{class:"el-cascader-node__label"},[r||n.label])}},render:function(e){var t=this,n=this.inActivePath,i=this.inCheckedPath,r=this.isChecked,o=this.isLeaf,a=this.isDisabled,s=this.config,l=this.nodeId,c=s.expandTrigger,u=s.checkStrictly,d=s.multiple,h=!u&&a,f={on:{}};return"click"===c?f.on.click=this.handleExpand:(f.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},f.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!o||a||u||d||(f.on.click=this.handleCheckChange),e("li",Ju()([{attrs:{role:"menuitem",id:l,"aria-expanded":n,tabindex:h?null:-1},class:{"el-cascader-node":!0,"is-selectable":u,"in-active-path":n,"in-checked-path":i,"is-active":r,"is-disabled":h}},f]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},pg=fg,mg=s(pg,lg,cg,!1,null,null,null);mg.options.__file="packages/cascader-panel/src/cascader-node.vue";var vg,gg,bg=mg.exports,yg={name:"ElCascaderMenu",mixins:[g.a],inject:["panel"],components:{ElScrollbar:q.a,CascaderNode:bg},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(b["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,n=this.hoverTimer,i=this.$refs.hoverZone;if(t&&i)if(t.contains(e.target)){clearTimeout(n);var r=this.$el.getBoundingClientRect(),o=r.left,a=e.clientX-o,s=this.$el,l=s.offsetWidth,c=s.offsetHeight,u=t.offsetTop,d=u+t.offsetHeight;i.innerHTML='\n \n \n '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",Ju()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",Ju()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},_g=yg,xg=s(_g,vg,gg,!1,null,null,null);xg.options.__file="packages/cascader-panel/src/cascader-menu.vue";var wg=xg.exports,Cg=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i1?i-1:0),o=1;o0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},Cg(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(Ot["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),$g=Og;function Dg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Eg=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},Tg=function(){function e(t,n){Dg(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(b["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new $g(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new $g(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(b["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:Eg(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(b["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),Pg=Tg,Mg=Object.assign||function(e){for(var t=1;t0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");ri()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(b["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},Bg=zg,Rg=s(Bg,ag,sg,!1,null,null,null);Rg.options.__file="packages/cascader-panel/src/cascader-panel.vue";var Hg=Rg.exports;Hg.install=function(e){e.component(Hg.name,Hg)};var Wg,qg,Ug=Hg,Yg={name:"ElAvatar",props:{size:{type:[Number,String],validator:function(e){return"string"===typeof e?["large","medium","small"].includes(e):"number"===typeof e}},shape:{type:String,default:"circle",validator:function(e){return["circle","square"].includes(e)}},icon:String,src:String,alt:String,srcSet:String,error:Function,fit:{type:String,default:"cover"}},data:function(){return{isImageExist:!0}},computed:{avatarClass:function(){var e=this.size,t=this.icon,n=this.shape,i=["el-avatar"];return e&&"string"===typeof e&&i.push("el-avatar--"+e),t&&i.push("el-avatar--icon"),n&&i.push("el-avatar--"+n),i.join(" ")}},methods:{handleError:function(){var e=this.error,t=e?e():void 0;!1!==t&&(this.isImageExist=!1)},renderAvatar:function(){var e=this.$createElement,t=this.icon,n=this.src,i=this.alt,r=this.isImageExist,o=this.srcSet,a=this.fit;return r&&n?e("img",{attrs:{src:n,alt:i,srcSet:o},on:{error:this.handleError},style:{"object-fit":a}}):t?e("i",{class:t}):this.$slots.default}},render:function(){var e=arguments[0],t=this.avatarClass,n=this.size,i="number"===typeof n?{height:n+"px",width:n+"px",lineHeight:n+"px"}:{};return e("span",{class:t,style:i},[this.renderAvatar()])}},Kg=Yg,Gg=s(Kg,Wg,qg,!1,null,null,null);Gg.options.__file="packages/avatar/src/main.vue";var Xg=Gg.exports;Xg.install=function(e){e.component(Xg.name,Xg)};var Zg=Xg,Jg=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-drawer-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",attrs:{role:"presentation"}},[n("div",{staticClass:"el-drawer__container",class:e.visible&&"el-drawer__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{ref:"drawer",staticClass:"el-drawer",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.size:"height: "+e.size,attrs:{"aria-modal":"true","aria-labelledby":"el-drawer__title",role:"presentation"}},[n("header",{staticClass:"el-drawer__header",attrs:{id:"el-drawer__title"}},[e._t("title",[n("span",{attrs:{role:"heading"}},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-drawer__close-btn",attrs:{"aria-label":"close "+(e.title||"drawer"),type:"button"},on:{click:e.closeDrawer}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?n("section",{staticClass:"el-drawer__body"},[e._t("default")],2):e._e()])])])])},Qg=[];Jg._withStripped=!0;var eb={name:"ElDrawer",mixins:[k.a,D.a,O.a],props:{appendToBody:{type:Boolean,default:!0},beforeClose:{type:Function},customClass:{type:String,default:""},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},showClose:{type:Boolean,default:!0},size:{type:String,default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction}},data:function(){return{closed:!1}},watch:{visible:function(e){e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el)):this.closed||this.$emit("close")}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeDrawer()},closeDrawer:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()}},mounted:function(){this.visible&&(this.rendered=!0,this.open())},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},tb=eb,nb=s(tb,Jg,Qg,!1,null,null,null);nb.options.__file="packages/drawer/src/main.vue";var ib=nb.exports;ib.install=function(e){e.component(ib.name,ib)};var rb=ib,ob=[_,I,re,fe,_e,$e,qe,et,ct,vt,Pt,Vt,Ut,en,ln,mn,wn,En,An,ui,di,bi,Si,Mi,Gr,io,Pa,Ha,ns,ds,fs,Hs,Xs,il,bl,Vl,Kl,Ql,Dc,Ac,hu,Fu,Vu,Ru,xd,Dd,jd,nh,ch,gh,kh,Ph,zh,qh,Qh,sf,pf,Ef,Ep,Rp,Gp,nm,cm,vm,Sm,Tm,Fm,Wm,Zm,mv,Iv,zv,og,Ug,Zg,rb,Ye.a],ab=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ni.a.use(t.locale),ni.a.i18n(t.i18n),ob.forEach((function(t){e.component(t.name,t)})),e.use(Jv),e.use(Tu.directive),e.prototype.$ELEMENT={size:t.size||"",zIndex:t.zIndex||2e3},e.prototype.$loading=Tu.service,e.prototype.$msgbox=As,e.prototype.$alert=As.alert,e.prototype.$confirm=As.confirm,e.prototype.$prompt=As.prompt,e.prototype.$notify=Xc,e.prototype.$message=Gd};"undefined"!==typeof window&&window.Vue&&ab(window.Vue);t["default"]={version:"2.12.0",locale:ni.a.use,i18n:ni.a.i18n,install:ab,CollapseTransition:Ye.a,Loading:Tu,Pagination:_,Dialog:I,Autocomplete:re,Dropdown:fe,DropdownMenu:_e,DropdownItem:$e,Menu:qe,Submenu:et,MenuItem:ct,MenuItemGroup:vt,Input:Pt,InputNumber:Vt,Radio:Ut,RadioGroup:en,RadioButton:ln,Checkbox:mn,CheckboxButton:wn,CheckboxGroup:En,Switch:An,Select:ui,Option:di,OptionGroup:bi,Button:Si,ButtonGroup:Mi,Table:Gr,TableColumn:io,DatePicker:Pa,TimeSelect:Ha,TimePicker:ns,Popover:ds,Tooltip:fs,MessageBox:As,Breadcrumb:Hs,BreadcrumbItem:Xs,Form:il,FormItem:bl,Tabs:Vl,TabPane:Kl,Tag:Ql,Tree:Dc,Alert:Ac,Notification:Xc,Slider:hu,Icon:Fu,Row:Vu,Col:Ru,Upload:xd,Progress:Dd,Spinner:jd,Message:Gd,Badge:nh,Card:ch,Rate:gh,Steps:kh,Step:Ph,Carousel:zh,Scrollbar:qh,CarouselItem:Qh,Collapse:sf,CollapseItem:pf,Cascader:Ef,ColorPicker:Ep,Transfer:Rp,Container:Gp,Header:nm,Aside:cm,Main:vm,Footer:Sm,Timeline:Tm,TimelineItem:Fm,Link:Wm,Divider:Zm,Image:mv,Calendar:Iv,Backtop:zv,InfiniteScroll:Jv,PageHeader:og,CascaderPanel:Ug,Avatar:Zg,Drawer:rb}}])["default"]},"60ae":function(e,t,n){var i,r,o=n("da84"),a=n("b39a"),s=o.process,l=s&&s.versions,c=l&&l.v8;c?(i=c.split("."),r=i[0]+i[1]):a&&(i=a.match(/Chrome\/(\d+)/),i&&(r=i[1])),e.exports=r&&+r},"60da":function(e,t,n){"use strict";var i=n("83ab"),r=n("d039"),o=n("df75"),a=n("7418"),s=n("d1e7"),l=n("7b0b"),c=n("44ad"),u=Object.assign;e.exports=!u||r((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||o(u({},t)).join("")!=i}))?function(e,t){var n=l(e),r=arguments.length,u=1,d=a.f,h=s.f;while(r>u){var f,p=c(arguments[u++]),m=d?o(p).concat(d(p)):o(p),v=m.length,g=0;while(v>g)f=m[g++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:u},6167:function(e,t,n){"use strict";var i,r;"function"===typeof Symbol&&Symbol.iterator;(function(o,a){i=a,r="function"===typeof i?i.call(t,n,t,e):i,void 0===r||(e.exports=r)})(0,(function(){var e=window,t={placement:"bottom",gpuAcceleration:!0,offset:0,boundariesElement:"viewport",boundariesPadding:5,preventOverflowOrder:["left","right","top","bottom"],flipBehavior:"flip",arrowElement:"[x-arrow]",arrowOffset:0,modifiers:["shift","offset","preventOverflow","keepTogether","arrow","flip","applyStyle"],modifiersIgnored:[],forceAbsolute:!1};function n(e,n,i){this._reference=e.jquery?e[0]:e,this.state={};var r="undefined"===typeof n||null===n,o=n&&"[object Object]"===Object.prototype.toString.call(n);return this._popper=r||o?this.parse(o?n:{}):n.jquery?n[0]:n,this._options=Object.assign({},t,i),this._options.modifiers=this._options.modifiers.map(function(e){if(-1===this._options.modifiersIgnored.indexOf(e))return"applyStyle"===e&&this._popper.setAttribute("x-placement",this._options.placement),this.modifiers[e]||e}.bind(this)),this.state.position=this._getPosition(this._popper,this._reference),d(this._popper,{position:this.state.position,top:0}),this.update(),this._setupEventListeners(),this}function i(t){var n=t.style.display,i=t.style.visibility;t.style.display="block",t.style.visibility="hidden";t.offsetWidth;var r=e.getComputedStyle(t),o=parseFloat(r.marginTop)+parseFloat(r.marginBottom),a=parseFloat(r.marginLeft)+parseFloat(r.marginRight),s={width:t.offsetWidth+a,height:t.offsetHeight+o};return t.style.display=n,t.style.visibility=i,s}function r(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function o(e){var t=Object.assign({},e);return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function a(e,t){var n,i=0;for(n in e){if(e[n]===t)return i;i++}return null}function s(t,n){var i=e.getComputedStyle(t,null);return i[n]}function l(t){var n=t.offsetParent;return n!==e.document.body&&n?n:e.document.documentElement}function c(t){var n=t.parentNode;return n?n===e.document?e.document.body.scrollTop||e.document.body.scrollLeft?e.document.body:e.document.documentElement:-1!==["scroll","auto"].indexOf(s(n,"overflow"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-x"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-y"))?n:c(t.parentNode):t}function u(t){return t!==e.document.body&&("fixed"===s(t,"position")||(t.parentNode?u(t.parentNode):t))}function d(e,t){function n(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}Object.keys(t).forEach((function(i){var r="";-1!==["width","height","top","right","bottom","left"].indexOf(i)&&n(t[i])&&(r="px"),e.style[i]=t[i]+r}))}function h(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function f(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.offsetLeft,top:e.offsetTop};return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function p(e){var t=e.getBoundingClientRect(),n=-1!=navigator.userAgent.indexOf("MSIE"),i=n&&"HTML"===e.tagName?-e.scrollTop:t.top;return{left:t.left,top:i,right:t.right,bottom:t.bottom,width:t.right-t.left,height:t.bottom-i}}function m(e,t,n){var i=p(e),r=p(t);if(n){var o=c(t);r.top+=o.scrollTop,r.bottom+=o.scrollTop,r.left+=o.scrollLeft,r.right+=o.scrollLeft}var a={top:i.top-r.top,left:i.left-r.left,bottom:i.top-r.top+i.height,right:i.left-r.left+i.width,width:i.width,height:i.height};return a}function v(t){for(var n=["","ms","webkit","moz","o"],i=0;i1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(r),r;function s(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},n.prototype._getPosition=function(e,t){var n=l(t);if(this._options.forceAbsolute)return"absolute";var i=u(t,n);return i?"fixed":"absolute"},n.prototype._getOffsets=function(e,t,n){n=n.split("-")[0];var r={};r.position=this.state.position;var o="fixed"===r.position,a=m(t,l(e),o),s=i(e);return-1!==["right","left"].indexOf(n)?(r.top=a.top+a.height/2-s.height/2,r.left="left"===n?a.left-s.width:a.right):(r.left=a.left+a.width/2-s.width/2,r.top="top"===n?a.top-s.height:a.bottom),r.width=s.width,r.height=s.height,{popper:r,reference:a}},n.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=c(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},n.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},n.prototype._getBoundaries=function(t,n,i){var r,o,a={};if("window"===i){var s=e.document.body,u=e.document.documentElement;o=Math.max(s.scrollHeight,s.offsetHeight,u.clientHeight,u.scrollHeight,u.offsetHeight),r=Math.max(s.scrollWidth,s.offsetWidth,u.clientWidth,u.scrollWidth,u.offsetWidth),a={top:0,right:r,bottom:o,left:0}}else if("viewport"===i){var d=l(this._popper),h=c(this._popper),p=f(d),m=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},v=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},g="fixed"===t.offsets.popper.position?0:m(h),b="fixed"===t.offsets.popper.position?0:v(h);a={top:0-(p.top-g),right:e.document.documentElement.clientWidth-(p.left-b),bottom:e.document.documentElement.clientHeight-(p.top-g),left:0-(p.left-b)}}else a=l(this._popper)===i?{top:0,left:0,right:i.clientWidth,bottom:i.clientHeight}:f(i);return a.left+=n,a.right-=n,a.top=a.top+n,a.bottom=a.bottom-n,a},n.prototype.runModifiers=function(e,t,n){var i=t.slice();return void 0!==n&&(i=this._options.modifiers.slice(0,a(this._options.modifiers,n))),i.forEach(function(t){h(t)&&(e=t.call(this,e))}.bind(this)),e},n.prototype.isModifierRequired=function(e,t){var n=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,n).filter((function(e){return e===t})).length},n.prototype.modifiers={},n.prototype.modifiers.applyStyle=function(e){var t,n={position:e.offsets.popper.position},i=Math.round(e.offsets.popper.left),r=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=v("transform"))?(n[t]="translate3d("+i+"px, "+r+"px, 0)",n.top=0,n.left=0):(n.left=i,n.top=r),Object.assign(n,e.styles),d(this._popper,n),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&d(e.arrowElement,e.offsets.arrow),e},n.prototype.modifiers.shift=function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets.reference,a=o(e.offsets.popper),s={y:{start:{top:r.top},end:{top:r.top+r.height-a.height}},x:{start:{left:r.left},end:{left:r.left+r.width-a.width}}},l=-1!==["bottom","top"].indexOf(n)?"x":"y";e.offsets.popper=Object.assign(a,s[l][i])}return e},n.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,n=o(e.offsets.popper),i={left:function(){var t=n.left;return n.lefte.boundaries.right&&(t=Math.min(n.left,e.boundaries.right-n.width)),{left:t}},top:function(){var t=n.top;return n.tope.boundaries.bottom&&(t=Math.min(n.top,e.boundaries.bottom-n.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(n,i[t]())})),e},n.prototype.modifiers.keepTogether=function(e){var t=o(e.offsets.popper),n=e.offsets.reference,i=Math.floor;return t.righti(n.right)&&(e.offsets.popper.left=i(n.right)),t.bottomi(n.bottom)&&(e.offsets.popper.top=i(n.bottom)),e},n.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],n=r(t),i=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,n]:this._options.flipBehavior,a.forEach(function(s,l){if(t===s&&a.length!==l+1){t=e.placement.split("-")[0],n=r(t);var c=o(e.offsets.popper),u=-1!==["right","bottom"].indexOf(t);(u&&Math.floor(e.offsets.reference[t])>Math.floor(c[n])||!u&&Math.floor(e.offsets.reference[t])s[f]&&(e.offsets.popper[d]+=l[d]+p-s[f]);var m=l[d]+(n||l[u]/2-p/2),v=m-s[d];return v=Math.max(Math.min(s[u]-p-8,v),8),r[d]=v,r[h]="",e.offsets.arrow=r,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;n=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},"693d":function(e,t,n){"use strict";var i=n("ef08"),r=n("9c0e"),o=n("0bad"),a=n("512c"),s=n("ba01"),l=n("e34a").KEY,c=n("4b8b"),u=n("b367"),d=n("92f0"),h=n("8b1a"),f=n("cc15"),p=n("fcd4"),m=n("e198"),v=n("0ae2"),g=n("4ebc"),b=n("77e9"),y=n("7a41"),_=n("0983"),x=n("6ca1"),w=n("3397"),C=n("10db"),k=n("6f4f"),S=n("1836"),O=n("4d20"),$=n("fed5"),D=n("1a14"),E=n("9876"),T=O.f,P=D.f,M=S.f,I=i.Symbol,N=i.JSON,j=N&&N.stringify,A="prototype",F=f("_hidden"),L=f("toPrimitive"),V={}.propertyIsEnumerable,z=u("symbol-registry"),B=u("symbols"),R=u("op-symbols"),H=Object[A],W="function"==typeof I&&!!$.f,q=i.QObject,U=!q||!q[A]||!q[A].findChild,Y=o&&c((function(){return 7!=k(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a}))?function(e,t,n){var i=T(H,t);i&&delete H[t],P(e,t,n),i&&e!==H&&P(H,t,i)}:P,K=function(e){var t=B[e]=k(I[A]);return t._k=e,t},G=W&&"symbol"==typeof I.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof I},X=function(e,t,n){return e===H&&X(R,t,n),b(e),t=w(t,!0),b(n),r(B,t)?(n.enumerable?(r(e,F)&&e[F][t]&&(e[F][t]=!1),n=k(n,{enumerable:C(0,!1)})):(r(e,F)||P(e,F,C(1,{})),e[F][t]=!0),Y(e,t,n)):P(e,t,n)},Z=function(e,t){b(e);var n,i=v(t=x(t)),r=0,o=i.length;while(o>r)X(e,n=i[r++],t[n]);return e},J=function(e,t){return void 0===t?k(e):Z(k(e),t)},Q=function(e){var t=V.call(this,e=w(e,!0));return!(this===H&&r(B,e)&&!r(R,e))&&(!(t||!r(this,e)||!r(B,e)||r(this,F)&&this[F][e])||t)},ee=function(e,t){if(e=x(e),t=w(t,!0),e!==H||!r(B,t)||r(R,t)){var n=T(e,t);return!n||!r(B,t)||r(e,F)&&e[F][t]||(n.enumerable=!0),n}},te=function(e){var t,n=M(x(e)),i=[],o=0;while(n.length>o)r(B,t=n[o++])||t==F||t==l||i.push(t);return i},ne=function(e){var t,n=e===H,i=M(n?R:x(e)),o=[],a=0;while(i.length>a)!r(B,t=i[a++])||n&&!r(H,t)||o.push(B[t]);return o};W||(I=function(){if(this instanceof I)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===H&&t.call(R,n),r(this,F)&&r(this[F],e)&&(this[F][e]=!1),Y(this,e,C(1,n))};return o&&U&&Y(H,e,{configurable:!0,set:t}),K(e)},s(I[A],"toString",(function(){return this._k})),O.f=ee,D.f=X,n("6438").f=S.f=te,n("1917").f=Q,$.f=ne,o&&!n("e444")&&s(H,"propertyIsEnumerable",Q,!0),p.f=function(e){return K(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:I});for(var ie="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ie.length>re;)f(ie[re++]);for(var oe=E(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return r(z,e+="")?z[e]:z[e]=I(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in z)if(z[t]===e)return t},useSetter:function(){U=!0},useSimple:function(){U=!1}}),a(a.S+a.F*!W,"Object",{create:J,defineProperty:X,defineProperties:Z,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=c((function(){$.f(1)}));a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return $.f(_(e))}}),N&&a(a.S+a.F*(!W||c((function(){var e=I();return"[null]"!=j([e])||"{}"!=j({a:e})||"{}"!=j(Object(e))}))),"JSON",{stringify:function(e){var t,n,i=[e],r=1;while(arguments.length>r)i.push(arguments[r++]);if(n=t=i[1],(y(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),i[1]=t,j.apply(N,i)}}),I[A][L]||n("051b")(I[A],L,I[A].valueOf),d(I,"Symbol"),d(Math,"Math",!0),d(i.JSON,"JSON",!0)},"69f3":function(e,t,n){var i,r,o,a=n("7f9a"),s=n("da84"),l=n("861d"),c=n("9112"),u=n("5135"),d=n("f772"),h=n("d012"),f=s.WeakMap,p=function(e){return o(e)?r(e):i(e,{})},m=function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(a){var v=new f,g=v.get,b=v.has,y=v.set;i=function(e,t){return y.call(v,e,t),t},r=function(e){return g.call(v,e)||{}},o=function(e){return b.call(v,e)}}else{var _=d("state");h[_]=!0,i=function(e,t){return c(e,_,t),t},r=function(e){return u(e,_)?e[_]:{}},o=function(e){return u(e,_)}}e.exports={set:i,get:r,has:o,enforce:p,getterFor:m}},"6b7c":function(e,t,n){"use strict";t.__esModule=!0;var i=n("4897");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),n=0;n0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),u?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t,i=c.some((function(e){return!!~n.indexOf(e)}));i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),h=function(e,t){for(var n=0,i=Object.keys(t);n0},e}(),D="undefined"!==typeof WeakMap?new WeakMap:new n,E=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=d.getInstance(),i=new $(t,n,this);D.set(this,i)}return e}();["observe","unobserve","disconnect"].forEach((function(e){E.prototype[e]=function(){var t;return(t=D.get(this))[e].apply(t,arguments)}}));var T=function(){return"undefined"!==typeof r.ResizeObserver?r.ResizeObserver:E}();t["default"]=T}.call(this,n("c8ba"))},"6eeb":function(e,t,n){var i=n("da84"),r=n("5692"),o=n("9112"),a=n("5135"),s=n("ce4e"),l=n("9e81"),c=n("69f3"),u=c.get,d=c.enforce,h=String(l).split("toString");r("inspectSource",(function(e){return l.call(e)})),(e.exports=function(e,t,n,r){var l=!!r&&!!r.unsafe,c=!!r&&!!r.enumerable,u=!!r&&!!r.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||o(n,"name",t),d(n).source=h.join("string"==typeof t?t:"")),e!==i?(l?!u&&e[t]&&(c=!0):delete e[t],c?e[t]=n:o(e,t,n)):c?e[t]=n:s(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||l.call(this)}))},"6f4f":function(e,t,n){var i=n("77e9"),r=n("85e7"),o=n("9742"),a=n("5a94")("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=n("05f5")("iframe"),i=o.length,r="<",a=">";t.style.display="none",n("9141").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+a+"document.F=Object"+r+"/script"+a),e.close(),c=e.F;while(i--)delete c[l][o[i]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=i(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:r(n,t)}},"722f":function(e,t,n){"use strict";t.__esModule=!0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=n("e452"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}var s,l=l||{};l.Dialog=function(e,t,n){var r=this;if(this.dialogNode=e,null===this.dialogNode||"dialog"!==this.dialogNode.getAttribute("role"))throw new Error("Dialog() requires a DOM element with ARIA role of dialog.");"string"===typeof t?this.focusAfterClosed=document.getElementById(t):"object"===("undefined"===typeof t?"undefined":i(t))?this.focusAfterClosed=t:this.focusAfterClosed=null,"string"===typeof n?this.focusFirst=document.getElementById(n):"object"===("undefined"===typeof n?"undefined":i(n))?this.focusFirst=n:this.focusFirst=null,this.focusFirst?this.focusFirst.focus():o.default.focusFirstDescendant(this.dialogNode),this.lastFocus=document.activeElement,s=function(e){r.trapFocus(e)},this.addListeners()},l.Dialog.prototype.addListeners=function(){document.addEventListener("focus",s,!0)},l.Dialog.prototype.removeListeners=function(){document.removeEventListener("focus",s,!0)},l.Dialog.prototype.closeDialog=function(){var e=this;this.removeListeners(),this.focusAfterClosed&&setTimeout((function(){e.focusAfterClosed.focus()}))},l.Dialog.prototype.trapFocus=function(e){o.default.IgnoreUtilFocusChanges||(this.dialogNode.contains(e.target)?this.lastFocus=e.target:(o.default.focusFirstDescendant(this.dialogNode),this.lastFocus===document.activeElement&&o.default.focusLastDescendant(this.dialogNode),this.lastFocus=document.activeElement))},t.default=l.Dialog},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"77e9":function(e,t,n){var i=n("7a41");e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},7839:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7a41":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"7a77":function(e,t,n){"use strict";function i(e){this.message=e}i.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},i.prototype.__CANCEL__=!0,e.exports=i},"7aac":function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){return{write:function(e,t,n,r,o,a){var s=[];s.push(e+"="+encodeURIComponent(t)),i.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),i.isString(r)&&s.push("path="+r),i.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b0b":function(e,t,n){var i=n("1d80");e.exports=function(e){return Object(i(e))}},"7b3e":function(e,t,n){"use strict";var i,r=n("a3de"); -/** - * Checks if an event is supported in the current execution environment. - * - * NOTE: This will not work correctly for non-generic events such as `change`, - * `reset`, `load`, `error`, and `select`. - * - * Borrows from Modernizr. - * - * @param {string} eventNameSuffix Event name, e.g. "click". - * @param {?boolean} capture Check if the capture phase is supported. - * @return {boolean} True if the event is supported. - * @internal - * @license Modernizr 3.0.0pre (Custom Build) | MIT - */ -function o(e,t){if(!r.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"===typeof a[n]}return!o&&i&&"wheel"===e&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}r.canUseDOM&&(i=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=o},"7c73":function(e,t,n){var i=n("825a"),r=n("37e8"),o=n("7839"),a=n("d012"),s=n("1be4"),l=n("cc12"),c=n("f772"),u=c("IE_PROTO"),d="prototype",h=function(){},f=function(){var e,t=l("iframe"),n=o.length,i="<",r="script",a=">",c="java"+r+":";t.style.display="none",s.appendChild(t),t.src=String(c),e=t.contentWindow.document,e.open(),e.write(i+r+a+"document.F=Object"+i+"/"+r+a),e.close(),f=e.F;while(n--)delete f[d][o[n]];return f()};e.exports=Object.create||function(e,t){var n;return null!==e?(h[d]=i(e),n=new h,h[d]=null,n[u]=e):n=f(),void 0===t?n:r(n,t)},a[u]=!0},"7dd0":function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),o=n("e163"),a=n("d2bb"),s=n("d44e"),l=n("9112"),c=n("6eeb"),u=n("b622"),d=n("c430"),h=n("3f8c"),f=n("ae93"),p=f.IteratorPrototype,m=f.BUGGY_SAFARI_ITERATORS,v=u("iterator"),g="keys",b="values",y="entries",_=function(){return this};e.exports=function(e,t,n,u,f,x,w){r(n,t,u);var C,k,S,O=function(e){if(e===f&&P)return P;if(!m&&e in E)return E[e];switch(e){case g:return function(){return new n(this,e)};case b:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this)}},$=t+" Iterator",D=!1,E=e.prototype,T=E[v]||E["@@iterator"]||f&&E[f],P=!m&&T||O(f),M="Array"==t&&E.entries||T;if(M&&(C=o(M.call(new e)),p!==Object.prototype&&C.next&&(d||o(C)===p||(a?a(C,p):"function"!=typeof C[v]&&l(C,v,_)),s(C,$,!0,!0),d&&(h[$]=_))),f==b&&T&&T.name!==b&&(D=!0,P=function(){return T.call(this)}),d&&!w||E[v]===P||l(E,v,P),h[t]=P,f)if(k={values:O(b),keys:x?P:O(g),entries:O(y)},w)for(S in k)!m&&!D&&S in E||c(E,S,k[S]);else i({target:t,proto:!0,forced:m||D},k);return k}},"7f4d":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){for(var t=1,n=arguments.length;t0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var p=t.arrayFindIndex=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},m=(t.arrayFind=function(e,t){var n=p(e,t);return-1!==n?e[n]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!o.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!o.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!o.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":i(e)))return e;var t=["transform","transition","animation"],n=["ms-","webkit-"];return t.forEach((function(t){var i=e[t];t&&i&&n.forEach((function(n){e[n+t]=i}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,a.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var n=(0,a.isObject)(e),i=(0,a.isObject)(t);return n&&i?JSON.stringify(e)===JSON.stringify(t):!n&&!i&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var n=0;nl)i.f(e,n=a[l++],t[n]);return e}},"861d":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"8a0d":function(e,t){e.exports={}},"8b1a":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},"8bbc":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=123)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},123:function(e,t,n){"use strict";n.r(t);var i,r,o={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/tag/src/tag.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},"8c4f":function(e,t,n){"use strict"; -/*! - * vue-router v3.1.3 - * (c) 2019 Evan You - * @license MIT - */function i(e,t){0}function r(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}function o(e,t){return t instanceof e||t&&(t.name===e.name||t._name===e._name)}function a(e,t){for(var n in t)e[n]=t[n];return e}var s={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,t){var n=t.props,i=t.children,r=t.parent,o=t.data;o.routerView=!0;var s=r.$createElement,c=n.name,u=r.$route,d=r._routerViewCache||(r._routerViewCache={}),h=0,f=!1;while(r&&r._routerRoot!==r){var p=r.$vnode&&r.$vnode.data;p&&(p.routerView&&h++,p.keepAlive&&r._inactive&&(f=!0)),r=r.$parent}if(o.routerViewDepth=h,f)return s(d[c],o,i);var m=u.matched[h];if(!m)return d[c]=null,s();var v=d[c]=m.components[c];o.registerRouteInstance=function(e,t){var n=m.instances[c];(t&&n!==e||!t&&n===e)&&(m.instances[c]=t)},(o.hook||(o.hook={})).prepatch=function(e,t){m.instances[c]=t.componentInstance},o.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==m.instances[c]&&(m.instances[c]=e.componentInstance)};var g=o.props=l(u,m.props&&m.props[c]);if(g){g=o.props=a({},g);var b=o.attrs=o.attrs||{};for(var y in g)v.props&&y in v.props||(b[y]=g[y],delete g[y])}return s(v,o,i)}};function l(e,t){switch(typeof t){case"undefined":return;case"object":return t;case"function":return t(e);case"boolean":return t?e.params:void 0;default:0}}var c=/[!'()*]/g,u=function(e){return"%"+e.charCodeAt(0).toString(16)},d=/%2C/g,h=function(e){return encodeURIComponent(e).replace(c,u).replace(d,",")},f=decodeURIComponent;function p(e,t,n){void 0===t&&(t={});var i,r=n||m;try{i=r(e||"")}catch(a){i={}}for(var o in t)i[o]=t[o];return i}function m(e){var t={};return e=e.trim().replace(/^(\?|#|&)/,""),e?(e.split("&").forEach((function(e){var n=e.replace(/\+/g," ").split("="),i=f(n.shift()),r=n.length>0?f(n.join("=")):null;void 0===t[i]?t[i]=r:Array.isArray(t[i])?t[i].push(r):t[i]=[t[i],r]})),t):t}function v(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return"";if(null===n)return h(t);if(Array.isArray(n)){var i=[];return n.forEach((function(e){void 0!==e&&(null===e?i.push(h(t)):i.push(h(t)+"="+h(e)))})),i.join("&")}return h(t)+"="+h(n)})).filter((function(e){return e.length>0})).join("&"):null;return t?"?"+t:""}var g=/\/?$/;function b(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{o=y(o)}catch(s){}var a={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||"/",hash:t.hash||"",query:o,params:t.params||{},fullPath:w(t,r),matched:e?x(e):[]};return n&&(a.redirectedFrom=w(n,r)),Object.freeze(a)}function y(e){if(Array.isArray(e))return e.map(y);if(e&&"object"===typeof e){var t={};for(var n in e)t[n]=y(e[n]);return t}return e}var _=b(null,{path:"/"});function x(e){var t=[];while(e)t.unshift(e),e=e.parent;return t}function w(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;void 0===r&&(r="");var o=t||v;return(n||"/")+o(i)+r}function C(e,t){return t===_?e===t:!!t&&(e.path&&t.path?e.path.replace(g,"")===t.path.replace(g,"")&&e.hash===t.hash&&k(e.query,t.query):!(!e.name||!t.name)&&(e.name===t.name&&e.hash===t.hash&&k(e.query,t.query)&&k(e.params,t.params)))}function k(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e),i=Object.keys(t);return n.length===i.length&&n.every((function(n){var i=e[n],r=t[n];return"object"===typeof i&&"object"===typeof r?k(i,r):String(i)===String(r)}))}function S(e,t){return 0===e.path.replace(g,"/").indexOf(t.path.replace(g,"/"))&&(!t.hash||e.hash===t.hash)&&O(e.query,t.query)}function O(e,t){for(var n in t)if(!(n in e))return!1;return!0}function $(e,t,n){var i=e.charAt(0);if("/"===i)return e;if("?"===i||"#"===i)return t+e;var r=t.split("/");n&&r[r.length-1]||r.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a=0&&(t=e.slice(i),e=e.slice(0,i));var r=e.indexOf("?");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{path:e,query:n,hash:t}}function E(e){return e.replace(/\/\//g,"/")}var T=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},P=X,M=F,I=L,N=B,j=G,A=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function F(e,t){var n,i=[],r=0,o=0,a="",s=t&&t.delimiter||"/";while(null!=(n=A.exec(e))){var l=n[0],c=n[1],u=n.index;if(a+=e.slice(o,u),o=u+l.length,c)a+=c[1];else{var d=e[o],h=n[2],f=n[3],p=n[4],m=n[5],v=n[6],g=n[7];a&&(i.push(a),a="");var b=null!=h&&null!=d&&d!==h,y="+"===v||"*"===v,_="?"===v||"*"===v,x=n[2]||s,w=p||m;i.push({name:f||r++,prefix:h||"",delimiter:x,optional:_,repeat:y,partial:b,asterisk:!!g,pattern:w?H(w):g?".*":"[^"+R(x)+"]+?"})}}return o1||!x.length)return 0===x.length?e():e("span",{},x)}if("a"===this.tag)_.on=y,_.attrs={href:l};else{var w=ae(this.$slots.default);if(w){w.isStatic=!1;var k=w.data=a({},w.data);for(var O in k.on=k.on||{},k.on){var $=k.on[O];O in y&&(k.on[O]=Array.isArray($)?$:[$])}for(var D in y)D in k.on?k.on[D].push(y[D]):k.on[D]=g;var E=w.data.attrs=a({},w.data.attrs);E.href=l}else _.on=y}return e(this.tag,_,this.$slots.default)}};function oe(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(void 0===e.button||0===e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ae(e){if(e)for(var t,n=0;n-1&&(s.params[h]=n.params[h]);return s.path=J(c.path,s.params,'named route "'+l+'"'),u(c,s,a)}if(s.path){s.params={};for(var f=0;f=e.length?n():e[r]?t(e[r],(function(){i(r+1)})):i(r+1)};i(0)}function Fe(e){return function(t,n,i){var o=!1,a=0,s=null;Le(e,(function(e,t,n,l){if("function"===typeof e&&void 0===e.cid){o=!0,a++;var c,u=Re((function(t){Be(t)&&(t=t.default),e.resolved="function"===typeof t?t:ee.extend(t),n.components[l]=t,a--,a<=0&&i()})),d=Re((function(e){var t="Failed to resolve async component "+l+": "+e;s||(s=r(e)?e:new Error(t),i(s))}));try{c=e(u,d)}catch(f){d(f)}if(c)if("function"===typeof c.then)c.then(u,d);else{var h=c.component;h&&"function"===typeof h.then&&h.then(u,d)}}})),o||i()}}function Le(e,t){return Ve(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Ve(e){return Array.prototype.concat.apply([],e)}var ze="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Be(e){return e.__esModule||ze&&"Module"===e[Symbol.toStringTag]}function Re(e){var t=!1;return function(){var n=[],i=arguments.length;while(i--)n[i]=arguments[i];if(!t)return t=!0,e.apply(this,n)}}var He=function(e){function t(t){e.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+t.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new e).stack,writable:!0,configurable:!0})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(Error);He._name="NavigationDuplicated";var We=function(e,t){this.router=e,this.base=qe(t),this.current=_,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function qe(e){if(!e)if(le){var t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^https?:\/\/[^\/]+/,"")}else e="/";return"/"!==e.charAt(0)&&(e="/"+e),e.replace(/\/$/,"")}function Ue(e,t){var n,i=Math.max(e.length,t.length);for(n=0;n-1?decodeURI(e.slice(0,i))+e.slice(i):decodeURI(e)}else n>-1&&(e=decodeURI(e.slice(0,n))+e.slice(n));return e}function st(e){var t=window.location.href,n=t.indexOf("#"),i=n>=0?t.slice(0,n):t;return i+"#"+e}function lt(e){Ie?Ne(st(e)):window.location.hash=e}function ct(e){Ie?je(st(e)):window.location.replace(st(e))}var ut=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index+1).concat(e),i.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var i=this.stack[n];this.confirmTransition(i,(function(){t.index=n,t.updateRoute(i)}),(function(e){o(He,e)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(We),dt=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=fe(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!Ie&&!1!==e.fallback,this.fallback&&(t="hash"),le||(t="abstract"),this.mode=t,t){case"history":this.history=new tt(this,e.base);break;case"hash":this.history=new it(this,e.base,this.fallback);break;case"abstract":this.history=new ut(this,e.base);break;default:0}},ht={currentRoute:{configurable:!0}};function ft(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function pt(e,t,n){var i="hash"===n?"#"+t:t;return e?E(e+"/"+i):i}dt.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},ht.currentRoute.get=function(){return this.history&&this.history.current},dt.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null)})),!this.app){this.app=e;var n=this.history;if(n instanceof tt)n.transitionTo(n.getCurrentLocation());else if(n instanceof it){var i=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),i,i)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},dt.prototype.beforeEach=function(e){return ft(this.beforeHooks,e)},dt.prototype.beforeResolve=function(e){return ft(this.resolveHooks,e)},dt.prototype.afterEach=function(e){return ft(this.afterHooks,e)},dt.prototype.onReady=function(e,t){this.history.onReady(e,t)},dt.prototype.onError=function(e){this.history.onError(e)},dt.prototype.push=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.push(e,t,n)}));this.history.push(e,t,n)},dt.prototype.replace=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.replace(e,t,n)}));this.history.replace(e,t,n)},dt.prototype.go=function(e){this.history.go(e)},dt.prototype.back=function(){this.go(-1)},dt.prototype.forward=function(){this.go(1)},dt.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},dt.prototype.resolve=function(e,t,n){t=t||this.history.current;var i=Q(e,t,n,this),r=this.match(i,t),o=r.redirectedFrom||r.fullPath,a=this.history.base,s=pt(a,o,this.mode);return{location:i,route:r,href:s,normalizedTo:i,resolved:r}},dt.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==_&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(dt.prototype,ht),dt.install=se,dt.version="3.1.3",le&&window.Vue&&window.Vue.use(dt),t["a"]=dt},"8df4":function(e,t,n){"use strict";var i=n("7a77");function r(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new i(e),t(n.reason))}))}r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r((function(t){e=t}));return{token:t,cancel:e}},e.exports=r},"8eb7":function(e,t){var n,i,r,o,a,s,l,c,u,d,h,f,p,m,v,g=!1;function b(){if(!g){g=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),b=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(f=/\b(iPhone|iP[ao]d)/.exec(e),p=/\b(iP[ao]d)/.exec(e),d=/Android/i.exec(e),m=/FBAN\/\w+;/i.exec(e),v=/Mobile/i.exec(e),h=!!/Win64/.exec(e),t){n=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,n&&document&&document.documentMode&&(n=document.documentMode);var y=/(?:Trident\/(\d+.\d+))/.exec(e);s=y?parseFloat(y[1])+4:n,i=t[2]?parseFloat(t[2]):NaN,r=t[3]?parseFloat(t[3]):NaN,o=t[4]?parseFloat(t[4]):NaN,o?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),a=t&&t[1]?parseFloat(t[1]):NaN):a=NaN}else n=i=r=a=o=NaN;if(b){if(b[1]){var _=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);l=!_||parseFloat(_[1].replace("_","."))}else l=!1;c=!!b[2],u=!!b[3]}else l=c=u=!1}}var y={ie:function(){return b()||n},ieCompatibilityMode:function(){return b()||s>n},ie64:function(){return y.ie()&&h},firefox:function(){return b()||i},opera:function(){return b()||r},webkit:function(){return b()||o},safari:function(){return y.webkit()},chrome:function(){return b()||a},windows:function(){return b()||c},osx:function(){return b()||l},linux:function(){return b()||u},iphone:function(){return b()||f},mobile:function(){return b()||f||p||d||v},nativeApp:function(){return b()||m},android:function(){return b()||d},ipad:function(){return b()||p}};e.exports=y},"90e3":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},9112:function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("5c6c");e.exports=i?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},9141:function(e,t,n){var i=n("ef08").document;e.exports=i&&i.documentElement},"92f0":function(e,t,n){var i=n("1a14").f,r=n("9c0e"),o=n("cc15")("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},"92fa":function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce((function(e,t){var r,o,a,s,l;for(a in t)if(r=e[a],o=t[a],r&&n.test(a))if("class"===a&&("string"===typeof r&&(l=r,e[a]=r={},r[l]=!0),"string"===typeof o&&(l=o,t[a]=o={},o[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(s in o)r[s]=i(r[s],o[s]);else if(Array.isArray(r))e[a]=r.concat(o);else if(Array.isArray(o))e[a]=[r].concat(o);else for(s in o)r[s]=o[s];else e[a]=t[a];return e}),{})}},"94ca":function(e,t,n){var i=n("d039"),r=/#|\.prototype\./,o=function(e,t){var n=s[a(e)];return n==c||n!=l&&("function"==typeof t?i(t):!!t)},a=o.normalize=function(e){return String(e).replace(r,".").toLowerCase()},s=o.data={},l=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},9619:function(e,t,n){var i=n("597f"),r=n("0e15");e.exports={throttle:i,debounce:r}},9742:function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},9876:function(e,t,n){var i=n("03d6"),r=n("9742");e.exports=Object.keys||function(e){return i(e,r)}},"99af":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),o=n("e8b5"),a=n("861d"),s=n("7b0b"),l=n("50c4"),c=n("8418"),u=n("65f0"),d=n("1dde"),h=n("b622"),f=n("60ae"),p=h("isConcatSpreadable"),m=9007199254740991,v="Maximum allowed index exceeded",g=f>=51||!r((function(){var e=[];return e[p]=!1,e.concat()[0]!==e})),b=d("concat"),y=function(e){if(!a(e))return!1;var t=e[p];return void 0!==t?!!t:o(e)},_=!g||!b;i({target:"Array",proto:!0,forced:_},{concat:function(e){var t,n,i,r,o,a=s(this),d=u(a,0),h=0;for(t=-1,i=arguments.length;tm)throw TypeError(v);for(n=0;n=m)throw TypeError(v);c(d,h++,o)}return d.length=h,d}})},"9bdd":function(e,t,n){var i=n("825a");e.exports=function(e,t,n,r){try{return r?t(i(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&i(o.call(e)),a}}},"9bf2":function(e,t,n){var i=n("83ab"),r=n("0cfb"),o=n("825a"),a=n("c04e"),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(o(e),t=a(t,!0),o(n),r)try{return s(e,t,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},"9c0c":function(e,t,n){var i=n("1609");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"9c0e":function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"9d11":function(e,t,n){var i=n("fc5e"),r=Math.max,o=Math.min;e.exports=function(e,t){return e=i(e),e<0?r(e+t,0):o(e,t)}},"9d7e":function(e,t,n){"use strict";t.__esModule=!0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=function(e){function t(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a=o)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(n){return"[Circular]"}break;default:return e}})),l=t[i];i()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},C={integer:function(e){return C.number(e)&&parseInt(e,10)===e},float:function(e){return C.number(e)&&!C.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===("undefined"===typeof e?"undefined":a()(e))&&!C.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(w.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(w.url)},hex:function(e){return"string"===typeof e&&!!e.match(w.hex)}};function k(e,t,n,i,r){if(e.required&&void 0===t)y(e,t,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=e.type;o.indexOf(s)>-1?C[s](t)||i.push(c(r.messages.types[s],e.fullField,e.type)):s&&("undefined"===typeof t?"undefined":a()(t))!==e.type&&i.push(c(r.messages.types[s],e.fullField,e.type))}}var S=k;function O(e,t,n,i,r){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=t,d=null,h="number"===typeof t,f="string"===typeof t,p=Array.isArray(t);if(h?d="number":f?d="string":p&&(d="array"),!d)return!1;p&&(u=t.length),f&&(u=t.replace(l,"_").length),o?u!==e.len&&i.push(c(r.messages[d].len,e.fullField,e.len)):a&&!s&&ue.max?i.push(c(r.messages[d].max,e.fullField,e.max)):a&&s&&(ue.max)&&i.push(c(r.messages[d].range,e.fullField,e.min,e.max))}var $=O,D="enum";function E(e,t,n,i,r){e[D]=Array.isArray(e[D])?e[D]:[],-1===e[D].indexOf(t)&&i.push(c(r.messages[D],e.fullField,e[D].join(", ")))}var T=E;function P(e,t,n,i,r){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var M=P,I={required:y,whitespace:x,type:S,range:$,enum:T,pattern:M};function N(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r,"string"),d(t,"string")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r),I.pattern(e,t,i,o,r),!0===e.whitespace&&I.whitespace(e,t,i,o,r))}n(o)}var j=N;function A(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var F=A;function L(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var V=L;function z(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var B=z;function R(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),d(t)||I.type(e,t,i,o,r)}n(o)}var H=R;function W(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var q=W;function U(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var Y=U;function K(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"array")&&!e.required)return n();I.required(e,t,i,o,r,"array"),d(t,"array")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var G=K;function X(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var Z=X,J="enum";function Q(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),t&&I[J](e,t,i,o,r)}n(o)}var ee=Q;function te(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r),d(t,"string")||I.pattern(e,t,i,o,r)}n(o)}var ne=te;function ie(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();if(I.required(e,t,i,o,r),!d(t)){var s=void 0;s="number"===typeof t?new Date(t):t,I.type(e,s,i,o,r),s&&I.range(e,s.getTime(),i,o,r)}}n(o)}var re=ie;function oe(e,t,n,i,r){var o=[],s=Array.isArray(t)?"array":"undefined"===typeof t?"undefined":a()(t);I.required(e,t,i,o,r,s),n(o)}var ae=oe;function se(e,t,n,i,r){var o=e.type,a=[],s=e.required||!e.required&&i.hasOwnProperty(e.field);if(s){if(d(t,o)&&!e.required)return n();I.required(e,t,i,a,r,o),d(t,o)||I.type(e,t,i,a,r)}n(a)}var le=se,ce={string:j,method:F,number:V,boolean:B,regexp:H,integer:q,float:Y,array:G,object:Z,enum:ee,pattern:ne,date:re,url:le,hex:le,email:le,required:ae};function ue(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var de=ue();function he(e){this.rules=null,this._messages=de,this.define(e)}he.prototype={messages:function(e){return e&&(this._messages=g(ue(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof e?"undefined":a()(e))||Array.isArray(e))throw new Error("Rules must be an object");this.rules={};var t=void 0,n=void 0;for(t in e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments[2],o=e,s=n,u=i;if("function"===typeof s&&(u=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var d=this.messages();d===de&&(d=ue()),g(d,s.messages),s.messages=d}else s.messages=this.messages();var h=void 0,f=void 0,p={},b=s.keys||Object.keys(this.rules);b.forEach((function(n){h=t.rules[n],f=o[n],h.forEach((function(i){var a=i;"function"===typeof a.transform&&(o===e&&(o=r()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:r()({},a),a.validator=t.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=t.getType(a),a.validator&&(p[n]=p[n]||[],p[n].push({rule:a,value:f,source:o,field:n}))}))}));var y={};m(p,s,(function(e,t){var n=e.rule,i=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(e,t){return r()({},t,{fullField:n.fullField+"."+e})}function u(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],u=a;if(Array.isArray(u)||(u=[u]),u.length&&l("async-validator:",u),u.length&&n.message&&(u=[].concat(n.message)),u=u.map(v(n)),s.first&&u.length)return y[n.field]=1,t(u);if(i){if(n.required&&!e.value)return u=n.message?[].concat(n.message).map(v(n)):s.error?[s.error(n,c(s.messages.required,n.field))]:[],t(u);var d={};if(n.defaultField)for(var h in e.value)e.value.hasOwnProperty(h)&&(d[h]=n.defaultField);for(var f in d=r()({},d,e.rule.fields),d)if(d.hasOwnProperty(f)){var p=Array.isArray(d[f])?d[f]:[d[f]];d[f]=p.map(o.bind(null,f))}var m=new he(d);m.messages(s.messages),e.rule.options&&(e.rule.options.messages=s.messages,e.rule.options.error=s.error),m.validate(e.value,e.rule.options||s,(function(e){t(e&&e.length?u.concat(e):e)}))}else t(u)}i=i&&(n.required||!n.required&&e.value),n.field=e.field;var d=n.validator(n,e.value,u,e.source,s);d&&d.then&&d.then((function(){return u()}),(function(e){return u(e)}))}),(function(e){_(e)}))}else u&&u();function _(e){var t=void 0,n=void 0,i=[],r={};function o(e){Array.isArray(e)?i=i.concat.apply(i,e):i.push(e)}for(t=0;tf)throw TypeError(p);for(u=l(b,i),m=0;my-i+n;m--)delete b[m-1]}else if(n>i)for(m=y-i;m>_;m--)v=m+i-1,g=m+n-1,v in b?b[g]=b[v]:delete b[g];for(m=0;m0?i:n)(e)}},a742:function(e,t,n){"use strict";function i(e){return"[object String]"===Object.prototype.toString.call(e)}function r(e){return"[object Object]"===Object.prototype.toString.call(e)}function o(e){return e&&e.nodeType===Node.ELEMENT_NODE}t.__esModule=!0,t.isString=i,t.isObject=r,t.isHtmlElement=o;t.isFunction=function(e){var t={};return e&&"[object Function]"===t.toString.call(e)},t.isUndefined=function(e){return void 0===e},t.isDefined=function(e){return void 0!==e&&null!==e}},a79d:function(e,t,n){"use strict";var i=n("23e7"),r=n("c430"),o=n("fea9"),a=n("d066"),s=n("4840"),l=n("cdf9"),c=n("6eeb");i({target:"Promise",proto:!0,real:!0},{finally:function(e){var t=s(this,a("Promise")),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof o||o.prototype["finally"]||c(o.prototype,"finally",a("Promise").prototype["finally"])},ae93:function(e,t,n){"use strict";var i,r,o,a=n("e163"),s=n("9112"),l=n("5135"),c=n("b622"),u=n("c430"),d=c("iterator"),h=!1,f=function(){return this};[].keys&&(o=[].keys(),"next"in o?(r=a(a(o)),r!==Object.prototype&&(i=r)):h=!0),void 0==i&&(i={}),u||l(i,d)||s(i,d,f),e.exports={IteratorPrototype:i,BUGGY_SAFARI_ITERATORS:h}},b041:function(e,t,n){"use strict";var i=n("f5df"),r=n("b622"),o=r("toStringTag"),a={};a[o]="z",e.exports="[object z]"!==String(a)?function(){return"[object "+i(this)+"]"}:a.toString},b367:function(e,t,n){var i=n("5524"),r=n("ef08"),o="__core-js_shared__",a=r[o]||(r[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n("e444")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},b39a:function(e,t,n){var i=n("d066");e.exports=i("navigator","userAgent")||""},b50d:function(e,t,n){"use strict";var i=n("c532"),r=n("467f"),o=n("30b5"),a=n("c345"),s=n("3934"),l=n("2d83");e.exports=function(e){return new Promise((function(t,c){var u=e.data,d=e.headers;i.isFormData(u)&&delete d["Content-Type"];var h=new XMLHttpRequest;if(e.auth){var f=e.auth.username||"",p=e.auth.password||"";d.Authorization="Basic "+btoa(f+":"+p)}if(h.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h.onreadystatechange=function(){if(h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in h?a(h.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?h.response:h.responseText,o={data:i,status:h.status,statusText:h.statusText,headers:n,config:e,request:h};r(t,c,o),h=null}},h.onerror=function(){c(l("Network Error",e,null,h)),h=null},h.ontimeout=function(){c(l("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",h)),h=null},i.isStandardBrowserEnv()){var m=n("7aac"),v=(e.withCredentials||s(e.url))&&e.xsrfCookieName?m.read(e.xsrfCookieName):void 0;v&&(d[e.xsrfHeaderName]=v)}if("setRequestHeader"in h&&i.forEach(d,(function(e,t){"undefined"===typeof u&&"content-type"===t.toLowerCase()?delete d[t]:h.setRequestHeader(t,e)})),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(g){if("json"!==e.responseType)throw g}"function"===typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){h&&(h.abort(),c(e),h=null)})),void 0===u&&(u=null),h.send(u)}))}},b575:function(e,t,n){var i,r,o,a,s,l,c,u,d=n("da84"),h=n("06cf").f,f=n("c6b6"),p=n("2cf4").set,m=n("b39a"),v=d.MutationObserver||d.WebKitMutationObserver,g=d.process,b=d.Promise,y="process"==f(g),_=h(d,"queueMicrotask"),x=_&&_.value;x||(i=function(){var e,t;y&&(e=g.domain)&&e.exit();while(r){t=r.fn,r=r.next;try{t()}catch(n){throw r?a():o=void 0,n}}o=void 0,e&&e.enter()},y?a=function(){g.nextTick(i)}:v&&!/(iphone|ipod|ipad).*applewebkit/i.test(m)?(s=!0,l=document.createTextNode(""),new v(i).observe(l,{characterData:!0}),a=function(){l.data=s=!s}):b&&b.resolve?(c=b.resolve(void 0),u=c.then,a=function(){u.call(c,i)}):a=function(){p.call(d,i)}),e.exports=x||function(e){var t={fn:e,next:void 0};o&&(o.next=t),r||(r=t,a()),o=t}},b622:function(e,t,n){var i=n("da84"),r=n("5692"),o=n("90e3"),a=n("4930"),s=i.Symbol,l=r("wks");e.exports=function(e){return l[e]||(l[e]=a&&s[e]||(a?s:o)("Symbol."+e))}},b9c7:function(e,t,n){n("e507"),e.exports=n("5524").Object.assign},ba01:function(e,t,n){e.exports=n("051b")},bc3a:function(e,t,n){e.exports=n("cee4")},c04e:function(e,t,n){var i=n("861d");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},c098:function(e,t,n){e.exports=n("d4af")},c284:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=88)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},88:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":"round","stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;ne)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},c345:function(e,t,n){"use strict";var i=n("c532"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,a={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),t){if(a[t]&&r.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},c401:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t,n){return i.forEach(n,(function(n){e=n(e,t)})),e}},c430:function(e,t){e.exports=!1},c532:function(e,t,n){"use strict";var i=n("1d2b"),r=n("c7ce"),o=Object.prototype.toString;function a(e){return"[object Array]"===o.call(e)}function s(e){return"[object ArrayBuffer]"===o.call(e)}function l(e){return"undefined"!==typeof FormData&&e instanceof FormData}function c(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function u(e){return"string"===typeof e}function d(e){return"number"===typeof e}function h(e){return"undefined"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){return"[object Date]"===o.call(e)}function m(e){return"[object File]"===o.call(e)}function v(e){return"[object Blob]"===o.call(e)}function g(e){return"[object Function]"===o.call(e)}function b(e){return f(e)&&g(e.pipe)}function y(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function _(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),a(e))for(var n=0,i=e.length;n2&&void 0!==arguments[2]?arguments[2]:300,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var r=!1,o=function(){r||(r=!0,t&&t.apply(null,arguments))};i?e.$once("after-leave",o):e.$on("after-leave",o),setTimeout((function(){o()}),n+100)}},c6b6:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},c6cd:function(e,t,n){var i=n("da84"),r=n("ce4e"),o="__core-js_shared__",a=i[o]||r(o,{});e.exports=a},c7ce:function(e,t){ -/*! - * Determine if an object is a Buffer - * - * @author Feross Aboukhadijeh - * @license MIT - */ -e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},c8af:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t){i.forEach(e,(function(n,i){i!==t&&i.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[i])}))}},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},c901:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},ca84:function(e,t,n){var i=n("5135"),r=n("fc6a"),o=n("4d64").indexOf,a=n("d012");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)!i(a,n)&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},cc12:function(e,t,n){var i=n("da84"),r=n("861d"),o=i.document,a=r(o)&&r(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},cc15:function(e,t,n){var i=n("b367")("wks"),r=n("8b1a"),o=n("ef08").Symbol,a="function"==typeof o,s=e.exports=function(e){return i[e]||(i[e]=a&&o[e]||(a?o:r)("Symbol."+e))};s.store=i},cca6:function(e,t,n){var i=n("23e7"),r=n("60da");i({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},cdf9:function(e,t,n){var i=n("825a"),r=n("861d"),o=n("f069");e.exports=function(e,t){if(i(e),r(t)&&t.constructor===e)return t;var n=o.f(e),a=n.resolve;return a(t),n.promise}},ce4e:function(e,t,n){var i=n("da84"),r=n("9112");e.exports=function(e,t){try{r(i,e,t)}catch(n){i[e]=t}return t}},ce7a:function(e,t,n){var i=n("9c0e"),r=n("0983"),o=n("5a94")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},cee4:function(e,t,n){"use strict";var i=n("c532"),r=n("1d2b"),o=n("0a06"),a=n("2444");function s(e){var t=new o(e),n=r(o.prototype.request,t);return i.extend(n,o.prototype,t),i.extend(n,t),n}var l=s(a);l.Axios=o,l.create=function(e){return s(i.merge(a,e))},l.Cancel=n("7a77"),l.CancelToken=n("8df4"),l.isCancel=n("2e67"),l.all=function(e){return Promise.all(e)},l.spread=n("0df6"),e.exports=l,e.exports.default=l},d010:function(e,t,n){"use strict";function i(e,t,n){this.$children.forEach((function(r){var o=r.$options.componentName;o===e?r.$emit.apply(r,[t].concat(n)):i.apply(r,[e,t].concat([n]))}))}t.__esModule=!0,t.default={methods:{dispatch:function(e,t,n){var i=this.$parent||this.$root,r=i.$options.componentName;while(i&&(!r||r!==e))i=i.$parent,i&&(r=i.$options.componentName);i&&i.$emit.apply(i,[t].concat(n))},broadcast:function(e,t,n){i.call(this,e,t,n)}}}},d012:function(e,t){e.exports={}},d039:function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},d066:function(e,t,n){var i=n("428f"),r=n("da84"),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(i[e])||o(r[e]):i[e]&&i[e][t]||r[e]&&r[e][t]}},d16a:function(e,t,n){var i=n("fc5e"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},d1e7:function(e,t,n){"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!i.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:i},d2bb:function(e,t,n){var i=n("825a"),r=n("3bbe");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(o){}return function(n,o){return i(n),r(o),t?e.call(n,o):n.__proto__=o,n}}():void 0)},d397:function(e,t,n){"use strict";function i(e){return void 0!==e&&null!==e}function r(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=i,t.isKorean=r},d3b7:function(e,t,n){var i=n("6eeb"),r=n("b041"),o=Object.prototype;r!==o.toString&&i(o,"toString",r,{unsafe:!0})},d44e:function(e,t,n){var i=n("9bf2").f,r=n("5135"),o=n("b622"),a=o("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&i(e,a,{configurable:!0,value:t})}},d4af:function(e,t,n){"use strict";var i=n("8eb7"),r=n("7b3e"),o=10,a=40,s=800;function l(e){var t=0,n=0,i=0,r=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),i=t*o,r=n*o,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||r)&&e.deltaMode&&(1==e.deltaMode?(i*=a,r*=a):(i*=s,r*=s)),i&&!t&&(t=i<1?-1:1),r&&!n&&(n=r<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:r}}l.getEventType=function(){return i.firefox()?"DOMMouseScroll":r("wheel")?"wheel":"mousewheel"},e.exports=l},d7d1:function(e,t,n){"use strict";var i;(function(r){var o={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,s="\\d\\d?",l="\\d{3}",c="\\d{4}",u="[^\\s]+",d=/\[([^]*?)\]/gm,h=function(){};function f(e){return e.replace(/[|\\{()[^$+*?.-]/g,"\\$&")}function p(e,t){for(var n=[],i=0,r=e.length;i3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return v(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return v(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return v(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return v(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return v(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return v(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return v(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return v(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return v(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return v(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return v(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+v(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},w={d:[s,function(e,t){e.day=t}],Do:[s+u,function(e,t){e.day=parseInt(t,10)}],M:[s,function(e,t){e.month=t-1}],yy:[s,function(e,t){var n=new Date,i=+(""+n.getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:[s,function(e,t){e.hour=t}],m:[s,function(e,t){e.minute=t}],s:[s,function(e,t){e.second=t}],yyyy:[c,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[s,h],ddd:[u,h],MMM:[u,m("monthNamesShort")],MMMM:[u,m("monthNames")],a:[u,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};w.dd=w.d,w.dddd=w.ddd,w.DD=w.D,w.mm=w.m,w.hh=w.H=w.HH=w.h,w.MM=w.M,w.ss=w.s,w.A=w.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks["default"];var r=[];return t=t.replace(d,(function(e,t){return r.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,i):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return r.shift()}))},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},s=[],l=[];t=t.replace(d,(function(e,t){return l.push(t),"@@@"}));var c=f(t).replace(a,(function(e){if(w[e]){var t=w[e];return s.push(t[1]),"("+t[0]+")"}return e}));c=c.replace(/@@@/g,(function(){return l.shift()}));var u=e.match(new RegExp(c,"i"));if(!u)return null;for(var h=1;h1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()-t)});t.nextDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)},t.getStartDateOfMonth=function(e,t){var n=new Date(e,t,1),i=n.getDay();return m(n,0===i?7:i)},t.getWeekNumber=function(e){if(!h(e))return null;var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},t.getRangeHours=function(e){var t=[],n=[];if((e||[]).forEach((function(e){var t=e.map((function(e){return e.getHours()}));n=n.concat(c(t[0],t[1]))})),n.length)for(var i=0;i<24;i++)t[i]=-1===n.indexOf(i);else for(var r=0;r<24;r++)t[r]=!1;return t},t.getPrevMonthLastDays=function(e,t){if(t<=0)return[];var n=new Date(e.getTime());n.setDate(0);var i=n.getDate();return g(t).map((function(e,n){return i-(t-n-1)}))},t.getMonthDays=function(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),n=t.getDate();return g(n).map((function(e,t){return t+1}))};function v(e,t,n,i){for(var r=t;r0?e.forEach((function(e){var i=e[0],r=e[1],o=i.getHours(),a=i.getMinutes(),s=r.getHours(),l=r.getMinutes();o===t&&s!==t?v(n,a,60,!0):o===t&&s===t?v(n,a,l+1,!0):o!==t&&s===t?v(n,0,l+1,!0):ot&&v(n,0,60,!0)})):v(n,0,60,!0),n};var g=t.range=function(e){return Array.apply(null,{length:e}).map((function(e,t){return t}))},b=t.modifyDate=function(e,t,n,i){return new Date(t,n,i,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())},y=t.modifyTime=function(e,t,n,i){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t,n,i,e.getMilliseconds())},_=(t.modifyWithTimeString=function(e,t){return null!=e&&t?(t=f(t,"HH:mm:ss"),y(e,t.getHours(),t.getMinutes(),t.getSeconds())):e},t.clearTime=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},t.clearMilliseconds=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),0)},t.limitTimeRange=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"HH:mm:ss";if(0===t.length)return e;var i=function(e){return r.default.parse(r.default.format(e,n),n)},o=i(e),a=t.map((function(e){return e.map(i)}));if(a.some((function(e){return o>=e[0]&&o<=e[1]})))return e;var s=a[0][0],l=a[0][0];a.forEach((function(e){s=new Date(Math.min(e[0],s)),l=new Date(Math.max(e[1],s))}));var c=o1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n-t,i)},t.nextYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n+t,i)},t.extractDateFormat=function(e){return e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim()},t.extractTimeFormat=function(e){return e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g,"").trim()},t.validateRangeInOneMonth=function(e,t){return e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}},da84:function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n("c8ba"))},dcdc:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=98)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},4:function(e,t){e.exports=n("d010")},98:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=s,c=n(0),u=Object(c["a"])(l,i,r,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox.vue";var d=u.exports;d.install=function(e){e.component(d.name,d)};t["default"]=d}})},df75:function(e,t,n){var i=n("ca84"),r=n("7839");e.exports=Object.keys||function(e){return i(e,r)}},df7c:function(e,t,n){(function(e){function n(e,t){for(var n=0,i=e.length-1;i>=0;i--){var r=e[i];"."===r?e.splice(i,1):".."===r?(e.splice(i,1),n++):n&&(e.splice(i,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function i(e){"string"!==typeof e&&(e+="");var t,n=0,i=-1,r=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!r){n=t+1;break}}else-1===i&&(r=!1,i=t+1);return-1===i?"":e.slice(n,i)}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],i=0;i=-1&&!i;o--){var a=o>=0?arguments[o]:e.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return t=n(r(t.split("/"),(function(e){return!!e})),!i).join("/"),(i?"/":"")+t||"."},t.normalize=function(e){var i=t.isAbsolute(e),a="/"===o(e,-1);return e=n(r(e.split("/"),(function(e){return!!e})),!i).join("/"),e||i||(e="."),e&&a&&(e+="/"),(i?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function i(e){for(var t=0;t=0;n--)if(""!==e[n])break;return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var r=i(e.split("/")),o=i(n.split("/")),a=Math.min(r.length,o.length),s=a,l=0;l=1;--o)if(t=e.charCodeAt(o),47===t){if(!r){i=o;break}}else r=!1;return-1===i?n?"/":".":n&&1===i?"/":e.slice(0,i)},t.basename=function(e,t){var n=i(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,i=-1,r=!0,o=0,a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(47!==s)-1===i&&(r=!1,i=a+1),46===s?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!r){n=a+1;break}}return-1===t||-1===i||0===o||1===o&&t===i-1&&t===n+1?"":e.slice(t,i)};var o="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("4362"))},dfe5:function(e,t){},e163:function(e,t,n){var i=n("5135"),r=n("7b0b"),o=n("f772"),a=n("e177"),s=o("IE_PROTO"),l=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=r(e),i(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},e177:function(e,t,n){var i=n("d039");e.exports=!i((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},e198:function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("e444"),a=n("fcd4"),s=n("1a14").f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},e260:function(e,t,n){"use strict";var i=n("fc6a"),r=n("44d2"),o=n("3f8c"),a=n("69f3"),s=n("7dd0"),l="Array Iterator",c=a.set,u=a.getterFor(l);e.exports=s(Array,"Array",(function(e,t){c(this,{type:l,target:i(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},e2cc:function(e,t,n){var i=n("6eeb");e.exports=function(e,t,n){for(var r in t)i(e,r,t[r],n);return e}},e34a:function(e,t,n){var i=n("8b1a")("meta"),r=n("7a41"),o=n("9c0e"),a=n("1a14").f,s=0,l=Object.isExtensible||function(){return!0},c=!n("4b8b")((function(){return l(Object.preventExtensions({}))})),u=function(e){a(e,i,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,i)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[i].i},h=function(e,t){if(!o(e,i)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[i].w},f=function(e){return c&&p.NEED&&l(e)&&!o(e,i)&&u(e),e},p=e.exports={KEY:i,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},e444:function(e,t){e.exports=!0},e450:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=111)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},11:function(e,t){e.exports=n("f3ad")},111:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.decrease(t):null}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.increase(t):null}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),n("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return"button"in t||!e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?(t.preventDefault(),e.increase(t)):null},function(t){return"button"in t||!e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?(t.preventDefault(),e.decrease(t)):null}]}})],1)},r=[];i._withStripped=!0;var o=n(11),a=n.n(o),s=n(22),l=n.n(s),c=n(30),u={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:c["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},d=u,h=n(0),f=Object(h["a"])(d,i,r,!1,null,null,null);f.options.__file="packages/input-number/src/input-number.vue";var p=f.exports;p.install=function(e){e.component(p.name,p)};t["default"]=p},2:function(e,t){e.exports=n("5924")},22:function(e,t){e.exports=n("12f2")},30:function(e,t,n){"use strict";var i=n(2);t["a"]={bind:function(e,t,n){var r=null,o=void 0,a=function(){return n.context[t.expression].apply()},s=function(){Date.now()-o<100&&a(),clearInterval(r),r=null};Object(i["on"])(e,"mousedown",(function(e){0===e.button&&(o=Date.now(),Object(i["once"])(document,"mouseup",s),clearInterval(r),r=setInterval(a,100))}))}}}})},e452:function(e,t,n){"use strict";t.__esModule=!0;var i=i||{};i.Utils=i.Utils||{},i.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var n=e.childNodes[t];if(i.Utils.attemptFocus(n)||i.Utils.focusLastDescendant(n))return!0}return!1},i.Utils.attemptFocus=function(e){if(!i.Utils.isFocusable(e))return!1;i.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return i.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},i.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},i.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a=51&&/native code/.test(L))return!1;var e=L.resolve(1),t=function(e){e((function(){}),(function(){}))},n=e.constructor={};return n[I]=t,!(e.then((function(){}))instanceof t)})),te=ee||!x((function(e){L.all(e)["catch"]((function(){}))})),ne=function(e){var t;return!(!v(e)||"function"!=typeof(t=e.then))&&t},ie=function(e,t,n){if(!t.notified){t.notified=!0;var i=t.reactions;k((function(){var r=t.value,o=t.state==X,a=0;while(i.length>a){var s,l,c,u=i[a++],d=o?u.ok:u.fail,h=u.resolve,f=u.reject,p=u.domain;try{d?(o||(t.rejection===Q&&se(e,t),t.rejection=J),!0===d?s=r:(p&&p.enter(),s=d(r),p&&(p.exit(),c=!0)),s===u.promise?f(V("Promise-chain cycle")):(l=ne(s))?l.call(s,h,f):h(s)):f(r)}catch(m){p&&!c&&p.exit(),f(m)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&oe(e,t)}))}},re=function(e,t,n){var i,r;U?(i=z.createEvent("Event"),i.promise=t,i.reason=n,i.initEvent(e,!1,!0),c.dispatchEvent(i)):i={promise:t,reason:n},(r=c["on"+e])?r(i):e===Y&&O("Unhandled promise rejection",n)},oe=function(e,t){C.call(c,(function(){var n,i=t.value,r=ae(t);if(r&&(n=D((function(){q?B.emit("unhandledRejection",i,e):re(Y,e,i)})),t.rejection=q||ae(t)?Q:J,n.error))throw n.value}))},ae=function(e){return e.rejection!==J&&!e.parent},se=function(e,t){C.call(c,(function(){q?B.emit("rejectionHandled",e):re(K,e,t.value)}))},le=function(e,t,n,i){return function(r){e(t,n,r,i)}},ce=function(e,t,n,i){t.done||(t.done=!0,i&&(t=i),t.value=n,t.state=Z,ie(e,t,!0))},ue=function(e,t,n,i){if(!t.done){t.done=!0,i&&(t=i);try{if(e===n)throw V("Promise can't be resolved itself");var r=ne(n);r?k((function(){var i={done:!1};try{r.call(n,le(ue,e,i,t),le(ce,e,i,t))}catch(o){ce(e,i,o,t)}})):(t.value=n,t.state=X,ie(e,t,!1))}catch(o){ce(e,{done:!1},o,t)}}};ee&&(L=function(e){b(this,L,N),g(e),i.call(this);var t=j(this);try{e(le(ue,this,t),le(ce,this,t))}catch(n){ce(this,t,n)}},i=function(e){A(this,{type:N,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:G,value:void 0})},i.prototype=f(L.prototype,{then:function(e,t){var n=F(this),i=H(w(this,L));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=q?B.domain:void 0,n.parent=!0,n.reactions.push(i),n.state!=G&&ie(this,n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),r=function(){var e=new i,t=j(e);this.promise=e,this.resolve=le(ue,e,t),this.reject=le(ce,e,t)},$.f=H=function(e){return e===L||e===o?new r(e):W(e)},l||"function"!=typeof d||(a=d.prototype.then,h(d.prototype,"then",(function(e,t){var n=this;return new L((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof R&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return S(L,R.apply(c,arguments))}}))),s({global:!0,wrap:!0,forced:ee},{Promise:L}),p(L,N,!1,!0),m(N),o=u(N),s({target:N,stat:!0,forced:ee},{reject:function(e){var t=H(this);return t.reject.call(void 0,e),t.promise}}),s({target:N,stat:!0,forced:l||ee},{resolve:function(e){return S(l&&this===o?L:this,e)}}),s({target:N,stat:!0,forced:te},{all:function(e){var t=this,n=H(t),i=n.resolve,r=n.reject,o=D((function(){var n=g(t.resolve),o=[],a=0,s=1;_(e,(function(e){var l=a++,c=!1;o.push(void 0),s++,n.call(t,e).then((function(e){c||(c=!0,o[l]=e,--s||i(o))}),r)})),--s||i(o)}));return o.error&&r(o.value),n.promise},race:function(e){var t=this,n=H(t),i=n.reject,r=D((function(){var r=g(t.resolve);_(e,(function(e){r.call(t,e).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}})},e772:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=52)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},3:function(e,t){e.exports=n("8122")},33:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(s["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,d=n(0),h=Object(d["a"])(u,i,r,!1,null,null,null);h.options.__file="packages/select/src/option.vue";t["a"]=h.exports},4:function(e,t){e.exports=n("d010")},52:function(e,t,n){"use strict";n.r(t);var i=n(33);i["a"].install=function(e){e.component(i["a"].name,i["a"])},t["default"]=i["a"]}})},e893:function(e,t,n){var i=n("5135"),r=n("56ef"),o=n("06cf"),a=n("9bf2");e.exports=function(e,t){for(var n=r(t),s=a.f,l=o.f,c=0;c-1?"center "+n:n+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var n in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[n].name)){t=e.attributes[n].name;break}var i=document.createElement("div");t&&i.setAttribute(t,""),i.setAttribute("x-arrow",""),i.className="popper__arrow",e.appendChild(i)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},ea34:function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},eedf:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=118)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},118:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},ef08:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},f069:function(e,t,n){"use strict";var i=n("1c0b"),r=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new r(e)}},f0d9:function(e,t,n){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"}}}},f3ad:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=74)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},10:function(e,t){e.exports=n("2bb5")},21:function(e,t){e.exports=n("d397")},4:function(e,t){e.exports=n("d010")},74:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(10),l=n.n(s),c=void 0,u="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",d=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function h(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=d.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;c||(c=document.createElement("textarea"),document.body.appendChild(c));var i=h(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;c.setAttribute("style",s+";"+u),c.value=e.value||e.placeholder||"";var l=c.scrollHeight,d={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),c.value="";var f=c.scrollHeight-r;if(null!==t){var p=f*t;"border-box"===a&&(p=p+r+o),l=Math.max(p,l),d.minHeight=p+"px"}if(null!==n){var m=f*n;"border-box"===a&&(m=m+r+o),l=Math.min(m,l)}return d.height=l+"px",c.parentNode&&c.parentNode.removeChild(c),c=null,d}var p=n(9),m=n.n(p),v=n(21),g={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return m()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=f(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:f(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(v["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i0?i:n)(e)}},fc6a:function(e,t,n){var i=n("44ad"),r=n("1d80");e.exports=function(e){return i(r(e))}},fcd4:function(e,t,n){t.f=n("cc15")},fea9:function(e,t,n){var i=n("da84");e.exports=i.Promise},fed5:function(e,t){t.f=Object.getOwnPropertySymbols}}]); \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/favicon.ico" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/favicon.ico" deleted file mode 100644 index df36fcfb..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/favicon.ico" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/index.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/index.html" deleted file mode 100644 index 56ded40e..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble/templates/index.html" +++ /dev/null @@ -1 +0,0 @@ -bubble清单
\ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble_frontend" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble_frontend" deleted file mode 160000 index e73fe137..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson25/bubble_frontend" +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e73fe137738716ae73ee5e596fb096813e7cd2c7 diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/controller/controller.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/controller/controller.go" deleted file mode 100644 index 6e49c04f..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/controller/controller.go" +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @Description 控制器 - * @Author 陌溪 - * @Date 2020/9/18 20:06 - **/ -package controller - -import ( - "bubble/entity" - "github.com/gin-gonic/gin" - "net/http" -) - - - -/** url -> controller -> service -> dao -> entity 【请求来了 -> 控制器 -> 业务逻辑 -> 模型层的增删改查】 - * @Description 访问首页 - * @Param - * @return - **/ -func IndexHandler(context *gin.Context) { - context.HTML(http.StatusOK, "index.html", nil) -} - -/** - * @Description 创建Todo - * @Param - * @return - **/ -func CreateTodo(context *gin.Context) { - // 从请求中把数据取出来 - var todo entity.Todo - context.BindJSON(&todo) - // 存入数据库 - err := entity.CreateTodo(&todo) - // 响应 - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todo) - } -} - -/** - * @Description 查看所有代表事项 - * @Param - * @return - **/ -func GetTodoList(context *gin.Context) { - // 查询所有数据 - todoList, err := entity.GetTodoList() - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todoList) - } -} - -/** - * @Description 更新代办事项 - * @Param - * @return - **/ -func UpdateTodo(context *gin.Context) { - id, ok := context.Params.Get("id") - if !ok { - context.JSON(http.StatusOK, gin.H{ - "error": "err", - }) - } else { - - todo, err := entity.GetTodoById(id) - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - // 将内容进行修改 - context.BindJSON(&todo) - err = entity.UpdateTodo(todo) - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err.Error(), - }) - } else { - context.JSON(http.StatusOK, todo) - } - } - } -} - -/** - * @Description 删除代办事项 - * @Param - * @return - **/ -func DeleteTodo(context *gin.Context) { - id, ok := context.Params.Get("id") - if !ok { - context.JSON(http.StatusOK, gin.H{ - "error": "err", - }) - } else { - var todo entity.Todo - err := entity.DeleteTodo(id) - if err != nil { - context.JSON(http.StatusOK, gin.H{ - "error": err, - }) - } else { - context.JSON(http.StatusOK, todo) - } - } -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/dao/mysql.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/dao/mysql.go" deleted file mode 100644 index 53ade112..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/dao/mysql.go" +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @Description 通过GORM操作MySQL数据库 - * @Author 陌溪 - * @Date 2020/9/18 20:15 - **/ -package dao - -import ( - "fmt" - "github.com/jinzhu/gorm" -) - -/** - * @Description 定义全局的数据库对象 - **/ -var ( - DB *gorm.DB -) - -/** - * @Description 初始化mysql - * @Param - * @return err - **/ -func InitMySQL() (err error) { - DB, err = gorm.Open("mysql", "root:root@(localhost)/mogu_demo?charset=utf8mb4&parseTime=True&loc=Local") - if err != nil { - fmt.Printf("connect msyql failed, err: %v \n", err) - return - } - // 测试是否能够连通 - return DB.DB().Ping() -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/entity/todo.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/entity/todo.go" deleted file mode 100644 index d4c6e71f..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/entity/todo.go" +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @Description todo实体类 - * @Author 陌溪 - * @Date 2020/9/18 20:18 - **/ -package entity - -import ( - "bubble/dao" -) - -type Todo struct { - ID int `json:"id"` - Title string `json:"title"` - Status bool `json:"status"` -} - -/** - * @Description 增加todo - * @Param - * @return - **/ -func CreateTodo(todo *Todo) (err error) { - err = dao.DB.Create(&todo).Error - // 响应 - if err != nil { - return err - } - return -} - -/** - * @Description 获取todo列表 - * @Param - * @return - **/ -func GetTodoList() (todoList[] *Todo, err error) { - err = dao.DB.Find(&todoList).Error - if err != nil { - return nil, err - } - return todoList, nil -} - -/** - * @Description 获取Todo通过ID - * @Param - * @return - **/ -func GetTodoById(id string) (todo *Todo, err error) { - todo = new(Todo) - err = dao.DB.Where("id=?", id).Find(&todo).Error - if err != nil { - return nil, err - } - return todo, nil -} - - -/** - * @Description 获取todo列表 - * @Param - * @return - **/ -func UpdateTodo(todo *Todo) (err error) { - err = dao.DB.Save(&todo).Error - return -} - -/** - * @Description 获取todo列表 - * @Param - * @return - **/ -func DeleteTodo(id string) (err error) { - err = dao.DB.Where("id=?", id).Delete(&Todo{}).Error - return -} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.mod" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.mod" deleted file mode 100644 index 31fa1c4a..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.mod" +++ /dev/null @@ -1,17 +0,0 @@ -module bubble - -go 1.14 - -require ( - github.com/gin-gonic/gin v1.6.3 - github.com/go-playground/validator/v10 v10.3.0 // indirect - github.com/golang/protobuf v1.4.2 // indirect - github.com/jinzhu/gorm v1.9.16 - github.com/json-iterator/go v1.1.10 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/ugorji/go v1.1.8 // indirect - golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20 // indirect - google.golang.org/protobuf v1.25.0 // indirect - gopkg.in/yaml.v2 v2.3.0 // indirect -) diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.sum" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.sum" deleted file mode 100644 index abc31678..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/go.sum" +++ /dev/null @@ -1,146 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.3.0 h1:nZU+7q+yJoFmwvNgv/LnPUkwPal62+b2xXj0AU1Es7o= -github.com/go-playground/validator/v10 v10.3.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= -github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.1.8 h1:/D9x7IRpfMHDlizVOgxrag5Fh+/NY+LtI8bsr+AswRA= -github.com/ugorji/go v1.1.8/go.mod h1:0lNM99SwWUIRhCXnigEMClngXBk/EmpTXa7mgiewYWA= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.1.8 h1:4dryPvxMP9OtkjIbuNeK2nb27M38XMHLGlfNSNph/5s= -github.com/ugorji/go/codec v1.1.8/go.mod h1:X00B19HDtwvKbQY2DcYjvZxKQp8mzrJoQ6EgoIY/D2E= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20 h1:4X356008q5SA3YXu8PiRap39KFmy4Lf6sGlceJKZQsU= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/main.go" deleted file mode 100644 index af285eb0..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/main.go" +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @Description 待办事项后台接口 - * @Author 陌溪 - * @Date 2020/9/18 16:02 - **/ -package main - -import ( - "bubble/dao" - "bubble/entity" - "bubble/routers" - "fmt" - _ "github.com/jinzhu/gorm/dialects/mysql" -) - -func main() { - err := dao.InitMySQL() - if err != nil { - panic(err) - } else { - fmt.Println("connect mysql success") - } - // 延迟关闭数据库 - defer dao.DB.Close() - // 模型关闭 自动迁移【把结构体和数据表进行对应】 - dao.DB.AutoMigrate(&entity.Todo{}) - // 注册路由 - r := routers.SetRouter() - r.Run(":8090") -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/routers/routers.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/routers/routers.go" deleted file mode 100644 index 22a0c896..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/routers/routers.go" +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @Description - * @Author 陌溪 - * @Date 2020/9/18 20:41 - **/ -package routers - -import ( - "bubble/controller" - "github.com/gin-gonic/gin" -) - -/** - * @Description 注册路由 - * @Param - * @return - **/ -func SetRouter() *gin.Engine { - // 定义Gin默认路由 - r := gin.Default() - // 告诉Gin框架模板文件引用的静态文件去哪里找 - r.Static("/static", "static") - // 告诉Gin框架去哪里找模板文件 - r.LoadHTMLGlob("templates/*") - - // 访问待办事项首页 - r.GET("/", controller.IndexHandler) - - // v1 待办事项 - // 前端页面填写代办事项,点击提交就会发送请求到这里 - v1Group := r.Group("v1") - { - // 添加 - v1Group.POST("/todo", controller.CreateTodo) - // 查看【查看所有】 - v1Group.GET("/todo", controller.GetTodoList) - // 修改 - v1Group.PUT("/todo/:id", controller.UpdateTodo) - // 删除 - v1Group.DELETE("/todo/:id",controller.DeleteTodo) - } - return r -} diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/app.224ec165.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/app.224ec165.css" deleted file mode 100644 index 779676cc..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/app.224ec165.css" +++ /dev/null @@ -1 +0,0 @@ -.el-table .warning-row{background:#fdf5e6}.el-table .success-row{text-decoration:line-through}.el-footer,.el-header{background-color:#409eff;color:#fff;text-align:center;line-height:60px}.el-footer{background-color:#909399;display:block;width:100%;position:fixed;bottom:0}body{margin:0} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/chunk-vendors.57db8905.css" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/chunk-vendors.57db8905.css" deleted file mode 100644 index 384bb016..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/css/chunk-vendors.57db8905.css" +++ /dev/null @@ -1 +0,0 @@ -.el-pagination--small .arrow.disabled,.el-table--hidden,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*{visibility:hidden}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}@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(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}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:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-dialog,.el-pager li{background:#fff;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-moz-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-pager,.el-table th{-webkit-user-select:none;-ms-user-select:none}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-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 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}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 #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background: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:before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-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:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0}.el-menu,.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom: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-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;-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-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform: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:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;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;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item,.el-select .el-tag,.el-table{-webkit-box-sizing:border-box}.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:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0);transform:rotate(0)}.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:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#fff}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform: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%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#f5f7fa}.el-table th,.el-table tr{background-color:#fff}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table--border td:first-child .cell,.el-table--border th:first-child .cell,.el-table .cell,.el-table th div{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.is-sortable{cursor:pointer}.el-table th{white-space:nowrap;overflow:hidden;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.el-table th div{line-height:40px;white-space:nowrap}.el-table th>.cell,.el-table th div{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;vertical-align:middle;width:100%}.el-table th>.cell.highlight{color:#409eff}.el-table th.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;white-space:normal;word-break:break-all;line-height:23px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#f5f7fa}.el-table__body tr.current-row>td{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;-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-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div,.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-moz-user-select:none;user-select:none}.el-date-table,.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-ms-user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{-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:#409eff;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:#409eff}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.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:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;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:#409eff}.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:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;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:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel,.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;-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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-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}.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 #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-container,.el-container.is-vertical,.el-drawer,.el-link,.el-steps--vertical{-webkit-box-direction:normal}.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:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:inset 0 0 2px 2px #409eff;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:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;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:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--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}.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__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}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}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.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:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{vertical-align:middle;display:inline-block}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button,.el-slider__button-wrapper,.el-step__icon-inner{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;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{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:#409eff}.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-col-pull-0,.el-col-pull-1,.el-col-pull-2,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-push-0,.el-col-push-1,.el-col-push-2,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}@-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{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform: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-bar,.el-progress-bar__inner:after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner:after{height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{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-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border:1px solid #ebeef5;background-color:#fff;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-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;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox,.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--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{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active,.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 #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-cascader__tags,.el-collapse-item__wrap,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-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:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-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 #409eff;box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,color-stop(0,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,color-stop(0,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,color-stop(0,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,color-stop(0,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:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__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,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{-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 #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.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;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-button,.el-input__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409eff;outline:0}.el-input__suffix{right:5px;-webkit-transition:all .3s;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px}.el-input__icon,.el-input__prefix{-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#fff;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color: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:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#409eff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color: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-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:#409eff;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;box-sizing:border-box;min-width:0}.el-aside,.el-container,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-webkit-box-orient:vertical;-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-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;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 #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:-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:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%)}.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-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-backtop,.el-calendar-table td.is-today{color:#409eff}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:-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-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox,.el-checkbox-button__inner,.el-radio{font-weight:500;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.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:#409eff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.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::-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-node,.el-drawer{display:-webkit-box;display:-ms-flexbox}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}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;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ltr{-webkit-animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ttb{-webkit-animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.btt{-webkit-animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.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 20px 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}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s reverse} \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.535877f5.woff" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.535877f5.woff" deleted file mode 100644 index 02b9a253..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.535877f5.woff" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.732389de.ttf" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.732389de.ttf" deleted file mode 100644 index 91b74de3..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/fonts/element-icons.732389de.ttf" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/app.1966d06f.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/app.1966d06f.js" deleted file mode 100644 index 32c89158..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/app.1966d06f.js" +++ /dev/null @@ -1 +0,0 @@ -(function(e){function t(t){for(var o,s,i=t[0],l=t[1],c=t[2],d=0,f=[];d ").concat(o),type:"success"})}))},handleDelete:function(e,t){var n=this;this.axios.delete("/v1/todo/"+t).then((function(){n.tableData.splice(e,1),n.$message({showClose:!0,duration:1500,message:"删除待办事项成功",type:"success"})}))},handleAdd:function(){var e=this;""!=this.newTitle?(this.axios.post("/v1/todo",{title:this.newTitle}).then((function(){e.getTodoList(),e.$message({showClose:!0,duration:1500,message:"添加待办事项成功",type:"success"})})),this.newTitle=""):this.$message({showClose:!0,duration:1500,message:"title不能为空哦",type:"warning"})}}}),v=h,w=(n("ed30"),n("2877")),b=Object(w["a"])(v,f,p,!1,null,null,null),m=b.exports,g={name:"Index",components:{TodoList:m}},x=g,y=(n("8fc1"),Object(w["a"])(x,u,d,!1,null,null,null)),j=y.exports,_={name:"app",components:{Index:j}},O=_,T=(n("034f"),Object(w["a"])(O,l,c,!1,null,null,null)),P=T.exports,$=n("5c96"),k=n.n($);n("0fae");o["default"].use(k.a);var C=n("8c4f");o["default"].use(C["a"]);var D=[{path:"/",name:"index",component:j}],S=new C["a"]({routes:D}),E=S;o["default"].config.productionTip=!0,new o["default"]({router:E,render:function(e){return e(P)}}).$mount("#app")},"85ec":function(e,t,n){},"89d2":function(e,t,n){},"8fc1":function(e,t,n){"use strict";var o=n("9272"),r=n.n(o);r.a},9272:function(e,t,n){},ed30:function(e,t,n){"use strict";var o=n("89d2"),r=n.n(o);r.a}}); \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/chunk-vendors.ddcb6f91.js" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/chunk-vendors.ddcb6f91.js" deleted file mode 100644 index 0eaef868..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/static/js/chunk-vendors.ddcb6f91.js" +++ /dev/null @@ -1,34 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"03d6":function(e,t,n){var i=n("9c0e"),r=n("6ca1"),o=n("39ad")(!1),a=n("5a94")("IE_PROTO");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)n!=a&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},"051b":function(e,t,n){var i=n("1a14"),r=n("10db");e.exports=n("0bad")?function(e,t,n){return i.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},"05f5":function(e,t,n){var i=n("7a41"),r=n("ef08").document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},"06cf":function(e,t,n){var i=n("83ab"),r=n("d1e7"),o=n("5c6c"),a=n("fc6a"),s=n("c04e"),l=n("5135"),c=n("0cfb"),u=Object.getOwnPropertyDescriptor;t.f=i?u:function(e,t){if(e=a(e),t=s(t,!0),c)try{return u(e,t)}catch(n){}if(l(e,t))return o(!r.f.call(e,t),e[t])}},"072d":function(e,t,n){"use strict";var i=n("0bad"),r=n("9876"),o=n("fed5"),a=n("1917"),s=n("0983"),l=n("9fbb"),c=Object.assign;e.exports=!c||n("4b8b")((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=c({},e)[n]||Object.keys(c({},t)).join("")!=i}))?function(e,t){var n=s(e),c=arguments.length,u=1,d=o.f,h=a.f;while(c>u){var f,p=l(arguments[u++]),m=d?r(p).concat(d(p)):r(p),v=m.length,g=0;while(v>g)f=m[g++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:c},"0983":function(e,t,n){var i=n("c901");e.exports=function(e){return Object(i(e))}},"0a06":function(e,t,n){"use strict";var i=n("2444"),r=n("c532"),o=n("f6b4"),a=n("5270");function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){"string"===typeof e&&(e=r.merge({url:arguments[0]},arguments[1])),e=r.merge(i,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[a,void 0],n=Promise.resolve(e);this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));while(t.length)n=n.then(t.shift(),t.shift());return n},r.forEach(["delete","get","head","options"],(function(e){s.prototype[e]=function(t,n){return this.request(r.merge(n||{},{method:e,url:t}))}})),r.forEach(["post","put","patch"],(function(e){s.prototype[e]=function(t,n,i){return this.request(r.merge(i||{},{method:e,url:t,data:n}))}})),e.exports=s},"0ae2":function(e,t,n){var i=n("9876"),r=n("fed5"),o=n("1917");e.exports=function(e){var t=i(e),n=r.f;if(n){var a,s=n(e),l=o.f,c=0;while(s.length>c)l.call(e,a=s[c++])&&t.push(a)}return t}},"0b99":function(e,t,n){"use strict";var i=n("19fa")(!0);n("393a")(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=i(t,n),this._i+=e.length,{value:e,done:!1})}))},"0bad":function(e,t,n){e.exports=!n("4b8b")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},"0cfb":function(e,t,n){var i=n("83ab"),r=n("d039"),o=n("cc12");e.exports=!i&&!r((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},"0df6":function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},"0e15":function(e,t,n){var i=n("597f");e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},"0fae":function(e,t,n){},1098:function(e,t,n){"use strict";t.__esModule=!0;var i=n("17ed"),r=l(i),o=n("f893"),a=l(o),s="function"===typeof a.default&&"symbol"===typeof r.default?function(e){return typeof e}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":typeof e};function l(e){return e&&e.__esModule?e:{default:e}}t.default="function"===typeof a.default&&"symbol"===s(r.default)?function(e){return"undefined"===typeof e?"undefined":s(e)}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":"undefined"===typeof e?"undefined":s(e)}},"10db":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"12f2":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},"14e9":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=122)}({122:function(e,t,n){"use strict";n.r(t);var i=n(15),r=n(37),o=n.n(r),a=n(3),s=n(2),l={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function c(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var u={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return l[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:c({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(s["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(s["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(s["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(s["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},d={name:"ElScrollbar",components:{Bar:u},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=o()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(a["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var s=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),l=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[s]]),c=void 0;return c=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[s]])]:[l,e(u,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(u,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},c)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(i["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(i["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(d.name,d)}};t["default"]=d},15:function(e,t){e.exports=n("4010")},2:function(e,t){e.exports=n("5924")},3:function(e,t){e.exports=n("8122")},37:function(e,t){e.exports=n("e62d")}})},1609:function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},"17ed":function(e,t,n){e.exports={default:n("511f"),__esModule:!0}},1836:function(e,t,n){var i=n("6ca1"),r=n("6438").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):r(i(e))}},1917:function(e,t){t.f={}.propertyIsEnumerable},"19aa":function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},"19fa":function(e,t,n){var i=n("fc5e"),r=n("c901");e.exports=function(e){return function(t,n){var o,a,s=String(r(t)),l=i(n),c=s.length;return l<0||l>=c?e?"":void 0:(o=s.charCodeAt(l),o<55296||o>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):o:e?s.slice(l,l+2):a-56320+(o-55296<<10)+65536)}}},"1a14":function(e,t,n){var i=n("77e9"),r=n("faf5"),o=n("3397"),a=Object.defineProperty;t.f=n("0bad")?Object.defineProperty:function(e,t,n){if(i(e),t=o(t,!0),i(n),r)try{return a(e,t,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},"1be4":function(e,t,n){var i=n("d066");e.exports=i("document","documentElement")},"1c0b":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},"1c7e":function(e,t,n){var i=n("b622"),r=i("iterator"),o=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(l){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(l){}return n}},"1d2b":function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i=51||!i((function(){var t=[],n=t.constructor={};return n[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},2266:function(e,t,n){var i=n("825a"),r=n("e95a"),o=n("50c4"),a=n("f8c2"),s=n("35a1"),l=n("9bdd"),c=function(e,t){this.stopped=e,this.result=t},u=e.exports=function(e,t,n,u,d){var h,f,p,m,v,g,b,y=a(t,n,u?2:1);if(d)h=e;else{if(f=s(e),"function"!=typeof f)throw TypeError("Target is not iterable");if(r(f)){for(p=0,m=o(e.length);m>p;p++)if(v=u?y(i(b=e[p])[0],b[1]):y(e[p]),v&&v instanceof c)return v;return new c(!1)}h=f.call(e)}g=h.next;while(!(b=g.call(h)).done)if(v=l(h,y,b.value,u),"object"==typeof v&&v&&v instanceof c)return v;return new c(!1)};u.stop=function(e){return new c(!0,e)}},"23cb":function(e,t,n){var i=n("a691"),r=Math.max,o=Math.min;e.exports=function(e,t){var n=i(e);return n<0?r(n+t,0):o(n,t)}},"23e7":function(e,t,n){var i=n("da84"),r=n("06cf").f,o=n("9112"),a=n("6eeb"),s=n("ce4e"),l=n("e893"),c=n("94ca");e.exports=function(e,t){var n,u,d,h,f,p,m=e.target,v=e.global,g=e.stat;if(u=v?i:g?i[m]||s(m,{}):(i[m]||{}).prototype,u)for(d in t){if(f=t[d],e.noTargetGet?(p=r(u,d),h=p&&p.value):h=u[d],n=c(v?d:m+(g?".":"#")+d,e.forced),!n&&void 0!==h){if(typeof f===typeof h)continue;l(f,h)}(e.sham||h&&h.sham)&&o(f,"sham",!0),a(u,d,f,e)}}},"241c":function(e,t,n){var i=n("ca84"),r=n("7839"),o=r.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,o)}},2444:function(e,t,n){"use strict";(function(t){var i=n("c532"),r=n("c8af"),o={"Content-Type":"application/x-www-form-urlencoded"};function a(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function s(){var e;return"undefined"!==typeof XMLHttpRequest?e=n("b50d"):"undefined"!==typeof t&&(e=n("b50d")),e}var l={adapter:s(),transformRequest:[function(e,t){return r(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){l.headers[e]=i.merge(o)})),e.exports=l}).call(this,n("4362"))},2626:function(e,t,n){"use strict";var i=n("d066"),r=n("9bf2"),o=n("b622"),a=n("83ab"),s=o("species");e.exports=function(e){var t=i(e),n=r.f;a&&t&&!t[s]&&n(t,s,{configurable:!0,get:function(){return this}})}},"26dd":function(e,t,n){"use strict";var i=n("6f4f"),r=n("10db"),o=n("92f0"),a={};n("051b")(a,n("cc15")("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=i(a,{next:r(1,n)}),o(e,t+" Iterator")}},2877:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},"299c":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=129)}({129:function(e,t,n){"use strict";n.r(t);var i=n(5),r=n.n(i),o=n(16),a=n.n(o),s=n(2),l=n(3),c=n(7),u=n.n(c),d={name:"ElTooltip",mixins:[r.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(l["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new u.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=a()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(s["on"])(this.referenceElm,"mouseenter",this.show),Object(s["on"])(this.referenceElm,"mouseleave",this.hide),Object(s["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(s["on"])(this.referenceElm,"blur",this.handleBlur),Object(s["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(s["addClass"])(this.referenceElm,"focusing"):Object(s["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;nl&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"2b0e":function(e,t,n){"use strict";n.r(t),function(e){ -/*! - * Vue.js v2.6.10 - * (c) 2014-2019 Evan You - * Released under the MIT License. - */ -var n=Object.freeze({});function i(e){return void 0===e||null===e}function r(e){return void 0!==e&&null!==e}function o(e){return!0===e}function a(e){return!1===e}function s(e){return"string"===typeof e||"number"===typeof e||"symbol"===typeof e||"boolean"===typeof e}function l(e){return null!==e&&"object"===typeof e}var c=Object.prototype.toString;function u(e){return"[object Object]"===c.call(e)}function d(e){return"[object RegExp]"===c.call(e)}function h(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return r(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function p(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function v(e,t){for(var n=Object.create(null),i=e.split(","),r=0;r-1)return e.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function _(e,t){return y.call(e,t)}function x(e){var t=Object.create(null);return function(n){var i=t[n];return i||(t[n]=e(n))}}var w=/-(\w)/g,C=x((function(e){return e.replace(w,(function(e,t){return t?t.toUpperCase():""}))})),k=x((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),S=/\B([A-Z])/g,O=x((function(e){return e.replace(S,"-$1").toLowerCase()}));function $(e,t){function n(n){var i=arguments.length;return i?i>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function D(e,t){return e.bind(t)}var E=Function.prototype.bind?D:$;function T(e,t){t=t||0;var n=e.length-t,i=new Array(n);while(n--)i[n]=e[n+t];return i}function P(e,t){for(var n in t)e[n]=t[n];return e}function M(e){for(var t={},n=0;n0,ne=Q&&Q.indexOf("edge/")>0,ie=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===J),re=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/)),oe={}.watch,ae=!1;if(X)try{var se={};Object.defineProperty(se,"passive",{get:function(){ae=!0}}),window.addEventListener("test-passive",null,se)}catch(Ca){}var le=function(){return void 0===K&&(K=!X&&!Z&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),K},ce=X&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ue(e){return"function"===typeof e&&/native code/.test(e.toString())}var de,he="undefined"!==typeof Symbol&&ue(Symbol)&&"undefined"!==typeof Reflect&&ue(Reflect.ownKeys);de="undefined"!==typeof Set&&ue(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var fe=I,pe=0,me=function(){this.id=pe++,this.subs=[]};me.prototype.addSub=function(e){this.subs.push(e)},me.prototype.removeSub=function(e){b(this.subs,e)},me.prototype.depend=function(){me.target&&me.target.addDep(this)},me.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(o&&!_(r,"default"))a=!1;else if(""===a||a===O(e)){var l=et(String,r.type);(l<0||s0&&(a=$t(a,(t||"")+"_"+n),Ot(a[0])&&Ot(c)&&(u[l]=we(c.text+a[0].text),a.shift()),u.push.apply(u,a)):s(a)?Ot(c)?u[l]=we(c.text+a):""!==a&&u.push(we(a)):Ot(a)&&Ot(c)?u[l]=we(c.text+a.text):(o(e._isVList)&&r(a.tag)&&i(a.key)&&r(t)&&(a.key="__vlist"+t+"_"+n+"__"),u.push(a)));return u}function Dt(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function Et(e){var t=Tt(e.$options.inject,e);t&&(Ee(!1),Object.keys(t).forEach((function(n){Ne(e,n,t[n])})),Ee(!0))}function Tt(e,t){if(e){for(var n=Object.create(null),i=he?Reflect.ownKeys(e):Object.keys(e),r=0;r0,a=e?!!e.$stable:!o,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&i&&i!==n&&s===i.$key&&!o&&!i.$hasNormal)return i;for(var l in r={},e)e[l]&&"$"!==l[0]&&(r[l]=Nt(t,l,e[l]))}else r={};for(var c in t)c in r||(r[c]=jt(t,c));return e&&Object.isExtensible(e)&&(e._normalized=r),q(r,"$stable",a),q(r,"$key",s),q(r,"$hasNormal",o),r}function Nt(e,t,n){var i=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:St(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:i,enumerable:!0,configurable:!0}),i}function jt(e,t){return function(){return e[t]}}function At(e,t){var n,i,o,a,s;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),i=0,o=e.length;i1?T(n):n;for(var i=T(arguments,1),r='event handler for "'+e+'"',o=0,a=n.length;odocument.createEvent("Event").timeStamp&&(Kn=function(){return Gn.now()})}function Xn(){var e,t;for(Yn=Kn(),Wn=!0,zn.sort((function(e,t){return e.id-t.id})),qn=0;qnqn&&zn[n].id>e.id)n--;zn.splice(n+1,0,e)}else zn.push(e);Hn||(Hn=!0,pt(Xn))}}var ti=0,ni=function(e,t,n,i,r){this.vm=e,r&&(e._watcher=this),e._watchers.push(this),i?(this.deep=!!i.deep,this.user=!!i.user,this.lazy=!!i.lazy,this.sync=!!i.sync,this.before=i.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ti,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new de,this.newDepIds=new de,this.expression="","function"===typeof t?this.getter=t:(this.getter=Y(t),this.getter||(this.getter=I)),this.value=this.lazy?void 0:this.get()};ni.prototype.get=function(){var e;ge(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(Ca){if(!this.user)throw Ca;tt(Ca,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&&vt(e),be(),this.cleanupDeps()}return e},ni.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},ni.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},ni.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():ei(this)},ni.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(Ca){tt(Ca,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},ni.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},ni.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},ni.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||b(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var ii={enumerable:!0,configurable:!0,get:I,set:I};function ri(e,t,n){ii.get=function(){return this[t][n]},ii.set=function(e){this[t][n]=e},Object.defineProperty(e,n,ii)}function oi(e){e._watchers=[];var t=e.$options;t.props&&ai(e,t.props),t.methods&&pi(e,t.methods),t.data?si(e):Ie(e._data={},!0),t.computed&&ui(e,t.computed),t.watch&&t.watch!==oe&&mi(e,t.watch)}function ai(e,t){var n=e.$options.propsData||{},i=e._props={},r=e.$options._propKeys=[],o=!e.$parent;o||Ee(!1);var a=function(o){r.push(o);var a=Xe(o,t,n,e);Ne(i,o,a),o in e||ri(e,"_props",o)};for(var s in t)a(s);Ee(!0)}function si(e){var t=e.$options.data;t=e._data="function"===typeof t?li(t,e):t||{},u(t)||(t={});var n=Object.keys(t),i=e.$options.props,r=(e.$options.methods,n.length);while(r--){var o=n[r];0,i&&_(i,o)||W(o)||ri(e,"_data",o)}Ie(t,!0)}function li(e,t){ge();try{return e.call(t,t)}catch(Ca){return tt(Ca,t,"data()"),{}}finally{be()}}var ci={lazy:!0};function ui(e,t){var n=e._computedWatchers=Object.create(null),i=le();for(var r in t){var o=t[r],a="function"===typeof o?o:o.get;0,i||(n[r]=new ni(e,a||I,I,ci)),r in e||di(e,r,o)}}function di(e,t,n){var i=!le();"function"===typeof n?(ii.get=i?hi(t):fi(n),ii.set=I):(ii.get=n.get?i&&!1!==n.cache?hi(t):fi(n.get):I,ii.set=n.set||I),Object.defineProperty(e,t,ii)}function hi(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),me.target&&t.depend(),t.value}}function fi(e){return function(){return e.call(this,this)}}function pi(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?I:E(t[n],e)}function mi(e,t){for(var n in t){var i=t[n];if(Array.isArray(i))for(var r=0;r-1)return this;var n=T(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function Si(e){e.mixin=function(e){return this.options=Ke(this.options,e),this}}function Oi(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,i=n.cid,r=e._Ctor||(e._Ctor={});if(r[i])return r[i];var o=e.name||n.options.name;var a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=Ke(n.options,e),a["super"]=n,a.options.props&&$i(a),a.options.computed&&Di(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,z.forEach((function(e){a[e]=n[e]})),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=P({},a.options),r[i]=a,a}}function $i(e){var t=e.options.props;for(var n in t)ri(e.prototype,"_props",n)}function Di(e){var t=e.options.computed;for(var n in t)di(e.prototype,n,t[n])}function Ei(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Ti(e){return e&&(e.Ctor.options.name||e.tag)}function Pi(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Mi(e,t){var n=e.cache,i=e.keys,r=e._vnode;for(var o in n){var a=n[o];if(a){var s=Ti(a.componentOptions);s&&!t(s)&&Ii(n,o,i,r)}}}function Ii(e,t,n,i){var r=e[t];!r||i&&r.tag===i.tag||r.componentInstance.$destroy(),e[t]=null,b(n,t)}yi(Ci),gi(Ci),En(Ci),In(Ci),bn(Ci);var Ni=[String,RegExp,Array],ji={name:"keep-alive",abstract:!0,props:{include:Ni,exclude:Ni,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Ii(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Mi(e,(function(e){return Pi(t,e)}))})),this.$watch("exclude",(function(t){Mi(e,(function(e){return!Pi(t,e)}))}))},render:function(){var e=this.$slots.default,t=Cn(e),n=t&&t.componentOptions;if(n){var i=Ti(n),r=this,o=r.include,a=r.exclude;if(o&&(!i||!Pi(o,i))||a&&i&&Pi(a,i))return t;var s=this,l=s.cache,c=s.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;l[u]?(t.componentInstance=l[u].componentInstance,b(c,u),c.push(u)):(l[u]=t,c.push(u),this.max&&c.length>parseInt(this.max)&&Ii(l,c[0],c,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Ai={KeepAlive:ji};function Fi(e){var t={get:function(){return R}};Object.defineProperty(e,"config",t),e.util={warn:fe,extend:P,mergeOptions:Ke,defineReactive:Ne},e.set=je,e.delete=Ae,e.nextTick=pt,e.observable=function(e){return Ie(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,P(e.options.components,Ai),ki(e),Si(e),Oi(e),Ei(e)}Fi(Ci),Object.defineProperty(Ci.prototype,"$isServer",{get:le}),Object.defineProperty(Ci.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Ci,"FunctionalRenderContext",{value:Zt}),Ci.version="2.6.10";var Li=v("style,class"),Vi=v("input,textarea,option,select,progress"),zi=function(e,t,n){return"value"===n&&Vi(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Bi=v("contenteditable,draggable,spellcheck"),Ri=v("events,caret,typing,plaintext-only"),Hi=function(e,t){return Ki(t)||"false"===t?"false":"contenteditable"===e&&Ri(t)?t:"true"},Wi=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),qi="http://www.w3.org/1999/xlink",Ui=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Yi=function(e){return Ui(e)?e.slice(6,e.length):""},Ki=function(e){return null==e||!1===e};function Gi(e){var t=e.data,n=e,i=e;while(r(i.componentInstance))i=i.componentInstance._vnode,i&&i.data&&(t=Xi(i.data,t));while(r(n=n.parent))n&&n.data&&(t=Xi(t,n.data));return Zi(t.staticClass,t.class)}function Xi(e,t){return{staticClass:Ji(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function Zi(e,t){return r(e)||r(t)?Ji(e,Qi(t)):""}function Ji(e,t){return e?t?e+" "+t:e:t||""}function Qi(e){return Array.isArray(e)?er(e):l(e)?tr(e):"string"===typeof e?e:""}function er(e){for(var t,n="",i=0,o=e.length;i-1?sr[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:sr[e]=/HTMLUnknownElement/.test(t.toString())}var cr=v("text,number,password,search,email,tel,url");function ur(e){if("string"===typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}function dr(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function hr(e,t){return document.createElementNS(nr[e],t)}function fr(e){return document.createTextNode(e)}function pr(e){return document.createComment(e)}function mr(e,t,n){e.insertBefore(t,n)}function vr(e,t){e.removeChild(t)}function gr(e,t){e.appendChild(t)}function br(e){return e.parentNode}function yr(e){return e.nextSibling}function _r(e){return e.tagName}function xr(e,t){e.textContent=t}function wr(e,t){e.setAttribute(t,"")}var Cr=Object.freeze({createElement:dr,createElementNS:hr,createTextNode:fr,createComment:pr,insertBefore:mr,removeChild:vr,appendChild:gr,parentNode:br,nextSibling:yr,tagName:_r,setTextContent:xr,setStyleScope:wr}),kr={create:function(e,t){Sr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Sr(e,!0),Sr(t))},destroy:function(e){Sr(e,!0)}};function Sr(e,t){var n=e.data.ref;if(r(n)){var i=e.context,o=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[n])?b(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].indexOf(o)<0&&a[n].push(o):a[n]=[o]:a[n]=o}}var Or=new ye("",{},[]),$r=["create","activate","update","remove","destroy"];function Dr(e,t){return e.key===t.key&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&Er(e,t)||o(e.isAsyncPlaceholder)&&e.asyncFactory===t.asyncFactory&&i(t.asyncFactory.error))}function Er(e,t){if("input"!==e.tag)return!0;var n,i=r(n=e.data)&&r(n=n.attrs)&&n.type,o=r(n=t.data)&&r(n=n.attrs)&&n.type;return i===o||cr(i)&&cr(o)}function Tr(e,t,n){var i,o,a={};for(i=t;i<=n;++i)o=e[i].key,r(o)&&(a[o]=i);return a}function Pr(e){var t,n,a={},l=e.modules,c=e.nodeOps;for(t=0;t<$r.length;++t)for(a[$r[t]]=[],n=0;nm?(d=i(n[b+1])?null:n[b+1].elm,C(e,d,n,p,b,o)):p>b&&S(e,t,h,m)}function D(e,t,n,i){for(var o=n;o-1?Rr(e,t,n):Wi(t)?Ki(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Bi(t)?e.setAttribute(t,Hi(t,n)):Ui(t)?Ki(n)?e.removeAttributeNS(qi,Yi(t)):e.setAttributeNS(qi,t,n):Rr(e,t,n)}function Rr(e,t,n){if(Ki(n))e.removeAttribute(t);else{if(ee&&!te&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var i=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",i)};e.addEventListener("input",i),e.__ieph=!0}e.setAttribute(t,n)}}var Hr={create:zr,update:zr};function Wr(e,t){var n=t.elm,o=t.data,a=e.data;if(!(i(o.staticClass)&&i(o.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Gi(t),l=n._transitionClasses;r(l)&&(s=Ji(s,Qi(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var qr,Ur={create:Wr,update:Wr},Yr="__r",Kr="__c";function Gr(e){if(r(e[Yr])){var t=ee?"change":"input";e[t]=[].concat(e[Yr],e[t]||[]),delete e[Yr]}r(e[Kr])&&(e.change=[].concat(e[Kr],e.change||[]),delete e[Kr])}function Xr(e,t,n){var i=qr;return function r(){var o=t.apply(null,arguments);null!==o&&Qr(e,r,n,i)}}var Zr=at&&!(re&&Number(re[1])<=53);function Jr(e,t,n,i){if(Zr){var r=Yn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,ae?{capture:n,passive:i}:n)}function Qr(e,t,n,i){(i||qr).removeEventListener(e,t._wrapper||t,n)}function eo(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};qr=t.elm,Gr(n),_t(n,r,Jr,Qr,Xr,t.context),qr=void 0}}var to,no={create:eo,update:eo};function io(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,o,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in r(l.__ob__)&&(l=t.data.domProps=P({},l)),s)n in l||(a[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),o===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=o;var c=i(o)?"":String(o);ro(a,c)&&(a.value=c)}else if("innerHTML"===n&&rr(a.tagName)&&i(a.innerHTML)){to=to||document.createElement("div"),to.innerHTML=""+o+"";var u=to.firstChild;while(a.firstChild)a.removeChild(a.firstChild);while(u.firstChild)a.appendChild(u.firstChild)}else if(o!==s[n])try{a[n]=o}catch(Ca){}}}}function ro(e,t){return!e.composing&&("OPTION"===e.tagName||oo(e,t)||ao(e,t))}function oo(e,t){var n=!0;try{n=document.activeElement!==e}catch(Ca){}return n&&e.value!==t}function ao(e,t){var n=e.value,i=e._vModifiers;if(r(i)){if(i.number)return m(n)!==m(t);if(i.trim)return n.trim()!==t.trim()}return n!==t}var so={create:io,update:io},lo=x((function(e){var t={},n=/;(?![^(]*\))/g,i=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function co(e){var t=uo(e.style);return e.staticStyle?P(e.staticStyle,t):t}function uo(e){return Array.isArray(e)?M(e):"string"===typeof e?lo(e):e}function ho(e,t){var n,i={};if(t){var r=e;while(r.componentInstance)r=r.componentInstance._vnode,r&&r.data&&(n=co(r.data))&&P(i,n)}(n=co(e.data))&&P(i,n);var o=e;while(o=o.parent)o.data&&(n=co(o.data))&&P(i,n);return i}var fo,po=/^--/,mo=/\s*!important$/,vo=function(e,t,n){if(po.test(t))e.style.setProperty(t,n);else if(mo.test(n))e.style.setProperty(O(t),n.replace(mo,""),"important");else{var i=bo(t);if(Array.isArray(n))for(var r=0,o=n.length;r-1?t.split(xo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Co(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(xo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{var n=" "+(e.getAttribute("class")||"")+" ",i=" "+t+" ";while(n.indexOf(i)>=0)n=n.replace(i," ");n=n.trim(),n?e.setAttribute("class",n):e.removeAttribute("class")}}function ko(e){if(e){if("object"===typeof e){var t={};return!1!==e.css&&P(t,So(e.name||"v")),P(t,e),t}return"string"===typeof e?So(e):void 0}}var So=x((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Oo=X&&!te,$o="transition",Do="animation",Eo="transition",To="transitionend",Po="animation",Mo="animationend";Oo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Eo="WebkitTransition",To="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Po="WebkitAnimation",Mo="webkitAnimationEnd"));var Io=X?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function No(e){Io((function(){Io(e)}))}function jo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),wo(e,t))}function Ao(e,t){e._transitionClasses&&b(e._transitionClasses,t),Co(e,t)}function Fo(e,t,n){var i=Vo(e,t),r=i.type,o=i.timeout,a=i.propCount;if(!r)return n();var s=r===$o?To:Mo,l=0,c=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout((function(){l0&&(n=$o,u=a,d=o.length):t===Do?c>0&&(n=Do,u=c,d=l.length):(u=Math.max(a,c),n=u>0?a>c?$o:Do:null,d=n?n===$o?o.length:l.length:0);var h=n===$o&&Lo.test(i[Eo+"Property"]);return{type:n,timeout:u,propCount:d,hasTransform:h}}function zo(e,t){while(e.length1}function Uo(e,t){!0!==t.data.show&&Ro(t)}var Yo=X?{create:Uo,activate:Uo,remove:function(e,t){!0!==e.data.show?Ho(e,t):t()}}:{},Ko=[Hr,Ur,no,so,_o,Yo],Go=Ko.concat(Vr),Xo=Pr({nodeOps:Cr,modules:Go});te&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&ra(e,"input")}));var Zo={inserted:function(e,t,n,i){"select"===n.tag?(i.elm&&!i.elm._vOptions?xt(n,"postpatch",(function(){Zo.componentUpdated(e,t,n)})):Jo(e,t,n.context),e._vOptions=[].map.call(e.options,ta)):("textarea"===n.tag||cr(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",na),e.addEventListener("compositionend",ia),e.addEventListener("change",ia),te&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Jo(e,t,n.context);var i=e._vOptions,r=e._vOptions=[].map.call(e.options,ta);if(r.some((function(e,t){return!A(e,i[t])}))){var o=e.multiple?t.value.some((function(e){return ea(e,r)})):t.value!==t.oldValue&&ea(t.value,r);o&&ra(e,"change")}}}};function Jo(e,t,n){Qo(e,t,n),(ee||ne)&&setTimeout((function(){Qo(e,t,n)}),0)}function Qo(e,t,n){var i=t.value,r=e.multiple;if(!r||Array.isArray(i)){for(var o,a,s=0,l=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(A(ta(a),i))return void(e.selectedIndex!==s&&(e.selectedIndex=s));r||(e.selectedIndex=-1)}}function ea(e,t){return t.every((function(t){return!A(t,e)}))}function ta(e){return"_value"in e?e._value:e.value}function na(e){e.target.composing=!0}function ia(e){e.target.composing&&(e.target.composing=!1,ra(e.target,"input"))}function ra(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function oa(e){return!e.componentInstance||e.data&&e.data.transition?e:oa(e.componentInstance._vnode)}var aa={bind:function(e,t,n){var i=t.value;n=oa(n);var r=n.data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;i&&r?(n.data.show=!0,Ro(n,(function(){e.style.display=o}))):e.style.display=i?o:"none"},update:function(e,t,n){var i=t.value,r=t.oldValue;if(!i!==!r){n=oa(n);var o=n.data&&n.data.transition;o?(n.data.show=!0,i?Ro(n,(function(){e.style.display=e.__vOriginalDisplay})):Ho(n,(function(){e.style.display="none"}))):e.style.display=i?e.__vOriginalDisplay:"none"}},unbind:function(e,t,n,i,r){r||(e.style.display=e.__vOriginalDisplay)}},sa={model:Zo,show:aa},la={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ca(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?ca(Cn(t.children)):e}function ua(e){var t={},n=e.$options;for(var i in n.propsData)t[i]=e[i];var r=n._parentListeners;for(var o in r)t[C(o)]=r[o];return t}function da(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function ha(e){while(e=e.parent)if(e.data.transition)return!0}function fa(e,t){return t.key===e.key&&t.tag===e.tag}var pa=function(e){return e.tag||wn(e)},ma=function(e){return"show"===e.name},va={name:"transition",props:la,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(pa),n.length)){0;var i=this.mode;0;var r=n[0];if(ha(this.$vnode))return r;var o=ca(r);if(!o)return r;if(this._leaving)return da(e,r);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var l=(o.data||(o.data={})).transition=ua(this),c=this._vnode,u=ca(c);if(o.data.directives&&o.data.directives.some(ma)&&(o.data.show=!0),u&&u.data&&!fa(o,u)&&!wn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=P({},l);if("out-in"===i)return this._leaving=!0,xt(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),da(e,r);if("in-out"===i){if(wn(o))return c;var h,f=function(){h()};xt(l,"afterEnter",f),xt(l,"enterCancelled",f),xt(d,"delayLeave",(function(e){h=e}))}}return r}}},ga=P({tag:String,moveClass:String},la);delete ga.mode;var ba={props:ga,beforeMount:function(){var e=this,t=this._update;this._update=function(n,i){var r=Pn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,i)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),i=this.prevChildren=this.children,r=this.$slots.default||[],o=this.children=[],a=ua(this),s=0;sn)t.push(arguments[n++]);return _[++y]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},i(y),y},m=function(e){delete _[e]},"process"==l(v)?i=function(e){v.nextTick(C(e))}:b&&b.now?i=function(e){b.now(C(e))}:g&&!/(iphone|ipod|ipad).*applewebkit/i.test(h)?(r=new g,o=r.port2,r.port1.onmessage=k,i=c(o.postMessage,o,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||s(S)?i=x in d("script")?function(e){u.appendChild(d("script"))[x]=function(){u.removeChild(this),w(e)}}:function(e){setTimeout(C(e),0)}:(i=S,a.addEventListener("message",k,!1))),e.exports={set:p,clear:m}},"2d83":function(e,t,n){"use strict";var i=n("387f");e.exports=function(e,t,n,r,o){var a=new Error(e);return i(a,t,n,r,o)}},"2e67":function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"2f9a":function(e,t){e.exports=function(){}},"301c":function(e,t,n){n("e198")("asyncIterator")},"30b5":function(e,t,n){"use strict";var i=n("c532");function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(i.isURLSearchParams(t))o=t.toString();else{var a=[];i.forEach(t,(function(e,t){null!==e&&"undefined"!==typeof e&&(i.isArray(e)?t+="[]":e=[e],i.forEach(e,(function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),a.push(r(t)+"="+r(e))})))})),o=a.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},3397:function(e,t,n){var i=n("7a41");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},"35a1":function(e,t,n){var i=n("f5df"),r=n("3f8c"),o=n("b622"),a=o("iterator");e.exports=function(e){if(void 0!=e)return e[a]||e["@@iterator"]||r[i(e)]}},"37e8":function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("825a"),a=n("df75");e.exports=i?Object.defineProperties:function(e,t){o(e);var n,i=a(t),s=i.length,l=0;while(s>l)r.f(e,n=i[l++],t[n]);return e}},"387f":function(e,t,n){"use strict";e.exports=function(e,t,n,i,r){return e.config=t,n&&(e.code=n),e.request=i,e.response=r,e}},3934:function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=i.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return function(){return!0}}()},"393a":function(e,t,n){"use strict";var i=n("e444"),r=n("512c"),o=n("ba01"),a=n("051b"),s=n("8a0d"),l=n("26dd"),c=n("92f0"),u=n("ce7a"),d=n("cc15")("iterator"),h=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",m="values",v=function(){return this};e.exports=function(e,t,n,g,b,y,_){l(n,t,g);var x,w,C,k=function(e){if(!h&&e in D)return D[e];switch(e){case p:return function(){return new n(this,e)};case m:return function(){return new n(this,e)}}return function(){return new n(this,e)}},S=t+" Iterator",O=b==m,$=!1,D=e.prototype,E=D[d]||D[f]||b&&D[b],T=E||k(b),P=b?O?k("entries"):T:void 0,M="Array"==t&&D.entries||E;if(M&&(C=u(M.call(new e)),C!==Object.prototype&&C.next&&(c(C,S,!0),i||"function"==typeof C[d]||a(C,d,v))),O&&E&&E.name!==m&&($=!0,T=function(){return E.call(this)}),i&&!_||!h&&!$&&D[d]||a(D,d,T),s[t]=T,s[S]=v,b)if(x={values:O?T:k(m),keys:y?T:k(p),entries:P},_)for(w in x)w in D||o(D,w,x[w]);else r(r.P+r.F*(h||$),t,x);return x}},"39ad":function(e,t,n){var i=n("6ca1"),r=n("d16a"),o=n("9d11");e.exports=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}}},"3bbe":function(e,t,n){var i=n("861d");e.exports=function(e){if(!i(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},"3c4e":function(e,t,n){"use strict";var i=function(e){return r(e)&&!o(e)};function r(e){return!!e&&"object"===typeof e}function o(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||l(e)}var a="function"===typeof Symbol&&Symbol.for,s=a?Symbol.for("react.element"):60103;function l(e){return e.$$typeof===s}function c(e){return Array.isArray(e)?[]:{}}function u(e,t){var n=t&&!0===t.clone;return n&&i(e)?f(c(e),e,t):e}function d(e,t,n){var r=e.slice();return t.forEach((function(t,o){"undefined"===typeof r[o]?r[o]=u(t,n):i(t)?r[o]=f(e[o],t,n):-1===e.indexOf(t)&&r.push(u(t,n))})),r}function h(e,t,n){var r={};return i(e)&&Object.keys(e).forEach((function(t){r[t]=u(e[t],n)})),Object.keys(t).forEach((function(o){i(t[o])&&e[o]?r[o]=f(e[o],t[o],n):r[o]=u(t[o],n)})),r}function f(e,t,n){var i=Array.isArray(t),r=Array.isArray(e),o=n||{arrayMerge:d},a=i===r;if(a){if(i){var s=o.arrayMerge||d;return s(e,t,n)}return h(e,t,n)}return u(t,n)}f.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return f(e,n,t)}))};var p=f;e.exports=p},"3f6b":function(e,t,n){e.exports={default:n("b9c7"),__esModule:!0}},"3f8c":function(e,t){e.exports={}},4010:function(e,t,n){"use strict";t.__esModule=!0,t.removeResizeListener=t.addResizeListener=void 0;var i=n("6dd8"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}var a="undefined"===typeof window,s=function(e){var t=e,n=Array.isArray(t),i=0;for(t=n?t:t[Symbol.iterator]();;){var r;if(n){if(i>=t.length)break;r=t[i++]}else{if(i=t.next(),i.done)break;r=i.value}var o=r,a=o.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){a||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new r.default(s),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"417f":function(e,t,n){"use strict";t.__esModule=!0;var i=n("2b0e"),r=a(i),o=n("5924");function a(e){return e&&e.__esModule?e:{default:e}}var s=[],l="@@clickoutsideContext",c=void 0,u=0;function d(e,t,n){return function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(n&&n.context&&i.target&&r.target)||e.contains(i.target)||e.contains(r.target)||e===i.target||n.context.popperElm&&(n.context.popperElm.contains(i.target)||n.context.popperElm.contains(r.target))||(t.expression&&e[l].methodName&&n.context[e[l].methodName]?n.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!r.default.prototype.$isServer&&(0,o.on)(document,"mousedown",(function(e){return c=e})),!r.default.prototype.$isServer&&(0,o.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[l].documentHandler(e,c)}))})),t.default={bind:function(e,t,n){s.push(e);var i=u++;e[l]={id:i,documentHandler:d(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[l].documentHandler=d(e,t,n),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;n\n \n '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",l()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},$=O,D=Object(y["a"])($,x,w,!1,null,null,null);D.options.__file="packages/cascader-panel/src/cascader-menu.vue";var E=D.exports,T=n(21),P=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i1?i-1:0),o=1;o0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},P(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(T["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),j=N;function A(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var F=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},L=function(){function e(t,n){A(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(m["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new j(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new j(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(m["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:F(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(m["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),V=L,z=n(9),B=n.n(z),R=n(39),H=n.n(R),W=n(31),q=n.n(W),U=Object.assign||function(e){for(var t=1;t0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");q()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(m["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},te=ee,ne=Object(y["a"])(te,i,r,!1,null,null,null);ne.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ie=ne.exports;ie.install=function(e){e.component(ie.name,ie)};t["default"]=ie},6:function(e,t){e.exports=n("6b7c")},9:function(e,t){e.exports=n("7f4d")}})},4840:function(e,t,n){var i=n("825a"),r=n("1c0b"),o=n("b622"),a=o("species");e.exports=function(e,t){var n,o=i(e).constructor;return void 0===o||void 0==(n=i(o)[a])?t:r(n)}},4897:function(e,t,n){"use strict";t.__esModule=!0,t.i18n=t.use=t.t=void 0;var i=n("f0d9"),r=d(i),o=n("2b0e"),a=d(o),s=n("3c4e"),l=d(s),c=n("9d7e"),u=d(c);function d(e){return e&&e.__esModule?e:{default:e}}var h=(0,u.default)(a.default),f=r.default,p=!1,m=function(){var e=Object.getPrototypeOf(this||a.default).$t;if("function"===typeof e&&a.default.locale)return p||(p=!0,a.default.locale(a.default.config.lang,(0,l.default)(f,a.default.locale(a.default.config.lang)||{},{clone:!0}))),e.apply(this,arguments)},v=t.t=function(e,t){var n=m.apply(this,arguments);if(null!==n&&void 0!==n)return n;for(var i=e.split("."),r=f,o=0,a=i.length;o0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var r=i.modalClass.trim().split(/\s+/);r.forEach((function(e){return(0,o.removeClass)(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,o.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",h.modalDom=void 0),(0,o.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(h,"zIndex",{configurable:!0,get:function(){return l||(c=c||(r.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),c},set:function(e){c=e}});var f=function(){if(!r.default.prototype.$isServer&&h.modalStack.length>0){var e=h.modalStack[h.modalStack.length-1];if(!e)return;var t=h.getInstance(e.id);return t}};r.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=f();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=h},"4b8b":function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},"4d20":function(e,t,n){var i=n("1917"),r=n("10db"),o=n("6ca1"),a=n("3397"),s=n("9c0e"),l=n("faf5"),c=Object.getOwnPropertyDescriptor;t.f=n("0bad")?c:function(e,t){if(e=o(e),t=a(t,!0),l)try{return c(e,t)}catch(n){}if(s(e,t))return r(!i.f.call(e,t),e[t])}},"4d64":function(e,t,n){var i=n("fc6a"),r=n("50c4"),o=n("23cb"),a=function(e){return function(t,n,a){var s,l=i(t),c=r(l.length),u=o(a,c);if(e&&n!=n){while(c>u)if(s=l[u++],s!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},"4d88":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"4e4b":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=60)}([function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},,,function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("6b7c")},,,,,function(e,t){e.exports=n("f3ad")},function(e,t){e.exports=n("417f")},function(e,t){e.exports=n("14e9")},,function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("0e15")},,,,function(e,t){e.exports=n("4897")},function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("12f2")},,,,,,,,,function(e,t){e.exports=n("2a5e")},,function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(s["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,d=n(0),h=Object(d["a"])(u,i,r,!1,null,null,null);h.options.__file="packages/select/src/option.vue";t["a"]=h.exports},,,function(e,t){e.exports=n("8bbc")},,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.deletePrevTag(t):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(22),l=n.n(s),c=n(6),u=n.n(c),d=n(11),h=n.n(d),f=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},p=[];f._withStripped=!0;var m=n(5),v=n.n(m),g={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[v.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},b=g,y=n(0),_=Object(y["a"])(b,f,p,!1,null,null,null);_.options.__file="packages/select/src/select-dropdown.vue";var x=_.exports,w=n(33),C=n(36),k=n.n(C),S=n(13),O=n.n(S),$=n(16),D=n.n($),E=n(12),T=n.n(E),P=n(15),M=n(20),I=n(31),N=n.n(I),j=n(3),A={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},F=n(21),L={mixins:[a.a,u.a,l()("reference"),A],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(j["isIE"])()&&!Object(j["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:h.a,ElSelectMenu:x,ElOption:w["a"],ElTag:k.a,ElScrollbar:O.a},directives:{Clickoutside:T.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(M["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(j["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(F["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");N()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(j["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(j["getValueByPath"])(a.value,this.valueKey)===Object(j["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(j["getValueByPath"])(e,i)===Object(j["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(j["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=D()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=D()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(P["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(P["removeResizeListener"])(this.$el,this.handleResize)}},V=L,z=Object(y["a"])(V,i,r,!1,null,null,null);z.options.__file="packages/select/src/select.vue";var B=z.exports;B.install=function(e){e.component(B.name,B)};t["default"]=B}])},"4e71":function(e,t,n){n("e198")("observable")},"4ebc":function(e,t,n){var i=n("4d88");e.exports=Array.isArray||function(e){return"Array"==i(e)}},"50c4":function(e,t,n){var i=n("a691"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},"511f":function(e,t,n){n("0b99"),n("658f"),e.exports=n("fcd4").f("iterator")},5128:function(e,t,n){"use strict";t.__esModule=!0,t.PopupManager=void 0;var i=n("2b0e"),r=h(i),o=n("7f4d"),a=h(o),s=n("4b26"),l=h(s),c=n("e62d"),u=h(c),d=n("5924");function h(e){return e&&e.__esModule?e:{default:e}}var f=1,p=void 0;t.default={props:{visible:{type:Boolean,default:!1},openDelay:{},closeDelay:{},zIndex:{},modal:{type:Boolean,default:!1},modalFade:{type:Boolean,default:!0},modalClass:{},modalAppendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!1},closeOnClickModal:{type:Boolean,default:!1}},beforeMount:function(){this._popupId="popup-"+f++,l.default.register(this._popupId,this)},beforeDestroy:function(){l.default.deregister(this._popupId),l.default.closeModal(this._popupId),this.restoreBodyStyle()},data:function(){return{opened:!1,bodyPaddingRight:null,computedBodyPaddingRight:0,withoutHiddenClass:!0,rendered:!1}},watch:{visible:function(e){var t=this;if(e){if(this._opening)return;this.rendered?this.open():(this.rendered=!0,r.default.nextTick((function(){t.open()})))}else this.close()}},methods:{open:function(e){var t=this;this.rendered||(this.rendered=!0);var n=(0,a.default)({},this.$props||this,e);this._closeTimer&&(clearTimeout(this._closeTimer),this._closeTimer=null),clearTimeout(this._openTimer);var i=Number(n.openDelay);i>0?this._openTimer=setTimeout((function(){t._openTimer=null,t.doOpen(n)}),i):this.doOpen(n)},doOpen:function(e){if(!this.$isServer&&(!this.willOpen||this.willOpen())&&!this.opened){this._opening=!0;var t=this.$el,n=e.modal,i=e.zIndex;if(i&&(l.default.zIndex=i),n&&(this._closing&&(l.default.closeModal(this._popupId),this._closing=!1),l.default.openModal(this._popupId,l.default.nextZIndex(),this.modalAppendToBody?void 0:t,e.modalClass,e.modalFade),e.lockScroll)){this.withoutHiddenClass=!(0,d.hasClass)(document.body,"el-popup-parent--hidden"),this.withoutHiddenClass&&(this.bodyPaddingRight=document.body.style.paddingRight,this.computedBodyPaddingRight=parseInt((0,d.getStyle)(document.body,"paddingRight"),10)),p=(0,u.default)();var r=document.documentElement.clientHeight0&&(r||"scroll"===o)&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.computedBodyPaddingRight+p+"px"),(0,d.addClass)(document.body,"el-popup-parent--hidden")}"static"===getComputedStyle(t).position&&(t.style.position="absolute"),t.style.zIndex=l.default.nextZIndex(),this.opened=!0,this.onOpen&&this.onOpen(),this.doAfterOpen()}},doAfterOpen:function(){this._opening=!1},close:function(){var e=this;if(!this.willClose||this.willClose()){null!==this._openTimer&&(clearTimeout(this._openTimer),this._openTimer=null),clearTimeout(this._closeTimer);var t=Number(this.closeDelay);t>0?this._closeTimer=setTimeout((function(){e._closeTimer=null,e.doClose()}),t):this.doClose()}},doClose:function(){this._closing=!0,this.onClose&&this.onClose(),this.lockScroll&&setTimeout(this.restoreBodyStyle,200),this.opened=!1,this.doAfterClose()},doAfterClose:function(){l.default.closeModal(this._popupId),this._closing=!1},restoreBodyStyle:function(){this.modal&&this.withoutHiddenClass&&(document.body.style.paddingRight=this.bodyPaddingRight,(0,d.removeClass)(document.body,"el-popup-parent--hidden")),this.withoutHiddenClass=!0}}},t.PopupManager=l.default},"512c":function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("9c0c"),a=n("051b"),s=n("9c0e"),l="prototype",c=function(e,t,n){var u,d,h,f=e&c.F,p=e&c.G,m=e&c.S,v=e&c.P,g=e&c.B,b=e&c.W,y=p?r:r[t]||(r[t]={}),_=y[l],x=p?i:m?i[t]:(i[t]||{})[l];for(u in p&&(n=t),n)d=!f&&x&&void 0!==x[u],d&&s(y,u)||(h=d?x[u]:n[u],y[u]=p&&"function"!=typeof x[u]?n[u]:g&&d?o(h,i):b&&x[u]==h?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(h):v&&"function"==typeof h?o(Function.call,h):h,v&&((y.virtual||(y.virtual={}))[u]=h,e&c.R&&_&&!_[u]&&a(_,u,h)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},5135:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},5270:function(e,t,n){"use strict";var i=n("c532"),r=n("c401"),o=n("2e67"),a=n("2444"),s=n("d925"),l=n("e683");function c(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){c(e),e.baseURL&&!s(e.url)&&(e.url=l(e.baseURL,e.url)),e.headers=e.headers||{},e.data=r(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]}));var t=e.adapter||a.adapter;return t(e).then((function(t){return c(e),t.data=r(t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(c(e),t&&t.response&&(t.response.data=r(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},5488:function(e,t,n){"use strict";t.__esModule=!0;var i=n("5924");function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(){r(this,e)}return e.prototype.beforeEnter=function(e){(0,i.addClass)(e,"collapse-transition"),e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.style.height="0",e.style.paddingTop=0,e.style.paddingBottom=0},e.prototype.enter=function(e){e.dataset.oldOverflow=e.style.overflow,0!==e.scrollHeight?(e.style.height=e.scrollHeight+"px",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom):(e.style.height="",e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom),e.style.overflow="hidden"},e.prototype.afterEnter=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow},e.prototype.beforeLeave=function(e){e.dataset||(e.dataset={}),e.dataset.oldPaddingTop=e.style.paddingTop,e.dataset.oldPaddingBottom=e.style.paddingBottom,e.dataset.oldOverflow=e.style.overflow,e.style.height=e.scrollHeight+"px",e.style.overflow="hidden"},e.prototype.leave=function(e){0!==e.scrollHeight&&((0,i.addClass)(e,"collapse-transition"),e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0)},e.prototype.afterLeave=function(e){(0,i.removeClass)(e,"collapse-transition"),e.style.height="",e.style.overflow=e.dataset.oldOverflow,e.style.paddingTop=e.dataset.oldPaddingTop,e.style.paddingBottom=e.dataset.oldPaddingBottom},e}();t.default={name:"ElCollapseTransition",functional:!0,render:function(e,t){var n=t.children,i={on:new o};return e("transition",i,n)}}},5524:function(e,t){var n=e.exports={version:"2.6.10"};"number"==typeof __e&&(__e=n)},5692:function(e,t,n){var i=n("c430"),r=n("c6cd");(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.3.5",mode:i?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},"56ef":function(e,t,n){var i=n("d066"),r=n("241c"),o=n("7418"),a=n("825a");e.exports=i("Reflect","ownKeys")||function(e){var t=r.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},5924:function(e,t,n){"use strict";t.__esModule=!0,t.isInContainer=t.getScrollContainer=t.isScroll=t.getStyle=t.once=t.off=t.on=void 0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.hasClass=m,t.addClass=v,t.removeClass=g,t.setStyle=y;var r=n("2b0e"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}var s=o.default.prototype.$isServer,l=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/,u=s?0:Number(document.documentMode),d=function(e){return(e||"").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")},h=function(e){return e.replace(l,(function(e,t,n,i){return i?n.toUpperCase():n})).replace(c,"Moz$1")},f=t.on=function(){return!s&&document.addEventListener?function(e,t,n){e&&t&&n&&e.addEventListener(t,n,!1)}:function(e,t,n){e&&t&&n&&e.attachEvent("on"+t,n)}}(),p=t.off=function(){return!s&&document.removeEventListener?function(e,t,n){e&&t&&e.removeEventListener(t,n,!1)}:function(e,t,n){e&&t&&e.detachEvent("on"+t,n)}}();t.once=function(e,t,n){var i=function i(){n&&n.apply(this,arguments),p(e,t,i)};f(e,t,i)};function m(e,t){if(!e||!t)return!1;if(-1!==t.indexOf(" "))throw new Error("className should not contain space.");return e.classList?e.classList.contains(t):(" "+e.className+" ").indexOf(" "+t+" ")>-1}function v(e,t){if(e){for(var n=e.className,i=(t||"").split(" "),r=0,o=i.length;ri.top&&n.right>i.left&&n.lefte?c():!0!==t&&(r=setTimeout(i?u:c,void 0===i?e-s:e))}return("boolean"!==typeof t&&(i=n,n=t,t=void 0),a)}},"5a94":function(e,t,n){var i=n("b367")("keys"),r=n("8b1a");e.exports=function(e){return i[e]||(i[e]=r(e))}},"5c6c":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"5c96":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=44)}([function(e,t){e.exports=n("d940")},function(e,t){e.exports=n("5924")},function(e,t){e.exports=n("8122")},function(e,t){e.exports=n("d010")},function(e,t){e.exports=n("6b7c")},function(e,t){e.exports=n("e974")},function(e,t){e.exports=n("2b0e")},function(e,t){e.exports=n("7f4d")},function(e,t){e.exports=n("2bb5")},function(e,t){e.exports=n("f3ad")},function(e,t){e.exports=n("417f")},function(e,t){e.exports=n("4010")},function(e,t){e.exports=n("5128")},function(e,t){e.exports=n("0e15")},function(e,t){e.exports=n("dcdc")},function(e,t){e.exports=n("4897")},function(e,t){e.exports=n("14e9")},function(e,t){e.exports=n("eedf")},function(e,t){e.exports=n("a742")},function(e,t){e.exports=n("d397")},function(e,t){e.exports=n("d7d1")},function(e,t){e.exports=n("5488")},function(e,t){e.exports=n("12f2")},function(e,t){e.exports=n("41f8")},function(e,t){e.exports=n("92fa")},function(e,t){e.exports=n("597f")},function(e,t){e.exports=n("299c")},function(e,t){e.exports=n("2a5e")},function(e,t){e.exports=n("8bbc")},function(e,t){e.exports=n("e62d")},function(e,t){e.exports=n("7fc1")},function(e,t){e.exports=n("c56a")},function(e,t){e.exports=n("c284")},function(e,t){e.exports=n("e452")},function(e,t){e.exports=n("9619")},function(e,t){e.exports=n("4e4b")},function(e,t){e.exports=n("e772")},function(e,t){e.exports=n("845f")},function(e,t){e.exports=n("c098")},function(e,t){e.exports=n("722f")},function(e,t){e.exports=n("a15e")},function(e,t){e.exports=n("e450")},function(e,t){e.exports=n("4726")},function(e,t){e.exports=n("f494")},function(e,t,n){e.exports=n(45)},function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{staticClass:"el-pager",on:{click:e.onPagerClick}},[e.pageCount>0?n("li",{staticClass:"number",class:{active:1===e.currentPage,disabled:e.disabled}},[e._v("1")]):e._e(),e.showPrevMore?n("li",{staticClass:"el-icon more btn-quickprev",class:[e.quickprevIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("left")},mouseleave:function(t){e.quickprevIconClass="el-icon-more"}}}):e._e(),e._l(e.pagers,(function(t){return n("li",{key:t,staticClass:"number",class:{active:e.currentPage===t,disabled:e.disabled}},[e._v(e._s(t))])})),e.showNextMore?n("li",{staticClass:"el-icon more btn-quicknext",class:[e.quicknextIconClass,{disabled:e.disabled}],on:{mouseenter:function(t){e.onMouseenter("right")},mouseleave:function(t){e.quicknextIconClass="el-icon-more"}}}):e._e(),e.pageCount>1?n("li",{staticClass:"number",class:{active:e.currentPage===e.pageCount,disabled:e.disabled}},[e._v(e._s(e.pageCount))]):e._e()],2)},r=[];i._withStripped=!0;var o={name:"ElPager",props:{currentPage:Number,pageCount:Number,pagerCount:Number,disabled:Boolean},watch:{showPrevMore:function(e){e||(this.quickprevIconClass="el-icon-more")},showNextMore:function(e){e||(this.quicknextIconClass="el-icon-more")}},methods:{onPagerClick:function(e){var t=e.target;if("UL"!==t.tagName&&!this.disabled){var n=Number(e.target.textContent),i=this.pageCount,r=this.currentPage,o=this.pagerCount-2;-1!==t.className.indexOf("more")&&(-1!==t.className.indexOf("quickprev")?n=r-o:-1!==t.className.indexOf("quicknext")&&(n=r+o)),isNaN(n)||(n<1&&(n=1),n>i&&(n=i)),n!==r&&this.$emit("change",n)}},onMouseenter:function(e){this.disabled||("left"===e?this.quickprevIconClass="el-icon-d-arrow-left":this.quicknextIconClass="el-icon-d-arrow-right")}},computed:{pagers:function(){var e=this.pagerCount,t=(e-1)/2,n=Number(this.currentPage),i=Number(this.pageCount),r=!1,o=!1;i>e&&(n>e-t&&(r=!0),n4&&e<22&&e%2===1},default:7},currentPage:{type:Number,default:1},layout:{default:"prev, pager, next, jumper, ->, total"},pageSizes:{type:Array,default:function(){return[10,20,30,40,50,100]}},popperClass:String,prevText:String,nextText:String,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean},data:function(){return{internalCurrentPage:1,internalPageSize:0,lastEmittedPage:-1,userChangePageSize:!1}},render:function(e){var t=this.layout;if(!t)return null;if(this.hideOnSinglePage&&(!this.internalPageCount||1===this.internalPageCount))return null;var n=e("div",{class:["el-pagination",{"is-background":this.background,"el-pagination--small":this.small}]}),i={prev:e("prev"),jumper:e("jumper"),pager:e("pager",{attrs:{currentPage:this.internalCurrentPage,pageCount:this.internalPageCount,pagerCount:this.pagerCount,disabled:this.disabled},on:{change:this.handleCurrentChange}}),next:e("next"),sizes:e("sizes",{attrs:{pageSizes:this.pageSizes}}),slot:e("slot",[this.$slots.default?this.$slots.default:""]),total:e("total")},r=t.split(",").map((function(e){return e.trim()})),o=e("div",{class:"el-pagination__rightwrapper"}),a=!1;return n.children=n.children||[],o.children=o.children||[],r.forEach((function(e){"->"!==e?a?o.children.push(i[e]):n.children.push(i[e]):a=!0})),a&&n.children.unshift(o),n},components:{Prev:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage<=1},class:"btn-prev",on:{click:this.$parent.prev}},[this.$parent.prevText?e("span",[this.$parent.prevText]):e("i",{class:"el-icon el-icon-arrow-left"})])}},Next:{render:function(e){return e("button",{attrs:{type:"button",disabled:this.$parent.disabled||this.$parent.internalCurrentPage===this.$parent.internalPageCount||0===this.$parent.internalPageCount},class:"btn-next",on:{click:this.$parent.next}},[this.$parent.nextText?e("span",[this.$parent.nextText]):e("i",{class:"el-icon el-icon-arrow-right"})])}},Sizes:{mixins:[g.a],props:{pageSizes:Array},watch:{pageSizes:{immediate:!0,handler:function(e,t){Object(b["valueEquals"])(e,t)||Array.isArray(e)&&(this.$parent.internalPageSize=e.indexOf(this.$parent.pageSize)>-1?this.$parent.pageSize:this.pageSizes[0])}}},render:function(e){var t=this;return e("span",{class:"el-pagination__sizes"},[e("el-select",{attrs:{value:this.$parent.internalPageSize,popperClass:this.$parent.popperClass||"",size:"mini",disabled:this.$parent.disabled},on:{input:this.handleChange}},[this.pageSizes.map((function(n){return e("el-option",{attrs:{value:n,label:n+t.t("el.pagination.pagesize")}})}))])])},components:{ElSelect:d.a,ElOption:f.a},methods:{handleChange:function(e){e!==this.$parent.internalPageSize&&(this.$parent.internalPageSize=e=parseInt(e,10),this.$parent.userChangePageSize=!0,this.$parent.$emit("update:pageSize",e),this.$parent.$emit("size-change",e))}}},Jumper:{mixins:[g.a],components:{ElInput:m.a},data:function(){return{userInput:null}},watch:{"$parent.internalCurrentPage":function(){this.userInput=null}},methods:{handleKeyup:function(e){var t=e.keyCode,n=e.target;13===t&&this.handleChange(n.value)},handleInput:function(e){this.userInput=e},handleChange:function(e){this.$parent.internalCurrentPage=this.$parent.getValidCurrentPage(e),this.$parent.emitChange(),this.userInput=null}},render:function(e){return e("span",{class:"el-pagination__jump"},[this.t("el.pagination.goto"),e("el-input",{class:"el-pagination__editor is-in-pagination",attrs:{min:1,max:this.$parent.internalPageCount,value:null!==this.userInput?this.userInput:this.$parent.internalCurrentPage,type:"number",disabled:this.$parent.disabled},nativeOn:{keyup:this.handleKeyup},on:{input:this.handleInput,change:this.handleChange}}),this.t("el.pagination.pageClassifier")])}},Total:{mixins:[g.a],render:function(e){return"number"===typeof this.$parent.total?e("span",{class:"el-pagination__total"},[this.t("el.pagination.total",{total:this.$parent.total})]):""}},Pager:c},methods:{handleCurrentChange:function(e){this.internalCurrentPage=this.getValidCurrentPage(e),this.userChangePageSize=!0,this.emitChange()},prev:function(){if(!this.disabled){var e=this.internalCurrentPage-1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("prev-click",this.internalCurrentPage),this.emitChange()}},next:function(){if(!this.disabled){var e=this.internalCurrentPage+1;this.internalCurrentPage=this.getValidCurrentPage(e),this.$emit("next-click",this.internalCurrentPage),this.emitChange()}},getValidCurrentPage:function(e){e=parseInt(e,10);var t="number"===typeof this.internalPageCount,n=void 0;return t?e<1?n=1:e>this.internalPageCount&&(n=this.internalPageCount):(isNaN(e)||e<1)&&(n=1),void 0===n&&isNaN(e)?n=1:0===n&&(n=1),void 0===n?e:n},emitChange:function(){var e=this;this.$nextTick((function(){(e.internalCurrentPage!==e.lastEmittedPage||e.userChangePageSize)&&(e.$emit("current-change",e.internalCurrentPage),e.lastEmittedPage=e.internalCurrentPage,e.userChangePageSize=!1)}))}},computed:{internalPageCount:function(){return"number"===typeof this.total?Math.max(1,Math.ceil(this.total/this.internalPageSize)):"number"===typeof this.pageCount?Math.max(1,this.pageCount):null}},watch:{currentPage:{immediate:!0,handler:function(e){this.internalCurrentPage=this.getValidCurrentPage(e)}},pageSize:{immediate:!0,handler:function(e){this.internalPageSize=isNaN(e)?10:e}},internalCurrentPage:{immediate:!0,handler:function(e){this.$emit("update:currentPage",e),this.lastEmittedPage=-1}},internalPageCount:function(e){var t=this.internalCurrentPage;e>0&&0===t?this.internalCurrentPage=1:t>e&&(this.internalCurrentPage=0===e?1:e,this.userChangePageSize&&this.emitChange()),this.userChangePageSize=!1}},install:function(e){e.component(y.name,y)}},_=y,x=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"dialog-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{key:e.key,ref:"dialog",class:["el-dialog",{"is-fullscreen":e.fullscreen,"el-dialog--center":e.center},e.customClass],style:e.style,attrs:{role:"dialog","aria-modal":"true","aria-label":e.title||"dialog"}},[n("div",{staticClass:"el-dialog__header"},[e._t("title",[n("span",{staticClass:"el-dialog__title"},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-dialog__headerbtn",attrs:{type:"button","aria-label":"Close"},on:{click:e.handleClose}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?n("div",{staticClass:"el-dialog__body"},[e._t("default")],2):e._e(),e.$slots.footer?n("div",{staticClass:"el-dialog__footer"},[e._t("footer")],2):e._e()])])])},w=[];x._withStripped=!0;var C=n(12),k=n.n(C),S=n(8),O=n.n(S),$=n(3),D=n.n($),E={name:"ElDialog",mixins:[k.a,D.a,O.a],props:{title:{type:String,default:""},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},width:String,fullscreen:Boolean,customClass:{type:String,default:""},top:{type:String,default:"15vh"},beforeClose:Function,center:{type:Boolean,default:!1},destroyOnClose:Boolean},data:function(){return{closed:!1,key:0}},watch:{visible:function(e){var t=this;e?(this.closed=!1,this.$emit("open"),this.$el.addEventListener("scroll",this.updatePopper),this.$nextTick((function(){t.$refs.dialog.scrollTop=0})),this.appendToBody&&document.body.appendChild(this.$el)):(this.$el.removeEventListener("scroll",this.updatePopper),this.closed||this.$emit("close"),this.destroyOnClose&&this.$nextTick((function(){t.key++})))}},computed:{style:function(){var e={};return this.fullscreen||(e.marginTop=this.top,this.width&&(e.width=this.width)),e}},methods:{getMigratingConfig:function(){return{props:{size:"size is removed."}}},handleWrapperClick:function(){this.closeOnClickModal&&this.handleClose()},handleClose:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),this.closed=!0)},updatePopper:function(){this.broadcast("ElSelectDropdown","updatePopper"),this.broadcast("ElDropdownMenu","updatePopper")},afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")}},mounted:function(){this.visible&&(this.rendered=!0,this.open(),this.appendToBody&&document.body.appendChild(this.$el))},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},T=E,P=s(T,x,w,!1,null,null,null);P.options.__file="packages/dialog/src/component.vue";var M=P.exports;M.install=function(e){e.component(M.name,M)};var I=M,N=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.close,expression:"close"}],staticClass:"el-autocomplete",attrs:{"aria-haspopup":"listbox",role:"combobox","aria-expanded":e.suggestionVisible,"aria-owns":e.id}},[n("el-input",e._b({ref:"input",on:{input:e.handleChange,focus:e.handleFocus,blur:e.handleBlur,clear:e.handleClear},nativeOn:{keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex-1)},function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.highlight(e.highlightedIndex+1)},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleKeyEnter(t):null},function(t){return"button"in t||!e._k(t.keyCode,"tab",9,t.key,"Tab")?e.close(t):null}]}},"el-input",[e.$props,e.$attrs],!1),[e.$slots.prepend?n("template",{slot:"prepend"},[e._t("prepend")],2):e._e(),e.$slots.append?n("template",{slot:"append"},[e._t("append")],2):e._e(),e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),e.$slots.suffix?n("template",{slot:"suffix"},[e._t("suffix")],2):e._e()],2),n("el-autocomplete-suggestions",{ref:"suggestions",class:[e.popperClass?e.popperClass:""],attrs:{"visible-arrow":"","popper-options":e.popperOptions,"append-to-body":e.popperAppendToBody,placement:e.placement,id:e.id}},e._l(e.suggestions,(function(t,i){return n("li",{key:i,class:{highlighted:e.highlightedIndex===i},attrs:{id:e.id+"-item-"+i,role:"option","aria-selected":e.highlightedIndex===i},on:{click:function(n){e.select(t)}}},[e._t("default",[e._v("\n "+e._s(t[e.valueKey])+"\n ")],{item:t})],2)})),0)],1)},j=[];N._withStripped=!0;var A=n(13),F=n.n(A),L=n(10),V=n.n(L),z=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-autocomplete-suggestion el-popper",class:{"is-loading":!e.parent.hideLoading&&e.parent.loading},style:{width:e.dropdownWidth},attrs:{role:"region"}},[n("el-scrollbar",{attrs:{tag:"ul","wrap-class":"el-autocomplete-suggestion__wrap","view-class":"el-autocomplete-suggestion__list"}},[!e.parent.hideLoading&&e.parent.loading?n("li",[n("i",{staticClass:"el-icon-loading"})]):e._t("default")],2)],1)])},B=[];z._withStripped=!0;var R=n(5),H=n.n(R),W=n(16),q=n.n(W),U={components:{ElScrollbar:q.a},mixins:[H.a,D.a],componentName:"ElAutocompleteSuggestions",data:function(){return{parent:this.$parent,dropdownWidth:""}},props:{options:{default:function(){return{gpuAcceleration:!1}}},id:String},methods:{select:function(e){this.dispatch("ElAutocomplete","item-click",e)}},updated:function(){var e=this;this.$nextTick((function(t){e.popperJS&&e.updatePopper()}))},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$refs.input.$refs.input,this.referenceList=this.$el.querySelector(".el-autocomplete-suggestion__list"),this.referenceList.setAttribute("role","listbox"),this.referenceList.setAttribute("id",this.id)},created:function(){var e=this;this.$on("visible",(function(t,n){e.dropdownWidth=n+"px",e.showPopper=t}))}},Y=U,K=s(Y,z,B,!1,null,null,null);K.options.__file="packages/autocomplete/src/autocomplete-suggestions.vue";var G=K.exports,X=n(22),Z=n.n(X),J={name:"ElAutocomplete",mixins:[D.a,Z()("input"),O.a],inheritAttrs:!1,componentName:"ElAutocomplete",components:{ElInput:m.a,ElAutocompleteSuggestions:G},directives:{Clickoutside:V.a},props:{valueKey:{type:String,default:"value"},popperClass:String,popperOptions:Object,placeholder:String,clearable:{type:Boolean,default:!1},disabled:Boolean,name:String,size:String,value:String,maxlength:Number,minlength:Number,autofocus:Boolean,fetchSuggestions:Function,triggerOnFocus:{type:Boolean,default:!0},customItem:String,selectWhenUnmatched:{type:Boolean,default:!1},prefixIcon:String,suffixIcon:String,label:String,debounce:{type:Number,default:300},placement:{type:String,default:"bottom-start"},hideLoading:Boolean,popperAppendToBody:{type:Boolean,default:!0},highlightFirstItem:{type:Boolean,default:!1}},data:function(){return{activated:!1,suggestions:[],loading:!1,highlightedIndex:-1,suggestionDisabled:!1}},computed:{suggestionVisible:function(){var e=this.suggestions,t=Array.isArray(e)&&e.length>0;return(t||this.loading)&&this.activated},id:function(){return"el-autocomplete-"+Object(b["generateId"])()}},watch:{suggestionVisible:function(e){var t=this.getInput();t&&this.broadcast("ElAutocompleteSuggestions","visible",[e,t.offsetWidth])}},methods:{getMigratingConfig:function(){return{props:{"custom-item":"custom-item is removed, use scoped slot instead.",props:"props is removed, use value-key instead."}}},getData:function(e){var t=this;this.suggestionDisabled||(this.loading=!0,this.fetchSuggestions(e,(function(e){t.loading=!1,t.suggestionDisabled||(Array.isArray(e)?(t.suggestions=e,t.highlightedIndex=t.highlightFirstItem?0:-1):console.error("[Element Error][Autocomplete]autocomplete suggestions must be an array"))})))},handleChange:function(e){if(this.$emit("input",e),this.suggestionDisabled=!1,!this.triggerOnFocus&&!e)return this.suggestionDisabled=!0,void(this.suggestions=[]);this.debouncedGetData(e)},handleFocus:function(e){this.activated=!0,this.$emit("focus",e),this.triggerOnFocus&&this.debouncedGetData(this.value)},handleBlur:function(e){this.$emit("blur",e)},handleClear:function(){this.activated=!1,this.$emit("clear")},close:function(e){this.activated=!1},handleKeyEnter:function(e){var t=this;this.suggestionVisible&&this.highlightedIndex>=0&&this.highlightedIndex=this.suggestions.length&&(e=this.suggestions.length-1);var t=this.$refs.suggestions.$el.querySelector(".el-autocomplete-suggestion__wrap"),n=t.querySelectorAll(".el-autocomplete-suggestion__list li"),i=n[e],r=t.scrollTop,o=i.offsetTop;o+i.scrollHeight>r+t.clientHeight&&(t.scrollTop+=i.scrollHeight),o=0&&this.resetTabindex(this.triggerElm),clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.visible=!1}),"click"===this.trigger?0:this.hideTimeout))},handleClick:function(){this.triggerElm.disabled||(this.visible?this.hide():this.show())},handleTriggerKeyDown:function(e){var t=e.keyCode;[38,40].indexOf(t)>-1?(this.removeTabindex(),this.resetTabindex(this.menuItems[0]),this.menuItems[0].focus(),e.preventDefault(),e.stopPropagation()):13===t?this.handleClick():[9,27].indexOf(t)>-1&&this.hide()},handleItemKeyDown:function(e){var t=e.keyCode,n=e.target,i=this.menuItemsArray.indexOf(n),r=this.menuItemsArray.length-1,o=void 0;[38,40].indexOf(t)>-1?(o=38===t?0!==i?i-1:0:i-1&&(this.hide(),this.triggerElmFocus())},resetTabindex:function(e){this.removeTabindex(),e.setAttribute("tabindex","0")},removeTabindex:function(){this.triggerElm.setAttribute("tabindex","-1"),this.menuItemsArray.forEach((function(e){e.setAttribute("tabindex","-1")}))},initAria:function(){this.dropdownElm.setAttribute("id",this.listId),this.triggerElm.setAttribute("aria-haspopup","list"),this.triggerElm.setAttribute("aria-controls",this.listId),this.splitButton||(this.triggerElm.setAttribute("role","button"),this.triggerElm.setAttribute("tabindex",this.tabindex),this.triggerElm.setAttribute("class",(this.triggerElm.getAttribute("class")||"")+" el-dropdown-selfdefine"))},initEvent:function(){var e=this,t=this.trigger,n=this.show,i=this.hide,r=this.handleClick,o=this.splitButton,a=this.handleTriggerKeyDown,s=this.handleItemKeyDown;this.triggerElm=o?this.$refs.trigger.$el:this.$slots.default[0].elm;var l=this.dropdownElm;this.triggerElm.addEventListener("keydown",a),l.addEventListener("keydown",s,!0),o||(this.triggerElm.addEventListener("focus",(function(){e.focusing=!0})),this.triggerElm.addEventListener("blur",(function(){e.focusing=!1})),this.triggerElm.addEventListener("click",(function(){e.focusing=!1}))),"hover"===t?(this.triggerElm.addEventListener("mouseenter",n),this.triggerElm.addEventListener("mouseleave",i),l.addEventListener("mouseenter",n),l.addEventListener("mouseleave",i)):"click"===t&&this.triggerElm.addEventListener("click",r)},handleMenuItemClick:function(e,t){this.hideOnClick&&(this.visible=!1),this.$emit("command",e,t)},triggerElmFocus:function(){this.triggerElm.focus&&this.triggerElm.focus()},initDomOperation:function(){this.dropdownElm=this.popperElm,this.menuItems=this.dropdownElm.querySelectorAll("[tabindex='-1']"),this.menuItemsArray=[].slice.call(this.menuItems),this.initEvent(),this.initAria()}},render:function(e){var t=this,n=this.hide,i=this.splitButton,r=this.type,o=this.dropdownSize,a=function(e){t.$emit("click",e),n()},s=i?e("el-button-group",[e("el-button",{attrs:{type:r,size:o},nativeOn:{click:a}},[this.$slots.default]),e("el-button",{ref:"trigger",attrs:{type:r,size:o},class:"el-dropdown__caret-button"},[e("i",{class:"el-dropdown__icon el-icon-arrow-down"})])]):this.$slots.default;return e("div",{class:"el-dropdown",directives:[{name:"clickoutside",value:n}]},[s,this.$slots.dropdown])}},ue=ce,de=s(ue,ne,ie,!1,null,null,null);de.options.__file="packages/dropdown/src/dropdown.vue";var he=de.exports;he.install=function(e){e.component(he.name,he)};var fe=he,pe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("ul",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-dropdown-menu el-popper",class:[e.size&&"el-dropdown-menu--"+e.size]},[e._t("default")],2)])},me=[];pe._withStripped=!0;var ve={name:"ElDropdownMenu",componentName:"ElDropdownMenu",mixins:[H.a],props:{visibleArrow:{type:Boolean,default:!0},arrowOffset:{type:Number,default:0}},data:function(){return{size:this.dropdown.dropdownSize}},inject:["dropdown"],created:function(){var e=this;this.$on("updatePopper",(function(){e.showPopper&&e.updatePopper()})),this.$on("visible",(function(t){e.showPopper=t}))},mounted:function(){this.dropdown.popperElm=this.popperElm=this.$el,this.referenceElm=this.dropdown.$el,this.dropdown.initDomOperation()},watch:{"dropdown.placement":{immediate:!0,handler:function(e){this.currentPlacement=e}}}},ge=ve,be=s(ge,pe,me,!1,null,null,null);be.options.__file="packages/dropdown/src/dropdown-menu.vue";var ye=be.exports;ye.install=function(e){e.component(ye.name,ye)};var _e=ye,xe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-dropdown-menu__item",class:{"is-disabled":e.disabled,"el-dropdown-menu__item--divided":e.divided},attrs:{"aria-disabled":e.disabled,tabindex:e.disabled?null:-1},on:{click:e.handleClick}},[e.icon?n("i",{class:e.icon}):e._e(),e._t("default")],2)},we=[];xe._withStripped=!0;var Ce={name:"ElDropdownItem",mixins:[D.a],props:{command:{},disabled:Boolean,divided:Boolean,icon:String},methods:{handleClick:function(e){this.dispatch("ElDropdown","menu-item-click",[this.command,this])}}},ke=Ce,Se=s(ke,xe,we,!1,null,null,null);Se.options.__file="packages/dropdown/src/dropdown-item.vue";var Oe=Se.exports;Oe.install=function(e){e.component(Oe.name,Oe)};var $e=Oe,De=De||{};De.Utils=De.Utils||{},De.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var n=e.childNodes[t];if(De.Utils.attemptFocus(n)||De.Utils.focusLastDescendant(n))return!0}return!1},De.Utils.attemptFocus=function(e){if(!De.Utils.isFocusable(e))return!1;De.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return De.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},De.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},De.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a=0;t--)e.splice(t,0,e[t]);e=e.join("")}return/^[0-9a-fA-F]{6}$/.test(e)?{red:parseInt(e.slice(0,2),16),green:parseInt(e.slice(2,4),16),blue:parseInt(e.slice(4,6),16)}:{red:255,green:255,blue:255}},mixColor:function(e,t){var n=this.getColorChannels(e),i=n.red,r=n.green,o=n.blue;return t>0?(i*=1-t,r*=1-t,o*=1-t):(i+=(255-i)*t,r+=(255-r)*t,o+=(255-o)*t),"rgb("+Math.round(i)+", "+Math.round(r)+", "+Math.round(o)+")"},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},openMenu:function(e,t){var n=this.openedMenus;-1===n.indexOf(e)&&(this.uniqueOpened&&(this.openedMenus=n.filter((function(e){return-1!==t.indexOf(e)}))),this.openedMenus.push(e))},closeMenu:function(e){var t=this.openedMenus.indexOf(e);-1!==t&&this.openedMenus.splice(t,1)},handleSubmenuClick:function(e){var t=e.index,n=e.indexPath,i=-1!==this.openedMenus.indexOf(t);i?(this.closeMenu(t),this.$emit("close",t,n)):(this.openMenu(t,n),this.$emit("open",t,n))},handleItemClick:function(e){var t=this,n=e.index,i=e.indexPath,r=this.activeIndex,o=null!==e.index;o&&(this.activeIndex=e.index),this.$emit("select",n,i,e),("horizontal"===this.mode||this.collapse)&&(this.openedMenus=[]),this.router&&o&&this.routeToItem(e,(function(e){t.activeIndex=r,e&&console.error(e)}))},initOpenedMenu:function(){var e=this,t=this.activeIndex,n=this.items[t];if(n&&"horizontal"!==this.mode&&!this.collapse){var i=n.indexPath;i.forEach((function(t){var n=e.submenus[t];n&&e.openMenu(t,n.indexPath)}))}},routeToItem:function(e,t){var n=e.route||e.index;try{this.$router.push(n,(function(){}),t)}catch(i){console.error(i)}},open:function(e){var t=this,n=this.submenus[e.toString()].indexPath;n.forEach((function(e){return t.openMenu(e,n)}))},close:function(e){this.closeMenu(e)}},mounted:function(){this.initOpenedMenu(),this.$on("item-click",this.handleItemClick),this.$on("submenu-click",this.handleSubmenuClick),"horizontal"===this.mode&&new Fe(this.$el),this.$watch("items",this.updateActiveIndex)}},ze=Ve,Be=s(ze,je,Ae,!1,null,null,null);Be.options.__file="packages/menu/src/menu.vue";var Re=Be.exports;Re.install=function(e){e.component(Re.name,Re)};var He,We,qe=Re,Ue=n(21),Ye=n.n(Ue),Ke={inject:["rootMenu"],computed:{indexPath:function(){var e=[this.index],t=this.$parent;while("ElMenu"!==t.$options.componentName)t.index&&e.unshift(t.index),t=t.$parent;return e},parentMenu:function(){var e=this.$parent;while(e&&-1===["ElMenu","ElSubmenu"].indexOf(e.$options.componentName))e=e.$parent;return e},paddingStyle:function(){if("vertical"!==this.rootMenu.mode)return{};var e=20,t=this.$parent;if(this.rootMenu.collapse)e=20;else while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return{paddingLeft:e+"px"}}}},Ge={props:{transformOrigin:{type:[Boolean,String],default:!1},offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},data:H.a.data,methods:H.a.methods,beforeDestroy:H.a.beforeDestroy,deactivated:H.a.deactivated},Xe={name:"ElSubmenu",componentName:"ElSubmenu",mixins:[Ke,D.a,Ge],components:{ElCollapseTransition:Ye.a},props:{index:{type:String,required:!0},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0}},data:function(){return{popperJS:null,timeout:null,items:{},submenus:{},mouseInChild:!1}},watch:{opened:function(e){var t=this;this.isMenuPopup&&this.$nextTick((function(e){t.updatePopper()}))}},computed:{appendToBody:function(){return void 0===this.popperAppendToBody?this.isFirstLevel:this.popperAppendToBody},menuTransitionName:function(){return this.rootMenu.collapse?"el-zoom-in-left":"el-zoom-in-top"},opened:function(){return this.rootMenu.openedMenus.indexOf(this.index)>-1},active:function(){var e=!1,t=this.submenus,n=this.items;return Object.keys(n).forEach((function(t){n[t].active&&(e=!0)})),Object.keys(t).forEach((function(n){t[n].active&&(e=!0)})),e},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},isMenuPopup:function(){return this.rootMenu.isMenuPopup},titleStyle:function(){return"horizontal"!==this.mode?{color:this.textColor}:{borderBottomColor:this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent",color:this.active?this.activeTextColor:this.textColor}},isFirstLevel:function(){var e=!0,t=this.$parent;while(t&&t!==this.rootMenu){if(["ElSubmenu","ElMenuItemGroup"].indexOf(t.$options.componentName)>-1){e=!1;break}t=t.$parent}return e}},methods:{handleCollapseToggle:function(e){e?this.initPopper():this.doDestroy()},addItem:function(e){this.$set(this.items,e.index,e)},removeItem:function(e){delete this.items[e.index]},addSubmenu:function(e){this.$set(this.submenus,e.index,e)},removeSubmenu:function(e){delete this.submenus[e.index]},handleClick:function(){var e=this.rootMenu,t=this.disabled;"hover"===e.menuTrigger&&"horizontal"===e.mode||e.collapse&&"vertical"===e.mode||t||this.dispatch("ElMenu","submenu-click",this)},handleMouseenter:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.showTimeout;if("ActiveXObject"in window||"focus"!==e.type||e.relatedTarget){var i=this.rootMenu,r=this.disabled;"click"===i.menuTrigger&&"horizontal"===i.mode||!i.collapse&&"vertical"===i.mode||r||(this.dispatch("ElSubmenu","mouse-enter-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){t.rootMenu.openMenu(t.index,t.indexPath)}),n),this.appendToBody&&this.$parent.$el.dispatchEvent(new MouseEvent("mouseenter")))}},handleMouseleave:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.rootMenu;"click"===n.menuTrigger&&"horizontal"===n.mode||!n.collapse&&"vertical"===n.mode||(this.dispatch("ElSubmenu","mouse-leave-child"),clearTimeout(this.timeout),this.timeout=setTimeout((function(){!e.mouseInChild&&e.rootMenu.closeMenu(e.index)}),this.hideTimeout),this.appendToBody&&t&&"ElSubmenu"===this.$parent.$options.name&&this.$parent.handleMouseleave(!0))},handleTitleMouseenter:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.hoverBackground)}},handleTitleMouseleave:function(){if("horizontal"!==this.mode||this.rootMenu.backgroundColor){var e=this.$refs["submenu-title"];e&&(e.style.backgroundColor=this.rootMenu.backgroundColor||"")}},updatePlacement:function(){this.currentPlacement="horizontal"===this.mode&&this.isFirstLevel?"bottom-start":"right-start"},initPopper:function(){this.referenceElm=this.$el,this.popperElm=this.$refs.menu,this.updatePlacement()}},created:function(){var e=this;this.$on("toggle-collapse",this.handleCollapseToggle),this.$on("mouse-enter-child",(function(){e.mouseInChild=!0,clearTimeout(e.timeout)})),this.$on("mouse-leave-child",(function(){e.mouseInChild=!1,clearTimeout(e.timeout)}))},mounted:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this),this.initPopper()},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)},render:function(e){var t=this,n=this.active,i=this.opened,r=this.paddingStyle,o=this.titleStyle,a=this.backgroundColor,s=this.rootMenu,l=this.currentPlacement,c=this.menuTransitionName,u=this.mode,d=this.disabled,h=this.popperClass,f=this.$slots,p=this.isFirstLevel,m=e("transition",{attrs:{name:c}},[e("div",{ref:"menu",directives:[{name:"show",value:i}],class:["el-menu--"+u,h],on:{mouseenter:function(e){return t.handleMouseenter(e,100)},mouseleave:function(){return t.handleMouseleave(!0)},focus:function(e){return t.handleMouseenter(e,100)}}},[e("ul",{attrs:{role:"menu"},class:["el-menu el-menu--popup","el-menu--popup-"+l],style:{backgroundColor:s.backgroundColor||""}},[f.default])])]),v=e("el-collapse-transition",[e("ul",{attrs:{role:"menu"},class:"el-menu el-menu--inline",directives:[{name:"show",value:i}],style:{backgroundColor:s.backgroundColor||""}},[f.default])]),g="horizontal"===s.mode&&p||"vertical"===s.mode&&!s.collapse?"el-icon-arrow-down":"el-icon-arrow-right";return e("li",{class:{"el-submenu":!0,"is-active":n,"is-opened":i,"is-disabled":d},attrs:{role:"menuitem","aria-haspopup":"true","aria-expanded":i},on:{mouseenter:this.handleMouseenter,mouseleave:function(){return t.handleMouseleave(!1)},focus:this.handleMouseenter}},[e("div",{class:"el-submenu__title",ref:"submenu-title",on:{click:this.handleClick,mouseenter:this.handleTitleMouseenter,mouseleave:this.handleTitleMouseleave},style:[r,o,{backgroundColor:a}]},[f.title,e("i",{class:["el-submenu__icon-arrow",g]})]),this.isMenuPopup?m:v])}},Ze=Xe,Je=s(Ze,He,We,!1,null,null,null);Je.options.__file="packages/menu/src/submenu.vue";var Qe=Je.exports;Qe.install=function(e){e.component(Qe.name,Qe)};var et=Qe,tt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item",class:{"is-active":e.active,"is-disabled":e.disabled},style:[e.paddingStyle,e.itemStyle,{backgroundColor:e.backgroundColor}],attrs:{role:"menuitem",tabindex:"-1"},on:{click:e.handleClick,mouseenter:e.onMouseEnter,focus:e.onMouseEnter,blur:e.onMouseLeave,mouseleave:e.onMouseLeave}},["ElMenu"===e.parentMenu.$options.componentName&&e.rootMenu.collapse&&e.$slots.title?n("el-tooltip",{attrs:{effect:"dark",placement:"right"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e._t("title")],2),n("div",{staticStyle:{position:"absolute",left:"0",top:"0",height:"100%",width:"100%",display:"inline-block","box-sizing":"border-box",padding:"0 20px"}},[e._t("default")],2)]):[e._t("default"),e._t("title")]],2)},nt=[];tt._withStripped=!0;var it=n(26),rt=n.n(it),ot={name:"ElMenuItem",componentName:"ElMenuItem",mixins:[Ke,D.a],components:{ElTooltip:rt.a},props:{index:{default:null,validator:function(e){return"string"===typeof e||null===e}},route:[String,Object],disabled:Boolean},computed:{active:function(){return this.index===this.rootMenu.activeIndex},hoverBackground:function(){return this.rootMenu.hoverBackground},backgroundColor:function(){return this.rootMenu.backgroundColor||""},activeTextColor:function(){return this.rootMenu.activeTextColor||""},textColor:function(){return this.rootMenu.textColor||""},mode:function(){return this.rootMenu.mode},itemStyle:function(){var e={color:this.active?this.activeTextColor:this.textColor};return"horizontal"!==this.mode||this.isNested||(e.borderBottomColor=this.active?this.rootMenu.activeTextColor?this.activeTextColor:"":"transparent"),e},isNested:function(){return this.parentMenu!==this.rootMenu}},methods:{onMouseEnter:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.hoverBackground)},onMouseLeave:function(){("horizontal"!==this.mode||this.rootMenu.backgroundColor)&&(this.$el.style.backgroundColor=this.backgroundColor)},handleClick:function(){this.disabled||(this.dispatch("ElMenu","item-click",this),this.$emit("click",this))}},mounted:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},at=ot,st=s(at,tt,nt,!1,null,null,null);st.options.__file="packages/menu/src/menu-item.vue";var lt=st.exports;lt.install=function(e){e.component(lt.name,lt)};var ct=lt,ut=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-menu-item-group"},[n("div",{staticClass:"el-menu-item-group__title",style:{paddingLeft:e.levelPadding+"px"}},[e.$slots.title?e._t("title"):[e._v(e._s(e.title))]],2),n("ul",[e._t("default")],2)])},dt=[];ut._withStripped=!0;var ht={name:"ElMenuItemGroup",componentName:"ElMenuItemGroup",inject:["rootMenu"],props:{title:{type:String}},data:function(){return{paddingLeft:20}},computed:{levelPadding:function(){var e=20,t=this.$parent;if(this.rootMenu.collapse)return 20;while(t&&"ElMenu"!==t.$options.componentName)"ElSubmenu"===t.$options.componentName&&(e+=20),t=t.$parent;return e}}},ft=ht,pt=s(ft,ut,dt,!1,null,null,null);pt.options.__file="packages/menu/src/menu-item-group.vue";var mt=pt.exports;mt.install=function(e){e.component(mt.name,mt)};var vt=mt,gt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},bt=[];gt._withStripped=!0;var yt=void 0,_t="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",xt=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function wt(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=xt.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function Ct(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;yt||(yt=document.createElement("textarea"),document.body.appendChild(yt));var i=wt(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;yt.setAttribute("style",s+";"+_t),yt.value=e.value||e.placeholder||"";var l=yt.scrollHeight,c={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),yt.value="";var u=yt.scrollHeight-r;if(null!==t){var d=u*t;"border-box"===a&&(d=d+r+o),l=Math.max(d,l),c.minHeight=d+"px"}if(null!==n){var h=u*n;"border-box"===a&&(h=h+r+o),l=Math.min(h,l)}return c.height=l+"px",yt.parentNode&&yt.parentNode.removeChild(yt),yt=null,c}var kt=n(7),St=n.n(kt),Ot=n(19),$t={name:"ElInput",componentName:"ElInput",mixins:[D.a,O.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return St()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=Ct(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:Ct(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(Ot["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},At=jt,Ft=s(At,Mt,It,!1,null,null,null);Ft.options.__file="packages/input-number/src/input-number.vue";var Lt=Ft.exports;Lt.install=function(e){e.component(Lt.name,Lt)};var Vt=Lt,zt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[n("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[n("span",{staticClass:"el-radio__inner"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),n("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},Bt=[];zt._withStripped=!0;var Rt={name:"ElRadio",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},Ht=Rt,Wt=s(Ht,zt,Bt,!1,null,null,null);Wt.options.__file="packages/radio/src/radio.vue";var qt=Wt.exports;qt.install=function(e){e.component(qt.name,qt)};var Ut=qt,Yt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(e._elTag,{tag:"component",staticClass:"el-radio-group",attrs:{role:"radiogroup"},on:{keydown:e.handleKeydown}},[e._t("default")],2)},Kt=[];Yt._withStripped=!0;var Gt=Object.freeze({LEFT:37,UP:38,RIGHT:39,DOWN:40}),Xt={name:"ElRadioGroup",componentName:"ElRadioGroup",inject:{elFormItem:{default:""}},mixins:[D.a],props:{value:{},size:String,fill:String,textColor:String,disabled:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},_elTag:function(){return(this.$vnode.data||{}).tag||"div"},radioGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},created:function(){var e=this;this.$on("handleChange",(function(t){e.$emit("change",t)}))},mounted:function(){var e=this.$el.querySelectorAll("[type=radio]"),t=this.$el.querySelectorAll("[role=radio]")[0];![].some.call(e,(function(e){return e.checked}))&&t&&(t.tabIndex=0)},methods:{handleKeydown:function(e){var t=e.target,n="INPUT"===t.nodeName?"[type=radio]":"[role=radio]",i=this.$el.querySelectorAll(n),r=i.length,o=[].indexOf.call(i,t),a=this.$el.querySelectorAll("[role=radio]");switch(e.keyCode){case Gt.LEFT:case Gt.UP:e.stopPropagation(),e.preventDefault(),0===o?(a[r-1].click(),a[r-1].focus()):(a[o-1].click(),a[o-1].focus());break;case Gt.RIGHT:case Gt.DOWN:o===r-1?(e.stopPropagation(),e.preventDefault(),a[0].click(),a[0].focus()):(a[o+1].click(),a[o+1].focus());break;default:break}}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[this.value])}}},Zt=Xt,Jt=s(Zt,Yt,Kt,!1,null,null,null);Jt.options.__file="packages/radio/src/radio-group.vue";var Qt=Jt.exports;Qt.install=function(e){e.component(Qt.name,Qt)};var en=Qt,tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio-button",class:[e.size?"el-radio-button--"+e.size:"",{"is-active":e.value===e.label},{"is-disabled":e.isDisabled},{"is-focus":e.focus}],attrs:{role:"radio","aria-checked":e.value===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.value=e.isDisabled?e.value:e.label}}},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"el-radio-button__orig-radio",attrs:{type:"radio",name:e.name,disabled:e.isDisabled,tabindex:"-1"},domProps:{value:e.label,checked:e._q(e.value,e.label)},on:{change:[function(t){e.value=e.label},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),n("span",{staticClass:"el-radio-button__inner",style:e.value===e.label?e.activeStyle:null,on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},nn=[];tn._withStripped=!0;var rn={name:"ElRadioButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},props:{label:{},disabled:Boolean,name:String},data:function(){return{focus:!1}},computed:{value:{get:function(){return this._radioGroup.value},set:function(e){this._radioGroup.$emit("input",e)}},_radioGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return e;e=e.$parent}return!1},activeStyle:function(){return{backgroundColor:this._radioGroup.fill||"",borderColor:this._radioGroup.fill||"",boxShadow:this._radioGroup.fill?"-1px 0 0 0 "+this._radioGroup.fill:"",color:this._radioGroup.textColor||""}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._radioGroup.radioGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isDisabled:function(){return this.disabled||this._radioGroup.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this._radioGroup&&this.value!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.dispatch("ElRadioGroup","handleChange",e.value)}))}}},on=rn,an=s(on,tn,nn,!1,null,null,null);an.options.__file="packages/radio/src/radio-button.vue";var sn=an.exports;sn.install=function(e){e.component(sn.name,sn)};var ln=sn,cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},un=[];cn._withStripped=!0;var dn={name:"ElCheckbox",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},hn=dn,fn=s(hn,cn,un,!1,null,null,null);fn.options.__file="packages/checkbox/src/checkbox.vue";var pn=fn.exports;pn.install=function(e){e.component(pn.name,pn)};var mn=pn,vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox-button",class:[e.size?"el-checkbox-button--"+e.size:"",{"is-disabled":e.isDisabled},{"is-checked":e.isChecked},{"is-focus":e.focus}],attrs:{role:"checkbox","aria-checked":e.isChecked,"aria-disabled":e.isDisabled}},[e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox-button__original",attrs:{type:"checkbox",name:e.name,disabled:e.isDisabled},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox-button__inner",style:e.isChecked?e.activeStyle:null},[e._t("default",[e._v(e._s(e.label))])],2):e._e()])},gn=[];vn._withStripped=!0;var bn={name:"ElCheckboxButton",mixins:[D.a],inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},props:{value:{},label:{},disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number]},computed:{model:{get:function(){return this._checkboxGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this._checkboxGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):void 0!==this.value?this.$emit("input",e):this.selfModel=e}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},_checkboxGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return e;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},activeStyle:function(){return{backgroundColor:this._checkboxGroup.fill||"",borderColor:this._checkboxGroup.fill||"",color:this._checkboxGroup.textColor||"","box-shadow":"-1px 0 0 0 "+this._checkboxGroup.fill}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},size:function(){return this._checkboxGroup.checkboxGroupSize||this._elFormItemSize||(this.$ELEMENT||{}).size},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this._checkboxGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled}},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t._checkboxGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()}},yn=bn,_n=s(yn,vn,gn,!1,null,null,null);_n.options.__file="packages/checkbox/src/checkbox-button.vue";var xn=_n.exports;xn.install=function(e){e.component(xn.name,xn)};var wn=xn,Cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-checkbox-group",attrs:{role:"group","aria-label":"checkbox-group"}},[e._t("default")],2)},kn=[];Cn._withStripped=!0;var Sn={name:"ElCheckboxGroup",componentName:"ElCheckboxGroup",mixins:[D.a],inject:{elFormItem:{default:""}},props:{value:{},disabled:Boolean,min:Number,max:Number,size:String,fill:String,textColor:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxGroupSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",[e])}}},On=Sn,$n=s(On,Cn,kn,!1,null,null,null);$n.options.__file="packages/checkbox/src/checkbox-group.vue";var Dn=$n.exports;Dn.install=function(e){e.component(Dn.name,Dn)};var En=Dn,Tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-switch",class:{"is-disabled":e.switchDisabled,"is-checked":e.checked},attrs:{role:"switch","aria-checked":e.checked,"aria-disabled":e.switchDisabled},on:{click:function(t){return t.preventDefault(),e.switchValue(t)}}},[n("input",{ref:"input",staticClass:"el-switch__input",attrs:{type:"checkbox",id:e.id,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:e.switchDisabled},on:{change:e.handleChange,keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.switchValue(t):null}}}),e.inactiveIconClass||e.inactiveText?n("span",{class:["el-switch__label","el-switch__label--left",e.checked?"":"is-active"]},[e.inactiveIconClass?n("i",{class:[e.inactiveIconClass]}):e._e(),!e.inactiveIconClass&&e.inactiveText?n("span",{attrs:{"aria-hidden":e.checked}},[e._v(e._s(e.inactiveText))]):e._e()]):e._e(),n("span",{ref:"core",staticClass:"el-switch__core",style:{width:e.coreWidth+"px"}}),e.activeIconClass||e.activeText?n("span",{class:["el-switch__label","el-switch__label--right",e.checked?"is-active":""]},[e.activeIconClass?n("i",{class:[e.activeIconClass]}):e._e(),!e.activeIconClass&&e.activeText?n("span",{attrs:{"aria-hidden":!e.checked}},[e._v(e._s(e.activeText))]):e._e()]):e._e()])},Pn=[];Tn._withStripped=!0;var Mn={name:"ElSwitch",mixins:[Z()("input"),O.a,D.a],inject:{elForm:{default:""}},props:{value:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},width:{type:Number,default:40},activeIconClass:{type:String,default:""},inactiveIconClass:{type:String,default:""},activeText:String,inactiveText:String,activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},id:String},data:function(){return{coreWidth:this.width}},created:function(){~[this.activeValue,this.inactiveValue].indexOf(this.value)||this.$emit("input",this.inactiveValue)},computed:{checked:function(){return this.value===this.activeValue},switchDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{checked:function(){this.$refs.input.checked=this.checked,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[this.value])}},methods:{handleChange:function(e){var t=this,n=this.checked?this.inactiveValue:this.activeValue;this.$emit("input",n),this.$emit("change",n),this.$nextTick((function(){t.$refs.input.checked=t.checked}))},setBackgroundColor:function(){var e=this.checked?this.activeColor:this.inactiveColor;this.$refs.core.style.borderColor=e,this.$refs.core.style.backgroundColor=e},switchValue:function(){!this.switchDisabled&&this.handleChange()},getMigratingConfig:function(){return{props:{"on-color":"on-color is renamed to active-color.","off-color":"off-color is renamed to inactive-color.","on-text":"on-text is renamed to active-text.","off-text":"off-text is renamed to inactive-text.","on-value":"on-value is renamed to active-value.","off-value":"off-value is renamed to inactive-value.","on-icon-class":"on-icon-class is renamed to active-icon-class.","off-icon-class":"off-icon-class is renamed to inactive-icon-class."}}}},mounted:function(){this.coreWidth=this.width||40,(this.activeColor||this.inactiveColor)&&this.setBackgroundColor(),this.$refs.input.checked=this.checked}},In=Mn,Nn=s(In,Tn,Pn,!1,null,null,null);Nn.options.__file="packages/switch/src/component.vue";var jn=Nn.exports;jn.install=function(e){e.component(jn.name,jn)};var An=jn,Fn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"el-select",class:[e.selectSize?"el-select--"+e.selectSize:""],on:{click:function(t){return t.stopPropagation(),e.toggleMenu(t)}}},[e.multiple?n("div",{ref:"tags",staticClass:"el-select__tags",style:{"max-width":e.inputWidth-32+"px",width:"100%"}},[e.collapseTags&&e.selected.length?n("span",[n("el-tag",{attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:e.selected[0].hitState,type:"info","disable-transitions":""},on:{close:function(t){e.deleteTag(t,e.selected[0])}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(e.selected[0].currentLabel))])]),e.selected.length>1?n("el-tag",{attrs:{closable:!1,size:e.collapseTagSize,type:"info","disable-transitions":""}},[n("span",{staticClass:"el-select__tags-text"},[e._v("+ "+e._s(e.selected.length-1))])]):e._e()],1):e._e(),e.collapseTags?e._e():n("transition-group",{on:{"after-leave":e.resetInputHeight}},e._l(e.selected,(function(t){return n("el-tag",{key:e.getValueKey(t),attrs:{closable:!e.selectDisabled,size:e.collapseTagSize,hit:t.hitState,type:"info","disable-transitions":""},on:{close:function(n){e.deleteTag(n,t)}}},[n("span",{staticClass:"el-select__tags-text"},[e._v(e._s(t.currentLabel))])])})),1),e.filterable?n("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",staticClass:"el-select__input",class:[e.selectSize?"is-"+e.selectSize:""],style:{"flex-grow":"1",width:e.inputLength/(e.inputWidth-32)+"%","max-width":e.inputWidth-42+"px"},attrs:{type:"text",disabled:e.selectDisabled,autocomplete:e.autoComplete||e.autocomplete},domProps:{value:e.query},on:{focus:e.handleFocus,blur:function(t){e.softFocus=!1},keyup:e.managePlaceholder,keydown:[e.resetInputState,function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.deletePrevTag(t):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],compositionstart:e.handleComposition,compositionupdate:e.handleComposition,compositionend:e.handleComposition,input:[function(t){t.target.composing||(e.query=t.target.value)},e.debouncedQueryChange]}}):e._e()],1):e._e(),n("el-input",{ref:"reference",class:{"is-focus":e.visible},attrs:{type:"text",placeholder:e.currentPlaceholder,name:e.name,id:e.id,autocomplete:e.autoComplete||e.autocomplete,size:e.selectSize,disabled:e.selectDisabled,readonly:e.readonly,"validate-event":!1,tabindex:e.multiple&&e.filterable?"-1":null},on:{focus:e.handleFocus,blur:e.handleBlur},nativeOn:{keyup:function(t){return e.debouncedOnInputChange(t)},keydown:[function(t){if(!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("next")},function(t){if(!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"]))return null;t.stopPropagation(),t.preventDefault(),e.navigateOptions("prev")},function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.preventDefault(),e.selectOption(t)):null},function(t){if(!("button"in t)&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"]))return null;t.stopPropagation(),t.preventDefault(),e.visible=!1},function(t){if(!("button"in t)&&e._k(t.keyCode,"tab",9,t.key,"Tab"))return null;e.visible=!1}],paste:function(t){return e.debouncedOnInputChange(t)},mouseenter:function(t){e.inputHovering=!0},mouseleave:function(t){e.inputHovering=!1}},model:{value:e.selectedLabel,callback:function(t){e.selectedLabel=t},expression:"selectedLabel"}},[e.$slots.prefix?n("template",{slot:"prefix"},[e._t("prefix")],2):e._e(),n("template",{slot:"suffix"},[n("i",{directives:[{name:"show",rawName:"v-show",value:!e.showClose,expression:"!showClose"}],class:["el-select__caret","el-input__icon","el-icon-"+e.iconClass]}),e.showClose?n("i",{staticClass:"el-select__caret el-input__icon el-icon-circle-close",on:{click:e.handleClearClick}}):e._e()])],2),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":e.doDestroy}},[n("el-select-menu",{directives:[{name:"show",rawName:"v-show",value:e.visible&&!1!==e.emptyText,expression:"visible && emptyText !== false"}],ref:"popper",attrs:{"append-to-body":e.popperAppendToBody}},[n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.options.length>0&&!e.loading,expression:"options.length > 0 && !loading"}],ref:"scrollbar",class:{"is-empty":!e.allowCreate&&e.query&&0===e.filteredOptionsCount},attrs:{tag:"ul","wrap-class":"el-select-dropdown__wrap","view-class":"el-select-dropdown__list"}},[e.showNewOption?n("el-option",{attrs:{value:e.query,created:""}}):e._e(),e._t("default")],2),e.emptyText&&(!e.allowCreate||e.loading||e.allowCreate&&0===e.options.length)?[e.$slots.empty?e._t("empty"):n("p",{staticClass:"el-select-dropdown__empty"},[e._v("\n "+e._s(e.emptyText)+"\n ")])]:e._e()],2)],1)],1)},Ln=[];Fn._withStripped=!0;var Vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-select-dropdown el-popper",class:[{"is-multiple":e.$parent.multiple},e.popperClass],style:{minWidth:e.minWidth}},[e._t("default")],2)},zn=[];Vn._withStripped=!0;var Bn={name:"ElSelectDropdown",componentName:"ElSelectDropdown",mixins:[H.a],props:{placement:{default:"bottom-start"},boundariesPadding:{default:0},popperOptions:{default:function(){return{gpuAcceleration:!1}}},visibleArrow:{default:!0},appendToBody:{type:Boolean,default:!0}},data:function(){return{minWidth:""}},computed:{popperClass:function(){return this.$parent.popperClass}},watch:{"$parent.inputWidth":function(){this.minWidth=this.$parent.$el.getBoundingClientRect().width+"px"}},mounted:function(){var e=this;this.referenceElm=this.$parent.$refs.reference.$el,this.$parent.popperElm=this.popperElm=this.$el,this.$on("updatePopper",(function(){e.$parent.visible&&e.updatePopper()})),this.$on("destroyPopper",this.destroyPopper)}},Rn=Bn,Hn=s(Rn,Vn,zn,!1,null,null,null);Hn.options.__file="packages/select/src/select-dropdown.vue";var Wn=Hn.exports,qn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},Un=[];qn._withStripped=!0;var Yn="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kn={mixins:[D.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":Yn(e))&&"object"===("undefined"===typeof t?"undefined":Yn(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(b["getValueByPath"])(e,n)===Object(b["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(b["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},Gn=Kn,Xn=s(Gn,qn,Un,!1,null,null,null);Xn.options.__file="packages/select/src/option.vue";var Zn=Xn.exports,Jn=n(28),Qn=n.n(Jn),ei=n(11),ti=n(15),ni=n.n(ti),ii=n(27),ri=n.n(ii),oi={data:function(){return{hoverOption:-1}},computed:{optionsAllDisabled:function(){return this.options.filter((function(e){return e.visible})).every((function(e){return e.disabled}))}},watch:{hoverIndex:function(e){var t=this;"number"===typeof e&&e>-1&&(this.hoverOption=this.options[e]||{}),this.options.forEach((function(e){e.hover=t.hoverOption===e}))}},methods:{navigateOptions:function(e){var t=this;if(this.visible){if(0!==this.options.length&&0!==this.filteredOptionsCount&&!this.optionsAllDisabled){"next"===e?(this.hoverIndex++,this.hoverIndex===this.options.length&&(this.hoverIndex=0)):"prev"===e&&(this.hoverIndex--,this.hoverIndex<0&&(this.hoverIndex=this.options.length-1));var n=this.options[this.hoverIndex];!0!==n.disabled&&!0!==n.groupDisabled&&n.visible||this.navigateOptions(e),this.$nextTick((function(){return t.scrollToOption(t.hoverOption)}))}}else this.visible=!0}}},ai={mixins:[D.a,g.a,Z()("reference"),oi],name:"ElSelect",componentName:"ElSelect",inject:{elForm:{default:""},elFormItem:{default:""}},provide:function(){return{select:this}},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},readonly:function(){return!this.filterable||this.multiple||!Object(b["isIE"])()&&!Object(b["isEdge"])()&&!this.visible},showClose:function(){var e=this.multiple?Array.isArray(this.value)&&this.value.length>0:void 0!==this.value&&null!==this.value&&""!==this.value,t=this.clearable&&!this.selectDisabled&&this.inputHovering&&e;return t},iconClass:function(){return this.remote&&this.filterable?"":this.visible?"arrow-up is-reverse":"arrow-up"},debounce:function(){return this.remote?300:0},emptyText:function(){return this.loading?this.loadingText||this.t("el.select.loading"):(!this.remote||""!==this.query||0!==this.options.length)&&(this.filterable&&this.query&&this.options.length>0&&0===this.filteredOptionsCount?this.noMatchText||this.t("el.select.noMatch"):0===this.options.length?this.noDataText||this.t("el.select.noData"):null)},showNewOption:function(){var e=this,t=this.options.filter((function(e){return!e.created})).some((function(t){return t.currentLabel===e.query}));return this.filterable&&this.allowCreate&&""!==this.query&&!t},selectSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},selectDisabled:function(){return this.disabled||(this.elForm||{}).disabled},collapseTagSize:function(){return["small","mini"].indexOf(this.selectSize)>-1?"mini":"small"}},components:{ElInput:m.a,ElSelectMenu:Wn,ElOption:Zn,ElTag:Qn.a,ElScrollbar:q.a},directives:{Clickoutside:V.a},props:{name:String,id:String,value:{required:!0},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},automaticDropdown:Boolean,size:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:String,remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String,default:function(){return Object(ti["t"])("el.select.placeholder")}},defaultFirstOption:Boolean,reserveKeyword:Boolean,valueKey:{type:String,default:"value"},collapseTags:Boolean,popperAppendToBody:{type:Boolean,default:!0}},data:function(){return{options:[],cachedOptions:[],createdLabel:null,createdSelected:!1,selected:this.multiple?[]:{},inputLength:20,inputWidth:0,initialInputHeight:0,cachedPlaceHolder:"",optionsCount:0,filteredOptionsCount:0,visible:!1,softFocus:!1,selectedLabel:"",hoverIndex:-1,query:"",previousQuery:null,inputHovering:!1,currentPlaceholder:"",menuVisibleOnFocus:!1,isOnComposition:!1,isSilentBlur:!1}},watch:{selectDisabled:function(){var e=this;this.$nextTick((function(){e.resetInputHeight()}))},placeholder:function(e){this.cachedPlaceHolder=this.currentPlaceholder=e},value:function(e,t){this.multiple&&(this.resetInputHeight(),e&&e.length>0||this.$refs.input&&""!==this.query?this.currentPlaceholder="":this.currentPlaceholder=this.cachedPlaceHolder,this.filterable&&!this.reserveKeyword&&(this.query="",this.handleQueryChange(this.query))),this.setSelected(),this.filterable&&!this.multiple&&(this.inputLength=20),Object(b["valueEquals"])(e,t)||this.dispatch("ElFormItem","el.form.change",e)},visible:function(e){var t=this;e?(this.broadcast("ElSelectDropdown","updatePopper"),this.filterable&&(this.query=this.remote?"":this.selectedLabel,this.handleQueryChange(this.query),this.multiple?this.$refs.input.focus():(this.remote||(this.broadcast("ElOption","queryChange",""),this.broadcast("ElOptionGroup","queryChange")),this.selectedLabel&&(this.currentPlaceholder=this.selectedLabel,this.selectedLabel="")))):(this.broadcast("ElSelectDropdown","destroyPopper"),this.$refs.input&&this.$refs.input.blur(),this.query="",this.previousQuery=null,this.selectedLabel="",this.inputLength=20,this.menuVisibleOnFocus=!1,this.resetHoverIndex(),this.$nextTick((function(){t.$refs.input&&""===t.$refs.input.value&&0===t.selected.length&&(t.currentPlaceholder=t.cachedPlaceHolder)})),this.multiple||(this.selected&&(this.filterable&&this.allowCreate&&this.createdSelected&&this.createdLabel?this.selectedLabel=this.createdLabel:this.selectedLabel=this.selected.currentLabel,this.filterable&&(this.query=this.selectedLabel)),this.filterable&&(this.currentPlaceholder=this.cachedPlaceHolder))),this.$emit("visible-change",e)},options:function(){var e=this;if(!this.$isServer){this.$nextTick((function(){e.broadcast("ElSelectDropdown","updatePopper")})),this.multiple&&this.resetInputHeight();var t=this.$el.querySelectorAll("input");-1===[].indexOf.call(t,document.activeElement)&&this.setSelected(),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()}}},methods:{handleComposition:function(e){var t=this,n=e.target.value;if("compositionend"===e.type)this.isOnComposition=!1,this.$nextTick((function(e){return t.handleQueryChange(n)}));else{var i=n[n.length-1]||"";this.isOnComposition=!Object(Ot["isKorean"])(i)}},handleQueryChange:function(e){var t=this;this.previousQuery===e||this.isOnComposition||(null!==this.previousQuery||"function"!==typeof this.filterMethod&&"function"!==typeof this.remoteMethod?(this.previousQuery=e,this.$nextTick((function(){t.visible&&t.broadcast("ElSelectDropdown","updatePopper")})),this.hoverIndex=-1,this.multiple&&this.filterable&&this.$nextTick((function(){var e=15*t.$refs.input.value.length+20;t.inputLength=t.collapseTags?Math.min(50,e):e,t.managePlaceholder(),t.resetInputHeight()})),this.remote&&"function"===typeof this.remoteMethod?(this.hoverIndex=-1,this.remoteMethod(e)):"function"===typeof this.filterMethod?(this.filterMethod(e),this.broadcast("ElOptionGroup","queryChange")):(this.filteredOptionsCount=this.optionsCount,this.broadcast("ElOption","queryChange",e),this.broadcast("ElOptionGroup","queryChange")),this.defaultFirstOption&&(this.filterable||this.remote)&&this.filteredOptionsCount&&this.checkDefaultFirstOption()):this.previousQuery=e)},scrollToOption:function(e){var t=Array.isArray(e)&&e[0]?e[0].$el:e.$el;if(this.$refs.popper&&t){var n=this.$refs.popper.$el.querySelector(".el-select-dropdown__wrap");ri()(n,t)}this.$refs.scrollbar&&this.$refs.scrollbar.handleScroll()},handleMenuEnter:function(){var e=this;this.$nextTick((function(){return e.scrollToOption(e.selected)}))},emitChange:function(e){Object(b["valueEquals"])(this.value,e)||this.$emit("change",e)},getOption:function(e){for(var t=void 0,n="[object object]"===Object.prototype.toString.call(e).toLowerCase(),i="[object null]"===Object.prototype.toString.call(e).toLowerCase(),r="[object undefined]"===Object.prototype.toString.call(e).toLowerCase(),o=this.cachedOptions.length-1;o>=0;o--){var a=this.cachedOptions[o],s=n?Object(b["getValueByPath"])(a.value,this.valueKey)===Object(b["getValueByPath"])(e,this.valueKey):a.value===e;if(s){t=a;break}}if(t)return t;var l=n||i||r?"":e,c={value:e,currentLabel:l};return this.multiple&&(c.hitState=!1),c},setSelected:function(){var e=this;if(!this.multiple){var t=this.getOption(this.value);return t.created?(this.createdLabel=t.currentLabel,this.createdSelected=!0):this.createdSelected=!1,this.selectedLabel=t.currentLabel,this.selected=t,void(this.filterable&&(this.query=this.selectedLabel))}var n=[];Array.isArray(this.value)&&this.value.forEach((function(t){n.push(e.getOption(t))})),this.selected=n,this.$nextTick((function(){e.resetInputHeight()}))},handleFocus:function(e){this.softFocus?this.softFocus=!1:((this.automaticDropdown||this.filterable)&&(this.visible=!0,this.filterable&&(this.menuVisibleOnFocus=!0)),this.$emit("focus",e))},blur:function(){this.visible=!1,this.$refs.reference.blur()},handleBlur:function(e){var t=this;setTimeout((function(){t.isSilentBlur?t.isSilentBlur=!1:t.$emit("blur",e)}),50),this.softFocus=!1},handleClearClick:function(e){this.deleteSelected(e)},doDestroy:function(){this.$refs.popper&&this.$refs.popper.doDestroy()},handleClose:function(){this.visible=!1},toggleLastOptionHitState:function(e){if(Array.isArray(this.selected)){var t=this.selected[this.selected.length-1];if(t)return!0===e||!1===e?(t.hitState=e,e):(t.hitState=!t.hitState,t.hitState)}},deletePrevTag:function(e){if(e.target.value.length<=0&&!this.toggleLastOptionHitState()){var t=this.value.slice();t.pop(),this.$emit("input",t),this.emitChange(t)}},managePlaceholder:function(){""!==this.currentPlaceholder&&(this.currentPlaceholder=this.$refs.input.value?"":this.cachedPlaceHolder)},resetInputState:function(e){8!==e.keyCode&&this.toggleLastOptionHitState(!1),this.inputLength=15*this.$refs.input.value.length+20,this.resetInputHeight()},resetInputHeight:function(){var e=this;this.collapseTags&&!this.filterable||this.$nextTick((function(){if(e.$refs.reference){var t=e.$refs.reference.$el.childNodes,n=[].filter.call(t,(function(e){return"INPUT"===e.tagName}))[0],i=e.$refs.tags,r=e.initialInputHeight||40;n.style.height=0===e.selected.length?r+"px":Math.max(i?i.clientHeight+(i.clientHeight>r?6:0):0,r)+"px",e.visible&&!1!==e.emptyText&&e.broadcast("ElSelectDropdown","updatePopper")}}))},resetHoverIndex:function(){var e=this;setTimeout((function(){e.multiple?e.selected.length>0?e.hoverIndex=Math.min.apply(null,e.selected.map((function(t){return e.options.indexOf(t)}))):e.hoverIndex=-1:e.hoverIndex=e.options.indexOf(e.selected)}),300)},handleOptionSelect:function(e,t){var n=this;if(this.multiple){var i=(this.value||[]).slice(),r=this.getValueIndex(i,e.value);r>-1?i.splice(r,1):(this.multipleLimit<=0||i.length0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n="[object object]"===Object.prototype.toString.call(t).toLowerCase();if(n){var i=this.valueKey,r=-1;return e.some((function(e,n){return Object(b["getValueByPath"])(e,i)===Object(b["getValueByPath"])(t,i)&&(r=n,!0)})),r}return e.indexOf(t)},toggleMenu:function(){this.selectDisabled||(this.menuVisibleOnFocus?this.menuVisibleOnFocus=!1:this.visible=!this.visible,this.visible&&(this.$refs.input||this.$refs.reference).focus())},selectOption:function(){this.visible?this.options[this.hoverIndex]&&this.handleOptionSelect(this.options[this.hoverIndex]):this.toggleMenu()},deleteSelected:function(e){e.stopPropagation();var t=this.multiple?[]:"";this.$emit("input",t),this.emitChange(t),this.visible=!1,this.$emit("clear")},deleteTag:function(e,t){var n=this.selected.indexOf(t);if(n>-1&&!this.selectDisabled){var i=this.value.slice();i.splice(n,1),this.$emit("input",i),this.emitChange(i),this.$emit("remove-tag",t.value)}e.stopPropagation()},onInputChange:function(){this.filterable&&this.query!==this.selectedLabel&&(this.query=this.selectedLabel,this.handleQueryChange(this.query))},onOptionDestroy:function(e){e>-1&&(this.optionsCount--,this.filteredOptionsCount--,this.options.splice(e,1))},resetInputWidth:function(){this.inputWidth=this.$refs.reference.$el.getBoundingClientRect().width},handleResize:function(){this.resetInputWidth(),this.multiple&&this.resetInputHeight()},checkDefaultFirstOption:function(){this.hoverIndex=-1;for(var e=!1,t=this.options.length-1;t>=0;t--)if(this.options[t].created){e=!0,this.hoverIndex=t;break}if(!e)for(var n=0;n!==this.options.length;++n){var i=this.options[n];if(this.query){if(!i.disabled&&!i.groupDisabled&&i.visible){this.hoverIndex=n;break}}else if(i.itemSelected){this.hoverIndex=n;break}}},getValueKey:function(e){return"[object object]"!==Object.prototype.toString.call(e.value).toLowerCase()?e.value:Object(b["getValueByPath"])(e.value,this.valueKey)}},created:function(){var e=this;this.cachedPlaceHolder=this.currentPlaceholder=this.placeholder,this.multiple&&!Array.isArray(this.value)&&this.$emit("input",[]),!this.multiple&&Array.isArray(this.value)&&this.$emit("input",""),this.debouncedOnInputChange=F()(this.debounce,(function(){e.onInputChange()})),this.debouncedQueryChange=F()(this.debounce,(function(t){e.handleQueryChange(t.target.value)})),this.$on("handleOptionClick",this.handleOptionSelect),this.$on("setSelected",this.setSelected)},mounted:function(){var e=this;this.multiple&&Array.isArray(this.value)&&this.value.length>0&&(this.currentPlaceholder=""),Object(ei["addResizeListener"])(this.$el,this.handleResize);var t=this.$refs.reference;if(t&&t.$el){var n={medium:36,small:32,mini:28},i=t.$el.querySelector("input");this.initialInputHeight=i.getBoundingClientRect().height||n[this.selectSize]}this.remote&&this.multiple&&this.resetInputHeight(),this.$nextTick((function(){t&&t.$el&&(e.inputWidth=t.$el.getBoundingClientRect().width)})),this.setSelected()},beforeDestroy:function(){this.$el&&this.handleResize&&Object(ei["removeResizeListener"])(this.$el,this.handleResize)}},si=ai,li=s(si,Fn,Ln,!1,null,null,null);li.options.__file="packages/select/src/select.vue";var ci=li.exports;ci.install=function(e){e.component(ci.name,ci)};var ui=ci;Zn.install=function(e){e.component(Zn.name,Zn)};var di=Zn,hi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-group__wrap"},[n("li",{staticClass:"el-select-group__title"},[e._v(e._s(e.label))]),n("li",[n("ul",{staticClass:"el-select-group"},[e._t("default")],2)])])},fi=[];hi._withStripped=!0;var pi={mixins:[D.a],name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:{type:Boolean,default:!1}},data:function(){return{visible:!0}},watch:{disabled:function(e){this.broadcast("ElOption","handleGroupDisabled",e)}},methods:{queryChange:function(){this.visible=this.$children&&Array.isArray(this.$children)&&this.$children.some((function(e){return!0===e.visible}))}},created:function(){this.$on("queryChange",this.queryChange)},mounted:function(){this.disabled&&this.broadcast("ElOption","handleGroupDisabled",this.disabled)}},mi=pi,vi=s(mi,hi,fi,!1,null,null,null);vi.options.__file="packages/select/src/option-group.vue";var gi=vi.exports;gi.install=function(e){e.component(gi.name,gi)};var bi=gi,yi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},_i=[];yi._withStripped=!0;var xi={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},wi=xi,Ci=s(wi,yi,_i,!1,null,null,null);Ci.options.__file="packages/button/src/button.vue";var ki=Ci.exports;ki.install=function(e){e.component(ki.name,ki)};var Si=ki,Oi=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-button-group"},[e._t("default")],2)},$i=[];Oi._withStripped=!0;var Di={name:"ElButtonGroup"},Ei=Di,Ti=s(Ei,Oi,$i,!1,null,null,null);Ti.options.__file="packages/button/src/button-group.vue";var Pi=Ti.exports;Pi.install=function(e){e.component(Pi.name,Pi)};var Mi=Pi,Ii=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-table",class:[{"el-table--fit":e.fit,"el-table--striped":e.stripe,"el-table--border":e.border||e.isGroup,"el-table--hidden":e.isHidden,"el-table--group":e.isGroup,"el-table--fluid-height":e.maxHeight,"el-table--scrollable-x":e.layout.scrollX,"el-table--scrollable-y":e.layout.scrollY,"el-table--enable-row-hover":!e.store.states.isComplex,"el-table--enable-row-transition":0!==(e.store.states.data||[]).length&&(e.store.states.data||[]).length<100},e.tableSize?"el-table--"+e.tableSize:""],on:{mouseleave:function(t){e.handleMouseLeave(t)}}},[n("div",{ref:"hiddenColumns",staticClass:"hidden-columns"},[e._t("default")],2),e.showHeader?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"headerWrapper",staticClass:"el-table__header-wrapper"},[n("table-header",{ref:"tableHeader",style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"default-sort":e.defaultSort}})],1):e._e(),n("div",{ref:"bodyWrapper",staticClass:"el-table__body-wrapper",class:[e.layout.scrollX?"is-scrolling-"+e.scrollPosition:"is-scrolling-none"],style:[e.bodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{context:e.context,store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.data&&0!==e.data.length?e._e():n("div",{ref:"emptyBlock",staticClass:"el-table__empty-block",style:e.emptyBlockStyle},[n("span",{staticClass:"el-table__empty-text"},[e._t("empty",[e._v(e._s(e.emptyText||e.t("el.table.emptyText")))])],2)]),e.$slots.append?n("div",{ref:"appendWrapper",staticClass:"el-table__append-wrapper"},[e._t("append")],2):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"},{name:"mousewheel",rawName:"v-mousewheel",value:e.handleHeaderFooterMousewheel,expression:"handleHeaderFooterMousewheel"}],ref:"footerWrapper",staticClass:"el-table__footer-wrapper"},[n("table-footer",{style:{width:e.layout.bodyWidth?e.layout.bodyWidth+"px":""},attrs:{store:e.store,border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,"default-sort":e.defaultSort}})],1):e._e(),e.fixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"fixedWrapper",staticClass:"el-table__fixed",style:[{width:e.layout.fixedWidth?e.layout.fixedWidth+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"fixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"fixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"fixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"left",store:e.store,stripe:e.stripe,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"row-style":e.rowStyle}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"fixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"left",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{directives:[{name:"mousewheel",rawName:"v-mousewheel",value:e.handleFixedMousewheel,expression:"handleFixedMousewheel"}],ref:"rightFixedWrapper",staticClass:"el-table__fixed-right",style:[{width:e.layout.rightFixedWidth?e.layout.rightFixedWidth+"px":"",right:e.layout.scrollY?(e.border?e.layout.gutterWidth:e.layout.gutterWidth||0)+"px":""},e.fixedHeight]},[e.showHeader?n("div",{ref:"rightFixedHeaderWrapper",staticClass:"el-table__fixed-header-wrapper"},[n("table-header",{ref:"rightFixedTableHeader",style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,store:e.store}})],1):e._e(),n("div",{ref:"rightFixedBodyWrapper",staticClass:"el-table__fixed-body-wrapper",style:[{top:e.layout.headerHeight+"px"},e.fixedBodyHeight]},[n("table-body",{style:{width:e.bodyWidth},attrs:{fixed:"right",store:e.store,stripe:e.stripe,"row-class-name":e.rowClassName,"row-style":e.rowStyle,highlight:e.highlightCurrentRow}}),e.$slots.append?n("div",{staticClass:"el-table__append-gutter",style:{height:e.layout.appendHeight+"px"}}):e._e()],1),e.showSummary?n("div",{directives:[{name:"show",rawName:"v-show",value:e.data&&e.data.length>0,expression:"data && data.length > 0"}],ref:"rightFixedFooterWrapper",staticClass:"el-table__fixed-footer-wrapper"},[n("table-footer",{style:{width:e.bodyWidth},attrs:{fixed:"right",border:e.border,"sum-text":e.sumText||e.t("el.table.sumText"),"summary-method":e.summaryMethod,store:e.store}})],1):e._e()]):e._e(),e.rightFixedColumns.length>0?n("div",{ref:"rightFixedPatch",staticClass:"el-table__fixed-right-patch",style:{width:e.layout.scrollY?e.layout.gutterWidth+"px":"0",height:e.layout.headerHeight+"px"}}):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.resizeProxyVisible,expression:"resizeProxyVisible"}],ref:"resizeProxy",staticClass:"el-table__column-resize-proxy"})])},Ni=[];Ii._withStripped=!0;var ji=n(14),Ai=n.n(ji),Fi=n(34),Li=n(38),Vi=n.n(Li),zi="undefined"!==typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1,Bi=function(e,t){e&&e.addEventListener&&e.addEventListener(zi?"DOMMouseScroll":"mousewheel",(function(e){var n=Vi()(e);t&&t.apply(this,[e,n])}))},Ri={bind:function(e,t){Bi(e,t.value)}},Hi=n(6),Wi=n.n(Hi),qi="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ui=function(e){var t=e.target;while(t&&"HTML"!==t.tagName.toUpperCase()){if("TD"===t.tagName.toUpperCase())return t;t=t.parentNode}return null},Yi=function(e){return null!==e&&"object"===("undefined"===typeof e?"undefined":qi(e))},Ki=function(e,t,n,i,r){if(!t&&!i&&(!r||Array.isArray(r)&&!r.length))return e;n="string"===typeof n?"descending"===n?-1:1:n&&n<0?-1:1;var o=i?null:function(n,i){return r?(Array.isArray(r)||(r=[r]),r.map((function(t){return"string"===typeof t?Object(b["getValueByPath"])(n,t):t(n,i,e)}))):("$key"!==t&&Yi(n)&&"$value"in n&&(n=n.$value),[Yi(n)?Object(b["getValueByPath"])(n,t):n])},a=function(e,t){if(i)return i(e.value,t.value);for(var n=0,r=e.key.length;nt.key[n])return 1}return 0};return e.map((function(e,t){return{value:e,index:t,key:o?o(e,t):null}})).sort((function(e,t){var i=a(e,t);return i||(i=e.index-t.index),i*n})).map((function(e){return e.value}))},Gi=function(e,t){var n=null;return e.columns.forEach((function(e){e.id===t&&(n=e)})),n},Xi=function(e,t){for(var n=null,i=0;i2&&void 0!==arguments[2]?arguments[2]:"children",i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"hasChildren",r=function(e){return!(Array.isArray(e)&&e.length)};function o(e,a,s){t(e,a,s),a.forEach((function(e){if(e[i])t(e,null,s+1);else{var a=e[n];r(a)||o(e,a,s+1)}}))}e.forEach((function(e){if(e[i])t(e,null,0);else{var a=e[n];r(a)||o(e,a,0)}}))}var lr={data:function(){return{states:{defaultExpandAll:!1,expandRows:[]}}},methods:{updateExpandRows:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.rowKey,r=e.defaultExpandAll,o=e.expandRows;if(r)this.states.expandRows=n.slice();else if(i){var a=Qi(o,i);this.states.expandRows=n.reduce((function(e,t){var n=Ji(t,i),r=a[n];return r&&e.push(t),e}),[])}else this.states.expandRows=[]},toggleRowExpansion:function(e,t){var n=ar(this.states.expandRows,e,t);n&&(this.table.$emit("expand-change",e,this.states.expandRows.slice()),this.scheduleLayout())},setExpandRowKeys:function(e){this.assertRowKey();var t=this.states,n=t.data,i=t.rowKey,r=Qi(n,i);this.states.expandRows=e.reduce((function(e,t){var n=r[t];return n&&e.push(n.row),e}),[])},isRowExpanded:function(e){var t=this.states,n=t.expandRows,i=void 0===n?[]:n,r=t.rowKey;if(r){var o=Qi(i,r);return!!o[Ji(e,r)]}return-1!==i.indexOf(e)}}},cr={data:function(){return{states:{_currentRowKey:null,currentRow:null}}},methods:{setCurrentRowKey:function(e){this.assertRowKey(),this.states._currentRowKey=e,this.setCurrentRowByKey(e)},restoreCurrentRowKey:function(){this.states._currentRowKey=null},setCurrentRowByKey:function(e){var t=this.states,n=t.data,i=void 0===n?[]:n,r=t.rowKey,o=null;r&&(o=Object(b["arrayFind"])(i,(function(t){return Ji(t,r)===e}))),t.currentRow=o},updateCurrentRow:function(e){var t=this.states,n=this.table,i=t.currentRow;if(e&&e!==i)return t.currentRow=e,void n.$emit("current-change",e,i);!e&&i&&(t.currentRow=null,n.$emit("current-change",null,i))},updateCurrentRowData:function(){var e=this.states,t=this.table,n=e.rowKey,i=e._currentRowKey,r=e.data||[],o=e.currentRow;if(-1===r.indexOf(o)&&o){if(n){var a=Ji(o,n);this.setCurrentRowByKey(a)}else e.currentRow=null;null===e.currentRow&&t.$emit("current-change",null,o)}else i&&(this.setCurrentRowByKey(i),this.restoreCurrentRowKey())}}},ur=Object.assign||function(e){for(var t=1;t0&&t[0]&&"selection"===t[0].type&&!t[0].fixed&&(t[0].fixed=!0,e.fixedColumns.unshift(t[0]));var n=t.filter((function(e){return!e.fixed}));e.originColumns=[].concat(e.fixedColumns).concat(n).concat(e.rightFixedColumns);var i=fr(n),r=fr(e.fixedColumns),o=fr(e.rightFixedColumns);e.leafColumnsLength=i.length,e.fixedLeafColumnsLength=r.length,e.rightFixedLeafColumnsLength=o.length,e.columns=[].concat(r).concat(i).concat(o),e.isComplex=e.fixedColumns.length>0||e.rightFixedColumns.length>0},scheduleLayout:function(e){e&&this.updateColumns(),this.table.debouncedUpdateLayout()},isSelected:function(e){var t=this.states.selection,n=void 0===t?[]:t;return n.indexOf(e)>-1},clearSelection:function(){var e=this.states;e.isAllSelected=!1;var t=e.selection;t.length&&(e.selection=[],this.table.$emit("selection-change",[]))},cleanSelection:function(){var e=this.states,t=e.data,n=e.rowKey,i=e.selection,r=void 0;if(n){r=[];var o=Qi(i,n),a=Qi(t,n);for(var s in o)o.hasOwnProperty(s)&&!a[s]&&r.push(o[s].row)}else r=i.filter((function(e){return-1===t.indexOf(e)}));if(r.length){var l=i.filter((function(e){return-1===r.indexOf(e)}));e.selection=l,this.table.$emit("selection-change",l.slice())}},toggleRowSelection:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=ar(this.states.selection,e,t);if(i){var r=(this.states.selection||[]).slice();n&&this.table.$emit("select",r,e),this.table.$emit("selection-change",r)}},_toggleAllSelection:function(){var e=this.states,t=e.data,n=void 0===t?[]:t,i=e.selection,r=e.selectOnIndeterminate?!e.isAllSelected:!(e.isAllSelected||i.length);e.isAllSelected=r;var o=!1;n.forEach((function(t,n){e.selectable?e.selectable.call(null,t,n)&&ar(i,t,r)&&(o=!0):ar(i,t,r)&&(o=!0)})),o&&this.table.$emit("selection-change",i?i.slice():[]),this.table.$emit("select-all",i)},updateSelectionByRowKey:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.data,r=Qi(t,n);i.forEach((function(e){var i=Ji(e,n),o=r[i];o&&(t[o.index]=e)}))},updateAllSelected:function(){var e=this.states,t=e.selection,n=e.rowKey,i=e.selectable,r=e.data||[];if(0!==r.length){var o=void 0;n&&(o=Qi(t,n));for(var a=function(e){return o?!!o[Ji(e,n)]:-1!==t.indexOf(e)},s=!0,l=0,c=0,u=r.length;c1?n-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};if(!e)throw new Error("Table is required.");var n=new mr;return n.table=e,n.toggleAllSelection=F()(10,n._toggleAllSelection),Object.keys(t).forEach((function(e){n.states[e]=t[e]})),n}function gr(e){var t={};return Object.keys(e).forEach((function(n){var i=e[n],r=void 0;"string"===typeof i?r=function(){return this.store.states[i]}:"function"===typeof i?r=function(){return i.call(this,this.store.states)}:console.error("invalid value type"),r&&(t[n]=r)})),t}var br=n(29),yr=n.n(br);function _r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var xr=function(){function e(t){for(var n in _r(this,e),this.observers=[],this.table=null,this.store=null,this.columns=null,this.fit=!0,this.showHeader=!0,this.height=null,this.scrollX=!1,this.scrollY=!1,this.bodyWidth=null,this.fixedWidth=null,this.rightFixedWidth=null,this.tableHeight=null,this.headerHeight=44,this.appendHeight=0,this.footerHeight=44,this.viewportHeight=null,this.bodyHeight=null,this.fixedBodyHeight=null,this.gutterWidth=yr()(),t)t.hasOwnProperty(n)&&(this[n]=t[n]);if(!this.table)throw new Error("table is required for Table Layout");if(!this.store)throw new Error("store is required for Table Layout")}return e.prototype.updateScrollY=function(){var e=this.height;if(null===e)return!1;var t=this.table.bodyWrapper;if(this.table.$el&&t){var n=t.querySelector(".el-table__body"),i=this.scrollY,r=n.offsetHeight>this.bodyHeight;return this.scrollY=r,i!==r}return!1},e.prototype.setHeight=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"height";if(!Wi.a.prototype.$isServer){var i=this.table.$el;if(e=rr(e),this.height=e,!i&&(e||0===e))return Wi.a.nextTick((function(){return t.setHeight(e,n)}));"number"===typeof e?(i.style[n]=e+"px",this.updateElsHeight()):"string"===typeof e&&(i.style[n]=e,this.updateElsHeight())}},e.prototype.setMaxHeight=function(e){this.setHeight(e,"max-height")},e.prototype.getFlattenColumns=function(){var e=[],t=this.table.columns;return t.forEach((function(t){t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)})),e},e.prototype.updateElsHeight=function(){var e=this;if(!this.table.$ready)return Wi.a.nextTick((function(){return e.updateElsHeight()}));var t=this.table.$refs,n=t.headerWrapper,i=t.appendWrapper,r=t.footerWrapper;if(this.appendHeight=i?i.offsetHeight:0,!this.showHeader||n){var o=n.querySelector(".el-table__header tr"),a=this.headerDisplayNone(o),s=this.headerHeight=this.showHeader?n.offsetHeight:0;if(this.showHeader&&!a&&n.offsetWidth>0&&(this.table.columns||[]).length>0&&s<2)return Wi.a.nextTick((function(){return e.updateElsHeight()}));var l=this.tableHeight=this.table.$el.clientHeight,c=this.footerHeight=r?r.offsetHeight:0;null!==this.height&&(this.bodyHeight=l-s-c+(r?1:0)),this.fixedBodyHeight=this.scrollX?this.bodyHeight-this.gutterWidth:this.bodyHeight;var u=!this.table.data||0===this.table.data.length;this.viewportHeight=this.scrollX?l-(u?0:this.gutterWidth):l,this.updateScrollY(),this.notifyObservers("scrollable")}},e.prototype.headerDisplayNone=function(e){var t=e;while("DIV"!==t.tagName){if("none"===getComputedStyle(t).display)return!0;t=t.parentElement}return!1},e.prototype.updateColumnsWidth=function(){if(!Wi.a.prototype.$isServer){var e=this.fit,t=this.table.$el.clientWidth,n=0,i=this.getFlattenColumns(),r=i.filter((function(e){return"number"!==typeof e.width}));if(i.forEach((function(e){"number"===typeof e.width&&e.realWidth&&(e.realWidth=null)})),r.length>0&&e){i.forEach((function(e){n+=e.width||e.minWidth||80}));var o=this.scrollY?this.gutterWidth:0;if(n<=t-o){this.scrollX=!1;var a=t-o-n;if(1===r.length)r[0].realWidth=(r[0].minWidth||80)+a;else{var s=r.reduce((function(e,t){return e+(t.minWidth||80)}),0),l=a/s,c=0;r.forEach((function(e,t){if(0!==t){var n=Math.floor((e.minWidth||80)*l);c+=n,e.realWidth=(e.minWidth||80)+n}})),r[0].realWidth=(r[0].minWidth||80)+a-c}}else this.scrollX=!0,r.forEach((function(e){e.realWidth=e.minWidth}));this.bodyWidth=Math.max(n,t),this.table.resizeState.width=this.bodyWidth}else i.forEach((function(e){e.width||e.minWidth?e.realWidth=e.width||e.minWidth:e.realWidth=80,n+=e.realWidth})),this.scrollX=n>t,this.bodyWidth=n;var u=this.store.states.fixedColumns;if(u.length>0){var d=0;u.forEach((function(e){d+=e.realWidth||e.width})),this.fixedWidth=d}var h=this.store.states.rightFixedColumns;if(h.length>0){var f=0;h.forEach((function(e){f+=e.realWidth||e.width})),this.rightFixedWidth=f}this.notifyObservers("columns")}},e.prototype.addObserver=function(e){this.observers.push(e)},e.prototype.removeObserver=function(e){var t=this.observers.indexOf(e);-1!==t&&this.observers.splice(t,1)},e.prototype.notifyObservers=function(e){var t=this,n=this.observers;n.forEach((function(n){switch(e){case"columns":n.onColumnsChange(t);break;case"scrollable":n.onScrollableChange(t);break;default:throw new Error("Table Layout don't have event "+e+".")}}))},e}(),wr=xr,Cr={created:function(){this.tableLayout.addObserver(this)},destroyed:function(){this.tableLayout.removeObserver(this)},computed:{tableLayout:function(){var e=this.layout;if(!e&&this.table&&(e=this.table.layout),!e)throw new Error("Can not find table layout.");return e}},mounted:function(){this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout)},updated:function(){this.__updated__||(this.onColumnsChange(this.tableLayout),this.onScrollableChange(this.tableLayout),this.__updated__=!0)},methods:{onColumnsChange:function(){var e=this.$el.querySelectorAll("colgroup > col");if(e.length){var t=this.tableLayout.getFlattenColumns(),n={};t.forEach((function(e){n[e.id]=e}));for(var i=0,r=e.length;i col[name=gutter]"),n=0,i=t.length;n=this.leftFixedLeafCount:"right"===this.fixed?e=this.columnsCount-this.rightFixedLeafCount},getSpan:function(e,t,n,i){var r=1,o=1,a=this.table.spanMethod;if("function"===typeof a){var s=a({row:e,column:t,rowIndex:n,columnIndex:i});Array.isArray(s)?(r=s[0],o=s[1]):"object"===("undefined"===typeof s?"undefined":kr(s))&&(r=s.rowspan,o=s.colspan)}return{rowspan:r,colspan:o}},getRowStyle:function(e,t){var n=this.table.rowStyle;return"function"===typeof n?n.call(null,{row:e,rowIndex:t}):n||null},getRowClass:function(e,t){var n=["el-table__row"];this.table.highlightCurrentRow&&e===this.store.states.currentRow&&n.push("current-row"),this.stripe&&t%2===1&&n.push("el-table__row--striped");var i=this.table.rowClassName;return"string"===typeof i?n.push(i):"function"===typeof i&&n.push(i.call(null,{row:e,rowIndex:t})),this.store.states.expandRows.indexOf(e)>-1&&n.push("expanded"),n},getCellStyle:function(e,t,n,i){var r=this.table.cellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getCellClass:function(e,t,n,i){var r=[i.id,i.align,i.className];this.isColumnHidden(t)&&r.push("is-hidden");var o=this.table.cellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},getColspanRealWidth:function(e,t,n){if(t<1)return e[n].realWidth;var i=e.map((function(e){var t=e.realWidth;return t})).slice(n,n+t);return i.reduce((function(e,t){return e+t}),-1)},handleCellMouseEnter:function(e,t){var n=this.table,i=Ui(e);if(i){var r=Zi(n,i),o=n.hoverState={cell:i,column:r,row:t};n.$emit("cell-mouse-enter",o.row,o.column,o.cell,e)}var a=e.target.querySelector(".cell");if(Object(Le["hasClass"])(a,"el-tooltip")&&a.childNodes.length){var s=document.createRange();s.setStart(a,0),s.setEnd(a,a.childNodes.length);var l=s.getBoundingClientRect().width,c=(parseInt(Object(Le["getStyle"])(a,"paddingLeft"),10)||0)+(parseInt(Object(Le["getStyle"])(a,"paddingRight"),10)||0);if((l+c>a.offsetWidth||a.scrollWidth>a.offsetWidth)&&this.$refs.tooltip){var u=this.$refs.tooltip;this.tooltipContent=i.innerText||i.textContent,u.referenceElm=i,u.$refs.popper&&(u.$refs.popper.style.display="none"),u.doDestroy(),u.setExpectedState(!0),this.activateTooltip(u)}}},handleCellMouseLeave:function(e){var t=this.$refs.tooltip;t&&(t.setExpectedState(!1),t.handleClosePopper());var n=Ui(e);if(n){var i=this.table.hoverState||{};this.table.$emit("cell-mouse-leave",i.row,i.column,i.cell,e)}},handleMouseEnter:F()(30,(function(e){this.store.commit("setHoverRow",e)})),handleMouseLeave:F()(30,(function(){this.store.commit("setHoverRow",null)})),handleContextMenu:function(e,t){this.handleEvent(e,t,"contextmenu")},handleDoubleClick:function(e,t){this.handleEvent(e,t,"dblclick")},handleClick:function(e,t){this.store.commit("setCurrentRow",t),this.handleEvent(e,t,"click")},handleEvent:function(e,t,n){var i=this.table,r=Ui(e),o=void 0;r&&(o=Zi(i,r),o&&i.$emit("cell-"+n,t,o,r,e)),i.$emit("row-"+n,t,o,e)},rowRender:function(e,t,n){var i=this,r=this.$createElement,o=this.treeIndent,a=this.columns,s=this.firstDefaultColumnIndex,l=a.map((function(e,t){return i.isColumnHidden(t)})),c=this.getRowClass(e,t),u=!0;return n&&(c.push("el-table__row--level-"+n.level),u=n.display),r("tr",{directives:[{name:"show",value:u}],style:this.getRowStyle(e,t),class:c,key:this.getKeyOfRow(e,t),on:{dblclick:function(t){return i.handleDoubleClick(t,e)},click:function(t){return i.handleClick(t,e)},contextmenu:function(t){return i.handleContextMenu(t,e)},mouseenter:function(e){return i.handleMouseEnter(t)},mouseleave:this.handleMouseLeave}},[a.map((function(c,u){var d=i.getSpan(e,c,t,u),h=d.rowspan,f=d.colspan;if(!h||!f)return null;var p=Sr({},c);p.realWidth=i.getColspanRealWidth(a,f,u);var m={store:i.store,_self:i.context||i.table.$vnode.context,column:p,row:e,$index:t};return u===s&&n&&(m.treeNode={indent:n.level*o,level:n.level},"boolean"===typeof n.expanded&&(m.treeNode.expanded=n.expanded,"loading"in n&&(m.treeNode.loading=n.loading),"noLazyChildren"in n&&(m.treeNode.noLazyChildren=n.noLazyChildren))),r("td",{style:i.getCellStyle(t,u,e,c),class:i.getCellClass(t,u,e,c),attrs:{rowspan:h,colspan:f},on:{mouseenter:function(t){return i.handleCellMouseEnter(t,e)},mouseleave:i.handleCellMouseLeave}},[c.renderCell.call(i._renderProxy,i.$createElement,m,l[u])])}))])},wrappedRowRender:function(e,t){var n=this,i=this.$createElement,r=this.store,o=r.isRowExpanded,a=r.assertRowKey,s=r.states,l=s.treeData,c=s.lazyTreeNodeMap,u=s.childrenColumnName,d=s.rowKey;if(this.hasExpandColumn&&o(e)){var h=this.table.renderExpanded,f=this.rowRender(e,t);return h?[[f,i("tr",{key:"expanded-row__"+f.key},[i("td",{attrs:{colspan:this.columnsCount},class:"el-table__expanded-cell"},[h(this.$createElement,{row:e,$index:t,store:this.store})])])]]:(console.error("[Element Error]renderExpanded is required."),f)}if(Object.keys(l).length){a();var p=Ji(e,d),m=l[p],v=null;m&&(v={expanded:m.expanded,level:m.level,display:!0},"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(v.noLazyChildren=!(m.children&&m.children.length)),v.loading=m.loading));var g=[this.rowRender(e,t,v)];if(m){var b=0,y=function e(i,r){i&&i.length&&r&&i.forEach((function(i){var o={display:r.display&&r.expanded,level:r.level+1},a=Ji(i,d);if(void 0===a||null===a)throw new Error("for nested data item, row-key is required.");if(m=Sr({},l[a]),m&&(o.expanded=m.expanded,m.level=m.level||o.level,m.display=!(!m.expanded||!o.display),"boolean"===typeof m.lazy&&("boolean"===typeof m.loaded&&m.loaded&&(o.noLazyChildren=!(m.children&&m.children.length)),o.loading=m.loading)),b++,g.push(n.rowRender(i,t+b,o)),m){var s=c[a]||i[u];e(s,m)}}))};m.display=!0;var _=c[p]||e[u];y(_,m)}return g}return this.rowRender(e,t)}}},$r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"}},[e.multiple?n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("div",{staticClass:"el-table-filter__content"},[n("el-scrollbar",{attrs:{"wrap-class":"el-table-filter__wrap"}},[n("el-checkbox-group",{staticClass:"el-table-filter__checkbox-group",model:{value:e.filteredValue,callback:function(t){e.filteredValue=t},expression:"filteredValue"}},e._l(e.filters,(function(t){return n("el-checkbox",{key:t.value,attrs:{label:t.value}},[e._v(e._s(t.text))])})),1)],1)],1),n("div",{staticClass:"el-table-filter__bottom"},[n("button",{class:{"is-disabled":0===e.filteredValue.length},attrs:{disabled:0===e.filteredValue.length},on:{click:e.handleConfirm}},[e._v(e._s(e.t("el.table.confirmFilter")))]),n("button",{on:{click:e.handleReset}},[e._v(e._s(e.t("el.table.resetFilter")))])])]):n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleOutsideClick,expression:"handleOutsideClick"},{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-table-filter"},[n("ul",{staticClass:"el-table-filter__list"},[n("li",{staticClass:"el-table-filter__list-item",class:{"is-active":void 0===e.filterValue||null===e.filterValue},on:{click:function(t){e.handleSelect(null)}}},[e._v(e._s(e.t("el.table.clearFilter")))]),e._l(e.filters,(function(t){return n("li",{key:t.value,staticClass:"el-table-filter__list-item",class:{"is-active":e.isActive(t)},attrs:{label:t.value},on:{click:function(n){e.handleSelect(t.value)}}},[e._v(e._s(t.text))])}))],2)])])},Dr=[];$r._withStripped=!0;var Er=[];!Wi.a.prototype.$isServer&&document.addEventListener("click",(function(e){Er.forEach((function(t){var n=e.target;t&&t.$el&&(n===t.$el||t.$el.contains(n)||t.handleOutsideClick&&t.handleOutsideClick(e))}))}));var Tr={open:function(e){e&&Er.push(e)},close:function(e){var t=Er.indexOf(e);-1!==t&&Er.splice(e,1)}},Pr=n(30),Mr=n.n(Pr),Ir={name:"ElTableFilterPanel",mixins:[H.a,g.a],directives:{Clickoutside:V.a},components:{ElCheckbox:Ai.a,ElCheckboxGroup:Mr.a,ElScrollbar:q.a},props:{placement:{type:String,default:"bottom-end"}},methods:{isActive:function(e){return e.value===this.filterValue},handleOutsideClick:function(){var e=this;setTimeout((function(){e.showPopper=!1}),16)},handleConfirm:function(){this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleReset:function(){this.filteredValue=[],this.confirmFilter(this.filteredValue),this.handleOutsideClick()},handleSelect:function(e){this.filterValue=e,"undefined"!==typeof e&&null!==e?this.confirmFilter(this.filteredValue):this.confirmFilter([]),this.handleOutsideClick()},confirmFilter:function(e){this.table.store.commit("filterChange",{column:this.column,values:e}),this.table.store.updateAllSelected()}},data:function(){return{table:null,cell:null,column:null}},computed:{filters:function(){return this.column&&this.column.filters},filterValue:{get:function(){return(this.column.filteredValue||[])[0]},set:function(e){this.filteredValue&&("undefined"!==typeof e&&null!==e?this.filteredValue.splice(0,1,e):this.filteredValue.splice(0,1))}},filteredValue:{get:function(){return this.column&&this.column.filteredValue||[]},set:function(e){this.column&&(this.column.filteredValue=e)}},multiple:function(){return!this.column||this.column.filterMultiple}},mounted:function(){var e=this;this.popperElm=this.$el,this.referenceElm=this.cell,this.table.bodyWrapper.addEventListener("scroll",(function(){e.updatePopper()})),this.$watch("showPopper",(function(t){e.column&&(e.column.filterOpened=t),t?Tr.open(e):Tr.close(e)}))},watch:{showPopper:function(e){!0===e&&parseInt(this.popperJS._popper.style.zIndex,10)1;return r&&(this.$parent.isGroup=!0),e("table",{class:"el-table__header",attrs:{cellspacing:"0",cellpadding:"0",border:"0"}},[e("colgroup",[this.columns.map((function(t){return e("col",{attrs:{name:t.id},key:t.id})})),this.hasGutter?e("col",{attrs:{name:"gutter"}}):""]),e("thead",{class:[{"is-group":r,"has-gutter":this.hasGutter}]},[this._l(i,(function(n,i){return e("tr",{style:t.getHeaderRowStyle(i),class:t.getHeaderRowClass(i)},[n.map((function(r,o){return e("th",{attrs:{colspan:r.colSpan,rowspan:r.rowSpan},on:{mousemove:function(e){return t.handleMouseMove(e,r)},mouseout:t.handleMouseOut,mousedown:function(e){return t.handleMouseDown(e,r)},click:function(e){return t.handleHeaderClick(e,r)},contextmenu:function(e){return t.handleHeaderContextMenu(e,r)}},style:t.getHeaderCellStyle(i,o,n,r),class:t.getHeaderCellClass(i,o,n,r),key:r.id},[e("div",{class:["cell",r.filteredValue&&r.filteredValue.length>0?"highlight":"",r.labelClassName]},[r.renderHeader?r.renderHeader.call(t._renderProxy,e,{column:r,$index:o,store:t.store,_self:t.$parent.$vnode.context}):r.label,r.sortable?e("span",{class:"caret-wrapper",on:{click:function(e){return t.handleSortClick(e,r)}}},[e("i",{class:"sort-caret ascending",on:{click:function(e){return t.handleSortClick(e,r,"ascending")}}}),e("i",{class:"sort-caret descending",on:{click:function(e){return t.handleSortClick(e,r,"descending")}}})]):"",r.filterable?e("span",{class:"el-table__column-filter-trigger",on:{click:function(e){return t.handleFilterClick(e,r)}}},[e("i",{class:["el-icon-arrow-down",r.filterOpened?"el-icon-arrow-up":""]})]):""])])})),t.hasGutter?e("th",{class:"gutter"}):""])}))])])},props:{fixed:String,store:{required:!0},border:Boolean,defaultSort:{type:Object,default:function(){return{prop:"",order:""}}}},components:{ElCheckbox:Ai.a},computed:Fr({table:function(){return this.$parent},hasGutter:function(){return!this.fixed&&this.tableLayout.gutterWidth}},gr({columns:"columns",isAllSelected:"isAllSelected",leftFixedLeafCount:"fixedLeafColumnsLength",rightFixedLeafCount:"rightFixedLeafColumnsLength",columnsCount:function(e){return e.columns.length},leftFixedCount:function(e){return e.fixedColumns.length},rightFixedCount:function(e){return e.rightFixedColumns.length}})),created:function(){this.filterPanels={}},mounted:function(){var e=this;this.$nextTick((function(){var t=e.defaultSort,n=t.prop,i=t.order,r=!0;e.store.commit("sort",{prop:n,order:i,init:r})}))},beforeDestroy:function(){var e=this.filterPanels;for(var t in e)e.hasOwnProperty(t)&&e[t]&&e[t].$destroy(!0)},methods:{isCellHidden:function(e,t){for(var n=0,i=0;i=this.leftFixedLeafCount:"right"===this.fixed?n=this.columnsCount-this.rightFixedLeafCount},getHeaderRowStyle:function(e){var t=this.table.headerRowStyle;return"function"===typeof t?t.call(null,{rowIndex:e}):t},getHeaderRowClass:function(e){var t=[],n=this.table.headerRowClassName;return"string"===typeof n?t.push(n):"function"===typeof n&&t.push(n.call(null,{rowIndex:e})),t.join(" ")},getHeaderCellStyle:function(e,t,n,i){var r=this.table.headerCellStyle;return"function"===typeof r?r.call(null,{rowIndex:e,columnIndex:t,row:n,column:i}):r},getHeaderCellClass:function(e,t,n,i){var r=[i.id,i.order,i.headerAlign,i.className,i.labelClassName];0===e&&this.isCellHidden(t,n)&&r.push("is-hidden"),i.children||r.push("is-leaf"),i.sortable&&r.push("is-sortable");var o=this.table.headerCellClassName;return"string"===typeof o?r.push(o):"function"===typeof o&&r.push(o.call(null,{rowIndex:e,columnIndex:t,row:n,column:i})),r.join(" ")},toggleAllSelection:function(e){e.stopPropagation(),this.store.commit("toggleAllSelection")},handleFilterClick:function(e,t){e.stopPropagation();var n=e.target,i="TH"===n.tagName?n:n.parentNode;if(!Object(Le["hasClass"])(i,"noclick")){i=i.querySelector(".el-table__column-filter-trigger")||i;var r=this.$parent,o=this.filterPanels[t.id];o&&t.filterOpened?o.showPopper=!1:(o||(o=new Wi.a(Ar),this.filterPanels[t.id]=o,t.filterPlacement&&(o.placement=t.filterPlacement),o.table=r,o.cell=i,o.column=t,!this.$isServer&&o.$mount(document.createElement("div"))),setTimeout((function(){o.showPopper=!0}),16))}},handleHeaderClick:function(e,t){!t.filters&&t.sortable?this.handleSortClick(e,t):t.filterable&&!t.sortable&&this.handleFilterClick(e,t),this.$parent.$emit("header-click",t,e)},handleHeaderContextMenu:function(e,t){this.$parent.$emit("header-contextmenu",t,e)},handleMouseDown:function(e,t){var n=this;if(!this.$isServer&&!(t.children&&t.children.length>0)&&this.draggingColumn&&this.border){this.dragging=!0,this.$parent.resizeProxyVisible=!0;var i=this.$parent,r=i.$el,o=r.getBoundingClientRect().left,a=this.$el.querySelector("th."+t.id),s=a.getBoundingClientRect(),l=s.left-o+30;Object(Le["addClass"])(a,"noclick"),this.dragState={startMouseLeft:e.clientX,startLeft:s.right-o,startColumnLeft:s.left-o,tableLeft:o};var c=i.$refs.resizeProxy;c.style.left=this.dragState.startLeft+"px",document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};var u=function(e){var t=e.clientX-n.dragState.startMouseLeft,i=n.dragState.startLeft+t;c.style.left=Math.max(l,i)+"px"},d=function r(){if(n.dragging){var o=n.dragState,s=o.startColumnLeft,l=o.startLeft,d=parseInt(c.style.left,10),h=d-s;t.width=t.realWidth=h,i.$emit("header-dragend",t.width,l-s,t,e),n.store.scheduleLayout(),document.body.style.cursor="",n.dragging=!1,n.draggingColumn=null,n.dragState={},i.resizeProxyVisible=!1}document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",r),document.onselectstart=null,document.ondragstart=null,setTimeout((function(){Object(Le["removeClass"])(a,"noclick")}),0)};document.addEventListener("mousemove",u),document.addEventListener("mouseup",d)}},handleMouseMove:function(e,t){if(!(t.children&&t.children.length>0)){var n=e.target;while(n&&"TH"!==n.tagName)n=n.parentNode;if(t&&t.resizable&&!this.dragging&&this.border){var i=n.getBoundingClientRect(),r=document.body.style;i.width>12&&i.right-e.pageX<8?(r.cursor="col-resize",Object(Le["hasClass"])(n,"is-sortable")&&(n.style.cursor="col-resize"),this.draggingColumn=t):this.dragging||(r.cursor="",Object(Le["hasClass"])(n,"is-sortable")&&(n.style.cursor="pointer"),this.draggingColumn=null)}}},handleMouseOut:function(){this.$isServer||(document.body.style.cursor="")},toggleOrder:function(e){var t=e.order,n=e.sortOrders;if(""===t)return n[0];var i=n.indexOf(t||null);return n[i>n.length-2?0:i+1]},handleSortClick:function(e,t,n){e.stopPropagation();var i=t.order===n?null:n||this.toggleOrder(t),r=e.target;while(r&&"TH"!==r.tagName)r=r.parentNode;if(r&&"TH"===r.tagName&&Object(Le["hasClass"])(r,"noclick"))Object(Le["removeClass"])(r,"noclick");else if(t.sortable){var o=this.store.states,a=o.sortProp,s=void 0,l=o.sortingColumn;(l!==t||l===t&&null===l.order)&&(l&&(l.order=null),o.sortingColumn=t,a=t.property),s=t.order=i||null,o.sortProp=a,o.sortOrder=s,this.store.commit("changeSortCondition")}}},data:function(){return{draggingColumn:null,dragging:!1,dragState:{}}}},Br=Object.assign||function(e){for(var t=1;t=this.leftFixedLeafCount;if("right"===this.fixed){for(var i=0,r=0;r=this.columnsCount-this.rightFixedCount)},getRowClasses:function(e,t){var n=[e.id,e.align,e.labelClassName];return e.className&&n.push(e.className),this.isCellHidden(t,this.columns,e)&&n.push("is-hidden"),e.children||n.push("is-leaf"),n}}},Hr=Object.assign||function(e){for(var t=1;t0){var i=n.scrollTop;t.pixelY<0&&0!==i&&e.preventDefault(),t.pixelY>0&&n.scrollHeight-n.clientHeight>i&&e.preventDefault(),n.scrollTop+=Math.ceil(t.pixelY/5)}else n.scrollLeft+=Math.ceil(t.pixelX/5)},handleHeaderFooterMousewheel:function(e,t){var n=t.pixelX,i=t.pixelY;Math.abs(n)>=Math.abs(i)&&(this.bodyWrapper.scrollLeft+=t.pixelX/5)},syncPostion:Object(Fi["throttle"])(20,(function(){var e=this.bodyWrapper,t=e.scrollLeft,n=e.scrollTop,i=e.offsetWidth,r=e.scrollWidth,o=this.$refs,a=o.headerWrapper,s=o.footerWrapper,l=o.fixedBodyWrapper,c=o.rightFixedBodyWrapper;a&&(a.scrollLeft=t),s&&(s.scrollLeft=t),l&&(l.scrollTop=n),c&&(c.scrollTop=n);var u=r-i-1;this.scrollPosition=t>=u?"right":0===t?"left":"middle"})),bindEvents:function(){this.bodyWrapper.addEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ei["addResizeListener"])(this.$el,this.resizeListener)},unbindEvents:function(){this.bodyWrapper.removeEventListener("scroll",this.syncPostion,{passive:!0}),this.fit&&Object(ei["removeResizeListener"])(this.$el,this.resizeListener)},resizeListener:function(){if(this.$ready){var e=!1,t=this.$el,n=this.resizeState,i=n.width,r=n.height,o=t.offsetWidth;i!==o&&(e=!0);var a=t.offsetHeight;(this.height||this.shouldUpdateHeight)&&r!==a&&(e=!0),e&&(this.resizeState.width=o,this.resizeState.height=a,this.doLayout())}},doLayout:function(){this.shouldUpdateHeight&&this.layout.updateElsHeight(),this.layout.updateColumnsWidth()},sort:function(e,t){this.store.commit("sort",{prop:e,order:t})},toggleAllSelection:function(){this.store.commit("toggleAllSelection")}},computed:Hr({tableSize:function(){return this.size||(this.$ELEMENT||{}).size},bodyWrapper:function(){return this.$refs.bodyWrapper},shouldUpdateHeight:function(){return this.height||this.maxHeight||this.fixedColumns.length>0||this.rightFixedColumns.length>0},bodyWidth:function(){var e=this.layout,t=e.bodyWidth,n=e.scrollY,i=e.gutterWidth;return t?t-(n?i:0)+"px":""},bodyHeight:function(){var e=this.layout,t=e.headerHeight,n=void 0===t?0:t,i=e.bodyHeight,r=e.footerHeight,o=void 0===r?0:r;if(this.height)return{height:i?i+"px":""};if(this.maxHeight){var a=rr(this.maxHeight);if("number"===typeof a)return{"max-height":a-o-(this.showHeader?n:0)+"px"}}return{}},fixedBodyHeight:function(){if(this.height)return{height:this.layout.fixedBodyHeight?this.layout.fixedBodyHeight+"px":""};if(this.maxHeight){var e=rr(this.maxHeight);if("number"===typeof e)return e=this.layout.scrollX?e-this.layout.gutterWidth:e,this.showHeader&&(e-=this.layout.headerHeight),e-=this.layout.footerHeight,{"max-height":e+"px"}}return{}},fixedHeight:function(){return this.maxHeight?this.showSummary?{bottom:0}:{bottom:this.layout.scrollX&&this.data.length?this.layout.gutterWidth+"px":""}:this.showSummary?{height:this.layout.tableHeight?this.layout.tableHeight+"px":""}:{height:this.layout.viewportHeight?this.layout.viewportHeight+"px":""}},emptyBlockStyle:function(){if(this.data&&this.data.length)return null;var e="100%";return this.layout.appendHeight&&(e="calc(100% - "+this.layout.appendHeight+"px)"),{width:this.bodyWidth,height:e}}},gr({selection:"selection",columns:"columns",tableData:"data",fixedColumns:"fixedColumns",rightFixedColumns:"rightFixedColumns"})),watch:{height:{immediate:!0,handler:function(e){this.layout.setHeight(e)}},maxHeight:{immediate:!0,handler:function(e){this.layout.setMaxHeight(e)}},currentRowKey:{immediate:!0,handler:function(e){this.rowKey&&this.store.setCurrentRowKey(e)}},data:{immediate:!0,handler:function(e){this.store.commit("setData",e)}},expandRowKeys:{immediate:!0,handler:function(e){e&&this.store.setExpandRowKeysAdapter(e)}}},created:function(){var e=this;this.tableId="el-table_"+Wr++,this.debouncedUpdateLayout=Object(Fi["debounce"])(50,(function(){return e.doLayout()}))},mounted:function(){var e=this;this.bindEvents(),this.store.updateColumns(),this.doLayout(),this.resizeState={width:this.$el.offsetWidth,height:this.$el.offsetHeight},this.store.states.columns.forEach((function(t){t.filteredValue&&t.filteredValue.length&&e.store.commit("filterChange",{column:t,values:t.filteredValue,silent:!0})})),this.$ready=!0},destroyed:function(){this.unbindEvents()},data:function(){var e=this.treeProps,t=e.hasChildren,n=void 0===t?"hasChildren":t,i=e.children,r=void 0===i?"children":i;this.store=vr(this,{rowKey:this.rowKey,defaultExpandAll:this.defaultExpandAll,selectOnIndeterminate:this.selectOnIndeterminate,indent:this.indent,lazy:this.lazy,lazyColumnIdentifier:n,childrenColumnName:r});var o=new wr({store:this.store,table:this,fit:this.fit,showHeader:this.showHeader});return{layout:o,isHidden:!1,renderExpanded:null,resizeProxyVisible:!1,resizeState:{width:null,height:null},isGroup:!1,scrollPosition:"left"}}},Ur=qr,Yr=s(Ur,Ii,Ni,!1,null,null,null);Yr.options.__file="packages/table/src/table.vue";var Kr=Yr.exports;Kr.install=function(e){e.component(Kr.name,Kr)};var Gr=Kr,Xr={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:"",className:"el-table-column--selection"},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Zr={selection:{renderHeader:function(e,t){var n=t.store;return e("el-checkbox",{attrs:{disabled:n.states.data&&0===n.states.data.length,indeterminate:n.states.selection.length>0&&!this.isAllSelected,value:this.isAllSelected},nativeOn:{click:this.toggleAllSelection}})},renderCell:function(e,t){var n=t.row,i=t.column,r=t.store,o=t.$index;return e("el-checkbox",{nativeOn:{click:function(e){return e.stopPropagation()}},attrs:{value:r.isSelected(n),disabled:!!i.selectable&&!i.selectable.call(null,n,o)},on:{input:function(){r.commit("rowSelectedChanged",n)}}})},sortable:!1,resizable:!1},index:{renderHeader:function(e,t){var n=t.column;return n.label||"#"},renderCell:function(e,t){var n=t.$index,i=t.column,r=n+1,o=i.index;return"number"===typeof o?r=n+o:"function"===typeof o&&(r=o(n)),e("div",[r])},sortable:!1},expand:{renderHeader:function(e,t){var n=t.column;return n.label||""},renderCell:function(e,t){var n=t.row,i=t.store,r=["el-table__expand-icon"];i.states.expandRows.indexOf(n)>-1&&r.push("el-table__expand-icon--expanded");var o=function(e){e.stopPropagation(),i.toggleRowExpansion(n)};return e("div",{class:r,on:{click:o}},[e("i",{class:"el-icon el-icon-arrow-right"})])},sortable:!1,resizable:!1,className:"el-table__expand-column"}};function Jr(e,t){var n=t.row,i=t.column,r=t.$index,o=i.property,a=o&&Object(b["getPropByPath"])(n,o).v;return i&&i.formatter?i.formatter(n,i,a,r):a}function Qr(e,t){var n=t.row,i=t.treeNode,r=t.store;if(!i)return null;var o=[],a=function(e){e.stopPropagation(),r.loadOrToggle(n)};if(i.indent&&o.push(e("span",{class:"el-table__indent",style:{"padding-left":i.indent+"px"}})),"boolean"!==typeof i.expanded||i.noLazyChildren)o.push(e("span",{class:"el-table__placeholder"}));else{var s=["el-table__expand-icon",i.expanded?"el-table__expand-icon--expanded":""],l=["el-icon-arrow-right"];i.loading&&(l=["el-icon-loading"]),o.push(e("div",{class:s,on:{click:a}},[e("i",{class:l})]))}return o}var eo=Object.assign||function(e){for(var t=1;t-1}))}}},data:function(){return{isSubColumn:!1,columns:[]}},computed:{owner:function(){var e=this.$parent;while(e&&!e.tableId)e=e.$parent;return e},columnOrTableParent:function(){var e=this.$parent;while(e&&!e.tableId&&!e.columnId)e=e.$parent;return e},realWidth:function(){return nr(this.width)},realMinWidth:function(){return ir(this.minWidth)},realAlign:function(){return this.align?"is-"+this.align:null},realHeaderAlign:function(){return this.headerAlign?"is-"+this.headerAlign:this.realAlign}},methods:{getPropsData:function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i3&&void 0!==arguments[3]?arguments[3]:"-";if(!e)return null;var r=(mo[n]||mo["default"]).parser,o=t||lo[n];return r(e,o,i)},bo=function(e,t,n){if(!e)return null;var i=(mo[n]||mo["default"]).formatter,r=t||lo[n];return i(e,r)},yo=function(e,t){var n=function(e,t){var n=e instanceof Date,i=t instanceof Date;return n&&i?e.getTime()===t.getTime():!n&&!i&&e===t},i=e instanceof Array,r=t instanceof Array;return i&&r?e.length===t.length&&e.every((function(e,i){return n(e,t[i])})):!i&&!r&&n(e,t)},_o=function(e){return"string"===typeof e||e instanceof String},xo=function(e){return null===e||void 0===e||_o(e)||Array.isArray(e)&&2===e.length&&e.every(_o)},wo={mixins:[D.a,so],inject:{elForm:{default:""},elFormItem:{default:""}},props:{size:String,format:String,valueFormat:String,readonly:Boolean,placeholder:String,startPlaceholder:String,endPlaceholder:String,prefixIcon:String,clearIcon:{type:String,default:"el-icon-circle-close"},name:{default:"",validator:xo},disabled:Boolean,clearable:{type:Boolean,default:!0},id:{default:"",validator:xo},popperClass:String,editable:{type:Boolean,default:!0},align:{type:String,default:"left"},value:{},defaultValue:{},defaultTime:{},rangeSeparator:{default:"-"},pickerOptions:{},unlinkPanels:Boolean,validateEvent:{type:Boolean,default:!0}},components:{ElInput:m.a},directives:{Clickoutside:V.a},data:function(){return{pickerVisible:!1,showClose:!1,userInput:null,valueOnOpen:null,unwatchPickerOptions:null}},watch:{pickerVisible:function(e){this.readonly||this.pickerDisabled||(e?(this.showPicker(),this.valueOnOpen=Array.isArray(this.value)?[].concat(this.value):this.value):(this.hidePicker(),this.emitChange(this.value),this.userInput=null,this.validateEvent&&this.dispatch("ElFormItem","el.form.blur"),this.$emit("blur",this),this.blur()))},parsedValue:{immediate:!0,handler:function(e){this.picker&&(this.picker.value=e)}},defaultValue:function(e){this.picker&&(this.picker.defaultValue=e)},value:function(e,t){yo(e,t)||this.pickerVisible||!this.validateEvent||this.dispatch("ElFormItem","el.form.change",e)}},computed:{ranged:function(){return this.type.indexOf("range")>-1},reference:function(){var e=this.$refs.reference;return e.$el||e},refInput:function(){return this.reference?[].slice.call(this.reference.querySelectorAll("input")):[]},valueIsEmpty:function(){var e=this.value;if(Array.isArray(e)){for(var t=0,n=e.length;t0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.userInput=null,e.pickerVisible=e.picker.visible=n,e.emitInput(t),e.picker.resetView&&e.picker.resetView()})),this.picker.$on("select-range",(function(t,n,i){0!==e.refInput.length&&(i&&"min"!==i?"max"===i&&(e.refInput[1].setSelectionRange(t,n),e.refInput[1].focus()):(e.refInput[0].setSelectionRange(t,n),e.refInput[0].focus()))}))},unmountPicker:function(){this.picker&&(this.picker.$destroy(),this.picker.$off(),"function"===typeof this.unwatchPickerOptions&&this.unwatchPickerOptions(),this.picker.$el.parentNode.removeChild(this.picker.$el))},emitChange:function(e){yo(e,this.valueOnOpen)||(this.$emit("change",e),this.valueOnOpen=e,this.validateEvent&&this.dispatch("ElFormItem","el.form.change",e))},emitInput:function(e){var t=this.formatToValue(e);yo(this.value,t)||this.$emit("input",t)},isValidValue:function(e){return this.picker||this.mountPicker(),!this.picker.isValidValue||e&&this.picker.isValidValue(e)}}},Co=wo,ko=s(Co,ro,oo,!1,null,null,null);ko.options.__file="packages/date-picker/src/picker.vue";var So=ko.exports,Oo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-enter":e.handleEnter,"after-leave":e.handleLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-picker__time-header"},[n("span",{staticClass:"el-date-picker__editor-wrap"},[n("el-input",{attrs:{placeholder:e.t("el.datepicker.selectDate"),value:e.visibleDate,size:"small"},on:{input:function(t){return e.userInputDate=t},change:e.handleVisibleDateChange}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleTimePickClose,expression:"handleTimePickClose"}],staticClass:"el-date-picker__editor-wrap"},[n("el-input",{ref:"input",attrs:{placeholder:e.t("el.datepicker.selectTime"),value:e.visibleTime,size:"small"},on:{focus:function(t){e.timePickerVisible=!0},input:function(t){return e.userInputTime=t},change:e.handleVisibleTimeChange}}),n("time-picker",{ref:"timepicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.timePickerVisible},on:{pick:e.handleTimePick,mounted:e.proxyTimePickerDataProperties}})],1)]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:"time"!==e.currentView,expression:"currentView !== 'time'"}],staticClass:"el-date-picker__header",class:{"el-date-picker__header--bordered":"year"===e.currentView||"month"===e.currentView}},[n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevYear")},on:{click:e.prevYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left",attrs:{type:"button","aria-label":e.t("el.datepicker.prevMonth")},on:{click:e.prevMonth}}),n("span",{staticClass:"el-date-picker__header-label",attrs:{role:"button"},on:{click:e.showYearPicker}},[e._v(e._s(e.yearLabel))]),n("span",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-date-picker__header-label",class:{active:"month"===e.currentView},attrs:{role:"button"},on:{click:e.showMonthPicker}},[e._v(e._s(e.t("el.datepicker.month"+(e.month+1))))]),n("button",{staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextYear")},on:{click:e.nextYear}}),n("button",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],staticClass:"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right",attrs:{type:"button","aria-label":e.t("el.datepicker.nextMonth")},on:{click:e.nextMonth}})]),n("div",{staticClass:"el-picker-panel__content"},[n("date-table",{directives:[{name:"show",rawName:"v-show",value:"date"===e.currentView,expression:"currentView === 'date'"}],attrs:{"selection-mode":e.selectionMode,"first-day-of-week":e.firstDayOfWeek,value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"cell-class-name":e.cellClassName,"disabled-date":e.disabledDate},on:{pick:e.handleDatePick}}),n("year-table",{directives:[{name:"show",rawName:"v-show",value:"year"===e.currentView,expression:"currentView === 'year'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleYearPick}}),n("month-table",{directives:[{name:"show",rawName:"v-show",value:"month"===e.currentView,expression:"currentView === 'month'"}],attrs:{value:e.value,"default-value":e.defaultValue?new Date(e.defaultValue):null,date:e.date,"disabled-date":e.disabledDate},on:{pick:e.handleMonthPick}})],1)])],2),n("div",{directives:[{name:"show",rawName:"v-show",value:e.footerVisible&&"date"===e.currentView,expression:"footerVisible && currentView === 'date'"}],staticClass:"el-picker-panel__footer"},[n("el-button",{directives:[{name:"show",rawName:"v-show",value:"dates"!==e.selectionMode,expression:"selectionMode !== 'dates'"}],staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.changeToNow}},[e._v("\n "+e._s(e.t("el.datepicker.now"))+"\n ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini"},on:{click:e.confirm}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1)])])},$o=[];Oo._withStripped=!0;var Do=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-panel__content",class:{"has-seconds":e.showSeconds}},[n("time-spinner",{ref:"spinner",attrs:{"arrow-control":e.useArrow,"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,date:e.date},on:{change:e.handleChange,"select-range":e.setSelectionRange}})],1),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:e.handleCancel}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn",class:{confirm:!e.disabled},attrs:{type:"button"},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},Eo=[];Do._withStripped=!0;var To=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-time-spinner",class:{"has-seconds":e.showSeconds}},[e.arrowControl?e._e():[n("el-scrollbar",{ref:"hours",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("hours")},mousemove:function(t){e.adjustCurrentSpinner("hours")}}},e._l(e.hoursList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.hours,disabled:t},on:{click:function(n){e.handleClick("hours",{value:i,disabled:t})}}},[e._v(e._s(("0"+(e.amPmMode?i%12||12:i)).slice(-2))+e._s(e.amPm(i)))])})),0),n("el-scrollbar",{ref:"minutes",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("minutes")},mousemove:function(t){e.adjustCurrentSpinner("minutes")}}},e._l(e.minutesList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.minutes,disabled:!t},on:{click:function(t){e.handleClick("minutes",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0),n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.showSeconds,expression:"showSeconds"}],ref:"seconds",staticClass:"el-time-spinner__wrapper",attrs:{"wrap-style":"max-height: inherit;","view-class":"el-time-spinner__list",noresize:"",tag:"ul"},nativeOn:{mouseenter:function(t){e.emitSelectRange("seconds")},mousemove:function(t){e.adjustCurrentSpinner("seconds")}}},e._l(60,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:i===e.seconds},on:{click:function(t){e.handleClick("seconds",{value:i,disabled:!1})}}},[e._v(e._s(("0"+i).slice(-2)))])})),0)],e.arrowControl?[n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("hours")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"hours",staticClass:"el-time-spinner__list"},e._l(e.arrowHourList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.hours,disabled:e.hoursList[t]}},[e._v(e._s(void 0===t?"":("0"+(e.amPmMode?t%12||12:t)).slice(-2)+e.amPm(t)))])})),0)]),n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("minutes")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"minutes",staticClass:"el-time-spinner__list"},e._l(e.arrowMinuteList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.minutes}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]),e.showSeconds?n("div",{staticClass:"el-time-spinner__wrapper is-arrow",on:{mouseenter:function(t){e.emitSelectRange("seconds")}}},[n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-time-spinner__arrow el-icon-arrow-up"}),n("i",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-time-spinner__arrow el-icon-arrow-down"}),n("ul",{ref:"seconds",staticClass:"el-time-spinner__list"},e._l(e.arrowSecondList,(function(t,i){return n("li",{key:i,staticClass:"el-time-spinner__item",class:{active:t===e.seconds}},[e._v("\n "+e._s(void 0===t?"":("0"+t).slice(-2))+"\n ")])})),0)]):e._e()]:e._e()],2)},Po=[];To._withStripped=!0;var Mo={components:{ElScrollbar:q.a},directives:{repeatClick:Nt},props:{date:{},defaultValue:{},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:String,default:""}},computed:{hours:function(){return this.date.getHours()},minutes:function(){return this.date.getMinutes()},seconds:function(){return this.date.getSeconds()},hoursList:function(){return Object(ao["getRangeHours"])(this.selectableRange)},minutesList:function(){return Object(ao["getRangeMinutes"])(this.selectableRange,this.hours)},arrowHourList:function(){var e=this.hours;return[e>0?e-1:void 0,e,e<23?e+1:void 0]},arrowMinuteList:function(){var e=this.minutes;return[e>0?e-1:void 0,e,e<59?e+1:void 0]},arrowSecondList:function(){var e=this.seconds;return[e>0?e-1:void 0,e,e<59?e+1:void 0]}},data:function(){return{selectableRange:[],currentScrollbar:null}},mounted:function(){var e=this;this.$nextTick((function(){!e.arrowControl&&e.bindScrollEvent()}))},methods:{increase:function(){this.scrollDown(1)},decrease:function(){this.scrollDown(-1)},modifyDateField:function(e,t){switch(e){case"hours":this.$emit("change",Object(ao["modifyTime"])(this.date,t,this.minutes,this.seconds));break;case"minutes":this.$emit("change",Object(ao["modifyTime"])(this.date,this.hours,t,this.seconds));break;case"seconds":this.$emit("change",Object(ao["modifyTime"])(this.date,this.hours,this.minutes,t));break}},handleClick:function(e,t){var n=t.value,i=t.disabled;i||(this.modifyDateField(e,n),this.emitSelectRange(e),this.adjustSpinner(e,n))},emitSelectRange:function(e){"hours"===e?this.$emit("select-range",0,2):"minutes"===e?this.$emit("select-range",3,5):"seconds"===e&&this.$emit("select-range",6,8),this.currentScrollbar=e},bindScrollEvent:function(){var e=this,t=function(t){e.$refs[t].wrap.onscroll=function(n){e.handleScroll(t,n)}};t("hours"),t("minutes"),t("seconds")},handleScroll:function(e){var t=Math.min(Math.round((this.$refs[e].wrap.scrollTop-(.5*this.scrollBarHeight(e)-10)/this.typeItemHeight(e)+3)/this.typeItemHeight(e)),"hours"===e?23:59);this.modifyDateField(e,t)},adjustSpinners:function(){this.adjustSpinner("hours",this.hours),this.adjustSpinner("minutes",this.minutes),this.adjustSpinner("seconds",this.seconds)},adjustCurrentSpinner:function(e){this.adjustSpinner(e,this[e])},adjustSpinner:function(e,t){if(!this.arrowControl){var n=this.$refs[e].wrap;n&&(n.scrollTop=Math.max(0,t*this.typeItemHeight(e)))}},scrollDown:function(e){this.currentScrollbar||this.emitSelectRange("hours");var t=this.currentScrollbar,n=this.hoursList,i=this[t];if("hours"===this.currentScrollbar){var r=Math.abs(e);e=e>0?1:-1;var o=n.length;while(o--&&r)i=(i+e+n.length)%n.length,n[i]||r--;if(n[i])return}else i=(i+e+60)%60;this.modifyDateField(t,i),this.adjustSpinner(t,i)},amPm:function(e){var t="a"===this.amPmMode.toLowerCase();if(!t)return"";var n="A"===this.amPmMode,i=e<12?" am":" pm";return n&&(i=i.toUpperCase()),i},typeItemHeight:function(e){return this.$refs[e].$el.querySelector("li").offsetHeight},scrollBarHeight:function(e){return this.$refs[e].$el.offsetHeight}}},Io=Mo,No=s(Io,To,Po,!1,null,null,null);No.options.__file="packages/date-picker/src/basic/time-spinner.vue";var jo=No.exports,Ao={mixins:[g.a],components:{TimeSpinner:jo},props:{visible:Boolean,timeArrowControl:Boolean},watch:{visible:function(e){var t=this;e?(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.spinner.emitSelectRange("hours")}))):this.needInitAdjust=!0},value:function(e){var t=this,n=void 0;e instanceof Date?n=Object(ao["limitTimeRange"])(e,this.selectableRange,this.format):e||(n=this.defaultValue?new Date(this.defaultValue):new Date),this.date=n,this.visible&&this.needInitAdjust&&(this.$nextTick((function(e){return t.adjustSpinners()})),this.needInitAdjust=!1)},selectableRange:function(e){this.$refs.spinner.selectableRange=e},defaultValue:function(e){Object(ao["isDate"])(this.value)||(this.date=e?new Date(e):new Date)}},data:function(){return{popperClass:"",format:"HH:mm:ss",value:"",defaultValue:null,date:new Date,oldValue:new Date,selectableRange:[],selectionRange:[0,2],disabled:!1,arrowControl:!1,needInitAdjust:!0}},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},useArrow:function(){return this.arrowControl||this.timeArrowControl||!1},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},methods:{handleCancel:function(){this.$emit("pick",this.oldValue,!1)},handleChange:function(e){this.visible&&(this.date=Object(ao["clearMilliseconds"])(e),this.isValidValue(this.date)&&this.$emit("pick",this.date,!0))},setSelectionRange:function(e,t){this.$emit("select-range",e,t),this.selectionRange=[e,t]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments[1];if(!t){var n=Object(ao["clearMilliseconds"])(Object(ao["limitTimeRange"])(this.date,this.selectableRange,this.format));this.$emit("pick",n,e,t)}},handleKeydown:function(e){var t=e.keyCode,n={38:-1,40:1,37:-1,39:1};if(37===t||39===t){var i=n[t];return this.changeSelectionRange(i),void e.preventDefault()}if(38===t||40===t){var r=n[t];return this.$refs.spinner.scrollDown(r),void e.preventDefault()}},isValidValue:function(e){return Object(ao["timeWithinRange"])(e,this.selectableRange,this.format)},adjustSpinners:function(){return this.$refs.spinner.adjustSpinners()},changeSelectionRange:function(e){var t=[0,3].concat(this.showSeconds?[6]:[]),n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length;this.$refs.spinner.emitSelectRange(n[r])}},mounted:function(){var e=this;this.$nextTick((function(){return e.handleConfirm(!0,!0)})),this.$emit("mounted")}},Fo=Ao,Lo=s(Fo,Do,Eo,!1,null,null,null);Lo.options.__file="packages/date-picker/src/panel/time.vue";var Vo=Lo.exports,zo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-year-table",on:{click:e.handleYearTableClick}},[n("tbody",[n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+0)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+1)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+1))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+2)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+2))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+3)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+3))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+4)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+4))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+5)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+5))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+6)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+6))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+7)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+7))])])]),n("tr",[n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+8)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+8))])]),n("td",{staticClass:"available",class:e.getCellStyle(e.startYear+9)},[n("a",{staticClass:"cell"},[e._v(e._s(e.startYear+9))])]),n("td"),n("td")])])])},Bo=[];zo._withStripped=!0;var Ro=function(e){var t=Object(ao["getDayCountOfYear"])(e),n=new Date(e,0,1);return Object(ao["range"])(t).map((function(e){return Object(ao["nextDate"])(n,e)}))},Ho={props:{disabledDate:{},value:{},defaultValue:{validator:function(e){return null===e||e instanceof Date&&Object(ao["isDate"])(e)}},date:{}},computed:{startYear:function(){return 10*Math.floor(this.date.getFullYear()/10)}},methods:{getCellStyle:function(e){var t={},n=new Date;return t.disabled="function"===typeof this.disabledDate&&Ro(e).every(this.disabledDate),t.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(t){return t.getFullYear()===e}))>=0,t.today=n.getFullYear()===e,t.default=this.defaultValue&&this.defaultValue.getFullYear()===e,t},handleYearTableClick:function(e){var t=e.target;if("A"===t.tagName){if(Object(Le["hasClass"])(t.parentNode,"disabled"))return;var n=t.textContent||t.innerText;this.$emit("pick",Number(n))}}}},Wo=Ho,qo=s(Wo,zo,Bo,!1,null,null,null);qo.options.__file="packages/date-picker/src/basic/year-table.vue";var Uo=qo.exports,Yo=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-month-table",on:{click:e.handleMonthTableClick,mousemove:e.handleMouseMove}},[n("tbody",e._l(e.rows,(function(t,i){return n("tr",{key:i},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellStyle(t)},[n("div",[n("a",{staticClass:"cell"},[e._v(e._s(e.t("el.datepicker.months."+e.months[t.text])))])])])})),0)})),0)])},Ko=[];Yo._withStripped=!0;var Go=function(e,t){var n=Object(ao["getDayCountOfMonth"])(e,t),i=new Date(e,t,1);return Object(ao["range"])(n).map((function(e){return Object(ao["nextDate"])(i,e)}))},Xo=function(e){return new Date(e.getFullYear(),e.getMonth())},Zo=function(e){return"number"===typeof e||"string"===typeof e?Xo(new Date(e)).getTime():e instanceof Date?Xo(e).getTime():NaN},Jo={props:{disabledDate:{},value:{},selectionMode:{default:"month"},minDate:{},maxDate:{},defaultValue:{validator:function(e){return null===e||Object(ao["isDate"])(e)||Array.isArray(e)&&e.every(ao["isDate"])}},date:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},mixins:[g.a],watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){Zo(e)!==Zo(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){Zo(e)!==Zo(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{months:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tableRows:[[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.date.getFullYear()===n.getFullYear()&&Number(e.text)===n.getMonth()},getCellStyle:function(e){var t=this,n={},i=this.date.getFullYear(),r=new Date,o=e.text,a=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[];return n.disabled="function"===typeof this.disabledDate&&Go(i,o).every(this.disabledDate),n.current=Object(b["arrayFindIndex"])(Object(b["coerceTruthyValueToArray"])(this.value),(function(e){return e.getFullYear()===i&&e.getMonth()===o}))>=0,n.today=r.getFullYear()===i&&r.getMonth()===o,n.default=a.some((function(n){return t.cellMatchesDate(e,n)})),e.inRange&&(n["in-range"]=!0,e.start&&(n["start-date"]=!0),e.end&&(n["end-date"]=!0)),n},getMonthOfCell:function(e){var t=this.date.getFullYear();return new Date(t,e,1)},markRange:function(e,t){e=Zo(e),t=Zo(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.rows,r=0,o=i.length;r=e&&d<=t,c.start=e&&d===e,c.end=t&&d===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getMonthOfCell(4*n+i)}}))}}},handleMonthTableClick:function(e){var t=e.target;if("A"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName&&!Object(Le["hasClass"])(t,"disabled")){var n=t.cellIndex,i=t.parentNode.rowIndex,r=4*i+n,o=this.getMonthOfCell(r);"range"===this.selectionMode?this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0):this.$emit("pick",r)}}},computed:{rows:function(){for(var e=this,t=this.tableRows,n=this.disabledDate,i=[],r=Zo(new Date),o=0;o<3;o++)for(var a=t[o],s=function(t){var s=a[t];s||(s={row:o,column:t,type:"normal",inRange:!1,start:!1,end:!1}),s.type="normal";var l=4*o+t,c=new Date(e.date.getFullYear(),l).getTime();s.inRange=c>=Zo(e.minDate)&&c<=Zo(e.maxDate),s.start=e.minDate&&c===Zo(e.minDate),s.end=e.maxDate&&c===Zo(e.maxDate);var u=c===r;u&&(s.type="today"),s.text=l;var d=new Date(c);s.disabled="function"===typeof n&&n(d),s.selected=Object(b["arrayFind"])(i,(function(e){return e.getTime()===d.getTime()})),e.$set(a,t,s)},l=0;l<4;l++)s(l);return t}}},Qo=Jo,ea=s(Qo,Yo,Ko,!1,null,null,null);ea.options.__file="packages/date-picker/src/basic/month-table.vue";var ta=ea.exports,na=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("table",{staticClass:"el-date-table",class:{"is-week-mode":"week"===e.selectionMode},attrs:{cellspacing:"0",cellpadding:"0"},on:{click:e.handleClick,mousemove:e.handleMouseMove}},[n("tbody",[n("tr",[e.showWeekNumber?n("th",[e._v(e._s(e.t("el.datepicker.week")))]):e._e(),e._l(e.WEEKS,(function(t,i){return n("th",{key:i},[e._v(e._s(e.t("el.datepicker.weeks."+t)))])}))],2),e._l(e.rows,(function(t,i){return n("tr",{key:i,staticClass:"el-date-table__row",class:{current:e.isWeekActive(t[1])}},e._l(t,(function(t,i){return n("td",{key:i,class:e.getCellClasses(t)},[n("div",[n("span",[e._v("\n "+e._s(t.text)+"\n ")])])])})),0)}))],2)])},ia=[];na._withStripped=!0;var ra=["sun","mon","tue","wed","thu","fri","sat"],oa=function(e){return"number"===typeof e||"string"===typeof e?Object(ao["clearTime"])(new Date(e)).getTime():e instanceof Date?Object(ao["clearTime"])(e).getTime():NaN},aa=function(e,t){var n="function"===typeof t?Object(b["arrayFindIndex"])(e,t):e.indexOf(t);return n>=0?[].concat(e.slice(0,n),e.slice(n+1)):e},sa={mixins:[g.a],props:{firstDayOfWeek:{default:7,type:Number,validator:function(e){return e>=1&&e<=7}},value:{},defaultValue:{validator:function(e){return null===e||Object(ao["isDate"])(e)||Array.isArray(e)&&e.every(ao["isDate"])}},date:{},selectionMode:{default:"day"},showWeekNumber:{type:Boolean,default:!1},disabledDate:{},cellClassName:{},minDate:{},maxDate:{},rangeState:{default:function(){return{endDate:null,selecting:!1}}}},computed:{offsetDay:function(){var e=this.firstDayOfWeek;return e>3?7-e:-e},WEEKS:function(){var e=this.firstDayOfWeek;return ra.concat(ra).slice(e,e+7)},year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},startDate:function(){return Object(ao["getStartDateOfMonth"])(this.year,this.month)},rows:function(){var e=this,t=new Date(this.year,this.month,1),n=Object(ao["getFirstDayOfMonth"])(t),i=Object(ao["getDayCountOfMonth"])(t.getFullYear(),t.getMonth()),r=Object(ao["getDayCountOfMonth"])(t.getFullYear(),0===t.getMonth()?11:t.getMonth()-1);n=0===n?7:n;for(var o=this.offsetDay,a=this.tableRows,s=1,l=this.startDate,c=this.disabledDate,u=this.cellClassName,d="dates"===this.selectionMode?Object(b["coerceTruthyValueToArray"])(this.value):[],h=oa(new Date),f=0;f<6;f++){var p=a[f];this.showWeekNumber&&(p[0]||(p[0]={type:"week",text:Object(ao["getWeekNumber"])(Object(ao["nextDate"])(l,7*f+1))}));for(var m=function(t){var a=p[e.showWeekNumber?t+1:t];a||(a={row:f,column:t,type:"normal",inRange:!1,start:!1,end:!1}),a.type="normal";var m=7*f+t,v=Object(ao["nextDate"])(l,m-o).getTime();a.inRange=v>=oa(e.minDate)&&v<=oa(e.maxDate),a.start=e.minDate&&v===oa(e.minDate),a.end=e.maxDate&&v===oa(e.maxDate);var g=v===h;if(g&&(a.type="today"),f>=0&&f<=1){var y=n+o<0?7+n+o:n+o;t+7*f>=y?a.text=s++:(a.text=r-(y-t%7)+1+7*f,a.type="prev-month")}else s<=i?a.text=s++:(a.text=s++-i,a.type="next-month");var _=new Date(v);a.disabled="function"===typeof c&&c(_),a.selected=Object(b["arrayFind"])(d,(function(e){return e.getTime()===_.getTime()})),a.customClass="function"===typeof u&&u(_),e.$set(p,e.showWeekNumber?t+1:t,a)},v=0;v<7;v++)m(v);if("week"===this.selectionMode){var g=this.showWeekNumber?1:0,y=this.showWeekNumber?7:6,_=this.isWeekActive(p[g+1]);p[g].inRange=_,p[g].start=_,p[y].inRange=_,p[y].end=_}}return a}},watch:{"rangeState.endDate":function(e){this.markRange(this.minDate,e)},minDate:function(e,t){oa(e)!==oa(t)&&this.markRange(this.minDate,this.maxDate)},maxDate:function(e,t){oa(e)!==oa(t)&&this.markRange(this.minDate,this.maxDate)}},data:function(){return{tableRows:[[],[],[],[],[],[]],lastRow:null,lastColumn:null}},methods:{cellMatchesDate:function(e,t){var n=new Date(t);return this.year===n.getFullYear()&&this.month===n.getMonth()&&Number(e.text)===n.getDate()},getCellClasses:function(e){var t=this,n=this.selectionMode,i=this.defaultValue?Array.isArray(this.defaultValue)?this.defaultValue:[this.defaultValue]:[],r=[];return"normal"!==e.type&&"today"!==e.type||e.disabled?r.push(e.type):(r.push("available"),"today"===e.type&&r.push("today")),"normal"===e.type&&i.some((function(n){return t.cellMatchesDate(e,n)}))&&r.push("default"),"day"!==n||"normal"!==e.type&&"today"!==e.type||!this.cellMatchesDate(e,this.value)||r.push("current"),!e.inRange||"normal"!==e.type&&"today"!==e.type&&"week"!==this.selectionMode||(r.push("in-range"),e.start&&r.push("start-date"),e.end&&r.push("end-date")),e.disabled&&r.push("disabled"),e.selected&&r.push("selected"),e.customClass&&r.push(e.customClass),r.join(" ")},getDateOfCell:function(e,t){var n=7*e+(t-(this.showWeekNumber?1:0))-this.offsetDay;return Object(ao["nextDate"])(this.startDate,n)},isWeekActive:function(e){if("week"!==this.selectionMode)return!1;var t=new Date(this.year,this.month,1),n=t.getFullYear(),i=t.getMonth();if("prev-month"===e.type&&(t.setMonth(0===i?11:i-1),t.setFullYear(0===i?n-1:n)),"next-month"===e.type&&(t.setMonth(11===i?0:i+1),t.setFullYear(11===i?n+1:n)),t.setDate(parseInt(e.text,10)),Object(ao["isDate"])(this.value)){var r=(this.value.getDay()-this.firstDayOfWeek+7)%7-1,o=Object(ao["prevDate"])(this.value,r);return o.getTime()===t.getTime()}return!1},markRange:function(e,t){e=oa(e),t=oa(t)||e;var n=[Math.min(e,t),Math.max(e,t)];e=n[0],t=n[1];for(var i=this.startDate,r=this.rows,o=0,a=r.length;o=e&&h<=t,u.start=e&&h===e,u.end=t&&h===t}},handleMouseMove:function(e){if(this.rangeState.selecting){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i=t.cellIndex;this.rows[n][i].disabled||n===this.lastRow&&i===this.lastColumn||(this.lastRow=n,this.lastColumn=i,this.$emit("changerange",{minDate:this.minDate,maxDate:this.maxDate,rangeState:{selecting:!0,endDate:this.getDateOfCell(n,i)}}))}}},handleClick:function(e){var t=e.target;if("SPAN"===t.tagName&&(t=t.parentNode.parentNode),"DIV"===t.tagName&&(t=t.parentNode),"TD"===t.tagName){var n=t.parentNode.rowIndex-1,i="week"===this.selectionMode?1:t.cellIndex,r=this.rows[n][i];if(!r.disabled&&"week"!==r.type){var o=this.getDateOfCell(n,i);if("range"===this.selectionMode)this.rangeState.selecting?(o>=this.minDate?this.$emit("pick",{minDate:this.minDate,maxDate:o}):this.$emit("pick",{minDate:o,maxDate:this.minDate}),this.rangeState.selecting=!1):(this.$emit("pick",{minDate:o,maxDate:null}),this.rangeState.selecting=!0);else if("day"===this.selectionMode)this.$emit("pick",o);else if("week"===this.selectionMode){var a=Object(ao["getWeekNumber"])(o),s=o.getFullYear()+"w"+a;this.$emit("pick",{year:o.getFullYear(),week:a,value:s,date:o})}else if("dates"===this.selectionMode){var l=this.value||[],c=r.selected?aa(l,(function(e){return e.getTime()===o.getTime()})):[].concat(l,[o]);this.$emit("pick",c)}}}}}},la=sa,ca=s(la,na,ia,!1,null,null,null);ca.options.__file="packages/date-picker/src/basic/date-table.vue";var ua=ca.exports,da={mixins:[g.a],directives:{Clickoutside:V.a},watch:{showTime:function(e){var t=this;e&&this.$nextTick((function(e){var n=t.$refs.input.$el;n&&(t.pickerWidth=n.getBoundingClientRect().width+10)}))},value:function(e){"dates"===this.selectionMode&&this.value||(Object(ao["isDate"])(e)?this.date=new Date(e):this.date=this.getDefaultValue())},defaultValue:function(e){Object(ao["isDate"])(this.value)||(this.date=e?new Date(e):new Date)},timePickerVisible:function(e){var t=this;e&&this.$nextTick((function(){return t.$refs.timepicker.adjustSpinners()}))},selectionMode:function(e){"month"===e?"year"===this.currentView&&"month"===this.currentView||(this.currentView="month"):"dates"===e&&(this.currentView="date")}},methods:{proxyTimePickerDataProperties:function(){var e=this,t=function(t){e.$refs.timepicker.format=t},n=function(t){e.$refs.timepicker.value=t},i=function(t){e.$refs.timepicker.date=t},r=function(t){e.$refs.timepicker.selectableRange=t};this.$watch("value",n),this.$watch("date",i),this.$watch("selectableRange",r),t(this.timeFormat),n(this.value),i(this.date),r(this.selectableRange)},handleClear:function(){this.date=this.getDefaultValue(),this.$emit("pick",null)},emit:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r0)||Object(ao["timeWithinRange"])(e,this.selectableRange,this.format||"HH:mm:ss")}},components:{TimePicker:Vo,YearTable:Uo,MonthTable:ta,DateTable:ua,ElInput:m.a,ElButton:ae.a},data:function(){return{popperClass:"",date:new Date,value:"",defaultValue:null,defaultTime:null,showTime:!1,selectionMode:"day",shortcuts:"",visible:!1,currentView:"date",disabledDate:"",cellClassName:"",selectableRange:[],firstDayOfWeek:7,showWeekNumber:!1,timePickerVisible:!1,format:"",arrowControl:!1,userInputDate:null,userInputTime:null}},computed:{year:function(){return this.date.getFullYear()},month:function(){return this.date.getMonth()},week:function(){return Object(ao["getWeekNumber"])(this.date)},monthDate:function(){return this.date.getDate()},footerVisible:function(){return this.showTime||"dates"===this.selectionMode},visibleTime:function(){return null!==this.userInputTime?this.userInputTime:Object(ao["formatDate"])(this.value||this.defaultValue,this.timeFormat)},visibleDate:function(){return null!==this.userInputDate?this.userInputDate:Object(ao["formatDate"])(this.value||this.defaultValue,this.dateFormat)},yearLabel:function(){var e=this.t("el.datepicker.year");if("year"===this.currentView){var t=10*Math.floor(this.year/10);return e?t+" "+e+" - "+(t+9)+" "+e:t+" - "+(t+9)}return this.year+" "+e},timeFormat:function(){return this.format?Object(ao["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ao["extractDateFormat"])(this.format):"yyyy-MM-dd"}}},ha=da,fa=s(ha,Oo,$o,!1,null,null,null);fa.options.__file="packages/date-picker/src/panel/date.vue";var pa=fa.exports,ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts,"has-time":e.showTime},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[e.showTime?n("div",{staticClass:"el-date-range-picker__time-header"},[n("span",{staticClass:"el-date-range-picker__editors-wrap"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{ref:"minInput",staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startDate"),value:e.minVisibleDate},on:{input:function(t){return e.handleDateInput(t,"min")},change:function(t){return e.handleDateChange(t,"min")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMinTimeClose,expression:"handleMinTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.startTime"),value:e.minVisibleTime},on:{focus:function(t){e.minTimePickerVisible=!0},input:function(t){return e.handleTimeInput(t,"min")},change:function(t){return e.handleTimeChange(t,"min")}}}),n("time-picker",{ref:"minTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.minTimePickerVisible},on:{pick:e.handleMinTimePick,mounted:function(t){e.$refs.minTimePicker.format=e.timeFormat}}})],1)]),n("span",{staticClass:"el-icon-arrow-right"}),n("span",{staticClass:"el-date-range-picker__editors-wrap is-right"},[n("span",{staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endDate"),value:e.maxVisibleDate,readonly:!e.minDate},on:{input:function(t){return e.handleDateInput(t,"max")},change:function(t){return e.handleDateChange(t,"max")}}})],1),n("span",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleMaxTimeClose,expression:"handleMaxTimeClose"}],staticClass:"el-date-range-picker__time-picker-wrap"},[n("el-input",{staticClass:"el-date-range-picker__editor",attrs:{size:"small",disabled:e.rangeState.selecting,placeholder:e.t("el.datepicker.endTime"),value:e.maxVisibleTime,readonly:!e.minDate},on:{focus:function(t){e.minDate&&(e.maxTimePickerVisible=!0)},input:function(t){return e.handleTimeInput(t,"max")},change:function(t){return e.handleTimeChange(t,"max")}}}),n("time-picker",{ref:"maxTimePicker",attrs:{"time-arrow-control":e.arrowControl,visible:e.maxTimePickerVisible},on:{pick:e.handleMaxTimePick,mounted:function(t){e.$refs.maxTimePicker.format=e.timeFormat}}})],1)])]):e._e(),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevMonth}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.leftNextMonth}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-left",class:{"is-disabled":!e.enableMonthArrow},attrs:{type:"button",disabled:!e.enableMonthArrow},on:{click:e.rightPrevMonth}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-arrow-right",attrs:{type:"button"},on:{click:e.rightNextMonth}}),n("div",[e._v(e._s(e.rightLabel))])]),n("date-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate,"cell-class-name":e.cellClassName,"first-day-of-week":e.firstDayOfWeek},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2),e.showTime?n("div",{staticClass:"el-picker-panel__footer"},[n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{size:"mini",type:"text"},on:{click:e.handleClear}},[e._v("\n "+e._s(e.t("el.datepicker.clear"))+"\n ")]),n("el-button",{staticClass:"el-picker-panel__link-btn",attrs:{plain:"",size:"mini",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm(!1)}}},[e._v("\n "+e._s(e.t("el.datepicker.confirm"))+"\n ")])],1):e._e()])])},va=[];ma._withStripped=!0;var ga=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ao["nextDate"])(new Date(e),1)]:[new Date,Object(ao["nextDate"])(new Date,1)]},ba={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.leftDate.getMonth()+1))},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")+" "+this.t("el.datepicker.month"+(this.rightDate.getMonth()+1))},leftYear:function(){return this.leftDate.getFullYear()},leftMonth:function(){return this.leftDate.getMonth()},leftMonthDate:function(){return this.leftDate.getDate()},rightYear:function(){return this.rightDate.getFullYear()},rightMonth:function(){return this.rightDate.getMonth()},rightMonthDate:function(){return this.rightDate.getDate()},minVisibleDate:function(){return null!==this.dateUserInput.min?this.dateUserInput.min:this.minDate?Object(ao["formatDate"])(this.minDate,this.dateFormat):""},maxVisibleDate:function(){return null!==this.dateUserInput.max?this.dateUserInput.max:this.maxDate||this.minDate?Object(ao["formatDate"])(this.maxDate||this.minDate,this.dateFormat):""},minVisibleTime:function(){return null!==this.timeUserInput.min?this.timeUserInput.min:this.minDate?Object(ao["formatDate"])(this.minDate,this.timeFormat):""},maxVisibleTime:function(){return null!==this.timeUserInput.max?this.timeUserInput.max:this.maxDate||this.minDate?Object(ao["formatDate"])(this.maxDate||this.minDate,this.timeFormat):""},timeFormat:function(){return this.format?Object(ao["extractTimeFormat"])(this.format):"HH:mm:ss"},dateFormat:function(){return this.format?Object(ao["extractDateFormat"])(this.format):"yyyy-MM-dd"},enableMonthArrow:function(){var e=(this.leftMonth+1)%12,t=this.leftMonth+1>=12?1:0;return this.unlinkPanels&&new Date(this.leftYear+t,e)=12}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ao["nextMonth"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},showTime:!1,shortcuts:"",visible:"",disabledDate:"",cellClassName:"",firstDayOfWeek:7,minTimePickerVisible:!1,maxTimePickerVisible:!1,format:"",arrowControl:!1,unlinkPanels:!1,dateUserInput:{min:null,max:null},timeUserInput:{min:null,max:null}}},watch:{minDate:function(e){var t=this;this.dateUserInput.min=null,this.timeUserInput.min=null,this.$nextTick((function(){if(t.$refs.maxTimePicker&&t.maxDate&&t.maxDatethis.maxDate&&(this.maxDate=this.minDate)):(this.maxDate=Object(ao["modifyDate"])(this.maxDate,n.getFullYear(),n.getMonth(),n.getDate()),this.maxDatethis.maxDate&&(this.maxDate=this.minDate),this.$refs.minTimePicker.value=this.minDate,this.minTimePickerVisible=!1):(this.maxDate=Object(ao["modifyTime"])(this.maxDate,n.getHours(),n.getMinutes(),n.getSeconds()),this.maxDate1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(ao["modifyWithTimeString"])(e.minDate,i[0]),o=Object(ao["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&!this.showTime&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},handleMinTimePick:function(e,t,n){this.minDate=this.minDate||new Date,e&&(this.minDate=Object(ao["modifyTime"])(this.minDate,e.getHours(),e.getMinutes(),e.getSeconds())),n||(this.minTimePickerVisible=t),(!this.maxDate||this.maxDate&&this.maxDate.getTime()this.maxDate.getTime()&&(this.minDate=new Date(this.maxDate))},handleMaxTimeClose:function(){this.maxTimePickerVisible=!1},leftPrevYear:function(){this.leftDate=Object(ao["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["nextMonth"])(this.leftDate))},leftPrevMonth:function(){this.leftDate=Object(ao["prevMonth"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["nextMonth"])(this.leftDate))},rightNextYear:function(){this.unlinkPanels?this.rightDate=Object(ao["nextYear"])(this.rightDate):(this.leftDate=Object(ao["nextYear"])(this.leftDate),this.rightDate=Object(ao["nextMonth"])(this.leftDate))},rightNextMonth:function(){this.unlinkPanels?this.rightDate=Object(ao["nextMonth"])(this.rightDate):(this.leftDate=Object(ao["nextMonth"])(this.leftDate),this.rightDate=Object(ao["nextMonth"])(this.leftDate))},leftNextYear:function(){this.leftDate=Object(ao["nextYear"])(this.leftDate)},leftNextMonth:function(){this.leftDate=Object(ao["nextMonth"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ao["prevYear"])(this.rightDate)},rightPrevMonth:function(){this.rightDate=Object(ao["prevMonth"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ao["isDate"])(e[0])&&Object(ao["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{TimePicker:Vo,DateTable:ua,ElInput:m.a,ElButton:ae.a}},ya=ba,_a=s(ya,ma,va,!1,null,null,null);_a.options.__file="packages/date-picker/src/panel/date-range.vue";var xa=_a.exports,wa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-picker-panel el-date-range-picker el-popper",class:[{"has-sidebar":e.$slots.sidebar||e.shortcuts},e.popperClass]},[n("div",{staticClass:"el-picker-panel__body-wrapper"},[e._t("sidebar"),e.shortcuts?n("div",{staticClass:"el-picker-panel__sidebar"},e._l(e.shortcuts,(function(t,i){return n("button",{key:i,staticClass:"el-picker-panel__shortcut",attrs:{type:"button"},on:{click:function(n){e.handleShortcutClick(t)}}},[e._v(e._s(t.text))])})),0):e._e(),n("div",{staticClass:"el-picker-panel__body"},[n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-left"},[n("div",{staticClass:"el-date-range-picker__header"},[n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",attrs:{type:"button"},on:{click:e.leftPrevYear}}),e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.leftNextYear}}):e._e(),n("div",[e._v(e._s(e.leftLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.leftDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1),n("div",{staticClass:"el-picker-panel__content el-date-range-picker__content is-right"},[n("div",{staticClass:"el-date-range-picker__header"},[e.unlinkPanels?n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-left",class:{"is-disabled":!e.enableYearArrow},attrs:{type:"button",disabled:!e.enableYearArrow},on:{click:e.rightPrevYear}}):e._e(),n("button",{staticClass:"el-picker-panel__icon-btn el-icon-d-arrow-right",attrs:{type:"button"},on:{click:e.rightNextYear}}),n("div",[e._v(e._s(e.rightLabel))])]),n("month-table",{attrs:{"selection-mode":"range",date:e.rightDate,"default-value":e.defaultValue,"min-date":e.minDate,"max-date":e.maxDate,"range-state":e.rangeState,"disabled-date":e.disabledDate},on:{changerange:e.handleChangeRange,pick:e.handleRangePick}})],1)])],2)])])},Ca=[];wa._withStripped=!0;var ka=function(e){return Array.isArray(e)?[new Date(e[0]),new Date(e[1])]:e?[new Date(e),Object(ao["nextMonth"])(new Date(e))]:[new Date,Object(ao["nextMonth"])(new Date)]},Sa={mixins:[g.a],directives:{Clickoutside:V.a},computed:{btnDisabled:function(){return!(this.minDate&&this.maxDate&&!this.selecting&&this.isValidValue([this.minDate,this.maxDate]))},leftLabel:function(){return this.leftDate.getFullYear()+" "+this.t("el.datepicker.year")},rightLabel:function(){return this.rightDate.getFullYear()+" "+this.t("el.datepicker.year")},leftYear:function(){return this.leftDate.getFullYear()},rightYear:function(){return this.rightDate.getFullYear()===this.leftDate.getFullYear()?this.leftDate.getFullYear()+1:this.rightDate.getFullYear()},enableYearArrow:function(){return this.unlinkPanels&&this.rightYear>this.leftYear+1}},data:function(){return{popperClass:"",value:[],defaultValue:null,defaultTime:null,minDate:"",maxDate:"",leftDate:new Date,rightDate:Object(ao["nextYear"])(new Date),rangeState:{endDate:null,selecting:!1,row:null,column:null},shortcuts:"",visible:"",disabledDate:"",format:"",arrowControl:!1,unlinkPanels:!1}},watch:{value:function(e){if(e){if(Array.isArray(e))if(this.minDate=Object(ao["isDate"])(e[0])?new Date(e[0]):null,this.maxDate=Object(ao["isDate"])(e[1])?new Date(e[1]):null,this.minDate)if(this.leftDate=this.minDate,this.unlinkPanels&&this.maxDate){var t=this.minDate.getFullYear(),n=this.maxDate.getFullYear();this.rightDate=t===n?Object(ao["nextYear"])(this.maxDate):this.maxDate}else this.rightDate=Object(ao["nextYear"])(this.leftDate);else this.leftDate=ka(this.defaultValue)[0],this.rightDate=Object(ao["nextYear"])(this.leftDate)}else this.minDate=null,this.maxDate=null},defaultValue:function(e){if(!Array.isArray(this.value)){var t=ka(e),n=t[0],i=t[1];this.leftDate=n,this.rightDate=e&&e[1]&&n.getFullYear()!==i.getFullYear()&&this.unlinkPanels?i:Object(ao["nextYear"])(this.leftDate)}}},methods:{handleClear:function(){this.minDate=null,this.maxDate=null,this.leftDate=ka(this.defaultValue)[0],this.rightDate=Object(ao["nextYear"])(this.leftDate),this.$emit("pick",null)},handleChangeRange:function(e){this.minDate=e.minDate,this.maxDate=e.maxDate,this.rangeState=e.rangeState},handleRangePick:function(e){var t=this,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.defaultTime||[],r=Object(ao["modifyWithTimeString"])(e.minDate,i[0]),o=Object(ao["modifyWithTimeString"])(e.maxDate,i[1]);this.maxDate===o&&this.minDate===r||(this.onPick&&this.onPick(e),this.maxDate=o,this.minDate=r,setTimeout((function(){t.maxDate=o,t.minDate=r}),10),n&&this.handleConfirm())},handleShortcutClick:function(e){e.onClick&&e.onClick(this)},leftPrevYear:function(){this.leftDate=Object(ao["prevYear"])(this.leftDate),this.unlinkPanels||(this.rightDate=Object(ao["prevYear"])(this.rightDate))},rightNextYear:function(){this.unlinkPanels||(this.leftDate=Object(ao["nextYear"])(this.leftDate)),this.rightDate=Object(ao["nextYear"])(this.rightDate)},leftNextYear:function(){this.leftDate=Object(ao["nextYear"])(this.leftDate)},rightPrevYear:function(){this.rightDate=Object(ao["prevYear"])(this.rightDate)},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.isValidValue([this.minDate,this.maxDate])&&this.$emit("pick",[this.minDate,this.maxDate],e)},isValidValue:function(e){return Array.isArray(e)&&e&&e[0]&&e[1]&&Object(ao["isDate"])(e[0])&&Object(ao["isDate"])(e[1])&&e[0].getTime()<=e[1].getTime()&&("function"!==typeof this.disabledDate||!this.disabledDate(e[0])&&!this.disabledDate(e[1]))},resetView:function(){this.minDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[0]):null,this.maxDate=this.value&&Object(ao["isDate"])(this.value[0])?new Date(this.value[1]):null}},components:{MonthTable:ta,ElInput:m.a,ElButton:ae.a}},Oa=Sa,$a=s(Oa,wa,Ca,!1,null,null,null);$a.options.__file="packages/date-picker/src/panel/month-range.vue";var Da=$a.exports,Ea=function(e){return"daterange"===e||"datetimerange"===e?xa:"monthrange"===e?Da:pa},Ta={mixins:[So],name:"ElDatePicker",props:{type:{type:String,default:"date"},timeArrowControl:Boolean},watch:{type:function(e){this.picker?(this.unmountPicker(),this.panel=Ea(e),this.mountPicker()):this.panel=Ea(e)}},created:function(){this.panel=Ea(this.type)},install:function(e){e.component(Ta.name,Ta)}},Pa=Ta,Ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"before-enter":e.handleMenuEnter,"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],ref:"popper",staticClass:"el-picker-panel time-select el-popper",class:e.popperClass,style:{width:e.width+"px"}},[n("el-scrollbar",{attrs:{noresize:"","wrap-class":"el-picker-panel__content"}},e._l(e.items,(function(t){return n("div",{key:t.value,staticClass:"time-select-item",class:{selected:e.value===t.value,disabled:t.disabled,default:t.value===e.defaultValue},attrs:{disabled:t.disabled},on:{click:function(n){e.handleClick(t)}}},[e._v(e._s(t.value))])})),0)],1)])},Ia=[];Ma._withStripped=!0;var Na=function(e){var t=(e||"").split(":");if(t.length>=2){var n=parseInt(t[0],10),i=parseInt(t[1],10);return{hours:n,minutes:i}}return null},ja=function(e,t){var n=Na(e),i=Na(t),r=n.minutes+60*n.hours,o=i.minutes+60*i.hours;return r===o?0:r>o?1:-1},Aa=function(e){return(e.hours<10?"0"+e.hours:e.hours)+":"+(e.minutes<10?"0"+e.minutes:e.minutes)},Fa=function(e,t){var n=Na(e),i=Na(t),r={hours:n.hours,minutes:n.minutes};return r.minutes+=i.minutes,r.hours+=i.hours,r.hours+=Math.floor(r.minutes/60),r.minutes=r.minutes%60,Aa(r)},La={components:{ElScrollbar:q.a},watch:{value:function(e){var t=this;e&&this.$nextTick((function(){return t.scrollToOption()}))}},methods:{handleClick:function(e){e.disabled||this.$emit("pick",e.value)},handleClear:function(){this.$emit("pick",null)},scrollToOption:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:".selected",t=this.$refs.popper.querySelector(".el-picker-panel__content");ri()(t,t.querySelector(e))},handleMenuEnter:function(){var e=this,t=-1!==this.items.map((function(e){return e.value})).indexOf(this.value),n=-1!==this.items.map((function(e){return e.value})).indexOf(this.defaultValue),i=(t?".selected":n&&".default")||".time-select-item:not(.disabled)";this.$nextTick((function(){return e.scrollToOption(i)}))},scrollDown:function(e){var t=this.items,n=t.length,i=t.length,r=t.map((function(e){return e.value})).indexOf(this.value);while(i--)if(r=(r+e+n)%n,!t[r].disabled)return void this.$emit("pick",t[r].value,!0)},isValidValue:function(e){return-1!==this.items.filter((function(e){return!e.disabled})).map((function(e){return e.value})).indexOf(e)},handleKeydown:function(e){var t=e.keyCode;if(38===t||40===t){var n={40:1,38:-1},i=n[t.toString()];return this.scrollDown(i),void e.stopPropagation()}}},data:function(){return{popperClass:"",start:"09:00",end:"18:00",step:"00:30",value:"",defaultValue:"",visible:!1,minTime:"",maxTime:"",width:0}},computed:{items:function(){var e=this.start,t=this.end,n=this.step,i=[];if(e&&t&&n){var r=e;while(ja(r,t)<=0)i.push({value:r,disabled:ja(r,this.minTime||"-1:-1")<=0||ja(r,this.maxTime||"100:100")>=0}),r=Fa(r,n)}return i}}},Va=La,za=s(Va,Ma,Ia,!1,null,null,null);za.options.__file="packages/date-picker/src/panel/time-select.vue";var Ba=za.exports,Ra={mixins:[So],name:"ElTimeSelect",componentName:"ElTimeSelect",props:{type:{type:String,default:"time-select"}},beforeCreate:function(){this.panel=Ba},install:function(e){e.component(Ra.name,Ra)}},Ha=Ra,Wa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":function(t){e.$emit("dodestroy")}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-time-range-picker el-picker-panel el-popper",class:e.popperClass},[n("div",{staticClass:"el-time-range-picker__content"},[n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.startTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"minSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.minDate},on:{change:e.handleMinChange,"select-range":e.setMinSelectionRange}})],1)]),n("div",{staticClass:"el-time-range-picker__cell"},[n("div",{staticClass:"el-time-range-picker__header"},[e._v(e._s(e.t("el.datepicker.endTime")))]),n("div",{staticClass:"el-time-range-picker__body el-time-panel__content",class:{"has-seconds":e.showSeconds,"is-arrow":e.arrowControl}},[n("time-spinner",{ref:"maxSpinner",attrs:{"show-seconds":e.showSeconds,"am-pm-mode":e.amPmMode,"arrow-control":e.arrowControl,date:e.maxDate},on:{change:e.handleMaxChange,"select-range":e.setMaxSelectionRange}})],1)])]),n("div",{staticClass:"el-time-panel__footer"},[n("button",{staticClass:"el-time-panel__btn cancel",attrs:{type:"button"},on:{click:function(t){e.handleCancel()}}},[e._v(e._s(e.t("el.datepicker.cancel")))]),n("button",{staticClass:"el-time-panel__btn confirm",attrs:{type:"button",disabled:e.btnDisabled},on:{click:function(t){e.handleConfirm()}}},[e._v(e._s(e.t("el.datepicker.confirm")))])])])])},qa=[];Wa._withStripped=!0;var Ua=Object(ao["parseDate"])("00:00:00","HH:mm:ss"),Ya=Object(ao["parseDate"])("23:59:59","HH:mm:ss"),Ka=function(e){return Object(ao["modifyDate"])(Ua,e.getFullYear(),e.getMonth(),e.getDate())},Ga=function(e){return Object(ao["modifyDate"])(Ya,e.getFullYear(),e.getMonth(),e.getDate())},Xa=function(e,t){return new Date(Math.min(e.getTime()+t,Ga(e).getTime()))},Za={mixins:[g.a],components:{TimeSpinner:jo},computed:{showSeconds:function(){return-1!==(this.format||"").indexOf("ss")},offset:function(){return this.showSeconds?11:8},spinner:function(){return this.selectionRange[0]this.maxDate.getTime()},amPmMode:function(){return-1!==(this.format||"").indexOf("A")?"A":-1!==(this.format||"").indexOf("a")?"a":""}},data:function(){return{popperClass:"",minDate:new Date,maxDate:new Date,value:[],oldValue:[new Date,new Date],defaultValue:null,format:"HH:mm:ss",visible:!1,selectionRange:[0,2],arrowControl:!1}},watch:{value:function(e){Array.isArray(e)?(this.minDate=new Date(e[0]),this.maxDate=new Date(e[1])):Array.isArray(this.defaultValue)?(this.minDate=new Date(this.defaultValue[0]),this.maxDate=new Date(this.defaultValue[1])):this.defaultValue?(this.minDate=new Date(this.defaultValue),this.maxDate=Xa(new Date(this.defaultValue),36e5)):(this.minDate=new Date,this.maxDate=Xa(new Date,36e5))},visible:function(e){var t=this;e&&(this.oldValue=this.value,this.$nextTick((function(){return t.$refs.minSpinner.emitSelectRange("hours")})))}},methods:{handleClear:function(){this.$emit("pick",null)},handleCancel:function(){this.$emit("pick",this.oldValue)},handleMinChange:function(e){this.minDate=Object(ao["clearMilliseconds"])(e),this.handleChange()},handleMaxChange:function(e){this.maxDate=Object(ao["clearMilliseconds"])(e),this.handleChange()},handleChange:function(){this.isValidValue([this.minDate,this.maxDate])&&(this.$refs.minSpinner.selectableRange=[[Ka(this.minDate),this.maxDate]],this.$refs.maxSpinner.selectableRange=[[this.minDate,Ga(this.maxDate)]],this.$emit("pick",[this.minDate,this.maxDate],!0))},setMinSelectionRange:function(e,t){this.$emit("select-range",e,t,"min"),this.selectionRange=[e,t]},setMaxSelectionRange:function(e,t){this.$emit("select-range",e,t,"max"),this.selectionRange=[e+this.offset,t+this.offset]},handleConfirm:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.$refs.minSpinner.selectableRange,n=this.$refs.maxSpinner.selectableRange;this.minDate=Object(ao["limitTimeRange"])(this.minDate,t,this.format),this.maxDate=Object(ao["limitTimeRange"])(this.maxDate,n,this.format),this.$emit("pick",[this.minDate,this.maxDate],e)},adjustSpinners:function(){this.$refs.minSpinner.adjustSpinners(),this.$refs.maxSpinner.adjustSpinners()},changeSelectionRange:function(e){var t=this.showSeconds?[0,3,6,11,14,17]:[0,3,8,11],n=["hours","minutes"].concat(this.showSeconds?["seconds"]:[]),i=t.indexOf(this.selectionRange[0]),r=(i+e+t.length)%t.length,o=t.length/2;r-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(b["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),t&&(Object(Le["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(Le["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(Le["on"])(n,"focusin",this.handleFocus),Object(Le["on"])(t,"focusout",this.handleBlur),Object(Le["on"])(n,"focusout",this.handleBlur)),Object(Le["on"])(t,"keydown",this.handleKeydown),Object(Le["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(Le["on"])(t,"click",this.doToggle),Object(Le["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(Le["on"])(t,"mouseenter",this.handleMouseEnter),Object(Le["on"])(n,"mouseenter",this.handleMouseEnter),Object(Le["on"])(t,"mouseleave",this.handleMouseLeave),Object(Le["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(Le["on"])(t,"focusin",this.doShow),Object(Le["on"])(t,"focusout",this.doClose)):(Object(Le["on"])(t,"mousedown",this.doShow),Object(Le["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(Le["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(Le["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(Le["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$slots.reference&&this.$slots.reference[0]&&(t=this.referenceElm=this.$slots.reference[0].elm),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(Le["off"])(e,"click",this.doToggle),Object(Le["off"])(e,"mouseup",this.doClose),Object(Le["off"])(e,"mousedown",this.doShow),Object(Le["off"])(e,"focusin",this.doShow),Object(Le["off"])(e,"focusout",this.doClose),Object(Le["off"])(e,"mousedown",this.doShow),Object(Le["off"])(e,"mouseup",this.doClose),Object(Le["off"])(e,"mouseleave",this.handleMouseLeave),Object(Le["off"])(e,"mouseenter",this.handleMouseEnter),Object(Le["off"])(document,"click",this.handleDocumentClick)}},as=os,ss=s(as,is,rs,!1,null,null,null);ss.options.__file="packages/popover/src/main.vue";var ls=ss.exports,cs=function(e,t,n){var i=t.expression?t.value:t.arg,r=n.context.$refs[i];r&&(Array.isArray(r)?r[0].$refs.reference=e:r.$refs.reference=e)},us={bind:function(e,t,n){cs(e,t,n)},inserted:function(e,t,n){cs(e,t,n)}};Wi.a.directive("popover",us),ls.install=function(e){e.directive("popover",us),e.component(ls.name,ls)},ls.directive=us;var ds=ls,hs={name:"ElTooltip",mixins:[H.a],props:{openDelay:{type:Number,default:0},disabled:Boolean,manual:Boolean,effect:{type:String,default:"dark"},arrowOffset:{type:Number,default:0},popperClass:String,content:String,visibleArrow:{default:!0},transition:{type:String,default:"el-fade-in-linear"},popperOptions:{default:function(){return{boundariesPadding:10,gpuAcceleration:!1}}},enterable:{type:Boolean,default:!0},hideAfter:{type:Number,default:0},tabindex:{type:Number,default:0}},data:function(){return{tooltipId:"el-tooltip-"+Object(b["generateId"])(),timeoutPending:null,focusing:!1}},beforeCreate:function(){var e=this;this.$isServer||(this.popperVM=new Wi.a({data:{node:""},render:function(e){return this.node}}).$mount(),this.debounceClose=F()(200,(function(){return e.handleClosePopper()})))},render:function(e){var t=this;this.popperVM&&(this.popperVM.node=e("transition",{attrs:{name:this.transition},on:{afterLeave:this.doDestroy}},[e("div",{on:{mouseleave:function(){t.setExpectedState(!1),t.debounceClose()},mouseenter:function(){t.setExpectedState(!0)}},ref:"popper",attrs:{role:"tooltip",id:this.tooltipId,"aria-hidden":this.disabled||!this.showPopper?"true":"false"},directives:[{name:"show",value:!this.disabled&&this.showPopper}],class:["el-tooltip__popper","is-"+this.effect,this.popperClass]},[this.$slots.content||this.content])]));var n=this.getFirstElement();if(!n)return null;var i=n.data=n.data||{};return i.staticClass=this.addTooltipClass(i.staticClass),n},mounted:function(){var e=this;this.referenceElm=this.$el,1===this.$el.nodeType&&(this.$el.setAttribute("aria-describedby",this.tooltipId),this.$el.setAttribute("tabindex",this.tabindex),Object(Le["on"])(this.referenceElm,"mouseenter",this.show),Object(Le["on"])(this.referenceElm,"mouseleave",this.hide),Object(Le["on"])(this.referenceElm,"focus",(function(){if(e.$slots.default&&e.$slots.default.length){var t=e.$slots.default[0].componentInstance;t&&t.focus?t.focus():e.handleFocus()}else e.handleFocus()})),Object(Le["on"])(this.referenceElm,"blur",this.handleBlur),Object(Le["on"])(this.referenceElm,"click",this.removeFocusing)),this.value&&this.popperVM&&this.popperVM.$nextTick((function(){e.value&&e.updatePopper()}))},watch:{focusing:function(e){e?Object(Le["addClass"])(this.referenceElm,"focusing"):Object(Le["removeClass"])(this.referenceElm,"focusing")}},methods:{show:function(){this.setExpectedState(!0),this.handleShowPopper()},hide:function(){this.setExpectedState(!1),this.debounceClose()},handleFocus:function(){this.focusing=!0,this.show()},handleBlur:function(){this.focusing=!1,this.hide()},removeFocusing:function(){this.focusing=!1},addTooltipClass:function(e){return e?"el-tooltip "+e.replace("el-tooltip",""):"el-tooltip"},handleShowPopper:function(){var e=this;this.expectedState&&!this.manual&&(clearTimeout(this.timeout),this.timeout=setTimeout((function(){e.showPopper=!0}),this.openDelay),this.hideAfter>0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;n0){Ds=Ts.shift();var t=Ds.options;for(var n in t)t.hasOwnProperty(n)&&(Es[n]=t[n]);void 0===t.callback&&(Es.callback=Ps);var i=Es.callback;Es.callback=function(t,n){i(t,n),e()},Object(ks["isVNode"])(Es.message)?(Es.$slots.default=[Es.message],Es.message=null):delete Es.$slots.default,["modal","showClose","closeOnClickModal","closeOnPressEscape","closeOnHashChange"].forEach((function(e){void 0===Es[e]&&(Es[e]=!0)})),document.body.appendChild(Es.$el),Wi.a.nextTick((function(){Es.visible=!0}))}},Ns=function e(t,n){if(!Wi.a.prototype.$isServer){if("string"===typeof t||Object(ks["isVNode"])(t)?(t={message:t},"string"===typeof arguments[1]&&(t.title=arguments[1])):t.callback&&!n&&(n=t.callback),"undefined"!==typeof Promise)return new Promise((function(i,r){Ts.push({options:St()({},Os,e.defaults,t),callback:n,resolve:i,reject:r}),Is()}));Ts.push({options:St()({},Os,e.defaults,t),callback:n}),Is()}};Ns.setDefaults=function(e){Ns.defaults=e},Ns.alert=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,$type:"alert",closeOnPressEscape:!1,closeOnClickModal:!1},n))},Ns.confirm=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,$type:"confirm",showCancelButton:!0},n))},Ns.prompt=function(e,t,n){return"object"===("undefined"===typeof t?"undefined":Ss(t))?(n=t,t=""):void 0===t&&(t=""),Ns(St()({title:t,message:e,showCancelButton:!0,showInput:!0,$type:"prompt"},n))},Ns.close=function(){Es.doClose(),Es.visible=!1,Ts=[],Ds=null};var js=Ns,As=js,Fs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-breadcrumb",attrs:{"aria-label":"Breadcrumb",role:"navigation"}},[e._t("default")],2)},Ls=[];Fs._withStripped=!0;var Vs={name:"ElBreadcrumb",props:{separator:{type:String,default:"/"},separatorClass:{type:String,default:""}},provide:function(){return{elBreadcrumb:this}},mounted:function(){var e=this.$el.querySelectorAll(".el-breadcrumb__item");e.length&&e[e.length-1].setAttribute("aria-current","page")}},zs=Vs,Bs=s(zs,Fs,Ls,!1,null,null,null);Bs.options.__file="packages/breadcrumb/src/breadcrumb.vue";var Rs=Bs.exports;Rs.install=function(e){e.component(Rs.name,Rs)};var Hs=Rs,Ws=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-breadcrumb__item"},[n("span",{ref:"link",class:["el-breadcrumb__inner",e.to?"is-link":""],attrs:{role:"link"}},[e._t("default")],2),e.separatorClass?n("i",{staticClass:"el-breadcrumb__separator",class:e.separatorClass}):n("span",{staticClass:"el-breadcrumb__separator",attrs:{role:"presentation"}},[e._v(e._s(e.separator))])])},qs=[];Ws._withStripped=!0;var Us={name:"ElBreadcrumbItem",props:{to:{},replace:Boolean},data:function(){return{separator:"",separatorClass:""}},inject:["elBreadcrumb"],mounted:function(){var e=this;this.separator=this.elBreadcrumb.separator,this.separatorClass=this.elBreadcrumb.separatorClass;var t=this.$refs.link;t.setAttribute("role","link"),t.addEventListener("click",(function(t){var n=e.to,i=e.$router;n&&i&&(e.replace?i.replace(n):i.push(n))}))}},Ys=Us,Ks=s(Ys,Ws,qs,!1,null,null,null);Ks.options.__file="packages/breadcrumb/src/breadcrumb-item.vue";var Gs=Ks.exports;Gs.install=function(e){e.component(Gs.name,Gs)};var Xs=Gs,Zs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("form",{staticClass:"el-form",class:[e.labelPosition?"el-form--label-"+e.labelPosition:"",{"el-form--inline":e.inline}]},[e._t("default")],2)},Js=[];Zs._withStripped=!0;var Qs={name:"ElForm",componentName:"ElForm",provide:function(){return{elForm:this}},props:{model:Object,rules:Object,labelPosition:String,labelWidth:String,labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},size:String,disabled:Boolean,validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:{type:Boolean,default:!1}},watch:{rules:function(){this.fields.forEach((function(e){e.removeValidateEvents(),e.addValidateEvents()})),this.validateOnRuleChange&&this.validate((function(){}))}},computed:{autoLabelWidth:function(){if(!this.potentialLabelWidthArr.length)return 0;var e=Math.max.apply(Math,this.potentialLabelWidthArr);return e?e+"px":""}},data:function(){return{fields:[],potentialLabelWidthArr:[]}},created:function(){var e=this;this.$on("el.form.addField",(function(t){t&&e.fields.push(t)})),this.$on("el.form.removeField",(function(t){t.prop&&e.fields.splice(e.fields.indexOf(t),1)}))},methods:{resetFields:function(){this.model?this.fields.forEach((function(e){e.resetField()})):console.warn("[Element Warn][Form]model is required for resetFields to work.")},clearValidate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=e.length?"string"===typeof e?this.fields.filter((function(t){return e===t.prop})):this.fields.filter((function(t){return e.indexOf(t.prop)>-1})):this.fields;t.forEach((function(e){e.clearValidate()}))},validate:function(e){var t=this;if(this.model){var n=void 0;"function"!==typeof e&&window.Promise&&(n=new window.Promise((function(t,n){e=function(e){e?t(e):n(e)}})));var i=!0,r=0;0===this.fields.length&&e&&e(!0);var o={};return this.fields.forEach((function(n){n.validate("",(function(n,a){n&&(i=!1),o=St()({},o,a),"function"===typeof e&&++r===t.fields.length&&e(i,o)}))})),n||void 0}console.warn("[Element Warn][Form]model is required for validate to work!")},validateField:function(e,t){e=[].concat(e);var n=this.fields.filter((function(t){return-1!==e.indexOf(t.prop)}));n.length?n.forEach((function(e){e.validate("",t)})):console.warn("[Element Warn]please pass correct props!")},getLabelWidthIndex:function(e){var t=this.potentialLabelWidthArr.indexOf(e);if(-1===t)throw new Error("[ElementForm]unpected width ",e);return t},registerLabelWidth:function(e,t){if(e&&t){var n=this.getLabelWidthIndex(t);this.potentialLabelWidthArr.splice(n,1,e)}else e&&this.potentialLabelWidthArr.push(e)},deregisterLabelWidth:function(e){var t=this.getLabelWidthIndex(e);this.potentialLabelWidthArr.splice(t,1)}}},el=Qs,tl=s(el,Zs,Js,!1,null,null,null);tl.options.__file="packages/form/src/form.vue";var nl=tl.exports;nl.install=function(e){e.component(nl.name,nl)};var il=nl,rl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-form-item",class:[{"el-form-item--feedback":e.elForm&&e.elForm.statusIcon,"is-error":"error"===e.validateState,"is-validating":"validating"===e.validateState,"is-success":"success"===e.validateState,"is-required":e.isRequired||e.required,"is-no-asterisk":e.elForm&&e.elForm.hideRequiredAsterisk},e.sizeClass?"el-form-item--"+e.sizeClass:""]},[n("label-wrap",{attrs:{"is-auto-width":e.labelStyle&&"auto"===e.labelStyle.width,"update-all":"auto"===e.form.labelWidth}},[e.label||e.$slots.label?n("label",{staticClass:"el-form-item__label",style:e.labelStyle,attrs:{for:e.labelFor}},[e._t("label",[e._v(e._s(e.label+e.form.labelSuffix))])],2):e._e()]),n("div",{staticClass:"el-form-item__content",style:e.contentStyle},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-top"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?e._t("error",[n("div",{staticClass:"el-form-item__error",class:{"el-form-item__error--inline":"boolean"===typeof e.inlineMessage?e.inlineMessage:e.elForm&&e.elForm.inlineMessage||!1}},[e._v("\n "+e._s(e.validateMessage)+"\n ")])],{error:e.validateMessage}):e._e()],2)],2)],1)},ol=[];rl._withStripped=!0;var al,sl,ll=n(40),cl=n.n(ll),ul={props:{isAutoWidth:Boolean,updateAll:Boolean},inject:["elForm","elFormItem"],render:function(){var e=arguments[0],t=this.$slots.default;if(!t)return null;if(this.isAutoWidth){var n=this.elForm.autoLabelWidth,i={};if(n&&"auto"!==n){var r=parseInt(n,10)-this.computedWidth;r&&(i.marginLeft=r+"px")}return e("div",{class:"el-form-item__label-wrap",style:i},[t])}return t[0]},methods:{getLabelWidth:function(){if(this.$el&&this.$el.firstElementChild){var e=window.getComputedStyle(this.$el.firstElementChild).width;return Math.ceil(parseFloat(e))}return 0},updateLabelWidth:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";this.$slots.default&&this.isAutoWidth&&this.$el.firstElementChild&&("update"===e?this.computedWidth=this.getLabelWidth():"remove"===e&&this.elForm.deregisterLabelWidth(this.computedWidth))}},watch:{computedWidth:function(e,t){this.updateAll&&(this.elForm.registerLabelWidth(e,t),this.elFormItem.updateComputedLabelWidth(e))}},data:function(){return{computedWidth:0}},mounted:function(){this.updateLabelWidth("update")},updated:function(){this.updateLabelWidth("update")},beforeDestroy:function(){this.updateLabelWidth("remove")}},dl=ul,hl=s(dl,al,sl,!1,null,null,null);hl.options.__file="packages/form/src/label-wrap.vue";var fl=hl.exports,pl={name:"ElFormItem",componentName:"ElFormItem",mixins:[D.a],provide:function(){return{elFormItem:this}},inject:["elForm"],props:{label:String,labelWidth:String,prop:String,required:{type:Boolean,default:void 0},rules:[Object,Array],error:String,validateStatus:String,for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:String},components:{LabelWrap:fl},watch:{error:{immediate:!0,handler:function(e){this.validateMessage=e,this.validateState=e?"error":""}},validateStatus:function(e){this.validateState=e}},computed:{labelFor:function(){return this.for||this.prop},labelStyle:function(){var e={};if("top"===this.form.labelPosition)return e;var t=this.labelWidth||this.form.labelWidth;return t&&(e.width=t),e},contentStyle:function(){var e={},t=this.label;if("top"===this.form.labelPosition||this.form.inline)return e;if(!t&&!this.labelWidth&&this.isNested)return e;var n=this.labelWidth||this.form.labelWidth;return"auto"===n?"auto"===this.labelWidth?e.marginLeft=this.computedLabelWidth:"auto"===this.form.labelWidth&&(e.marginLeft=this.elForm.autoLabelWidth):e.marginLeft=n,e},form:function(){var e=this.$parent,t=e.$options.componentName;while("ElForm"!==t)"ElFormItem"===t&&(this.isNested=!0),e=e.$parent,t=e.$options.componentName;return e},fieldValue:function(){var e=this.form.model;if(e&&this.prop){var t=this.prop;return-1!==t.indexOf(":")&&(t=t.replace(/:/,".")),Object(b["getPropByPath"])(e,t,!0).v}},isRequired:function(){var e=this.getRules(),t=!1;return e&&e.length&&e.every((function(e){return!e.required||(t=!0,!1)})),t},_formSize:function(){return this.elForm.size},elFormItemSize:function(){return this.size||this._formSize},sizeClass:function(){return this.elFormItemSize||(this.$ELEMENT||{}).size}},data:function(){return{validateState:"",validateMessage:"",validateDisabled:!1,validator:{},isNested:!1,computedLabelWidth:""}},methods:{validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b["noop"];this.validateDisabled=!1;var i=this.getFilteredRule(e);if((!i||0===i.length)&&void 0===this.required)return n(),!0;this.validateState="validating";var r={};i&&i.length>0&&i.forEach((function(e){delete e.trigger})),r[this.prop]=i;var o=new cl.a(r),a={};a[this.prop]=this.fieldValue,o.validate(a,{firstFields:!0},(function(e,i){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",n(t.validateMessage,i),t.elForm&&t.elForm.$emit("validate",t.prop,!e,t.validateMessage||null)}))},clearValidate:function(){this.validateState="",this.validateMessage="",this.validateDisabled=!1},resetField:function(){var e=this;this.validateState="",this.validateMessage="";var t=this.form.model,n=this.fieldValue,i=this.prop;-1!==i.indexOf(":")&&(i=i.replace(/:/,"."));var r=Object(b["getPropByPath"])(t,i,!0);this.validateDisabled=!0,Array.isArray(n)?r.o[r.k]=[].concat(this.initialValue):r.o[r.k]=this.initialValue,this.$nextTick((function(){e.validateDisabled=!1})),this.broadcast("ElTimeSelect","fieldReset",this.initialValue)},getRules:function(){var e=this.form.rules,t=this.rules,n=void 0!==this.required?{required:!!this.required}:[],i=Object(b["getPropByPath"])(e,this.prop||"");return e=e?i.o[this.prop||""]||i.v:[],[].concat(t||e||[]).concat(n)},getFilteredRule:function(e){var t=this.getRules();return t.filter((function(t){return!t.trigger||""===e||(Array.isArray(t.trigger)?t.trigger.indexOf(e)>-1:t.trigger===e)})).map((function(e){return St()({},e)}))},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")},updateComputedLabelWidth:function(e){this.computedLabelWidth=e?e+"px":""},addValidateEvents:function(){var e=this.getRules();(e.length||void 0!==this.required)&&(this.$on("el.form.blur",this.onFieldBlur),this.$on("el.form.change",this.onFieldChange))},removeValidateEvents:function(){this.$off()}},mounted:function(){if(this.prop){this.dispatch("ElForm","el.form.addField",[this]);var e=this.fieldValue;Array.isArray(e)&&(e=[].concat(e)),Object.defineProperty(this,"initialValue",{value:e}),this.addValidateEvents()}},beforeDestroy:function(){this.dispatch("ElForm","el.form.removeField",[this])}},ml=pl,vl=s(ml,rl,ol,!1,null,null,null);vl.options.__file="packages/form/src/form-item.vue";var gl=vl.exports;gl.install=function(e){e.component(gl.name,gl)};var bl=gl,yl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tabs__active-bar",class:"is-"+e.rootTabs.tabPosition,style:e.barStyle})},_l=[];yl._withStripped=!0;var xl={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var e=this,t={},n=0,i=0,r=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",o="width"===r?"x":"y",a=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))};this.tabs.every((function(t,o){var s=Object(b["arrayFind"])(e.$parent.$refs.tabs||[],(function(e){return e.id.replace("tab-","")===t.paneName}));if(!s)return!1;if(t.active){i=s["client"+a(r)];var l=window.getComputedStyle(s);return"width"===r&&e.tabs.length>1&&(i-=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),"width"===r&&(n+=parseFloat(l.paddingLeft)),!1}return n+=s["client"+a(r)],!0}));var s="translate"+a(o)+"("+n+"px)";return t[r]=i+"px",t.transform=s,t.msTransform=s,t.webkitTransform=s,t}}}},wl=xl,Cl=s(wl,yl,_l,!1,null,null,null);Cl.options.__file="packages/tabs/src/tab-bar.vue";var kl=Cl.exports;function Sl(){}var Ol,$l,Dl=function(e){return e.toLowerCase().replace(/( |^)[a-z]/g,(function(e){return e.toUpperCase()}))},El={name:"TabNav",components:{TabBar:kl},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Sl},onTabRemove:{type:Function,default:Sl},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var e=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate"+e+"(-"+this.navOffset+"px)"}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var e=this.$refs.navScroll["offset"+Dl(this.sizeName)],t=this.navOffset;if(t){var n=t>e?t-e:0;this.navOffset=n}},scrollNext:function(){var e=this.$refs.nav["offset"+Dl(this.sizeName)],t=this.$refs.navScroll["offset"+Dl(this.sizeName)],n=this.navOffset;if(!(e-n<=t)){var i=e-n>2*t?n+t:e-t;this.navOffset=i}},scrollToActiveTab:function(){if(this.scrollable){var e=this.$refs.nav,t=this.$el.querySelector(".is-active");if(t){var n=this.$refs.navScroll,i=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition),r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),a=i?e.offsetWidth-o.width:e.offsetHeight-o.height,s=this.navOffset,l=s;i?(r.lefto.right&&(l=s+r.right-o.right)):(r.topo.bottom&&(l=s+(r.bottom-o.bottom))),l=Math.max(l,0),this.navOffset=Math.min(l,a)}}},update:function(){if(this.$refs.nav){var e=this.sizeName,t=this.$refs.nav["offset"+Dl(e)],n=this.$refs.navScroll["offset"+Dl(e)],i=this.navOffset;if(n0&&(this.navOffset=0)}},changeTab:function(e){var t=e.keyCode,n=void 0,i=void 0,r=void 0;-1!==[37,38,39,40].indexOf(t)&&(r=e.currentTarget.querySelectorAll("[role=tab]"),i=Array.prototype.indexOf.call(r,e.target),n=37===t||38===t?0===i?r.length-1:i-1:i0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter((function(e){return e.tag&&e.componentOptions&&"ElTabPane"===e.componentOptions.Ctor.options.name})),i=n.map((function(e){var t=e.componentInstance;return t})),r=!(i.length===this.panes.length&&i.every((function(t,n){return t===e.panes[n]})));(t||r)&&(this.panes=i)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(e,t,n){e.disabled||(this.setCurrentName(t),this.$emit("tab-click",e,n))},handleTabRemove:function(e,t){e.disabled||(t.stopPropagation(),this.$emit("edit",e.name,"remove"),this.$emit("tab-remove",e.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(e){var t=this,n=function(){t.currentName=e,t.$emit("input",e)};if(this.currentName!==e&&this.beforeLeave){var i=this.beforeLeave(e,this.currentName);i&&i.then?i.then((function(){n(),t.$refs.nav&&t.$refs.nav.removeFocus()}),(function(){})):!1!==i&&n()}else n()}},render:function(e){var t,n=this.type,i=this.handleTabClick,r=this.handleTabRemove,o=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,d=this.stretch,h=l||c?e("span",{class:"el-tabs__new-tab",on:{click:o,keydown:function(e){13===e.keyCode&&o()}},attrs:{tabindex:"0"}},[e("i",{class:"el-icon-plus"})]):null,f={props:{currentName:a,onTabClick:i,onTabRemove:r,editable:l,type:n,panes:s,stretch:d},ref:"nav"},p=e("div",{class:["el-tabs__header","is-"+u]},[h,e("tab-nav",f)]),m=e("div",{class:"el-tabs__content"},[this.$slots.default]);return e("div",{class:(t={"el-tabs":!0,"el-tabs--card":"card"===n},t["el-tabs--"+u]=!0,t["el-tabs--border-card"]="border-card"===n,t)},["bottom"!==u?[p,m]:[m,p]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Al=jl,Fl=s(Al,Ml,Il,!1,null,null,null);Fl.options.__file="packages/tabs/src/tabs.vue";var Ll=Fl.exports;Ll.install=function(e){e.component(Ll.name,Ll)};var Vl=Ll,zl=function(){var e=this,t=e.$createElement,n=e._self._c||t;return!e.lazy||e.loaded||e.active?n("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!e.active,id:"pane-"+e.paneName,"aria-labelledby":"tab-"+e.paneName}},[e._t("default")],2):e._e()},Bl=[];zl._withStripped=!0;var Rl={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var e=this.$parent.currentName===(this.name||this.index);return e&&(this.loaded=!0),e},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Hl=Rl,Wl=s(Hl,zl,Bl,!1,null,null,null);Wl.options.__file="packages/tabs/src/tab-pane.vue";var ql=Wl.exports;ql.install=function(e){e.component(ql.name,ql)};var Ul,Yl,Kl=ql,Gl={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},Xl=Gl,Zl=s(Xl,Ul,Yl,!1,null,null,null);Zl.options.__file="packages/tag/src/tag.vue";var Jl=Zl.exports;Jl.install=function(e){e.component(Jl.name,Jl)};var Ql=Jl,ec=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-tree",class:{"el-tree--highlight-current":e.highlightCurrent,"is-dragging":!!e.dragState.draggingNode,"is-drop-not-allow":!e.dragState.allowDrop,"is-drop-inner":"inner"===e.dragState.dropType},attrs:{role:"tree"}},[e._l(e.root.childNodes,(function(t){return n("el-tree-node",{key:e.getNodeKey(t),attrs:{node:t,props:e.props,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent},on:{"node-expand":e.handleNodeExpand}})})),e.isEmpty?n("div",{staticClass:"el-tree__empty-block"},[n("span",{staticClass:"el-tree__empty-text"},[e._v(e._s(e.emptyText))])]):e._e(),n("div",{directives:[{name:"show",rawName:"v-show",value:e.dragState.showDropIndicator,expression:"dragState.showDropIndicator"}],ref:"dropIndicator",staticClass:"el-tree__drop-indicator"})],2)},tc=[];ec._withStripped=!0;var nc="$treeNodeId",ic=function(e,t){t&&!t[nc]&&Object.defineProperty(t,nc,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},rc=function(e,t){return e?t[e]:t[nc]},oc=function(e,t){var n=e;while(n&&"BODY"!==n.tagName){if(n.__vue__&&n.__vue__.$options.name===t)return n.__vue__;n=n.parentNode}return null},ac=function(){function e(e,t){for(var n=0;n0&&i.lazy&&i.defaultExpandAll&&this.expand(),Array.isArray(this.data)||ic(this,this.data),this.data){var a=i.defaultExpandedKeys,s=i.key;s&&a&&-1!==a.indexOf(this.key)&&this.expand(null,i.autoExpandParent),s&&void 0!==i.currentNodeKey&&this.key===i.currentNodeKey&&(i.currentNode=this,i.currentNode.isCurrent=!0),i.lazy&&i._initDefaultCheckedNode(this),this.updateLeafState()}}return e.prototype.setData=function(e){Array.isArray(e)||ic(this,e),this.data=e,this.childNodes=[];var t=void 0;t=0===this.level&&this.data instanceof Array?this.data:uc(this,"children")||[];for(var n=0,i=t.length;n1&&void 0!==arguments[1])||arguments[1],n=function n(i){for(var r=i.childNodes||[],o=!1,a=0,s=r.length;a-1&&t.splice(n,1);var i=this.childNodes.indexOf(e);i>-1&&(this.store&&this.store.deregisterNode(e),e.parent=null,this.childNodes.splice(i,1)),this.updateLeafState()},e.prototype.removeChildByData=function(e){for(var t=null,n=0;n0)i.expanded=!0,i=i.parent}n.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){e instanceof Array&&(n.checked?n.setChecked(!0,!0):n.store.checkStrictly||cc(n),i())})):i()},e.prototype.doCreateChildren=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild(St()({data:e},n),void 0,!0)}))},e.prototype.collapse=function(){this.expanded=!1},e.prototype.shouldLoadData=function(){return!0===this.store.lazy&&this.store.load&&!this.loaded},e.prototype.updateLeafState=function(){if(!0!==this.store.lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodes;!this.store.lazy||!0===this.store.lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser},e.prototype.setChecked=function(e,t,n,i){var r=this;if(this.indeterminate="half"===e,this.checked=!0===e,!this.store.checkStrictly){if(!this.shouldLoadData()||this.store.checkDescendants){var o=lc(this.childNodes),a=o.all,s=o.allWithoutDisable;this.isLeaf||a||!s||(this.checked=!1,e=!1);var l=function(){if(t){for(var n=r.childNodes,o=0,a=n.length;o0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var n=this.store.props,i="children";return n&&(i=n.children||"children"),void 0===t[i]&&(t[i]=null),e&&!t[i]&&(t[i]=[]),t[i]},e.prototype.updateChildren=function(){var e=this,t=this.getChildren()||[],n=this.childNodes.map((function(e){return e.data})),i={},r=[];t.forEach((function(e,t){var o=e[nc],a=!!o&&Object(b["arrayFindIndex"])(n,(function(e){return e[nc]===o}))>=0;a?i[o]={index:t,data:e}:r.push({index:t,data:e})})),this.store.lazy||n.forEach((function(t){i[t[nc]]||e.removeChildByData(t)})),r.forEach((function(t){var n=t.index,i=t.data;e.insertChild({data:i},n)})),this.updateLeafState()},e.prototype.loadData=function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store.lazy||!this.store.load||this.loaded||this.loading&&!Object.keys(n).length)e&&e.call(this);else{this.loading=!0;var i=function(i){t.loaded=!0,t.loading=!1,t.childNodes=[],t.doCreateChildren(i,n),t.updateLeafState(),e&&e.call(t,i)};this.store.load(this,i)}},ac(e,[{key:"label",get:function(){return uc(this,"label")}},{key:"key",get:function(){var e=this.store.key;return this.data?this.data[e]:null}},{key:"disabled",get:function(){return uc(this,"disabled")}},{key:"nextSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return e.childNodes[t+1]}return null}},{key:"previousSibling",get:function(){var e=this.parent;if(e){var t=e.childNodes.indexOf(this);if(t>-1)return t>0?e.childNodes[t-1]:null}return null}}]),e}(),fc=hc,pc="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function mc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var vc=function(){function e(t){var n=this;for(var i in mc(this,e),this.currentNode=null,this.currentNodeKey=null,t)t.hasOwnProperty(i)&&(this[i]=t[i]);if(this.nodesMap={},this.root=new fc({data:this.data,store:this}),this.lazy&&this.load){var r=this.load;r(this.root,(function(e){n.root.doCreateChildren(e),n._initDefaultCheckedNodes()}))}else this._initDefaultCheckedNodes()}return e.prototype.filter=function(e){var t=this.filterNodeMethod,n=this.lazy,i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;if(o.forEach((function(n){n.visible=t.call(n,e,n.data,n),i(n)})),!r.visible&&o.length){var a=!0;a=!o.some((function(e){return e.visible})),r.root?r.root.visible=!1===a:r.visible=!1===a}e&&(!r.visible||r.isLeaf||n||r.expand())};i(this)},e.prototype.setData=function(e){var t=e!==this.root.data;t?(this.root.setData(e),this._initDefaultCheckedNodes()):this.root.updateChildren()},e.prototype.getNode=function(e){if(e instanceof fc)return e;var t="object"!==("undefined"===typeof e?"undefined":pc(e))?e:rc(this.key,e);return this.nodesMap[t]||null},e.prototype.insertBefore=function(e,t){var n=this.getNode(t);n.parent.insertBefore({data:e},n)},e.prototype.insertAfter=function(e,t){var n=this.getNode(t);n.parent.insertAfter({data:e},n)},e.prototype.remove=function(e){var t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))},e.prototype.append=function(e,t){var n=t?this.getNode(t):this.root;n&&n.insertChild({data:e})},e.prototype._initDefaultCheckedNodes=function(){var e=this,t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach((function(t){var i=n[t];i&&i.setChecked(!0,!e.checkStrictly)}))},e.prototype._initDefaultCheckedNode=function(e){var t=this.defaultCheckedKeys||[];-1!==t.indexOf(e.key)&&e.setChecked(!0,!this.checkStrictly)},e.prototype.setDefaultCheckedKey=function(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())},e.prototype.registerNode=function(e){var t=this.key;if(t&&e&&e.data){var n=e.key;void 0!==n&&(this.nodesMap[e.key]=e)}},e.prototype.deregisterNode=function(e){var t=this,n=this.key;n&&e&&e.data&&(e.childNodes.forEach((function(e){t.deregisterNode(e)})),delete this.nodesMap[e.key])},e.prototype.getCheckedNodes=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],i=function i(r){var o=r.root?r.root.childNodes:r.childNodes;o.forEach((function(r){(r.checked||t&&r.indeterminate)&&(!e||e&&r.isLeaf)&&n.push(r.data),i(r)}))};return i(this),n},e.prototype.getCheckedKeys=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getCheckedNodes(t).map((function(t){return(t||{})[e.key]}))},e.prototype.getHalfCheckedNodes=function(){var e=[],t=function t(n){var i=n.root?n.root.childNodes:n.childNodes;i.forEach((function(n){n.indeterminate&&e.push(n.data),t(n)}))};return t(this),e},e.prototype.getHalfCheckedKeys=function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))},e.prototype._getAllNodes=function(){var e=[],t=this.nodesMap;for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},e.prototype.updateChildren=function(e,t){var n=this.nodesMap[e];if(n){for(var i=n.childNodes,r=i.length-1;r>=0;r--){var o=i[r];this.remove(o.data)}for(var a=0,s=t.length;a1&&void 0!==arguments[1]&&arguments[1],n=arguments[2],i=this._getAllNodes().sort((function(e,t){return t.level-e.level})),r=Object.create(null),o=Object.keys(n);i.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,s=i.length;a-1;if(u){var d=l.parent;while(d&&d.level>0)r[d.data[e]]=!0,d=d.parent;l.isLeaf||this.checkStrictly?l.setChecked(!0,!1):(l.setChecked(!0,!0),t&&function(){l.setChecked(!1,!1);var e=function e(t){var n=t.childNodes;n.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(l)}())}else l.checked&&!r[c]&&l.setChecked(!1,!1)}},e.prototype.setCheckedNodes=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.key,i={};e.forEach((function(e){i[(e||{})[n]]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setCheckedKeys=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var n=this.key,i={};e.forEach((function(e){i[e]=!0})),this._setCheckedKeys(n,t,i)},e.prototype.setDefaultExpandedKeys=function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var n=t.getNode(e);n&&n.expand(null,t.autoExpandParent)}))},e.prototype.setChecked=function(e,t,n){var i=this.getNode(e);i&&i.setChecked(!!t,n)},e.prototype.getCurrentNode=function(){return this.currentNode},e.prototype.setCurrentNode=function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0},e.prototype.setUserCurrentNode=function(e){var t=e[this.key],n=this.nodesMap[t];this.setCurrentNode(n)},e.prototype.setCurrentNodeKey=function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)},e}(),gc=vc,bc=function(){var e=this,t=this,n=t.$createElement,i=t._self._c||n;return i("div",{directives:[{name:"show",rawName:"v-show",value:t.node.visible,expression:"node.visible"}],ref:"node",staticClass:"el-tree-node",class:{"is-expanded":t.expanded,"is-current":t.node.isCurrent,"is-hidden":!t.node.visible,"is-focusable":!t.node.disabled,"is-checked":!t.node.disabled&&t.node.checked},attrs:{role:"treeitem",tabindex:"-1","aria-expanded":t.expanded,"aria-disabled":t.node.disabled,"aria-checked":t.node.checked,draggable:t.tree.draggable},on:{click:function(e){return e.stopPropagation(),t.handleClick(e)},contextmenu:function(t){return e.handleContextMenu(t)},dragstart:function(e){return e.stopPropagation(),t.handleDragStart(e)},dragover:function(e){return e.stopPropagation(),t.handleDragOver(e)},dragend:function(e){return e.stopPropagation(),t.handleDragEnd(e)},drop:function(e){return e.stopPropagation(),t.handleDrop(e)}}},[i("div",{staticClass:"el-tree-node__content",style:{"padding-left":(t.node.level-1)*t.tree.indent+"px"}},[i("span",{class:[{"is-leaf":t.node.isLeaf,expanded:!t.node.isLeaf&&t.expanded},"el-tree-node__expand-icon",t.tree.iconClass?t.tree.iconClass:"el-icon-caret-right"],on:{click:function(e){return e.stopPropagation(),t.handleExpandIconClick(e)}}}),t.showCheckbox?i("el-checkbox",{attrs:{indeterminate:t.node.indeterminate,disabled:!!t.node.disabled},on:{change:t.handleCheckChange},nativeOn:{click:function(e){e.stopPropagation()}},model:{value:t.node.checked,callback:function(e){t.$set(t.node,"checked",e)},expression:"node.checked"}}):t._e(),t.node.loading?i("span",{staticClass:"el-tree-node__loading-icon el-icon-loading"}):t._e(),i("node-content",{attrs:{node:t.node}})],1),i("el-collapse-transition",[!t.renderAfterExpand||t.childNodeRendered?i("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}],staticClass:"el-tree-node__children",attrs:{role:"group","aria-expanded":t.expanded}},t._l(t.node.childNodes,(function(e){return i("el-tree-node",{key:t.getNodeKey(e),attrs:{"render-content":t.renderContent,"render-after-expand":t.renderAfterExpand,"show-checkbox":t.showCheckbox,node:e},on:{"node-expand":t.handleChildNodeExpand}})})),1):t._e()])],1)},yc=[];bc._withStripped=!0;var _c={name:"ElTreeNode",componentName:"ElTreeNode",mixins:[D.a],props:{node:{default:function(){return{}}},props:{},renderContent:Function,renderAfterExpand:{type:Boolean,default:!0},showCheckbox:{type:Boolean,default:!1}},components:{ElCollapseTransition:Ye.a,ElCheckbox:Ai.a,NodeContent:{props:{node:{required:!0}},render:function(e){var t=this.$parent,n=t.tree,i=this.node,r=i.data,o=i.store;return t.renderContent?t.renderContent.call(t._renderProxy,e,{_self:n.$vnode.context,node:i,data:r,store:o}):n.$scopedSlots.default?n.$scopedSlots.default({node:i,data:r}):e("span",{class:"el-tree-node__label"},[i.label])}}},data:function(){return{tree:null,expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){return rc(this.tree.nodeKey,e.data)},handleSelectChange:function(e,t){this.oldChecked!==e&&this.oldIndeterminate!==t&&this.tree.$emit("check-change",this.node.data,e,t),this.oldChecked=e,this.indeterminate=t},handleClick:function(){var e=this.tree.store;e.setCurrentNode(this.node),this.tree.$emit("current-change",e.currentNode?e.currentNode.data:null,e.currentNode),this.tree.currentNode=this,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&this.handleCheckChange(null,{target:{checked:!this.node.checked}}),this.tree.$emit("node-click",this.node.data,this.node,this)},handleContextMenu:function(e){this.tree._events["node-contextmenu"]&&this.tree._events["node-contextmenu"].length>0&&(e.stopPropagation(),e.preventDefault()),this.tree.$emit("node-contextmenu",e,this.node.data,this.node,this)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node.data,this.node,this),this.node.collapse()):(this.node.expand(),this.$emit("node-expand",this.node.data,this.node,this)))},handleCheckChange:function(e,t){var n=this;this.node.setChecked(t.target.checked,!this.tree.checkStrictly),this.$nextTick((function(){var e=n.tree.store;n.tree.$emit("check",n.node.data,{checkedNodes:e.getCheckedNodes(),checkedKeys:e.getCheckedKeys(),halfCheckedNodes:e.getHalfCheckedNodes(),halfCheckedKeys:e.getHalfCheckedKeys()})}))},handleChildNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.tree.$emit("node-expand",e,t,n)},handleDragStart:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-start",e,this)},handleDragOver:function(e){this.tree.draggable&&(this.tree.$emit("tree-node-drag-over",e,this),e.preventDefault())},handleDrop:function(e){e.preventDefault()},handleDragEnd:function(e){this.tree.draggable&&this.tree.$emit("tree-node-drag-end",e,this)}},created:function(){var e=this,t=this.$parent;t.isTree?this.tree=t:this.tree=t.tree;var n=this.tree;n||console.warn("Can not find node's tree.");var i=n.props||{},r=i["children"]||"children";this.$watch("node.data."+r,(function(){e.node.updateChildren()})),this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0),this.tree.accordion&&this.$on("tree-node-expand",(function(t){e.node!==t&&e.node.collapse()}))}},xc=_c,wc=s(xc,bc,yc,!1,null,null,null);wc.options.__file="packages/tree/src/tree-node.vue";var Cc=wc.exports,kc={name:"ElTree",mixins:[D.a],components:{ElTreeNode:Cc},data:function(){return{store:null,root:null,currentNode:null,treeItems:null,checkboxItems:[],dragState:{showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0}}},props:{data:{type:Array},emptyText:{type:String,default:function(){return Object(ti["t"])("el.tree.emptyText")}},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},iconClass:String},computed:{children:{set:function(e){this.data=e},get:function(){return this.data}},treeItemArray:function(){return Array.prototype.slice.call(this.treeItems)},isEmpty:function(){var e=this.root.childNodes;return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}},watch:{defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},data:function(e){this.store.setData(e)},checkboxItems:function(e){Array.prototype.forEach.call(e,(function(e){e.setAttribute("tabindex",-1)}))},checkStrictly:function(e){this.store.checkStrictly=e}},methods:{filter:function(e){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e)},getNodeKey:function(e){return rc(this.nodeKey,e.data)},getNodePath:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");var t=this.store.getNode(e);if(!t)return[];var n=[t.data],i=t.parent;while(i&&i!==this.root)n.push(i.data),i=i.parent;return n.reverse()},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e){return this.store.getCheckedKeys(e)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckedNodes:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,n){this.store.setChecked(e,t,n)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},handleNodeExpand:function(e,t,n){this.broadcast("ElTreeNode","tree-node-expand",t),this.$emit("node-expand",e,t,n)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)},initTabIndex:function(){this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]");var e=this.$el.querySelectorAll(".is-checked[role=treeitem]");e.length?e[0].setAttribute("tabindex",0):this.treeItems[0]&&this.treeItems[0].setAttribute("tabindex",0)},handleKeydown:function(e){var t=e.target;if(-1!==t.className.indexOf("el-tree-node")){var n=e.keyCode;this.treeItems=this.$el.querySelectorAll(".is-focusable[role=treeitem]");var i=this.treeItemArray.indexOf(t),r=void 0;[38,40].indexOf(n)>-1&&(e.preventDefault(),r=38===n?0!==i?i-1:0:i-1&&(e.preventDefault(),t.click());var o=t.querySelector('[type="checkbox"]');[13,32].indexOf(n)>-1&&o&&(e.preventDefault(),o.click())}}},created:function(){var e=this;this.isTree=!0,this.store=new gc({key:this.nodeKey,data:this.data,lazy:this.lazy,props:this.props,load:this.load,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly,checkDescendants:this.checkDescendants,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod}),this.root=this.store.root;var t=this.dragState;this.$on("tree-node-drag-start",(function(n,i){if("function"===typeof e.allowDrag&&!e.allowDrag(i.node))return n.preventDefault(),!1;n.dataTransfer.effectAllowed="move";try{n.dataTransfer.setData("text/plain","")}catch(r){}t.draggingNode=i,e.$emit("node-drag-start",i.node,n)})),this.$on("tree-node-drag-over",(function(n,i){var r=oc(n.target,"ElTreeNode"),o=t.dropNode;o&&o!==r&&Object(Le["removeClass"])(o.$el,"is-drop-inner");var a=t.draggingNode;if(a&&r){var s=!0,l=!0,c=!0,u=!0;"function"===typeof e.allowDrop&&(s=e.allowDrop(a.node,r.node,"prev"),u=l=e.allowDrop(a.node,r.node,"inner"),c=e.allowDrop(a.node,r.node,"next")),n.dataTransfer.dropEffect=l?"move":"none",(s||l||c)&&o!==r&&(o&&e.$emit("node-drag-leave",a.node,o.node,n),e.$emit("node-drag-enter",a.node,r.node,n)),(s||l||c)&&(t.dropNode=r),r.node.nextSibling===a.node&&(c=!1),r.node.previousSibling===a.node&&(s=!1),r.node.contains(a.node,!1)&&(l=!1),(a.node===r.node||a.node.contains(r.node))&&(s=!1,l=!1,c=!1);var d=r.$el.getBoundingClientRect(),h=e.$el.getBoundingClientRect(),f=void 0,p=s?l?.25:c?.45:1:-1,m=c?l?.75:s?.55:0:1,v=-9999,g=n.clientY-d.top;f=gd.height*m?"after":l?"inner":"none";var b=r.$el.querySelector(".el-tree-node__expand-icon").getBoundingClientRect(),y=e.$refs.dropIndicator;"before"===f?v=b.top-h.top:"after"===f&&(v=b.bottom-h.top),y.style.top=v+"px",y.style.left=b.right-h.left+"px","inner"===f?Object(Le["addClass"])(r.$el,"is-drop-inner"):Object(Le["removeClass"])(r.$el,"is-drop-inner"),t.showDropIndicator="before"===f||"after"===f,t.allowDrop=t.showDropIndicator||u,t.dropType=f,e.$emit("node-drag-over",a.node,r.node,n)}})),this.$on("tree-node-drag-end",(function(n){var i=t.draggingNode,r=t.dropType,o=t.dropNode;if(n.preventDefault(),n.dataTransfer.dropEffect="move",i&&o){var a={data:i.node.data};"none"!==r&&i.node.remove(),"before"===r?o.node.parent.insertBefore(a,o.node):"after"===r?o.node.parent.insertAfter(a,o.node):"inner"===r&&o.node.insertChild(a),"none"!==r&&e.store.registerNode(a),Object(Le["removeClass"])(o.$el,"is-drop-inner"),e.$emit("node-drag-end",i.node,o.node,r,n),"none"!==r&&e.$emit("node-drop",i.node,o.node,r,n)}i&&!o&&e.$emit("node-drag-end",i.node,null,r,n),t.showDropIndicator=!1,t.draggingNode=null,t.dropNode=null,t.allowDrop=!0}))},mounted:function(){this.initTabIndex(),this.$el.addEventListener("keydown",this.handleKeydown)},updated:function(){this.treeItems=this.$el.querySelectorAll("[role=treeitem]"),this.checkboxItems=this.$el.querySelectorAll("input[type=checkbox]")}},Sc=kc,Oc=s(Sc,ec,tc,!1,null,null,null);Oc.options.__file="packages/tree/src/tree.vue";var $c=Oc.exports;$c.install=function(e){e.component($c.name,$c)};var Dc=$c,Ec=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-alert-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-alert",class:[e.typeClass,e.center?"is-center":"","is-"+e.effect],attrs:{role:"alert"}},[e.showIcon?n("i",{staticClass:"el-alert__icon",class:[e.iconClass,e.isBigIcon]}):e._e(),n("div",{staticClass:"el-alert__content"},[e.title||e.$slots.title?n("span",{staticClass:"el-alert__title",class:[e.isBoldTitle]},[e._t("title",[e._v(e._s(e.title))])],2):e._e(),e.$slots.default&&!e.description?n("p",{staticClass:"el-alert__description"},[e._t("default")],2):e._e(),e.description&&!e.$slots.default?n("p",{staticClass:"el-alert__description"},[e._v(e._s(e.description))]):e._e(),n("i",{directives:[{name:"show",rawName:"v-show",value:e.closable,expression:"closable"}],staticClass:"el-alert__closebtn",class:{"is-customed":""!==e.closeText,"el-icon-close":""===e.closeText},on:{click:function(t){e.close()}}},[e._v(e._s(e.closeText))])])])])},Tc=[];Ec._withStripped=!0;var Pc={success:"el-icon-success",warning:"el-icon-warning",error:"el-icon-error"},Mc={name:"ElAlert",props:{title:{type:String,default:""},description:{type:String,default:""},type:{type:String,default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,default:"light",validator:function(e){return-1!==["light","dark"].indexOf(e)}}},data:function(){return{visible:!0}},methods:{close:function(){this.visible=!1,this.$emit("close")}},computed:{typeClass:function(){return"el-alert--"+this.type},iconClass:function(){return Pc[this.type]||"el-icon-info"},isBigIcon:function(){return this.description||this.$slots.default?"is-big":""},isBoldTitle:function(){return this.description||this.$slots.default?"is-bold":""}}},Ic=Mc,Nc=s(Ic,Ec,Tc,!1,null,null,null);Nc.options.__file="packages/alert/src/main.vue";var jc=Nc.exports;jc.install=function(e){e.component(jc.name,jc)};var Ac=jc,Fc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-notification-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-notification",e.customClass,e.horizontalClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:function(t){e.clearTimer()},mouseleave:function(t){e.startTimer()},click:e.click}},[e.type||e.iconClass?n("i",{staticClass:"el-notification__icon",class:[e.typeClass,e.iconClass]}):e._e(),n("div",{staticClass:"el-notification__group",class:{"is-with-icon":e.typeClass||e.iconClass}},[n("h2",{staticClass:"el-notification__title",domProps:{textContent:e._s(e.title)}}),n("div",{directives:[{name:"show",rawName:"v-show",value:e.message,expression:"message"}],staticClass:"el-notification__content"},[e._t("default",[e.dangerouslyUseHTMLString?n("p",{domProps:{innerHTML:e._s(e.message)}}):n("p",[e._v(e._s(e.message))])])],2),e.showClose?n("div",{staticClass:"el-notification__closeBtn el-icon-close",on:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()])])])},Lc=[];Fc._withStripped=!0;var Vc={success:"success",info:"info",warning:"warning",error:"error"},zc={data:function(){return{visible:!1,title:"",message:"",duration:4500,type:"",showClose:!0,customClass:"",iconClass:"",onClose:null,onClick:null,closed:!1,verticalOffset:0,timer:null,dangerouslyUseHTMLString:!1,position:"top-right"}},computed:{typeClass:function(){return this.type&&Vc[this.type]?"el-icon-"+Vc[this.type]:""},horizontalClass:function(){return this.position.indexOf("right")>-1?"right":"left"},verticalProperty:function(){return/^top-/.test(this.position)?"top":"bottom"},positionStyle:function(){var e;return e={},e[this.verticalProperty]=this.verticalOffset+"px",e}},watch:{closed:function(e){e&&(this.visible=!1,this.$el.addEventListener("transitionend",this.destroyElement))}},methods:{destroyElement:function(){this.$el.removeEventListener("transitionend",this.destroyElement),this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},click:function(){"function"===typeof this.onClick&&this.onClick()},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose()},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){46===e.keyCode||8===e.keyCode?this.clearTimer():27===e.keyCode?this.closed||this.close():this.startTimer()}},mounted:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration)),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},Bc=zc,Rc=s(Bc,Fc,Lc,!1,null,null,null);Rc.options.__file="packages/notification/src/main.vue";var Hc=Rc.exports,Wc=Wi.a.extend(Hc),qc=void 0,Uc=[],Yc=1,Kc=function e(t){if(!Wi.a.prototype.$isServer){t=St()({},t);var n=t.onClose,i="notification_"+Yc++,r=t.position||"top-right";t.onClose=function(){e.close(i,n)},qc=new Wc({data:t}),Object(ks["isVNode"])(t.message)&&(qc.$slots.default=[t.message],t.message="REPLACED_BY_VNODE"),qc.id=i,qc.$mount(),document.body.appendChild(qc.$el),qc.visible=!0,qc.dom=qc.$el,qc.dom.style.zIndex=C["PopupManager"].nextZIndex();var o=t.offset||0;return Uc.filter((function(e){return e.position===r})).forEach((function(e){o+=e.$el.offsetHeight+16})),o+=16,qc.verticalOffset=o,Uc.push(qc),qc}};["success","warning","info","error"].forEach((function(e){Kc[e]=function(t){return("string"===typeof t||Object(ks["isVNode"])(t))&&(t={message:t}),t.type=e,Kc(t)}})),Kc.close=function(e,t){var n=-1,i=Uc.length,r=Uc.filter((function(t,i){return t.id===e&&(n=i,!0)}))[0];if(r&&("function"===typeof t&&t(r),Uc.splice(n,1),!(i<=1)))for(var o=r.position,a=r.dom.offsetHeight,s=n;s=0;e--)Uc[e].close()};var Gc=Kc,Xc=Gc,Zc=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-slider",class:{"is-vertical":e.vertical,"el-slider--with-input":e.showInput},attrs:{role:"slider","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-orientation":e.vertical?"vertical":"horizontal","aria-disabled":e.sliderDisabled}},[e.showInput&&!e.range?n("el-input-number",{ref:"input",staticClass:"el-slider__input",attrs:{step:e.step,disabled:e.sliderDisabled,controls:e.showInputControls,min:e.min,max:e.max,debounce:e.debounce,size:e.inputSize},on:{change:e.emitChange},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}):e._e(),n("div",{ref:"slider",staticClass:"el-slider__runway",class:{"show-input":e.showInput,disabled:e.sliderDisabled},style:e.runwayStyle,on:{click:e.onSliderClick}},[n("div",{staticClass:"el-slider__bar",style:e.barStyle}),n("slider-button",{ref:"button1",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.firstValue,callback:function(t){e.firstValue=t},expression:"firstValue"}}),e.range?n("slider-button",{ref:"button2",attrs:{vertical:e.vertical,"tooltip-class":e.tooltipClass},model:{value:e.secondValue,callback:function(t){e.secondValue=t},expression:"secondValue"}}):e._e(),e._l(e.stops,(function(t,i){return e.showStops?n("div",{key:i,staticClass:"el-slider__stop",style:e.getStopStyle(t)}):e._e()})),e.markList.length>0?[n("div",e._l(e.markList,(function(t,i){return n("div",{key:i,staticClass:"el-slider__stop el-slider__marks-stop",style:e.getStopStyle(t.position)})})),0),n("div",{staticClass:"el-slider__marks"},e._l(e.markList,(function(t,i){return n("slider-marker",{key:i,style:e.getStopStyle(t.position),attrs:{mark:t.mark}})})),1)]:e._e()],2)],1)},Jc=[];Zc._withStripped=!0;var Qc=n(41),eu=n.n(Qc),tu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"button",staticClass:"el-slider__button-wrapper",class:{hover:e.hovering,dragging:e.dragging},style:e.wrapperStyle,attrs:{tabindex:"0"},on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave,mousedown:e.onButtonDown,touchstart:e.onButtonDown,focus:e.handleMouseEnter,blur:e.handleMouseLeave,keydown:[function(t){return"button"in t||!e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])?"button"in t&&0!==t.button?null:e.onLeftKeyDown(t):null},function(t){return"button"in t||!e._k(t.keyCode,"right",39,t.key,["Right","ArrowRight"])?"button"in t&&2!==t.button?null:e.onRightKeyDown(t):null},function(t){return"button"in t||!e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?(t.preventDefault(),e.onLeftKeyDown(t)):null},function(t){return"button"in t||!e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?(t.preventDefault(),e.onRightKeyDown(t)):null}]}},[n("el-tooltip",{ref:"tooltip",attrs:{placement:"top","popper-class":e.tooltipClass,disabled:!e.showTooltip}},[n("span",{attrs:{slot:"content"},slot:"content"},[e._v(e._s(e.formatValue))]),n("div",{staticClass:"el-slider__button",class:{hover:e.hovering,dragging:e.dragging}})])],1)},nu=[];tu._withStripped=!0;var iu={name:"ElSliderButton",components:{ElTooltip:rt.a},props:{value:{type:Number,default:0},vertical:{type:Boolean,default:!1},tooltipClass:String},data:function(){return{hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:null,oldValue:this.value}},computed:{disabled:function(){return this.$parent.sliderDisabled},max:function(){return this.$parent.max},min:function(){return this.$parent.min},step:function(){return this.$parent.step},showTooltip:function(){return this.$parent.showTooltip},precision:function(){return this.$parent.precision},currentPosition:function(){return(this.value-this.min)/(this.max-this.min)*100+"%"},enableFormat:function(){return this.$parent.formatTooltip instanceof Function},formatValue:function(){return this.enableFormat&&this.$parent.formatTooltip(this.value)||this.value},wrapperStyle:function(){return this.vertical?{bottom:this.currentPosition}:{left:this.currentPosition}}},watch:{dragging:function(e){this.$parent.dragging=e}},methods:{displayTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!0)},hideTooltip:function(){this.$refs.tooltip&&(this.$refs.tooltip.showPopper=!1)},handleMouseEnter:function(){this.hovering=!0,this.displayTooltip()},handleMouseLeave:function(){this.hovering=!1,this.hideTooltip()},onButtonDown:function(e){this.disabled||(e.preventDefault(),this.onDragStart(e),window.addEventListener("mousemove",this.onDragging),window.addEventListener("touchmove",this.onDragging),window.addEventListener("mouseup",this.onDragEnd),window.addEventListener("touchend",this.onDragEnd),window.addEventListener("contextmenu",this.onDragEnd))},onLeftKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)-this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onRightKeyDown:function(){this.disabled||(this.newPosition=parseFloat(this.currentPosition)+this.step/(this.max-this.min)*100,this.setPosition(this.newPosition),this.$parent.emitChange())},onDragStart:function(e){this.dragging=!0,this.isClick=!0,"touchstart"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?this.startY=e.clientY:this.startX=e.clientX,this.startPosition=parseFloat(this.currentPosition),this.newPosition=this.startPosition},onDragging:function(e){if(this.dragging){this.isClick=!1,this.displayTooltip(),this.$parent.resetSize();var t=0;"touchmove"===e.type&&(e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX),this.vertical?(this.currentY=e.clientY,t=(this.startY-this.currentY)/this.$parent.sliderSize*100):(this.currentX=e.clientX,t=(this.currentX-this.startX)/this.$parent.sliderSize*100),this.newPosition=this.startPosition+t,this.setPosition(this.newPosition)}},onDragEnd:function(){var e=this;this.dragging&&(setTimeout((function(){e.dragging=!1,e.hideTooltip(),e.isClick||(e.setPosition(e.newPosition),e.$parent.emitChange())}),0),window.removeEventListener("mousemove",this.onDragging),window.removeEventListener("touchmove",this.onDragging),window.removeEventListener("mouseup",this.onDragEnd),window.removeEventListener("touchend",this.onDragEnd),window.removeEventListener("contextmenu",this.onDragEnd))},setPosition:function(e){var t=this;if(null!==e&&!isNaN(e)){e<0?e=0:e>100&&(e=100);var n=100/((this.max-this.min)/this.step),i=Math.round(e/n),r=i*n*(this.max-this.min)*.01+this.min;r=parseFloat(r.toFixed(this.precision)),this.$emit("input",r),this.$nextTick((function(){t.displayTooltip(),t.$refs.tooltip&&t.$refs.tooltip.updatePopper()})),this.dragging||this.value===this.oldValue||(this.oldValue=this.value)}}}},ru=iu,ou=s(ru,tu,nu,!1,null,null,null);ou.options.__file="packages/slider/src/button.vue";var au=ou.exports,su={name:"ElMarker",props:{mark:{type:[String,Object]}},render:function(){var e=arguments[0],t="string"===typeof this.mark?this.mark:this.mark.label;return e("div",{class:"el-slider__marks-text",style:this.mark.style||{}},[t])}},lu={name:"ElSlider",mixins:[D.a],inject:{elForm:{default:""}},props:{min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},value:{type:[Number,Array],default:0},showInput:{type:Boolean,default:!1},showInputControls:{type:Boolean,default:!0},inputSize:{type:String,default:"small"},showStops:{type:Boolean,default:!1},showTooltip:{type:Boolean,default:!0},formatTooltip:Function,disabled:{type:Boolean,default:!1},range:{type:Boolean,default:!1},vertical:{type:Boolean,default:!1},height:{type:String},debounce:{type:Number,default:300},label:{type:String},tooltipClass:String,marks:Object},components:{ElInputNumber:eu.a,SliderButton:au,SliderMarker:su},data:function(){return{firstValue:null,secondValue:null,oldValue:null,dragging:!1,sliderSize:1}},watch:{value:function(e,t){this.dragging||Array.isArray(e)&&Array.isArray(t)&&e.every((function(e,n){return e===t[n]}))||this.setValues()},dragging:function(e){e||this.setValues()},firstValue:function(e){this.range?this.$emit("input",[this.minValue,this.maxValue]):this.$emit("input",e)},secondValue:function(){this.range&&this.$emit("input",[this.minValue,this.maxValue])},min:function(){this.setValues()},max:function(){this.setValues()}},methods:{valueChanged:function(){var e=this;return this.range?![this.minValue,this.maxValue].every((function(t,n){return t===e.oldValue[n]})):this.value!==this.oldValue},setValues:function(){if(this.min>this.max)console.error("[Element Error][Slider]min should not be greater than max.");else{var e=this.value;this.range&&Array.isArray(e)?e[1]this.max?this.$emit("input",[this.max,this.max]):e[0]this.max?this.$emit("input",[e[0],this.max]):(this.firstValue=e[0],this.secondValue=e[1],this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",[this.minValue,this.maxValue]),this.oldValue=e.slice())):this.range||"number"!==typeof e||isNaN(e)||(ethis.max?this.$emit("input",this.max):(this.firstValue=e,this.valueChanged()&&(this.dispatch("ElFormItem","el.form.change",e),this.oldValue=e)))}},setPosition:function(e){var t=this.min+e*(this.max-this.min)/100;if(this.range){var n=void 0;n=Math.abs(this.minValue-t)this.secondValue?"button1":"button2",this.$refs[n].setPosition(e)}else this.$refs.button1.setPosition(e)},onSliderClick:function(e){if(!this.sliderDisabled&&!this.dragging){if(this.resetSize(),this.vertical){var t=this.$refs.slider.getBoundingClientRect().bottom;this.setPosition((t-e.clientY)/this.sliderSize*100)}else{var n=this.$refs.slider.getBoundingClientRect().left;this.setPosition((e.clientX-n)/this.sliderSize*100)}this.emitChange()}},resetSize:function(){this.$refs.slider&&(this.sliderSize=this.$refs.slider["client"+(this.vertical?"Height":"Width")])},emitChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.range?[e.minValue,e.maxValue]:e.value)}))},getStopStyle:function(e){return this.vertical?{bottom:e+"%"}:{left:e+"%"}}},computed:{stops:function(){var e=this;if(!this.showStops||this.min>this.max)return[];if(0===this.step)return[];for(var t=(this.max-this.min)/this.step,n=100*this.step/(this.max-this.min),i=[],r=1;r100*(e.maxValue-e.min)/(e.max-e.min)})):i.filter((function(t){return t>100*(e.firstValue-e.min)/(e.max-e.min)}))},markList:function(){var e=this;if(!this.marks)return[];var t=Object.keys(this.marks);return t.map(parseFloat).sort((function(e,t){return e-t})).filter((function(t){return t<=e.max&&t>=e.min})).map((function(t){return{point:t,position:100*(t-e.min)/(e.max-e.min),mark:e.marks[t]}}))},minValue:function(){return Math.min(this.firstValue,this.secondValue)},maxValue:function(){return Math.max(this.firstValue,this.secondValue)},barSize:function(){return this.range?100*(this.maxValue-this.minValue)/(this.max-this.min)+"%":100*(this.firstValue-this.min)/(this.max-this.min)+"%"},barStart:function(){return this.range?100*(this.minValue-this.min)/(this.max-this.min)+"%":"0%"},precision:function(){var e=[this.min,this.max,this.step].map((function(e){var t=(""+e).split(".")[1];return t?t.length:0}));return Math.max.apply(null,e)},runwayStyle:function(){return this.vertical?{height:this.height}:{}},barStyle:function(){return this.vertical?{height:this.barSize,bottom:this.barStart}:{width:this.barSize,left:this.barStart}},sliderDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},mounted:function(){var e=void 0;this.range?(Array.isArray(this.value)?(this.firstValue=Math.max(this.min,this.value[0]),this.secondValue=Math.min(this.max,this.value[1])):(this.firstValue=this.min,this.secondValue=this.max),this.oldValue=[this.firstValue,this.secondValue],e=this.firstValue+"-"+this.secondValue):("number"!==typeof this.value||isNaN(this.value)?this.firstValue=this.min:this.firstValue=Math.min(this.max,Math.max(this.min,this.value)),this.oldValue=this.firstValue,e=this.firstValue),this.$el.setAttribute("aria-valuetext",e),this.$el.setAttribute("aria-label",this.label?this.label:"slider between "+this.min+" and "+this.max),this.resetSize(),window.addEventListener("resize",this.resetSize)},beforeDestroy:function(){window.removeEventListener("resize",this.resetSize)}},cu=lu,uu=s(cu,Zc,Jc,!1,null,null,null);uu.options.__file="packages/slider/src/main.vue";var du=uu.exports;du.install=function(e){e.component(du.name,du)};var hu=du,fu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-loading-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-loading-mask",class:[e.customClass,{"is-fullscreen":e.fullscreen}],style:{backgroundColor:e.background||""}},[n("div",{staticClass:"el-loading-spinner"},[e.spinner?n("i",{class:e.spinner}):n("svg",{staticClass:"circular",attrs:{viewBox:"25 25 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none"}})]),e.text?n("p",{staticClass:"el-loading-text"},[e._v(e._s(e.text))]):e._e()])])])},pu=[];fu._withStripped=!0;var mu={data:function(){return{text:null,spinner:null,background:null,fullscreen:!0,visible:!1,customClass:""}},methods:{handleAfterLeave:function(){this.$emit("after-leave")},setText:function(e){this.text=e}}},vu=mu,gu=s(vu,fu,pu,!1,null,null,null);gu.options.__file="packages/loading/src/loading.vue";var bu=gu.exports,yu=n(31),_u=n.n(yu),xu=Wi.a.extend(bu),wu={install:function(e){if(!e.prototype.$isServer){var t=function(t,i){i.value?e.nextTick((function(){i.modifiers.fullscreen?(t.originalPosition=Object(Le["getStyle"])(document.body,"position"),t.originalOverflow=Object(Le["getStyle"])(document.body,"overflow"),t.maskStyle.zIndex=C["PopupManager"].nextZIndex(),Object(Le["addClass"])(t.mask,"is-fullscreen"),n(document.body,t,i)):(Object(Le["removeClass"])(t.mask,"is-fullscreen"),i.modifiers.body?(t.originalPosition=Object(Le["getStyle"])(document.body,"position"),["top","left"].forEach((function(e){var n="top"===e?"scrollTop":"scrollLeft";t.maskStyle[e]=t.getBoundingClientRect()[e]+document.body[n]+document.documentElement[n]-parseInt(Object(Le["getStyle"])(document.body,"margin-"+e),10)+"px"})),["height","width"].forEach((function(e){t.maskStyle[e]=t.getBoundingClientRect()[e]+"px"})),n(document.body,t,i)):(t.originalPosition=Object(Le["getStyle"])(t,"position"),n(t,t,i)))})):(_u()(t.instance,(function(e){if(t.instance.hiding){t.domVisible=!1;var n=i.modifiers.fullscreen||i.modifiers.body?document.body:t;Object(Le["removeClass"])(n,"el-loading-parent--relative"),Object(Le["removeClass"])(n,"el-loading-parent--hidden"),t.instance.hiding=!1}}),300,!0),t.instance.visible=!1,t.instance.hiding=!0)},n=function(t,n,i){n.domVisible||"none"===Object(Le["getStyle"])(n,"display")||"hidden"===Object(Le["getStyle"])(n,"visibility")?n.domVisible&&!0===n.instance.hiding&&(n.instance.visible=!0,n.instance.hiding=!1):(Object.keys(n.maskStyle).forEach((function(e){n.mask.style[e]=n.maskStyle[e]})),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(Le["addClass"])(t,"el-loading-parent--relative"),i.modifiers.fullscreen&&i.modifiers.lock&&Object(Le["addClass"])(t,"el-loading-parent--hidden"),n.domVisible=!0,t.appendChild(n.mask),e.nextTick((function(){n.instance.hiding?n.instance.$emit("after-leave"):n.instance.visible=!0})),n.domInserted=!0)};e.directive("loading",{bind:function(e,n,i){var r=e.getAttribute("element-loading-text"),o=e.getAttribute("element-loading-spinner"),a=e.getAttribute("element-loading-background"),s=e.getAttribute("element-loading-custom-class"),l=i.context,c=new xu({el:document.createElement("div"),data:{text:l&&l[r]||r,spinner:l&&l[o]||o,background:l&&l[a]||a,customClass:l&&l[s]||s,fullscreen:!!n.modifiers.fullscreen}});e.instance=c,e.mask=c.$el,e.maskStyle={},n.value&&t(e,n)},update:function(e,n){e.instance.setText(e.getAttribute("element-loading-text")),n.oldValue!==n.value&&t(e,n)},unbind:function(e,n){e.domInserted&&(e.mask&&e.mask.parentNode&&e.mask.parentNode.removeChild(e.mask),t(e,{value:!1,modifiers:n.modifiers})),e.instance&&e.instance.$destroy()}})}}},Cu=wu,ku=Wi.a.extend(bu),Su={text:null,fullscreen:!0,body:!1,lock:!1,customClass:""},Ou=void 0;ku.prototype.originalPosition="",ku.prototype.originalOverflow="",ku.prototype.close=function(){var e=this;this.fullscreen&&(Ou=void 0),_u()(this,(function(t){var n=e.fullscreen||e.body?document.body:e.target;Object(Le["removeClass"])(n,"el-loading-parent--relative"),Object(Le["removeClass"])(n,"el-loading-parent--hidden"),e.$el&&e.$el.parentNode&&e.$el.parentNode.removeChild(e.$el),e.$destroy()}),300),this.visible=!1};var $u=function(e,t,n){var i={};e.fullscreen?(n.originalPosition=Object(Le["getStyle"])(document.body,"position"),n.originalOverflow=Object(Le["getStyle"])(document.body,"overflow"),i.zIndex=C["PopupManager"].nextZIndex()):e.body?(n.originalPosition=Object(Le["getStyle"])(document.body,"position"),["top","left"].forEach((function(t){var n="top"===t?"scrollTop":"scrollLeft";i[t]=e.target.getBoundingClientRect()[t]+document.body[n]+document.documentElement[n]+"px"})),["height","width"].forEach((function(t){i[t]=e.target.getBoundingClientRect()[t]+"px"}))):n.originalPosition=Object(Le["getStyle"])(t,"position"),Object.keys(i).forEach((function(e){n.$el.style[e]=i[e]}))},Du=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Wi.a.prototype.$isServer){if(e=St()({},Su,e),"string"===typeof e.target&&(e.target=document.querySelector(e.target)),e.target=e.target||document.body,e.target!==document.body?e.fullscreen=!1:e.body=!0,e.fullscreen&&Ou)return Ou;var t=e.body?document.body:e.target,n=new ku({el:document.createElement("div"),data:e});return $u(e,t,n),"absolute"!==n.originalPosition&&"fixed"!==n.originalPosition&&Object(Le["addClass"])(t,"el-loading-parent--relative"),e.fullscreen&&e.lock&&Object(Le["addClass"])(t,"el-loading-parent--hidden"),t.appendChild(n.$el),Wi.a.nextTick((function(){n.visible=!0})),e.fullscreen&&(Ou=n),n}},Eu=Du,Tu={install:function(e){e.use(Cu),e.prototype.$loading=Eu},directive:Cu,service:Eu},Pu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("i",{class:"el-icon-"+e.name})},Mu=[];Pu._withStripped=!0;var Iu={name:"ElIcon",props:{name:String}},Nu=Iu,ju=s(Nu,Pu,Mu,!1,null,null,null);ju.options.__file="packages/icon/src/icon.vue";var Au=ju.exports;Au.install=function(e){e.component(Au.name,Au)};var Fu=Au,Lu={name:"ElRow",componentName:"ElRow",props:{tag:{type:String,default:"div"},gutter:Number,type:String,justify:{type:String,default:"start"},align:{type:String,default:"top"}},computed:{style:function(){var e={};return this.gutter&&(e.marginLeft="-"+this.gutter/2+"px",e.marginRight=e.marginLeft),e}},render:function(e){return e(this.tag,{class:["el-row","start"!==this.justify?"is-justify-"+this.justify:"","top"!==this.align?"is-align-"+this.align:"",{"el-row--flex":"flex"===this.type}],style:this.style},this.$slots.default)},install:function(e){e.component(Lu.name,Lu)}},Vu=Lu,zu="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bu={name:"ElCol",props:{span:{type:Number,default:24},tag:{type:String,default:"div"},offset:Number,pull:Number,push:Number,xs:[Number,Object],sm:[Number,Object],md:[Number,Object],lg:[Number,Object],xl:[Number,Object]},computed:{gutter:function(){var e=this.$parent;while(e&&"ElRow"!==e.$options.componentName)e=e.$parent;return e?e.gutter:0}},render:function(e){var t=this,n=[],i={};return this.gutter&&(i.paddingLeft=this.gutter/2+"px",i.paddingRight=i.paddingLeft),["span","offset","pull","push"].forEach((function(e){(t[e]||0===t[e])&&n.push("span"!==e?"el-col-"+e+"-"+t[e]:"el-col-"+t[e])})),["xs","sm","md","lg","xl"].forEach((function(e){if("number"===typeof t[e])n.push("el-col-"+e+"-"+t[e]);else if("object"===zu(t[e])){var i=t[e];Object.keys(i).forEach((function(t){n.push("span"!==t?"el-col-"+e+"-"+t+"-"+i[t]:"el-col-"+e+"-"+i[t])}))}})),e(this.tag,{class:["el-col",n],style:i},this.$slots.default)},install:function(e){e.component(Bu.name,Bu)}},Ru=Bu,Hu=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition-group",{class:["el-upload-list","el-upload-list--"+e.listType,{"is-disabled":e.disabled}],attrs:{tag:"ul",name:"el-list"}},e._l(e.files,(function(t){return n("li",{key:t.uid,class:["el-upload-list__item","is-"+t.status,e.focusing?"focusing":""],attrs:{tabindex:"0"},on:{keydown:function(n){if(!("button"in n)&&e._k(n.keyCode,"delete",[8,46],n.key,["Backspace","Delete","Del"]))return null;!e.disabled&&e.$emit("remove",t)},focus:function(t){e.focusing=!0},blur:function(t){e.focusing=!1},click:function(t){e.focusing=!1}}},[e._t("default",["uploading"!==t.status&&["picture-card","picture"].indexOf(e.listType)>-1?n("img",{staticClass:"el-upload-list__item-thumbnail",attrs:{src:t.url,alt:""}}):e._e(),n("a",{staticClass:"el-upload-list__item-name",on:{click:function(n){e.handleClick(t)}}},[n("i",{staticClass:"el-icon-document"}),e._v(e._s(t.name)+"\n ")]),n("label",{staticClass:"el-upload-list__item-status-label"},[n("i",{class:{"el-icon-upload-success":!0,"el-icon-circle-check":"text"===e.listType,"el-icon-check":["picture-card","picture"].indexOf(e.listType)>-1}})]),e.disabled?e._e():n("i",{staticClass:"el-icon-close",on:{click:function(n){e.$emit("remove",t)}}}),e.disabled?e._e():n("i",{staticClass:"el-icon-close-tip"},[e._v(e._s(e.t("el.upload.deleteTip")))]),"uploading"===t.status?n("el-progress",{attrs:{type:"picture-card"===e.listType?"circle":"line","stroke-width":"picture-card"===e.listType?6:2,percentage:e.parsePercentage(t.percentage)}}):e._e(),"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-actions"},[e.handlePreview&&"picture-card"===e.listType?n("span",{staticClass:"el-upload-list__item-preview",on:{click:function(n){e.handlePreview(t)}}},[n("i",{staticClass:"el-icon-zoom-in"})]):e._e(),e.disabled?e._e():n("span",{staticClass:"el-upload-list__item-delete",on:{click:function(n){e.$emit("remove",t)}}},[n("i",{staticClass:"el-icon-delete"})])]):e._e()],{file:t})],2)})),0)},Wu=[];Hu._withStripped=!0;var qu=n(32),Uu=n.n(qu),Yu={name:"ElUploadList",mixins:[g.a],data:function(){return{focusing:!1}},components:{ElProgress:Uu.a},props:{files:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},handlePreview:Function,listType:String},methods:{parsePercentage:function(e){return parseInt(e,10)},handleClick:function(e){this.handlePreview&&this.handlePreview(e)}}},Ku=Yu,Gu=s(Ku,Hu,Wu,!1,null,null,null);Gu.options.__file="packages/upload/src/upload-list.vue";var Xu=Gu.exports,Zu=n(24),Ju=n.n(Zu);function Qu(e,t,n){var i=void 0;i=n.response?""+(n.response.error||n.response):n.responseText?""+n.responseText:"fail to post "+e+" "+n.status;var r=new Error(i);return r.status=n.status,r.method="post",r.url=e,r}function ed(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(n){return t}}function td(e){if("undefined"!==typeof XMLHttpRequest){var t=new XMLHttpRequest,n=e.action;t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var i=new FormData;e.data&&Object.keys(e.data).forEach((function(t){i.append(t,e.data[t])})),i.append(e.filename,e.file,e.file.name),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300)return e.onError(Qu(n,e,t));e.onSuccess(ed(t))},t.open("post",n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};for(var o in r)r.hasOwnProperty(o)&&null!==r[o]&&t.setRequestHeader(o,r[o]);return t.send(i),t}}var nd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-upload-dragger",class:{"is-dragover":e.dragover},on:{drop:function(t){return t.preventDefault(),e.onDrop(t)},dragover:function(t){return t.preventDefault(),e.onDragover(t)},dragleave:function(t){t.preventDefault(),e.dragover=!1}}},[e._t("default")],2)},id=[];nd._withStripped=!0;var rd={name:"ElUploadDrag",props:{disabled:Boolean},inject:{uploader:{default:""}},data:function(){return{dragover:!1}},methods:{onDragover:function(){this.disabled||(this.dragover=!0)},onDrop:function(e){if(!this.disabled&&this.uploader){var t=this.uploader.accept;this.dragover=!1,t?this.$emit("file",[].slice.call(e.dataTransfer.files).filter((function(e){var n=e.type,i=e.name,r=i.indexOf(".")>-1?"."+i.split(".").pop():"",o=n.replace(/\/.*$/,"");return t.split(",").map((function(e){return e.trim()})).filter((function(e){return e})).some((function(e){return/\..+$/.test(e)?r===e:/\/\*$/.test(e)?o===e.replace(/\/\*$/,""):!!/^[^\/]+\/[^\/]+$/.test(e)&&n===e}))}))):this.$emit("file",e.dataTransfer.files)}}}},od=rd,ad=s(od,nd,id,!1,null,null,null);ad.options.__file="packages/upload/src/upload-dragger.vue";var sd,ld,cd=ad.exports,ud={inject:["uploader"],components:{UploadDragger:cd},props:{type:String,action:{type:String,required:!0},name:{type:String,default:"file"},data:Object,headers:Object,withCredentials:Boolean,multiple:Boolean,accept:String,onStart:Function,onProgress:Function,onSuccess:Function,onError:Function,beforeUpload:Function,drag:Boolean,onPreview:{type:Function,default:function(){}},onRemove:{type:Function,default:function(){}},fileList:Array,autoUpload:Boolean,listType:String,httpRequest:{type:Function,default:td},disabled:Boolean,limit:Number,onExceed:Function},data:function(){return{mouseover:!1,reqs:{}}},methods:{isImage:function(e){return-1!==e.indexOf("image")},handleChange:function(e){var t=e.target.files;t&&this.uploadFiles(t)},uploadFiles:function(e){var t=this;if(this.limit&&this.fileList.length+e.length>this.limit)this.onExceed&&this.onExceed(e,this.fileList);else{var n=Array.prototype.slice.call(e);this.multiple||(n=n.slice(0,1)),0!==n.length&&n.forEach((function(e){t.onStart(e),t.autoUpload&&t.upload(e)}))}},upload:function(e){var t=this;if(this.$refs.input.value=null,!this.beforeUpload)return this.post(e);var n=this.beforeUpload(e);n&&n.then?n.then((function(n){var i=Object.prototype.toString.call(n);if("[object File]"===i||"[object Blob]"===i){for(var r in"[object Blob]"===i&&(n=new File([n],e.name,{type:e.type})),e)e.hasOwnProperty(r)&&(n[r]=e[r]);t.post(n)}else t.post(e)}),(function(){t.onRemove(null,e)})):!1!==n?this.post(e):this.onRemove(null,e)},abort:function(e){var t=this.reqs;if(e){var n=e;e.uid&&(n=e.uid),t[n]&&t[n].abort()}else Object.keys(t).forEach((function(e){t[e]&&t[e].abort(),delete t[e]}))},post:function(e){var t=this,n=e.uid,i={headers:this.headers,withCredentials:this.withCredentials,file:e,data:this.data,filename:this.name,action:this.action,onProgress:function(n){t.onProgress(n,e)},onSuccess:function(i){t.onSuccess(i,e),delete t.reqs[n]},onError:function(i){t.onError(i,e),delete t.reqs[n]}},r=this.httpRequest(i);this.reqs[n]=r,r&&r.then&&r.then(i.onSuccess,i.onError)},handleClick:function(){this.disabled||(this.$refs.input.value=null,this.$refs.input.click())},handleKeydown:function(e){e.target===e.currentTarget&&(13!==e.keyCode&&32!==e.keyCode||this.handleClick())}},render:function(e){var t=this.handleClick,n=this.drag,i=this.name,r=this.handleChange,o=this.multiple,a=this.accept,s=this.listType,l=this.uploadFiles,c=this.disabled,u=this.handleKeydown,d={class:{"el-upload":!0},on:{click:t,keydown:u}};return d.class["el-upload--"+s]=!0,e("div",Ju()([d,{attrs:{tabindex:"0"}}]),[n?e("upload-dragger",{attrs:{disabled:c},on:{file:l}},[this.$slots.default]):this.$slots.default,e("input",{class:"el-upload__input",attrs:{type:"file",name:i,multiple:o,accept:a},ref:"input",on:{change:r}})])}},dd=ud,hd=s(dd,sd,ld,!1,null,null,null);hd.options.__file="packages/upload/src/upload.vue";var fd=hd.exports;function pd(){}var md,vd,gd={name:"ElUpload",mixins:[O.a],components:{ElProgress:Uu.a,UploadList:Xu,Upload:fd},provide:function(){return{uploader:this}},inject:{elForm:{default:""}},props:{action:{type:String,required:!0},headers:{type:Object,default:function(){return{}}},data:Object,multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,dragger:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:String,type:{type:String,default:"select"},beforeUpload:Function,beforeRemove:Function,onRemove:{type:Function,default:pd},onChange:{type:Function,default:pd},onPreview:{type:Function},onSuccess:{type:Function,default:pd},onProgress:{type:Function,default:pd},onError:{type:Function,default:pd},fileList:{type:Array,default:function(){return[]}},autoUpload:{type:Boolean,default:!0},listType:{type:String,default:"text"},httpRequest:Function,disabled:Boolean,limit:Number,onExceed:{type:Function,default:pd}},data:function(){return{uploadFiles:[],dragOver:!1,draging:!1,tempIndex:1}},computed:{uploadDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{listType:function(e){"picture-card"!==e&&"picture"!==e||(this.uploadFiles=this.uploadFiles.map((function(e){if(!e.url&&e.raw)try{e.url=URL.createObjectURL(e.raw)}catch(t){console.error("[Element Error][Upload]",t)}return e})))},fileList:{immediate:!0,handler:function(e){var t=this;this.uploadFiles=e.map((function(e){return e.uid=e.uid||Date.now()+t.tempIndex++,e.status=e.status||"success",e}))}}},methods:{handleStart:function(e){e.uid=Date.now()+this.tempIndex++;var t={status:"ready",name:e.name,size:e.size,percentage:0,uid:e.uid,raw:e};if("picture-card"===this.listType||"picture"===this.listType)try{t.url=URL.createObjectURL(e)}catch(n){return void console.error("[Element Error][Upload]",n)}this.uploadFiles.push(t),this.onChange(t,this.uploadFiles)},handleProgress:function(e,t){var n=this.getFile(t);this.onProgress(e,n,this.uploadFiles),n.status="uploading",n.percentage=e.percent||0},handleSuccess:function(e,t){var n=this.getFile(t);n&&(n.status="success",n.response=e,this.onSuccess(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles))},handleError:function(e,t){var n=this.getFile(t),i=this.uploadFiles;n.status="fail",i.splice(i.indexOf(n),1),this.onError(e,n,this.uploadFiles),this.onChange(n,this.uploadFiles)},handleRemove:function(e,t){var n=this;t&&(e=this.getFile(t));var i=function(){n.abort(e);var t=n.uploadFiles;t.splice(t.indexOf(e),1),n.onRemove(e,t)};if(this.beforeRemove){if("function"===typeof this.beforeRemove){var r=this.beforeRemove(e,this.uploadFiles);r&&r.then?r.then((function(){i()}),pd):!1!==r&&i()}}else i()},getFile:function(e){var t=this.uploadFiles,n=void 0;return t.every((function(t){return n=e.uid===t.uid?t:null,!n})),n},abort:function(e){this.$refs["upload-inner"].abort(e)},clearFiles:function(){this.uploadFiles=[]},submit:function(){var e=this;this.uploadFiles.filter((function(e){return"ready"===e.status})).forEach((function(t){e.$refs["upload-inner"].upload(t.raw)}))},getMigratingConfig:function(){return{props:{"default-file-list":"default-file-list is renamed to file-list.","show-upload-list":"show-upload-list is renamed to show-file-list.","thumbnail-mode":"thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan"}}}},beforeDestroy:function(){this.uploadFiles.forEach((function(e){e.url&&0===e.url.indexOf("blob:")&&URL.revokeObjectURL(e.url)}))},render:function(e){var t=this,n=void 0;this.showFileList&&(n=e(Xu,{attrs:{disabled:this.uploadDisabled,listType:this.listType,files:this.uploadFiles,handlePreview:this.onPreview},on:{remove:this.handleRemove}},[function(e){if(t.$scopedSlots.file)return t.$scopedSlots.file({file:e.file})}]));var i={props:{type:this.type,drag:this.drag,action:this.action,multiple:this.multiple,"before-upload":this.beforeUpload,"with-credentials":this.withCredentials,headers:this.headers,name:this.name,data:this.data,accept:this.accept,fileList:this.uploadFiles,autoUpload:this.autoUpload,listType:this.listType,disabled:this.uploadDisabled,limit:this.limit,"on-exceed":this.onExceed,"on-start":this.handleStart,"on-progress":this.handleProgress,"on-success":this.handleSuccess,"on-error":this.handleError,"on-preview":this.onPreview,"on-remove":this.handleRemove,"http-request":this.httpRequest},ref:"upload-inner"},r=this.$slots.trigger||this.$slots.default,o=e("upload",i,[r]);return e("div",["picture-card"===this.listType?n:"",this.$slots.trigger?[o,this.$slots.default]:o,this.$slots.tip,"picture-card"!==this.listType?n:""])}},bd=gd,yd=s(bd,md,vd,!1,null,null,null);yd.options.__file="packages/upload/src/index.vue";var _d=yd.exports;_d.install=function(e){e.component(_d.name,_d)};var xd=_d,wd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":"round","stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},Cd=[];wd._withStripped=!0;var kd={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;ne)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},Sd=kd,Od=s(Sd,wd,Cd,!1,null,null,null);Od.options.__file="packages/progress/src/progress.vue";var $d=Od.exports;$d.install=function(e){e.component($d.name,$d)};var Dd=$d,Ed=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{staticClass:"el-spinner"},[n("svg",{staticClass:"el-spinner-inner",style:{width:e.radius/2+"px",height:e.radius/2+"px"},attrs:{viewBox:"0 0 50 50"}},[n("circle",{staticClass:"path",attrs:{cx:"25",cy:"25",r:"20",fill:"none",stroke:e.strokeColor,"stroke-width":e.strokeWidth}})])])},Td=[];Ed._withStripped=!0;var Pd={name:"ElSpinner",props:{type:String,radius:{type:Number,default:100},strokeWidth:{type:Number,default:5},strokeColor:{type:String,default:"#efefef"}}},Md=Pd,Id=s(Md,Ed,Td,!1,null,null,null);Id.options.__file="packages/spinner/src/spinner.vue";var Nd=Id.exports;Nd.install=function(e){e.component(Nd.name,Nd)};var jd=Nd,Ad=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-message-fade"},on:{"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:["el-message",e.type&&!e.iconClass?"el-message--"+e.type:"",e.center?"is-center":"",e.showClose?"is-closable":"",e.customClass],style:e.positionStyle,attrs:{role:"alert"},on:{mouseenter:e.clearTimer,mouseleave:e.startTimer}},[e.iconClass?n("i",{class:e.iconClass}):n("i",{class:e.typeClass}),e._t("default",[e.dangerouslyUseHTMLString?n("p",{staticClass:"el-message__content",domProps:{innerHTML:e._s(e.message)}}):n("p",{staticClass:"el-message__content"},[e._v(e._s(e.message))])]),e.showClose?n("i",{staticClass:"el-message__closeBtn el-icon-close",on:{click:e.close}}):e._e()],2)])},Fd=[];Ad._withStripped=!0;var Ld={success:"success",info:"info",warning:"warning",error:"error"},Vd={data:function(){return{visible:!1,message:"",duration:3e3,type:"info",iconClass:"",customClass:"",onClose:null,showClose:!1,closed:!1,verticalOffset:20,timer:null,dangerouslyUseHTMLString:!1,center:!1}},computed:{typeClass:function(){return this.type&&!this.iconClass?"el-message__icon el-icon-"+Ld[this.type]:""},positionStyle:function(){return{top:this.verticalOffset+"px"}}},watch:{closed:function(e){e&&(this.visible=!1)}},methods:{handleAfterLeave:function(){this.$destroy(!0),this.$el.parentNode.removeChild(this.$el)},close:function(){this.closed=!0,"function"===typeof this.onClose&&this.onClose(this)},clearTimer:function(){clearTimeout(this.timer)},startTimer:function(){var e=this;this.duration>0&&(this.timer=setTimeout((function(){e.closed||e.close()}),this.duration))},keydown:function(e){27===e.keyCode&&(this.closed||this.close())}},mounted:function(){this.startTimer(),document.addEventListener("keydown",this.keydown)},beforeDestroy:function(){document.removeEventListener("keydown",this.keydown)}},zd=Vd,Bd=s(zd,Ad,Fd,!1,null,null,null);Bd.options.__file="packages/message/src/main.vue";var Rd=Bd.exports,Hd=Wi.a.extend(Rd),Wd=void 0,qd=[],Ud=1,Yd=function e(t){if(!Wi.a.prototype.$isServer){t=t||{},"string"===typeof t&&(t={message:t});var n=t.onClose,i="message_"+Ud++;t.onClose=function(){e.close(i,n)},Wd=new Hd({data:t}),Wd.id=i,Object(ks["isVNode"])(Wd.message)&&(Wd.$slots.default=[Wd.message],Wd.message=null),Wd.$mount(),document.body.appendChild(Wd.$el);var r=t.offset||20;return qd.forEach((function(e){r+=e.$el.offsetHeight+16})),Wd.verticalOffset=r,Wd.visible=!0,Wd.$el.style.zIndex=C["PopupManager"].nextZIndex(),qd.push(Wd),Wd}};["success","warning","info","error"].forEach((function(e){Yd[e]=function(t){return"string"===typeof t&&(t={message:t}),t.type=e,Yd(t)}})),Yd.close=function(e,t){for(var n=qd.length,i=-1,r=0;rqd.length-1))for(var o=qd[i].$el.offsetHeight,a=i;a=0;e--)qd[e].close()};var Kd=Yd,Gd=Kd,Xd=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-badge"},[e._t("default"),n("transition",{attrs:{name:"el-zoom-in-center"}},[n("sup",{directives:[{name:"show",rawName:"v-show",value:!e.hidden&&(e.content||0===e.content||e.isDot),expression:"!hidden && (content || content === 0 || isDot)"}],staticClass:"el-badge__content",class:["el-badge__content--"+e.type,{"is-fixed":e.$slots.default,"is-dot":e.isDot}],domProps:{textContent:e._s(e.content)}})])],2)},Zd=[];Xd._withStripped=!0;var Jd={name:"ElBadge",props:{value:[String,Number],max:Number,isDot:Boolean,hidden:Boolean,type:{type:String,validator:function(e){return["primary","success","warning","info","danger"].indexOf(e)>-1}}},computed:{content:function(){if(!this.isDot){var e=this.value,t=this.max;return"number"===typeof e&&"number"===typeof t&&t0&&e-1this.value,n=this.allowHalf&&this.pointerAtLeftHalf&&e-.5<=this.currentValue&&e>this.currentValue;return t||n},getIconStyle:function(e){var t=this.rateDisabled?this.disabledVoidColor:this.voidColor;return{color:e<=this.currentValue?this.activeColor:t}},selectValue:function(e){this.rateDisabled||(this.allowHalf&&this.pointerAtLeftHalf?(this.$emit("input",this.currentValue),this.$emit("change",this.currentValue)):(this.$emit("input",e),this.$emit("change",e)))},handleKey:function(e){if(!this.rateDisabled){var t=this.currentValue,n=e.keyCode;38===n||39===n?(this.allowHalf?t+=.5:t+=1,e.stopPropagation(),e.preventDefault()):37!==n&&40!==n||(this.allowHalf?t-=.5:t-=1,e.stopPropagation(),e.preventDefault()),t=t<0?0:t,t=t>this.max?this.max:t,this.$emit("input",t),this.$emit("change",t)}},setCurrentValue:function(e,t){if(!this.rateDisabled){if(this.allowHalf){var n=t.target;Object(Le["hasClass"])(n,"el-rate__item")&&(n=n.querySelector(".el-rate__icon")),Object(Le["hasClass"])(n,"el-rate__decimal")&&(n=n.parentNode),this.pointerAtLeftHalf=2*t.offsetX<=n.clientWidth,this.currentValue=this.pointerAtLeftHalf?e-.5:e}else this.currentValue=e;this.hoverIndex=e}},resetCurrentValue:function(){this.rateDisabled||(this.allowHalf&&(this.pointerAtLeftHalf=this.value!==Math.floor(this.value)),this.currentValue=this.value,this.hoverIndex=-1)}},created:function(){this.value||this.$emit("input",0)}},ph=fh,mh=s(ph,uh,dh,!1,null,null,null);mh.options.__file="packages/rate/src/main.vue";var vh=mh.exports;vh.install=function(e){e.component(vh.name,vh)};var gh=vh,bh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-steps",class:[!e.simple&&"el-steps--"+e.direction,e.simple&&"el-steps--simple"]},[e._t("default")],2)},yh=[];bh._withStripped=!0;var _h={name:"ElSteps",mixins:[O.a],props:{space:[Number,String],active:Number,direction:{type:String,default:"horizontal"},alignCenter:Boolean,simple:Boolean,finishStatus:{type:String,default:"finish"},processStatus:{type:String,default:"process"}},data:function(){return{steps:[],stepOffset:0}},methods:{getMigratingConfig:function(){return{props:{center:"center is removed."}}}},watch:{active:function(e,t){this.$emit("change",e,t)},steps:function(e){e.forEach((function(e,t){e.index=t}))}}},xh=_h,wh=s(xh,bh,yh,!1,null,null,null);wh.options.__file="packages/steps/src/steps.vue";var Ch=wh.exports;Ch.install=function(e){e.component(Ch.name,Ch)};var kh=Ch,Sh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-step",class:[!e.isSimple&&"is-"+e.$parent.direction,e.isSimple&&"is-simple",e.isLast&&!e.space&&!e.isCenter&&"is-flex",e.isCenter&&!e.isVertical&&!e.isSimple&&"is-center"],style:e.style},[n("div",{staticClass:"el-step__head",class:"is-"+e.currentStatus},[n("div",{staticClass:"el-step__line",style:e.isLast?"":{marginRight:e.$parent.stepOffset+"px"}},[n("i",{staticClass:"el-step__line-inner",style:e.lineStyle})]),n("div",{staticClass:"el-step__icon",class:"is-"+(e.icon?"icon":"text")},["success"!==e.currentStatus&&"error"!==e.currentStatus?e._t("icon",[e.icon?n("i",{staticClass:"el-step__icon-inner",class:[e.icon]}):e._e(),e.icon||e.isSimple?e._e():n("div",{staticClass:"el-step__icon-inner"},[e._v(e._s(e.index+1))])]):n("i",{staticClass:"el-step__icon-inner is-status",class:["el-icon-"+("success"===e.currentStatus?"check":"close")]})],2)]),n("div",{staticClass:"el-step__main"},[n("div",{ref:"title",staticClass:"el-step__title",class:["is-"+e.currentStatus]},[e._t("title",[e._v(e._s(e.title))])],2),e.isSimple?n("div",{staticClass:"el-step__arrow"}):n("div",{staticClass:"el-step__description",class:["is-"+e.currentStatus]},[e._t("description",[e._v(e._s(e.description))])],2)])])},Oh=[];Sh._withStripped=!0;var $h={name:"ElStep",props:{title:String,icon:String,description:String,status:String},data:function(){return{index:-1,lineStyle:{},internalStatus:""}},beforeCreate:function(){this.$parent.steps.push(this)},beforeDestroy:function(){var e=this.$parent.steps,t=e.indexOf(this);t>=0&&e.splice(t,1)},computed:{currentStatus:function(){return this.status||this.internalStatus},prevStatus:function(){var e=this.$parent.steps[this.index-1];return e?e.currentStatus:"wait"},isCenter:function(){return this.$parent.alignCenter},isVertical:function(){return"vertical"===this.$parent.direction},isSimple:function(){return this.$parent.simple},isLast:function(){var e=this.$parent;return e.steps[e.steps.length-1]===this},stepsCount:function(){return this.$parent.steps.length},space:function(){var e=this.isSimple,t=this.$parent.space;return e?"":t},style:function(){var e={},t=this.$parent,n=t.steps.length,i="number"===typeof this.space?this.space+"px":this.space?this.space:100/(n-(this.isCenter?0:1))+"%";return e.flexBasis=i,this.isVertical?e:(this.isLast?e.maxWidth=100/this.stepsCount+"%":e.marginRight=-this.$parent.stepOffset+"px",e)}},methods:{updateStatus:function(e){var t=this.$parent.$children[this.index-1];e>this.index?this.internalStatus=this.$parent.finishStatus:e===this.index&&"error"!==this.prevStatus?this.internalStatus=this.$parent.processStatus:this.internalStatus="wait",t&&t.calcProgress(this.internalStatus)},calcProgress:function(e){var t=100,n={};n.transitionDelay=150*this.index+"ms",e===this.$parent.processStatus?(this.currentStatus,t=0):"wait"===e&&(t=0,n.transitionDelay=-150*this.index+"ms"),n.borderWidth=t&&!this.isSimple?"1px":0,"vertical"===this.$parent.direction?n.height=t+"%":n.width=t+"%",this.lineStyle=n}},mounted:function(){var e=this,t=this.$watch("index",(function(n){e.$watch("$parent.active",e.updateStatus,{immediate:!0}),e.$watch("$parent.processStatus",(function(){var t=e.$parent.active;e.updateStatus(t)}),{immediate:!0}),t()}))}},Dh=$h,Eh=s(Dh,Sh,Oh,!1,null,null,null);Eh.options.__file="packages/steps/src/step.vue";var Th=Eh.exports;Th.install=function(e){e.component(Th.name,Th)};var Ph=Th,Mh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:e.carouselClasses,on:{mouseenter:function(t){return t.stopPropagation(),e.handleMouseEnter(t)},mouseleave:function(t){return t.stopPropagation(),e.handleMouseLeave(t)}}},[n("div",{staticClass:"el-carousel__container",style:{height:e.height}},[e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-left"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex>0),expression:"(arrow === 'always' || hover) && (loop || activeIndex > 0)"}],staticClass:"el-carousel__arrow el-carousel__arrow--left",attrs:{type:"button"},on:{mouseenter:function(t){e.handleButtonEnter("left")},mouseleave:e.handleButtonLeave,click:function(t){t.stopPropagation(),e.throttledArrowClick(e.activeIndex-1)}}},[n("i",{staticClass:"el-icon-arrow-left"})])]):e._e(),e.arrowDisplay?n("transition",{attrs:{name:"carousel-arrow-right"}},[n("button",{directives:[{name:"show",rawName:"v-show",value:("always"===e.arrow||e.hover)&&(e.loop||e.activeIndex0}))},carouselClasses:function(){var e=["el-carousel","el-carousel--"+this.direction];return"card"===this.type&&e.push("el-carousel--card"),e},indicatorsClasses:function(){var e=["el-carousel__indicators","el-carousel__indicators--"+this.direction];return this.hasLabel&&e.push("el-carousel__indicators--labels"),"outside"!==this.indicatorPosition&&"card"!==this.type||e.push("el-carousel__indicators--outside"),e}},watch:{items:function(e){e.length>0&&this.setActiveItem(this.initialIndex)},activeIndex:function(e,t){this.resetItemPosition(t),t>-1&&this.$emit("change",e,t)},autoplay:function(e){e?this.startTimer():this.pauseTimer()},loop:function(){this.setActiveItem(this.activeIndex)}},methods:{handleMouseEnter:function(){this.hover=!0,this.pauseTimer()},handleMouseLeave:function(){this.hover=!1,this.startTimer()},itemInStage:function(e,t){var n=this.items.length;return t===n-1&&e.inStage&&this.items[0].active||e.inStage&&this.items[t+1]&&this.items[t+1].active?"left":!!(0===t&&e.inStage&&this.items[n-1].active||e.inStage&&this.items[t-1]&&this.items[t-1].active)&&"right"},handleButtonEnter:function(e){var t=this;"vertical"!==this.direction&&this.items.forEach((function(n,i){e===t.itemInStage(n,i)&&(n.hover=!0)}))},handleButtonLeave:function(){"vertical"!==this.direction&&this.items.forEach((function(e){e.hover=!1}))},updateItems:function(){this.items=this.$children.filter((function(e){return"ElCarouselItem"===e.$options.name}))},resetItemPosition:function(e){var t=this;this.items.forEach((function(n,i){n.translateItem(i,t.activeIndex,e)}))},playSlides:function(){this.activeIndex0&&(e=this.items.indexOf(t[0]))}if(e=Number(e),isNaN(e)||e!==Math.floor(e))console.warn("[Element Warn][Carousel]index must be an integer.");else{var n=this.items.length,i=this.activeIndex;this.activeIndex=e<0?this.loop?n-1:0:e>=n?this.loop?0:n-1:e,i===this.activeIndex&&this.resetItemPosition(i)}},prev:function(){this.setActiveItem(this.activeIndex-1)},next:function(){this.setActiveItem(this.activeIndex+1)},handleIndicatorClick:function(e){this.activeIndex=e},handleIndicatorHover:function(e){"hover"===this.trigger&&e!==this.activeIndex&&(this.activeIndex=e)}},created:function(){var e=this;this.throttledArrowClick=jh()(300,!0,(function(t){e.setActiveItem(t)})),this.throttledIndicatorHover=jh()(300,(function(t){e.handleIndicatorHover(t)}))},mounted:function(){var e=this;this.updateItems(),this.$nextTick((function(){Object(ei["addResizeListener"])(e.$el,e.resetItemPosition),e.initialIndex=0&&(e.activeIndex=e.initialIndex),e.startTimer()}))},beforeDestroy:function(){this.$el&&Object(ei["removeResizeListener"])(this.$el,this.resetItemPosition),this.pauseTimer()}},Fh=Ah,Lh=s(Fh,Mh,Ih,!1,null,null,null);Lh.options.__file="packages/carousel/src/main.vue";var Vh=Lh.exports;Vh.install=function(e){e.component(Vh.name,Vh)};var zh=Vh,Bh={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}};function Rh(e){var t=e.move,n=e.size,i=e.bar,r={},o="translate"+i.axis+"("+t+"%)";return r[i.size]=n,r.transform=o,r.msTransform=o,r.webkitTransform=o,r}var Hh={name:"Bar",props:{vertical:Boolean,size:String,move:Number},computed:{bar:function(){return Bh[this.vertical?"vertical":"horizontal"]},wrap:function(){return this.$parent.wrap}},render:function(e){var t=this.size,n=this.move,i=this.bar;return e("div",{class:["el-scrollbar__bar","is-"+i.key],on:{mousedown:this.clickTrackHandler}},[e("div",{ref:"thumb",class:"el-scrollbar__thumb",on:{mousedown:this.clickThumbHandler},style:Rh({size:t,move:n,bar:i})})])},methods:{clickThumbHandler:function(e){e.ctrlKey||2===e.button||(this.startDrag(e),this[this.bar.axis]=e.currentTarget[this.bar.offset]-(e[this.bar.client]-e.currentTarget.getBoundingClientRect()[this.bar.direction]))},clickTrackHandler:function(e){var t=Math.abs(e.target.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),n=this.$refs.thumb[this.bar.offset]/2,i=100*(t-n)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=i*this.wrap[this.bar.scrollSize]/100},startDrag:function(e){e.stopImmediatePropagation(),this.cursorDown=!0,Object(Le["on"])(document,"mousemove",this.mouseMoveDocumentHandler),Object(Le["on"])(document,"mouseup",this.mouseUpDocumentHandler),document.onselectstart=function(){return!1}},mouseMoveDocumentHandler:function(e){if(!1!==this.cursorDown){var t=this[this.bar.axis];if(t){var n=-1*(this.$el.getBoundingClientRect()[this.bar.direction]-e[this.bar.client]),i=this.$refs.thumb[this.bar.offset]-t,r=100*(n-i)/this.$el[this.bar.offset];this.wrap[this.bar.scroll]=r*this.wrap[this.bar.scrollSize]/100}}},mouseUpDocumentHandler:function(e){this.cursorDown=!1,this[this.bar.axis]=0,Object(Le["off"])(document,"mousemove",this.mouseMoveDocumentHandler),document.onselectstart=null}},destroyed:function(){Object(Le["off"])(document,"mouseup",this.mouseUpDocumentHandler)}},Wh={name:"ElScrollbar",components:{Bar:Hh},props:{native:Boolean,wrapStyle:{},wrapClass:{},viewClass:{},viewStyle:{},noresize:Boolean,tag:{type:String,default:"div"}},data:function(){return{sizeWidth:"0",sizeHeight:"0",moveX:0,moveY:0}},computed:{wrap:function(){return this.$refs.wrap}},render:function(e){var t=yr()(),n=this.wrapStyle;if(t){var i="-"+t+"px",r="margin-bottom: "+i+"; margin-right: "+i+";";Array.isArray(this.wrapStyle)?(n=Object(b["toObject"])(this.wrapStyle),n.marginRight=n.marginBottom=i):"string"===typeof this.wrapStyle?n+=r:n=r}var o=e(this.tag,{class:["el-scrollbar__view",this.viewClass],style:this.viewStyle,ref:"resize"},this.$slots.default),a=e("div",{ref:"wrap",style:n,on:{scroll:this.handleScroll},class:[this.wrapClass,"el-scrollbar__wrap",t?"":"el-scrollbar__wrap--hidden-default"]},[[o]]),s=void 0;return s=this.native?[e("div",{ref:"wrap",class:[this.wrapClass,"el-scrollbar__wrap"],style:n},[[o]])]:[a,e(Hh,{attrs:{move:this.moveX,size:this.sizeWidth}}),e(Hh,{attrs:{vertical:!0,move:this.moveY,size:this.sizeHeight}})],e("div",{class:"el-scrollbar"},s)},methods:{handleScroll:function(){var e=this.wrap;this.moveY=100*e.scrollTop/e.clientHeight,this.moveX=100*e.scrollLeft/e.clientWidth},update:function(){var e=void 0,t=void 0,n=this.wrap;n&&(e=100*n.clientHeight/n.scrollHeight,t=100*n.clientWidth/n.scrollWidth,this.sizeHeight=e<100?e+"%":"",this.sizeWidth=t<100?t+"%":"")}},mounted:function(){this.native||(this.$nextTick(this.update),!this.noresize&&Object(ei["addResizeListener"])(this.$refs.resize,this.update))},beforeDestroy:function(){this.native||!this.noresize&&Object(ei["removeResizeListener"])(this.$refs.resize,this.update)},install:function(e){e.component(Wh.name,Wh)}},qh=Wh,Uh=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"show",rawName:"v-show",value:e.ready,expression:"ready"}],staticClass:"el-carousel__item",class:{"is-active":e.active,"el-carousel__item--card":"card"===e.$parent.type,"is-in-stage":e.inStage,"is-hover":e.hover,"is-animating":e.animating},style:e.itemStyle,on:{click:e.handleItemClick}},["card"===e.$parent.type?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.active,expression:"!active"}],staticClass:"el-carousel__mask"}):e._e(),e._t("default")],2)},Yh=[];Uh._withStripped=!0;var Kh=.83,Gh={name:"ElCarouselItem",props:{name:String,label:{type:[String,Number],default:""}},data:function(){return{hover:!1,translate:0,scale:1,active:!1,ready:!1,inStage:!1,animating:!1}},methods:{processIndex:function(e,t,n){return 0===t&&e===n-1?-1:t===n-1&&0===e?n:e=n/2?n+1:e>t+1&&e-t>=n/2?-2:e},calcCardTranslate:function(e,t){var n=this.$parent.$el.offsetWidth;return this.inStage?n*((2-Kh)*(e-t)+1)/4:e2&&this.$parent.loop&&(e=this.processIndex(e,t,o)),"card"===i)"vertical"===r&&console.warn("[Element Warn][Carousel]vertical directionis not supported in card mode"),this.inStage=Math.round(Math.abs(e-t))<=1,this.active=e===t,this.translate=this.calcCardTranslate(e,t),this.scale=this.active?1:Kh;else{this.active=e===t;var a="vertical"===r;this.translate=this.calcTranslate(e,t,a)}this.ready=!0},handleItemClick:function(){var e=this.$parent;if(e&&"card"===e.type){var t=e.items.indexOf(this);e.setActiveItem(t)}}},computed:{parentDirection:function(){return this.$parent.direction},itemStyle:function(){var e="vertical"===this.parentDirection?"translateY":"translateX",t=e+"("+this.translate+"px) scale("+this.scale+")",n={transform:t};return Object(b["autoprefixer"])(n)}},created:function(){this.$parent&&this.$parent.updateItems()},destroyed:function(){this.$parent&&this.$parent.updateItems()}},Xh=Gh,Zh=s(Xh,Uh,Yh,!1,null,null,null);Zh.options.__file="packages/carousel/src/item.vue";var Jh=Zh.exports;Jh.install=function(e){e.component(Jh.name,Jh)};var Qh=Jh,ef=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse",attrs:{role:"tablist","aria-multiselectable":"true"}},[e._t("default")],2)},tf=[];ef._withStripped=!0;var nf={name:"ElCollapse",componentName:"ElCollapse",props:{accordion:Boolean,value:{type:[Array,String,Number],default:function(){return[]}}},data:function(){return{activeNames:[].concat(this.value)}},provide:function(){return{collapse:this}},watch:{value:function(e){this.activeNames=[].concat(e)}},methods:{setActiveNames:function(e){e=[].concat(e);var t=this.accordion?e[0]:e;this.activeNames=e,this.$emit("input",t),this.$emit("change",t)},handleItemClick:function(e){if(this.accordion)this.setActiveNames(!this.activeNames[0]&&0!==this.activeNames[0]||this.activeNames[0]!==e.name?e.name:"");else{var t=this.activeNames.slice(0),n=t.indexOf(e.name);n>-1?t.splice(n,1):t.push(e.name),this.setActiveNames(t)}}},created:function(){this.$on("item-click",this.handleItemClick)}},rf=nf,of=s(rf,ef,tf,!1,null,null,null);of.options.__file="packages/collapse/src/collapse.vue";var af=of.exports;af.install=function(e){e.component(af.name,af)};var sf=af,lf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-collapse-item",class:{"is-active":e.isActive,"is-disabled":e.disabled}},[n("div",{attrs:{role:"tab","aria-expanded":e.isActive,"aria-controls":"el-collapse-content-"+e.id,"aria-describedby":"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__header",class:{focusing:e.focusing,"is-active":e.isActive},attrs:{role:"button",id:"el-collapse-head-"+e.id,tabindex:e.disabled?void 0:0},on:{click:e.handleHeaderClick,keyup:function(t){return"button"in t||!e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])||!e._k(t.keyCode,"enter",13,t.key,"Enter")?(t.stopPropagation(),e.handleEnterClick(t)):null},focus:e.handleFocus,blur:function(t){e.focusing=!1}}},[e._t("title",[e._v(e._s(e.title))]),n("i",{staticClass:"el-collapse-item__arrow el-icon-arrow-right",class:{"is-active":e.isActive}})],2)]),n("el-collapse-transition",[n("div",{directives:[{name:"show",rawName:"v-show",value:e.isActive,expression:"isActive"}],staticClass:"el-collapse-item__wrap",attrs:{role:"tabpanel","aria-hidden":!e.isActive,"aria-labelledby":"el-collapse-head-"+e.id,id:"el-collapse-content-"+e.id}},[n("div",{staticClass:"el-collapse-item__content"},[e._t("default")],2)])])],1)},cf=[];lf._withStripped=!0;var uf={name:"ElCollapseItem",componentName:"ElCollapseItem",mixins:[D.a],components:{ElCollapseTransition:Ye.a},data:function(){return{contentWrapStyle:{height:"auto",display:"block"},contentHeight:0,focusing:!1,isClick:!1,id:Object(b["generateId"])()}},inject:["collapse"],props:{title:String,name:{type:[String,Number],default:function(){return this._uid}},disabled:Boolean},computed:{isActive:function(){return this.collapse.activeNames.indexOf(this.name)>-1}},methods:{handleFocus:function(){var e=this;setTimeout((function(){e.isClick?e.isClick=!1:e.focusing=!0}),50)},handleHeaderClick:function(){this.disabled||(this.dispatch("ElCollapse","item-click",this),this.focusing=!1,this.isClick=!0)},handleEnterClick:function(){this.dispatch("ElCollapse","item-click",this)}}},df=uf,hf=s(df,lf,cf,!1,null,null,null);hf.options.__file="packages/collapse/src/collapse-item.vue";var ff=hf.exports;ff.install=function(e){e.component(ff.name,ff)};var pf=ff,mf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:function(){return e.toggleDropDownVisible(!1)},expression:"() => toggleDropDownVisible(false)"}],ref:"reference",class:["el-cascader",e.realSize&&"el-cascader--"+e.realSize,{"is-disabled":e.isDisabled}],on:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1},click:function(){return e.toggleDropDownVisible(!e.readonly||void 0)},keydown:e.handleKeyDown}},[n("el-input",{ref:"input",class:{"is-focus":e.dropDownVisible},attrs:{size:e.realSize,placeholder:e.placeholder,readonly:e.readonly,disabled:e.isDisabled,"validate-event":!1},on:{focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput},model:{value:e.multiple?e.presentText:e.inputValue,callback:function(t){e.multiple?e.presentText:e.inputValue=t},expression:"multiple ? presentText : inputValue"}},[n("template",{slot:"suffix"},[e.clearBtnVisible?n("i",{key:"clear",staticClass:"el-input__icon el-icon-circle-close",on:{click:function(t){return t.stopPropagation(),e.handleClear(t)}}}):n("i",{key:"arrow-down",class:["el-input__icon","el-icon-arrow-down",e.dropDownVisible&&"is-reverse"],on:{click:function(t){t.stopPropagation(),e.toggleDropDownVisible()}}})])],2),e.multiple?n("div",{staticClass:"el-cascader__tags"},[e._l(e.presentTags,(function(t,i){return n("el-tag",{key:t.key,attrs:{type:"info",size:e.tagSize,hit:t.hitState,closable:t.closable,"disable-transitions":""},on:{close:function(t){e.deleteTag(i)}}},[n("span",[e._v(e._s(t.text))])])})),e.filterable&&!e.isDisabled?n("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.inputValue,expression:"inputValue",modifiers:{trim:!0}}],staticClass:"el-cascader__search-input",attrs:{type:"text",placeholder:e.presentTags.length?"":e.placeholder},domProps:{value:e.inputValue},on:{input:[function(t){t.target.composing||(e.inputValue=t.target.value.trim())},function(t){return e.handleInput(e.inputValue,t)}],click:function(t){t.stopPropagation(),e.toggleDropDownVisible(!0)},keydown:function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete","Del"])?e.handleDelete(t):null},blur:function(t){e.$forceUpdate()}}}):e._e()],2):e._e(),n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.handleDropdownLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.dropDownVisible,expression:"dropDownVisible"}],ref:"popper",class:["el-popper","el-cascader__dropdown",e.popperClass]},[n("el-cascader-panel",{directives:[{name:"show",rawName:"v-show",value:!e.filtering,expression:"!filtering"}],ref:"panel",attrs:{options:e.options,props:e.config,border:!1,"render-label":e.$scopedSlots.default},on:{"expand-change":e.handleExpandChange,close:function(t){e.toggleDropDownVisible(!1)}},model:{value:e.checkedValue,callback:function(t){e.checkedValue=t},expression:"checkedValue"}}),e.filterable?n("el-scrollbar",{directives:[{name:"show",rawName:"v-show",value:e.filtering,expression:"filtering"}],ref:"suggestionPanel",staticClass:"el-cascader__suggestion-panel",attrs:{tag:"ul","view-class":"el-cascader__suggestion-list"},nativeOn:{keydown:function(t){return e.handleSuggestionKeyDown(t)}}},[e.suggestions.length?e._l(e.suggestions,(function(t,i){return n("li",{key:t.uid,class:["el-cascader__suggestion-item",t.checked&&"is-checked"],attrs:{tabindex:-1},on:{click:function(t){e.handleSuggestionClick(i)}}},[n("span",[e._v(e._s(t.text))]),t.checked?n("i",{staticClass:"el-icon-check"}):e._e()])})):e._t("empty",[n("li",{staticClass:"el-cascader__empty-text"},[e._v(e._s(e.t("el.cascader.noMatch")))])])],2):e._e()],1)])],1)},vf=[];mf._withStripped=!0;var gf=n(42),bf=n.n(gf),yf=n(33),_f=n.n(yf),xf=_f.a.keys,wf={expandTrigger:{newProp:"expandTrigger",type:String},changeOnSelect:{newProp:"checkStrictly",type:Boolean},hoverThreshold:{newProp:"hoverThreshold",type:Number}},Cf={props:{placement:{type:String,default:"bottom-start"},appendToBody:H.a.props.appendToBody,visibleArrow:{type:Boolean,default:!0},arrowOffset:H.a.props.arrowOffset,offset:H.a.props.offset,boundariesPadding:H.a.props.boundariesPadding,popperOptions:H.a.props.popperOptions},methods:H.a.methods,data:H.a.data,beforeDestroy:H.a.beforeDestroy},kf={medium:36,small:32,mini:28},Sf={name:"ElCascader",directives:{Clickoutside:V.a},mixins:[Cf,D.a,g.a,O.a],inject:{elForm:{default:""},elFormItem:{default:""}},components:{ElInput:m.a,ElTag:Qn.a,ElScrollbar:q.a,ElCascaderPanel:bf.a},props:{value:{},options:Array,props:Object,size:String,placeholder:{type:String,default:function(){return Object(ti["t"])("el.cascader.placeholder")}},disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:Function,separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,debounce:{type:Number,default:300},beforeFilter:{type:Function,default:function(){return function(){}}},popperClass:String},data:function(){return{dropDownVisible:!1,checkedValue:this.value||null,inputHover:!1,inputValue:null,presentText:null,presentTags:[],checkedNodes:[],filtering:!1,suggestions:[],inputInitialHeight:0,pressDeleteCount:0}},computed:{realSize:function(){var e=(this.elFormItem||{}).elFormItemSize;return this.size||e||(this.$ELEMENT||{}).size},tagSize:function(){return["small","mini"].indexOf(this.realSize)>-1?"mini":"small"},isDisabled:function(){return this.disabled||(this.elForm||{}).disabled},config:function(){var e=this.props||{},t=this.$attrs;return Object.keys(wf).forEach((function(n){var i=wf[n],r=i.newProp,o=i.type,a=t[n]||t[Object(b["kebabCase"])(n)];Object(Ot["isDef"])(n)&&!Object(Ot["isDef"])(e[r])&&(o===Boolean&&""===a&&(a=!0),e[r]=a)})),e},multiple:function(){return this.config.multiple},leafOnly:function(){return!this.config.checkStrictly},readonly:function(){return!this.filterable||this.multiple},clearBtnVisible:function(){return!(!this.clearable||this.isDisabled||this.filtering||!this.inputHover)&&(this.multiple?!!this.checkedNodes.filter((function(e){return!e.isDisabled})).length:!!this.presentText)},panel:function(){return this.$refs.panel}},watch:{disabled:function(){this.computePresentContent()},value:function(e){Object(b["isEqual"])(e,this.checkedValue)||(this.checkedValue=e,this.computePresentContent())},checkedValue:function(e){var t=this.value,n=this.dropDownVisible,i=this.config,r=i.checkStrictly,o=i.multiple;Object(b["isEqual"])(e,t)&&!Object(hh["isUndefined"])(t)||(this.computePresentContent(),o||r||!n||this.toggleDropDownVisible(!1),this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",[e]))},options:{handler:function(){this.$nextTick(this.computePresentContent)},deep:!0},presentText:function(e){this.inputValue=e},presentTags:function(e,t){this.multiple&&(e.length||t.length)&&this.$nextTick(this.updateStyle)},filtering:function(e){this.$nextTick(this.updatePopper)}},mounted:function(){var e=this,t=this.$refs.input;t&&t.$el&&(this.inputInitialHeight=t.$el.offsetHeight||kf[this.realSize]||40),Object(b["isEmpty"])(this.value)||this.computePresentContent(),this.filterHandler=F()(this.debounce,(function(){var t=e.inputValue;if(t){var n=e.beforeFilter(t);n&&n.then?n.then(e.getSuggestions):!1!==n?e.getSuggestions():e.filtering=!1}else e.filtering=!1})),Object(ei["addResizeListener"])(this.$el,this.updateStyle)},beforeDestroy:function(){Object(ei["removeResizeListener"])(this.$el,this.updateStyle)},methods:{getMigratingConfig:function(){return{props:{"expand-trigger":"expand-trigger is removed, use `props.expandTrigger` instead.","change-on-select":"change-on-select is removed, use `props.checkStrictly` instead.","hover-threshold":"hover-threshold is removed, use `props.hoverThreshold` instead"},events:{"active-item-change":"active-item-change is renamed to expand-change"}}},toggleDropDownVisible:function(e){var t=this;if(!this.isDisabled){var n=this.dropDownVisible,i=this.$refs.input;e=Object(Ot["isDef"])(e)?e:!n,e!==n&&(this.dropDownVisible=e,e&&this.$nextTick((function(){t.updatePopper(),t.panel.scrollIntoView()})),i.$refs.input.setAttribute("aria-expanded",e),this.$emit("visible-change",e))}},handleDropdownLeave:function(){this.filtering=!1,this.inputValue=this.presentText},handleKeyDown:function(e){switch(e.keyCode){case xf.enter:this.toggleDropDownVisible();break;case xf.down:this.toggleDropDownVisible(!0),this.focusFirstNode(),e.preventDefault();break;case xf.esc:case xf.tab:this.toggleDropDownVisible(!1);break}},handleFocus:function(e){this.$emit("focus",e)},handleBlur:function(e){this.$emit("blur",e)},handleInput:function(e,t){!this.dropDownVisible&&this.toggleDropDownVisible(!0),t&&t.isComposing||(e?this.filterHandler():this.filtering=!1)},handleClear:function(){this.presentText="",this.panel.clearCheckedNodes()},handleExpandChange:function(e){this.$nextTick(this.updatePopper.bind(this)),this.$emit("expand-change",e),this.$emit("active-item-change",e)},focusFirstNode:function(){var e=this;this.$nextTick((function(){var t=e.filtering,n=e.$refs,i=n.popper,r=n.suggestionPanel,o=null;if(t&&r)o=r.$el.querySelector(".el-cascader__suggestion-item");else{var a=i.querySelector(".el-cascader-menu");o=a.querySelector('.el-cascader-node[tabindex="-1"]')}o&&(o.focus(),!t&&o.click())}))},computePresentContent:function(){var e=this;this.$nextTick((function(){e.config.multiple?(e.computePresentTags(),e.presentText=e.presentTags.length?" ":null):e.computePresentText()}))},computePresentText:function(){var e=this.checkedValue,t=this.config;if(!Object(b["isEmpty"])(e)){var n=this.panel.getNodeByValue(e);if(n&&(t.checkStrictly||n.isLeaf))return void(this.presentText=n.getText(this.showAllLevels,this.separator))}this.presentText=null},computePresentTags:function(){var e=this.isDisabled,t=this.leafOnly,n=this.showAllLevels,i=this.separator,r=this.collapseTags,o=this.getCheckedNodes(t),a=[],s=function(t){return{node:t,key:t.uid,text:t.getText(n,i),hitState:!1,closable:!e&&!t.isDisabled}};if(o.length){var l=o[0],c=o.slice(1),u=c.length;a.push(s(l)),u&&(r?a.push({key:-1,text:"+ "+u,closable:!1}):c.forEach((function(e){return a.push(s(e))})))}this.checkedNodes=o,this.presentTags=a},getSuggestions:function(){var e=this,t=this.filterMethod;Object(hh["isFunction"])(t)||(t=function(e,t){return e.text.includes(t)});var n=this.panel.getFlattedNodes(this.leafOnly).filter((function(n){return!n.isDisabled&&(n.text=n.getText(e.showAllLevels,e.separator)||"",t(n,e.inputValue))}));this.multiple?this.presentTags.forEach((function(e){e.hitState=!1})):n.forEach((function(t){t.checked=Object(b["isEqual"])(e.checkedValue,t.getValueByOption())})),this.filtering=!0,this.suggestions=n,this.$nextTick(this.updatePopper)},handleSuggestionKeyDown:function(e){var t=e.keyCode,n=e.target;switch(t){case xf.enter:n.click();break;case xf.up:var i=n.previousElementSibling;i&&i.focus();break;case xf.down:var r=n.nextElementSibling;r&&r.focus();break;case xf.esc:case xf.tab:this.toggleDropDownVisible(!1);break}},handleDelete:function(){var e=this.inputValue,t=this.pressDeleteCount,n=this.presentTags,i=n.length-1,r=n[i];this.pressDeleteCount=e?0:t+1,r&&this.pressDeleteCount&&(r.hitState?this.deleteTag(i):r.hitState=!0)},handleSuggestionClick:function(e){var t=this.multiple,n=this.suggestions[e];if(t){var i=n.checked;n.doCheck(!i),this.panel.calculateMultiCheckedValue()}else this.checkedValue=n.getValueByOption(),this.toggleDropDownVisible(!1)},deleteTag:function(e){var t=this.checkedValue,n=t[e];this.checkedValue=t.filter((function(t,n){return n!==e})),this.$emit("remove-tag",n)},updateStyle:function(){var e=this.$el,t=this.inputInitialHeight;if(!this.$isServer&&e){var n=this.$refs.suggestionPanel,i=e.querySelector(".el-input__inner");if(i){var r=e.querySelector(".el-cascader__tags"),o=null;if(n&&(o=n.$el)){var a=o.querySelector(".el-cascader__suggestion-list");a.style.minWidth=i.offsetWidth+"px"}if(r){var s=r.offsetHeight,l=Math.max(s+6,t)+"px";i.style.height=l,this.updatePopper()}}}},getCheckedNodes:function(e){return this.panel.getCheckedNodes(e)}}},Of=Sf,$f=s(Of,mf,vf,!1,null,null,null);$f.options.__file="packages/cascader/src/cascader.vue";var Df=$f.exports;Df.install=function(e){e.component(Df.name,Df)};var Ef=Df,Tf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.hide,expression:"hide"}],class:["el-color-picker",e.colorDisabled?"is-disabled":"",e.colorSize?"el-color-picker--"+e.colorSize:""]},[e.colorDisabled?n("div",{staticClass:"el-color-picker__mask"}):e._e(),n("div",{staticClass:"el-color-picker__trigger",on:{click:e.handleTrigger}},[n("span",{staticClass:"el-color-picker__color",class:{"is-alpha":e.showAlpha}},[n("span",{staticClass:"el-color-picker__color-inner",style:{backgroundColor:e.displayedColor}}),e.value||e.showPanelColor?e._e():n("span",{staticClass:"el-color-picker__empty el-icon-close"})]),n("span",{directives:[{name:"show",rawName:"v-show",value:e.value||e.showPanelColor,expression:"value || showPanelColor"}],staticClass:"el-color-picker__icon el-icon-arrow-down"})]),n("picker-dropdown",{ref:"dropdown",class:["el-color-picker__panel",e.popperClass||""],attrs:{color:e.color,"show-alpha":e.showAlpha,predefine:e.predefine},on:{pick:e.confirmValue,clear:e.clearValue},model:{value:e.showPicker,callback:function(t){e.showPicker=t},expression:"showPicker"}})],1)},Pf=[];Tf._withStripped=!0;var Mf="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function If(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Nf=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},jf=function(e){return"string"===typeof e&&-1!==e.indexOf(".")&&1===parseFloat(e)},Af=function(e){return"string"===typeof e&&-1!==e.indexOf("%")},Ff=function(e,t){jf(e)&&(e="100%");var n=Af(e);return e=Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)},Lf={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Vf=function(e){var t=e.r,n=e.g,i=e.b,r=function(e){e=Math.min(Math.round(e),255);var t=Math.floor(e/16),n=e%16;return""+(Lf[t]||t)+(Lf[n]||n)};return isNaN(t)||isNaN(n)||isNaN(i)?"":"#"+r(t)+r(n)+r(i)},zf={A:10,B:11,C:12,D:13,E:14,F:15},Bf=function(e){return 2===e.length?16*(zf[e[0].toUpperCase()]||+e[0])+(zf[e[1].toUpperCase()]||+e[1]):zf[e[1].toUpperCase()]||+e[1]},Rf=function(e,t,n){t/=100,n/=100;var i=t,r=Math.max(n,.01),o=void 0,a=void 0;return n*=2,t*=n<=1?n:2-n,i*=r<=1?r:2-r,a=(n+t)/2,o=0===n?2*i/(r+i):2*t/(n+t),{h:e,s:100*o,v:100*a}},Hf=function(e,t,n){e=Ff(e,255),t=Ff(t,255),n=Ff(n,255);var i=Math.max(e,t,n),r=Math.min(e,t,n),o=void 0,a=void 0,s=i,l=i-r;if(a=0===i?0:l/i,i===r)o=0;else{switch(i){case e:o=(t-n)/l+(t2?parseFloat(e):parseInt(e,10)}));if(4===i.length?this._alpha=Math.floor(100*parseFloat(i[3])):3===i.length&&(this._alpha=100),i.length>=3){var r=Rf(i[0],i[1],i[2]),o=r.h,a=r.s,s=r.v;n(o,a,s)}}else if(-1!==e.indexOf("hsv")){var l=e.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));4===l.length?this._alpha=Math.floor(100*parseFloat(l[3])):3===l.length&&(this._alpha=100),l.length>=3&&n(l[0],l[1],l[2])}else if(-1!==e.indexOf("rgb")){var c=e.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter((function(e){return""!==e})).map((function(e,t){return t>2?parseFloat(e):parseInt(e,10)}));if(4===c.length?this._alpha=Math.floor(100*parseFloat(c[3])):3===c.length&&(this._alpha=100),c.length>=3){var u=Hf(c[0],c[1],c[2]),d=u.h,h=u.s,f=u.v;n(d,h,f)}}else if(-1!==e.indexOf("#")){var p=e.replace("#","").trim();if(!/^(?:[0-9a-fA-F]{3}){1,2}$/.test(p))return;var m=void 0,v=void 0,g=void 0;3===p.length?(m=Bf(p[0]+p[0]),v=Bf(p[1]+p[1]),g=Bf(p[2]+p[2])):6!==p.length&&8!==p.length||(m=Bf(p.substring(0,2)),v=Bf(p.substring(2,4)),g=Bf(p.substring(4,6))),8===p.length?this._alpha=Math.floor(Bf(p.substring(6))/255*100):3!==p.length&&6!==p.length||(this._alpha=100);var b=Hf(m,v,g),y=b.h,_=b.s,x=b.v;n(y,_,x)}},e.prototype.compare=function(e){return Math.abs(e._hue-this._hue)<2&&Math.abs(e._saturation-this._saturation)<1&&Math.abs(e._value-this._value)<1&&Math.abs(e._alpha-this._alpha)<1},e.prototype.doOnChange=function(){var e=this._hue,t=this._saturation,n=this._value,i=this._alpha,r=this.format;if(this.enableAlpha)switch(r){case"hsl":var o=Nf(e,t/100,n/100);this.value="hsla("+e+", "+Math.round(100*o[1])+"%, "+Math.round(100*o[2])+"%, "+i/100+")";break;case"hsv":this.value="hsva("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%, "+i/100+")";break;default:var a=Wf(e,t,n),s=a.r,l=a.g,c=a.b;this.value="rgba("+s+", "+l+", "+c+", "+i/100+")"}else switch(r){case"hsl":var u=Nf(e,t/100,n/100);this.value="hsl("+e+", "+Math.round(100*u[1])+"%, "+Math.round(100*u[2])+"%)";break;case"hsv":this.value="hsv("+e+", "+Math.round(t)+"%, "+Math.round(n)+"%)";break;case"rgb":var d=Wf(e,t,n),h=d.r,f=d.g,p=d.b;this.value="rgb("+h+", "+f+", "+p+")";break;default:this.value=Vf(Wf(e,t,n))}},e}(),Uf=qf,Yf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-zoom-in-top"},on:{"after-leave":e.doDestroy}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.showPopper,expression:"showPopper"}],staticClass:"el-color-dropdown"},[n("div",{staticClass:"el-color-dropdown__main-wrapper"},[n("hue-slider",{ref:"hue",staticStyle:{float:"right"},attrs:{color:e.color,vertical:""}}),n("sv-panel",{ref:"sl",attrs:{color:e.color}})],1),e.showAlpha?n("alpha-slider",{ref:"alpha",attrs:{color:e.color}}):e._e(),e.predefine?n("predefine",{attrs:{color:e.color,colors:e.predefine}}):e._e(),n("div",{staticClass:"el-color-dropdown__btns"},[n("span",{staticClass:"el-color-dropdown__value"},[n("el-input",{attrs:{"validate-event":!1,size:"mini"},on:{blur:e.handleConfirm},nativeOn:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleConfirm(t):null}},model:{value:e.customInput,callback:function(t){e.customInput=t},expression:"customInput"}})],1),n("el-button",{staticClass:"el-color-dropdown__link-btn",attrs:{size:"mini",type:"text"},on:{click:function(t){e.$emit("clear")}}},[e._v("\n "+e._s(e.t("el.colorpicker.clear"))+"\n ")]),n("el-button",{staticClass:"el-color-dropdown__btn",attrs:{plain:"",size:"mini"},on:{click:e.confirmValue}},[e._v("\n "+e._s(e.t("el.colorpicker.confirm"))+"\n ")])],1)],1)])},Kf=[];Yf._withStripped=!0;var Gf=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-svpanel",style:{backgroundColor:e.background}},[n("div",{staticClass:"el-color-svpanel__white"}),n("div",{staticClass:"el-color-svpanel__black"}),n("div",{staticClass:"el-color-svpanel__cursor",style:{top:e.cursorTop+"px",left:e.cursorLeft+"px"}},[n("div")])])},Xf=[];Gf._withStripped=!0;var Zf=!1,Jf=function(e,t){if(!Wi.a.prototype.$isServer){var n=function(e){t.drag&&t.drag(e)},i=function e(i){document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",e),document.onselectstart=null,document.ondragstart=null,Zf=!1,t.end&&t.end(i)};e.addEventListener("mousedown",(function(e){Zf||(document.onselectstart=function(){return!1},document.ondragstart=function(){return!1},document.addEventListener("mousemove",n),document.addEventListener("mouseup",i),Zf=!0,t.start&&t.start(e))}))}},Qf={name:"el-sl-panel",props:{color:{required:!0}},computed:{colorValue:function(){var e=this.color.get("hue"),t=this.color.get("value");return{hue:e,value:t}}},watch:{colorValue:function(){this.update()}},methods:{update:function(){var e=this.color.get("saturation"),t=this.color.get("value"),n=this.$el,i=n.clientWidth,r=n.clientHeight;this.cursorLeft=e*i/100,this.cursorTop=(100-t)*r/100,this.background="hsl("+this.color.get("hue")+", 100%, 50%)"},handleDrag:function(e){var t=this.$el,n=t.getBoundingClientRect(),i=e.clientX-n.left,r=e.clientY-n.top;i=Math.max(0,i),i=Math.min(i,n.width),r=Math.max(0,r),r=Math.min(r,n.height),this.cursorLeft=i,this.cursorTop=r,this.color.set({saturation:i/n.width*100,value:100-r/n.height*100})}},mounted:function(){var e=this;Jf(this.$el,{drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}}),this.update()},data:function(){return{cursorTop:0,cursorLeft:0,background:"hsl(0, 100%, 50%)"}}},ep=Qf,tp=s(ep,Gf,Xf,!1,null,null,null);tp.options.__file="packages/color-picker/src/components/sv-panel.vue";var np=tp.exports,ip=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-hue-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-hue-slider__bar",on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-hue-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},rp=[];ip._withStripped=!0;var op={name:"el-color-hue-slider",props:{color:{required:!0},vertical:Boolean},data:function(){return{thumbLeft:0,thumbTop:0}},computed:{hueValue:function(){var e=this.color.get("hue");return e}},watch:{hueValue:function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb,i=void 0;if(this.vertical){var r=e.clientY-t.top;r=Math.min(r,t.height-n.offsetHeight/2),r=Math.max(n.offsetHeight/2,r),i=Math.round((r-n.offsetHeight/2)/(t.height-n.offsetHeight)*360)}else{var o=e.clientX-t.left;o=Math.min(o,t.width-n.offsetWidth/2),o=Math.max(n.offsetWidth/2,o),i=Math.round((o-n.offsetWidth/2)/(t.width-n.offsetWidth)*360)}this.color.set("hue",i)},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/360)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color.get("hue");if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/360)},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop()}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},ap=op,sp=s(ap,ip,rp,!1,null,null,null);sp.options.__file="packages/color-picker/src/components/hue-slider.vue";var lp=sp.exports,cp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-alpha-slider",class:{"is-vertical":e.vertical}},[n("div",{ref:"bar",staticClass:"el-color-alpha-slider__bar",style:{background:e.background},on:{click:e.handleClick}}),n("div",{ref:"thumb",staticClass:"el-color-alpha-slider__thumb",style:{left:e.thumbLeft+"px",top:e.thumbTop+"px"}})])},up=[];cp._withStripped=!0;var dp={name:"el-color-alpha-slider",props:{color:{required:!0},vertical:Boolean},watch:{"color._alpha":function(){this.update()},"color.value":function(){this.update()}},methods:{handleClick:function(e){var t=this.$refs.thumb,n=e.target;n!==t&&this.handleDrag(e)},handleDrag:function(e){var t=this.$el.getBoundingClientRect(),n=this.$refs.thumb;if(this.vertical){var i=e.clientY-t.top;i=Math.max(n.offsetHeight/2,i),i=Math.min(i,t.height-n.offsetHeight/2),this.color.set("alpha",Math.round((i-n.offsetHeight/2)/(t.height-n.offsetHeight)*100))}else{var r=e.clientX-t.left;r=Math.max(n.offsetWidth/2,r),r=Math.min(r,t.width-n.offsetWidth/2),this.color.set("alpha",Math.round((r-n.offsetWidth/2)/(t.width-n.offsetWidth)*100))}},getThumbLeft:function(){if(this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetWidth-n.offsetWidth/2)/100)},getThumbTop:function(){if(!this.vertical)return 0;var e=this.$el,t=this.color._alpha;if(!e)return 0;var n=this.$refs.thumb;return Math.round(t*(e.offsetHeight-n.offsetHeight/2)/100)},getBackground:function(){if(this.color&&this.color.value){var e=this.color.toRgb(),t=e.r,n=e.g,i=e.b;return"linear-gradient(to right, rgba("+t+", "+n+", "+i+", 0) 0%, rgba("+t+", "+n+", "+i+", 1) 100%)"}return null},update:function(){this.thumbLeft=this.getThumbLeft(),this.thumbTop=this.getThumbTop(),this.background=this.getBackground()}},data:function(){return{thumbLeft:0,thumbTop:0,background:null}},mounted:function(){var e=this,t=this.$refs,n=t.bar,i=t.thumb,r={drag:function(t){e.handleDrag(t)},end:function(t){e.handleDrag(t)}};Jf(n,r),Jf(i,r),this.update()}},hp=dp,fp=s(hp,cp,up,!1,null,null,null);fp.options.__file="packages/color-picker/src/components/alpha-slider.vue";var pp=fp.exports,mp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-color-predefine"},[n("div",{staticClass:"el-color-predefine__colors"},e._l(e.rgbaColors,(function(t,i){return n("div",{key:e.colors[i],staticClass:"el-color-predefine__color-selector",class:{selected:t.selected,"is-alpha":t._alpha<100},on:{click:function(t){e.handleSelect(i)}}},[n("div",{style:{"background-color":t.value}})])})),0)])},vp=[];mp._withStripped=!0;var gp={props:{colors:{type:Array,required:!0},color:{required:!0}},data:function(){return{rgbaColors:this.parseColors(this.colors,this.color)}},methods:{handleSelect:function(e){this.color.fromString(this.colors[e])},parseColors:function(e,t){return e.map((function(e){var n=new Uf;return n.enableAlpha=!0,n.format="rgba",n.fromString(e),n.selected=n.value===t.value,n}))}},watch:{"$parent.currentColor":function(e){var t=new Uf;t.fromString(e),this.rgbaColors.forEach((function(e){e.selected=t.compare(e)}))},colors:function(e){this.rgbaColors=this.parseColors(e,this.color)},color:function(e){this.rgbaColors=this.parseColors(this.colors,e)}}},bp=gp,yp=s(bp,mp,vp,!1,null,null,null);yp.options.__file="packages/color-picker/src/components/predefine.vue";var _p=yp.exports,xp={name:"el-color-picker-dropdown",mixins:[H.a,g.a],components:{SvPanel:np,HueSlider:lp,AlphaSlider:pp,ElInput:m.a,ElButton:ae.a,Predefine:_p},props:{color:{required:!0},showAlpha:Boolean,predefine:Array},data:function(){return{customInput:""}},computed:{currentColor:function(){var e=this.$parent;return e.value||e.showPanelColor?e.color.value:""}},methods:{confirmValue:function(){this.$emit("pick")},handleConfirm:function(){this.color.fromString(this.customInput)}},mounted:function(){this.$parent.popperElm=this.popperElm=this.$el,this.referenceElm=this.$parent.$el},watch:{showPopper:function(e){var t=this;!0===e&&this.$nextTick((function(){var e=t.$refs,n=e.sl,i=e.hue,r=e.alpha;n&&n.update(),i&&i.update(),r&&r.update()}))},currentColor:{immediate:!0,handler:function(e){this.customInput=e}}}},wp=xp,Cp=s(wp,Yf,Kf,!1,null,null,null);Cp.options.__file="packages/color-picker/src/components/picker-dropdown.vue";var kp=Cp.exports,Sp={name:"ElColorPicker",mixins:[D.a],props:{value:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:String,popperClass:String,predefine:Array},inject:{elForm:{default:""},elFormItem:{default:""}},directives:{Clickoutside:V.a},computed:{displayedColor:function(){return this.value||this.showPanelColor?this.displayedRgb(this.color,this.showAlpha):"transparent"},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},colorSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},colorDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},watch:{value:function(e){e?e&&e!==this.color.value&&this.color.fromString(e):this.showPanelColor=!1},color:{deep:!0,handler:function(){this.showPanelColor=!0}},displayedColor:function(e){if(this.showPicker){var t=new Uf({enableAlpha:this.showAlpha,format:this.colorFormat});t.fromString(this.value);var n=this.displayedRgb(t,this.showAlpha);e!==n&&this.$emit("active-change",e)}}},methods:{handleTrigger:function(){this.colorDisabled||(this.showPicker=!this.showPicker)},confirmValue:function(){var e=this.color.value;this.$emit("input",e),this.$emit("change",e),this.dispatch("ElFormItem","el.form.change",e),this.showPicker=!1},clearValue:function(){this.$emit("input",null),this.$emit("change",null),null!==this.value&&this.dispatch("ElFormItem","el.form.change",null),this.showPanelColor=!1,this.showPicker=!1,this.resetColor()},hide:function(){this.showPicker=!1,this.resetColor()},resetColor:function(){var e=this;this.$nextTick((function(t){e.value?e.color.fromString(e.value):e.showPanelColor=!1}))},displayedRgb:function(e,t){if(!(e instanceof Uf))throw Error("color should be instance of Color Class");var n=e.toRgb(),i=n.r,r=n.g,o=n.b;return t?"rgba("+i+", "+r+", "+o+", "+e.get("alpha")/100+")":"rgb("+i+", "+r+", "+o+")"}},mounted:function(){var e=this.value;e&&this.color.fromString(e),this.popperElm=this.$refs.dropdown.$el},data:function(){var e=new Uf({enableAlpha:this.showAlpha,format:this.colorFormat});return{color:e,showPicker:!1,showPanelColor:!1}},components:{PickerDropdown:kp}},Op=Sp,$p=s(Op,Tf,Pf,!1,null,null,null);$p.options.__file="packages/color-picker/src/main.vue";var Dp=$p.exports;Dp.install=function(e){e.component(Dp.name,Dp)};var Ep=Dp,Tp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer"},[n("transfer-panel",e._b({ref:"leftPanel",attrs:{data:e.sourceData,title:e.titles[0]||e.t("el.transfer.titles.0"),"default-checked":e.leftDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onSourceCheckedChange}},"transfer-panel",e.$props,!1),[e._t("left-footer")],2),n("div",{staticClass:"el-transfer__buttons"},[n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.rightChecked.length},nativeOn:{click:function(t){return e.addToLeft(t)}}},[n("i",{staticClass:"el-icon-arrow-left"}),void 0!==e.buttonTexts[0]?n("span",[e._v(e._s(e.buttonTexts[0]))]):e._e()]),n("el-button",{class:["el-transfer__button",e.hasButtonTexts?"is-with-texts":""],attrs:{type:"primary",disabled:0===e.leftChecked.length},nativeOn:{click:function(t){return e.addToRight(t)}}},[void 0!==e.buttonTexts[1]?n("span",[e._v(e._s(e.buttonTexts[1]))]):e._e(),n("i",{staticClass:"el-icon-arrow-right"})])],1),n("transfer-panel",e._b({ref:"rightPanel",attrs:{data:e.targetData,title:e.titles[1]||e.t("el.transfer.titles.1"),"default-checked":e.rightDefaultChecked,placeholder:e.filterPlaceholder||e.t("el.transfer.filterPlaceholder")},on:{"checked-change":e.onTargetCheckedChange}},"transfer-panel",e.$props,!1),[e._t("right-footer")],2)],1)},Pp=[];Tp._withStripped=!0;var Mp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-transfer-panel"},[n("p",{staticClass:"el-transfer-panel__header"},[n("el-checkbox",{attrs:{indeterminate:e.isIndeterminate},on:{change:e.handleAllCheckedChange},model:{value:e.allChecked,callback:function(t){e.allChecked=t},expression:"allChecked"}},[e._v("\n "+e._s(e.title)+"\n "),n("span",[e._v(e._s(e.checkedSummary))])])],1),n("div",{class:["el-transfer-panel__body",e.hasFooter?"is-with-footer":""]},[e.filterable?n("el-input",{staticClass:"el-transfer-panel__filter",attrs:{size:"small",placeholder:e.placeholder},nativeOn:{mouseenter:function(t){e.inputHover=!0},mouseleave:function(t){e.inputHover=!1}},model:{value:e.query,callback:function(t){e.query=t},expression:"query"}},[n("i",{class:["el-input__icon","el-icon-"+e.inputIcon],attrs:{slot:"prefix"},on:{click:e.clearQuery},slot:"prefix"})]):e._e(),n("el-checkbox-group",{directives:[{name:"show",rawName:"v-show",value:!e.hasNoMatch&&e.data.length>0,expression:"!hasNoMatch && data.length > 0"}],staticClass:"el-transfer-panel__list",class:{"is-filterable":e.filterable},model:{value:e.checked,callback:function(t){e.checked=t},expression:"checked"}},e._l(e.filteredData,(function(t){return n("el-checkbox",{key:t[e.keyProp],staticClass:"el-transfer-panel__item",attrs:{label:t[e.keyProp],disabled:t[e.disabledProp]}},[n("option-content",{attrs:{option:t}})],1)})),1),n("p",{directives:[{name:"show",rawName:"v-show",value:e.hasNoMatch,expression:"hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noMatch")))]),n("p",{directives:[{name:"show",rawName:"v-show",value:0===e.data.length&&!e.hasNoMatch,expression:"data.length === 0 && !hasNoMatch"}],staticClass:"el-transfer-panel__empty"},[e._v(e._s(e.t("el.transfer.noData")))])],1),e.hasFooter?n("p",{staticClass:"el-transfer-panel__footer"},[e._t("default")],2):e._e()])},Ip=[];Mp._withStripped=!0;var Np={mixins:[g.a],name:"ElTransferPanel",componentName:"ElTransferPanel",components:{ElCheckboxGroup:Mr.a,ElCheckbox:Ai.a,ElInput:m.a,OptionContent:{props:{option:Object},render:function(e){var t=function e(t){return"ElTransferPanel"===t.$options.componentName?t:t.$parent?e(t.$parent):t},n=t(this),i=n.$parent||n;return n.renderContent?n.renderContent(e,this.option):i.$scopedSlots.default?i.$scopedSlots.default({option:this.option}):e("span",[this.option[n.labelProp]||this.option[n.keyProp]])}}},props:{data:{type:Array,default:function(){return[]}},renderContent:Function,placeholder:String,title:String,filterable:Boolean,format:Object,filterMethod:Function,defaultChecked:Array,props:Object},data:function(){return{checked:[],allChecked:!1,query:"",inputHover:!1,checkChangeByUser:!0}},watch:{checked:function(e,t){if(this.updateAllChecked(),this.checkChangeByUser){var n=e.concat(t).filter((function(n){return-1===e.indexOf(n)||-1===t.indexOf(n)}));this.$emit("checked-change",e,n)}else this.$emit("checked-change",e),this.checkChangeByUser=!0},data:function(){var e=this,t=[],n=this.filteredData.map((function(t){return t[e.keyProp]}));this.checked.forEach((function(e){n.indexOf(e)>-1&&t.push(e)})),this.checkChangeByUser=!1,this.checked=t},checkableData:function(){this.updateAllChecked()},defaultChecked:{immediate:!0,handler:function(e,t){var n=this;if(!t||e.length!==t.length||!e.every((function(e){return t.indexOf(e)>-1}))){var i=[],r=this.checkableData.map((function(e){return e[n.keyProp]}));e.forEach((function(e){r.indexOf(e)>-1&&i.push(e)})),this.checkChangeByUser=!1,this.checked=i}}}},computed:{filteredData:function(){var e=this;return this.data.filter((function(t){if("function"===typeof e.filterMethod)return e.filterMethod(e.query,t);var n=t[e.labelProp]||t[e.keyProp].toString();return n.toLowerCase().indexOf(e.query.toLowerCase())>-1}))},checkableData:function(){var e=this;return this.filteredData.filter((function(t){return!t[e.disabledProp]}))},checkedSummary:function(){var e=this.checked.length,t=this.data.length,n=this.format,i=n.noChecked,r=n.hasChecked;return i&&r?e>0?r.replace(/\${checked}/g,e).replace(/\${total}/g,t):i.replace(/\${total}/g,t):e+"/"+t},isIndeterminate:function(){var e=this.checked.length;return e>0&&e0&&0===this.filteredData.length},inputIcon:function(){return this.query.length>0&&this.inputHover?"circle-close":"search"},labelProp:function(){return this.props.label||"label"},keyProp:function(){return this.props.key||"key"},disabledProp:function(){return this.props.disabled||"disabled"},hasFooter:function(){return!!this.$slots.default}},methods:{updateAllChecked:function(){var e=this,t=this.checkableData.map((function(t){return t[e.keyProp]}));this.allChecked=t.length>0&&t.every((function(t){return e.checked.indexOf(t)>-1}))},handleAllCheckedChange:function(e){var t=this;this.checked=e?this.checkableData.map((function(e){return e[t.keyProp]})):[]},clearQuery:function(){"circle-close"===this.inputIcon&&(this.query="")}}},jp=Np,Ap=s(jp,Mp,Ip,!1,null,null,null);Ap.options.__file="packages/transfer/src/transfer-panel.vue";var Fp=Ap.exports,Lp={name:"ElTransfer",mixins:[D.a,g.a,O.a],components:{TransferPanel:Fp,ElButton:ae.a},props:{data:{type:Array,default:function(){return[]}},titles:{type:Array,default:function(){return[]}},buttonTexts:{type:Array,default:function(){return[]}},filterPlaceholder:{type:String,default:""},filterMethod:Function,leftDefaultChecked:{type:Array,default:function(){return[]}},rightDefaultChecked:{type:Array,default:function(){return[]}},renderContent:Function,value:{type:Array,default:function(){return[]}},format:{type:Object,default:function(){return{}}},filterable:Boolean,props:{type:Object,default:function(){return{label:"label",key:"key",disabled:"disabled"}}},targetOrder:{type:String,default:"original"}},data:function(){return{leftChecked:[],rightChecked:[]}},computed:{dataObj:function(){var e=this.props.key;return this.data.reduce((function(t,n){return(t[n[e]]=n)&&t}),{})},sourceData:function(){var e=this;return this.data.filter((function(t){return-1===e.value.indexOf(t[e.props.key])}))},targetData:function(){var e=this;return"original"===this.targetOrder?this.data.filter((function(t){return e.value.indexOf(t[e.props.key])>-1})):this.value.reduce((function(t,n){var i=e.dataObj[n];return i&&t.push(i),t}),[])},hasButtonTexts:function(){return 2===this.buttonTexts.length}},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}},methods:{getMigratingConfig:function(){return{props:{"footer-format":"footer-format is renamed to format."}}},onSourceCheckedChange:function(e,t){this.leftChecked=e,void 0!==t&&this.$emit("left-check-change",e,t)},onTargetCheckedChange:function(e,t){this.rightChecked=e,void 0!==t&&this.$emit("right-check-change",e,t)},addToLeft:function(){var e=this.value.slice();this.rightChecked.forEach((function(t){var n=e.indexOf(t);n>-1&&e.splice(n,1)})),this.$emit("input",e),this.$emit("change",e,"left",this.rightChecked)},addToRight:function(){var e=this,t=this.value.slice(),n=[],i=this.props.key;this.data.forEach((function(t){var r=t[i];e.leftChecked.indexOf(r)>-1&&-1===e.value.indexOf(r)&&n.push(r)})),t="unshift"===this.targetOrder?n.concat(t):t.concat(n),this.$emit("input",t),this.$emit("change",t,"right",this.leftChecked)},clearQuery:function(e){"left"===e?this.$refs.leftPanel.query="":"right"===e&&(this.$refs.rightPanel.query="")}}},Vp=Lp,zp=s(Vp,Tp,Pp,!1,null,null,null);zp.options.__file="packages/transfer/src/main.vue";var Bp=zp.exports;Bp.install=function(e){e.component(Bp.name,Bp)};var Rp=Bp,Hp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"el-container",class:{"is-vertical":e.isVertical}},[e._t("default")],2)},Wp=[];Hp._withStripped=!0;var qp={name:"ElContainer",componentName:"ElContainer",props:{direction:String},computed:{isVertical:function(){return"vertical"===this.direction||"horizontal"!==this.direction&&(!(!this.$slots||!this.$slots.default)&&this.$slots.default.some((function(e){var t=e.componentOptions&&e.componentOptions.tag;return"el-header"===t||"el-footer"===t})))}}},Up=qp,Yp=s(Up,Hp,Wp,!1,null,null,null);Yp.options.__file="packages/container/src/main.vue";var Kp=Yp.exports;Kp.install=function(e){e.component(Kp.name,Kp)};var Gp=Kp,Xp=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("header",{staticClass:"el-header",style:{height:e.height}},[e._t("default")],2)},Zp=[];Xp._withStripped=!0;var Jp={name:"ElHeader",componentName:"ElHeader",props:{height:{type:String,default:"60px"}}},Qp=Jp,em=s(Qp,Xp,Zp,!1,null,null,null);em.options.__file="packages/header/src/main.vue";var tm=em.exports;tm.install=function(e){e.component(tm.name,tm)};var nm=tm,im=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{staticClass:"el-aside",style:{width:e.width}},[e._t("default")],2)},rm=[];im._withStripped=!0;var om={name:"ElAside",componentName:"ElAside",props:{width:{type:String,default:"300px"}}},am=om,sm=s(am,im,rm,!1,null,null,null);sm.options.__file="packages/aside/src/main.vue";var lm=sm.exports;lm.install=function(e){e.component(lm.name,lm)};var cm=lm,um=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("main",{staticClass:"el-main"},[e._t("default")],2)},dm=[];um._withStripped=!0;var hm={name:"ElMain",componentName:"ElMain"},fm=hm,pm=s(fm,um,dm,!1,null,null,null);pm.options.__file="packages/main/src/main.vue";var mm=pm.exports;mm.install=function(e){e.component(mm.name,mm)};var vm=mm,gm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("footer",{staticClass:"el-footer",style:{height:e.height}},[e._t("default")],2)},bm=[];gm._withStripped=!0;var ym={name:"ElFooter",componentName:"ElFooter",props:{height:{type:String,default:"60px"}}},_m=ym,xm=s(_m,gm,bm,!1,null,null,null);xm.options.__file="packages/footer/src/main.vue";var wm=xm.exports;wm.install=function(e){e.component(wm.name,wm)};var Cm,km,Sm=wm,Om={name:"ElTimeline",props:{reverse:{type:Boolean,default:!1}},provide:function(){return{timeline:this}},render:function(){var e=arguments[0],t=this.reverse,n={"el-timeline":!0,"is-reverse":t},i=this.$slots.default||[];return t&&(i=i.reverse()),e("ul",{class:n},[i])}},$m=Om,Dm=s($m,Cm,km,!1,null,null,null);Dm.options.__file="packages/timeline/src/main.vue";var Em=Dm.exports;Em.install=function(e){e.component(Em.name,Em)};var Tm=Em,Pm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{staticClass:"el-timeline-item"},[n("div",{staticClass:"el-timeline-item__tail"}),e.$slots.dot?e._e():n("div",{staticClass:"el-timeline-item__node",class:["el-timeline-item__node--"+(e.size||""),"el-timeline-item__node--"+(e.type||"")],style:{backgroundColor:e.color}},[e.icon?n("i",{staticClass:"el-timeline-item__icon",class:e.icon}):e._e()]),e.$slots.dot?n("div",{staticClass:"el-timeline-item__dot"},[e._t("dot")],2):e._e(),n("div",{staticClass:"el-timeline-item__wrapper"},[e.hideTimestamp||"top"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-top"},[e._v("\n "+e._s(e.timestamp)+"\n ")]),n("div",{staticClass:"el-timeline-item__content"},[e._t("default")],2),e.hideTimestamp||"bottom"!==e.placement?e._e():n("div",{staticClass:"el-timeline-item__timestamp is-bottom"},[e._v("\n "+e._s(e.timestamp)+"\n ")])])])},Mm=[];Pm._withStripped=!0;var Im={name:"ElTimelineItem",inject:["timeline"],props:{timestamp:String,hideTimestamp:{type:Boolean,default:!1},placement:{type:String,default:"bottom"},type:String,color:String,size:{type:String,default:"normal"},icon:String}},Nm=Im,jm=s(Nm,Pm,Mm,!1,null,null,null);jm.options.__file="packages/timeline/src/item.vue";var Am=jm.exports;Am.install=function(e){e.component(Am.name,Am)};var Fm=Am,Lm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("a",e._b({class:["el-link",e.type?"el-link--"+e.type:"",e.disabled&&"is-disabled",e.underline&&!e.disabled&&"is-underline"],attrs:{href:e.disabled?null:e.href},on:{click:e.handleClick}},"a",e.$attrs,!1),[e.icon?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",{staticClass:"el-link--inner"},[e._t("default")],2):e._e(),e.$slots.icon?[e.$slots.icon?e._t("icon"):e._e()]:e._e()],2)},Vm=[];Lm._withStripped=!0;var zm={name:"ElLink",props:{type:{type:String,default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:String,icon:String},methods:{handleClick:function(e){this.disabled||this.href||this.$emit("click",e)}}},Bm=zm,Rm=s(Bm,Lm,Vm,!1,null,null,null);Rm.options.__file="packages/link/src/main.vue";var Hm=Rm.exports;Hm.install=function(e){e.component(Hm.name,Hm)};var Wm=Hm,qm=function(e,t){var n=t._c;return n("div",t._g(t._b({class:[t.data.staticClass,"el-divider","el-divider--"+t.props.direction]},"div",t.data.attrs,!1),t.listeners),[t.slots().default&&"vertical"!==t.props.direction?n("div",{class:["el-divider__text","is-"+t.props.contentPosition]},[t._t("default")],2):t._e()])},Um=[];qm._withStripped=!0;var Ym={name:"ElDivider",props:{direction:{type:String,default:"horizontal",validator:function(e){return-1!==["horizontal","vertical"].indexOf(e)}},contentPosition:{type:String,default:"center",validator:function(e){return-1!==["left","center","right"].indexOf(e)}}}},Km=Ym,Gm=s(Km,qm,Um,!0,null,null,null);Gm.options.__file="packages/divider/src/main.vue";var Xm=Gm.exports;Xm.install=function(e){e.component(Xm.name,Xm)};var Zm=Xm,Jm=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-image"},[e.loading?e._t("placeholder",[n("div",{staticClass:"el-image__placeholder"})]):e.error?e._t("error",[n("div",{staticClass:"el-image__error"},[e._v(e._s(e.t("el.image.error")))])]):n("img",e._g(e._b({staticClass:"el-image__inner",class:{"el-image__inner--center":e.alignCenter,"el-image__preview":e.preview},style:e.imageStyle,attrs:{src:e.src},on:{click:e.clickHandler}},"img",e.$attrs,!1),e.$listeners)),e.preview&&e.showViewer?n("image-viewer",{attrs:{"z-index":e.zIndex,"on-close":e.closeViewer,"url-list":e.previewSrcList}}):e._e()],2)},Qm=[];Jm._withStripped=!0;var ev=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"viewer-fade"}},[n("div",{staticClass:"el-image-viewer__wrapper",style:{"z-index":e.zIndex}},[n("div",{staticClass:"el-image-viewer__mask"}),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__close",on:{click:e.hide}},[n("i",{staticClass:"el-icon-circle-close"})]),e.isSingle?e._e():[n("span",{staticClass:"el-image-viewer__btn el-image-viewer__prev",class:{"is-disabled":!e.infinite&&e.isFirst},on:{click:e.prev}},[n("i",{staticClass:"el-icon-arrow-left"})]),n("span",{staticClass:"el-image-viewer__btn el-image-viewer__next",class:{"is-disabled":!e.infinite&&e.isLast},on:{click:e.next}},[n("i",{staticClass:"el-icon-arrow-right"})])],n("div",{staticClass:"el-image-viewer__btn el-image-viewer__actions"},[n("div",{staticClass:"el-image-viewer__actions__inner"},[n("i",{staticClass:"el-icon-zoom-out",on:{click:function(t){e.handleActions("zoomOut")}}}),n("i",{staticClass:"el-icon-zoom-in",on:{click:function(t){e.handleActions("zoomIn")}}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{class:e.mode.icon,on:{click:e.toggleMode}}),n("i",{staticClass:"el-image-viewer__actions__divider"}),n("i",{staticClass:"el-icon-refresh-left",on:{click:function(t){e.handleActions("anticlocelise")}}}),n("i",{staticClass:"el-icon-refresh-right",on:{click:function(t){e.handleActions("clocelise")}}})])]),n("div",{staticClass:"el-image-viewer__canvas"},e._l(e.urlList,(function(t,i){return i===e.index?n("img",{key:t,ref:"img",refInFor:!0,staticClass:"el-image-viewer__img",style:e.imgStyle,attrs:{src:e.currentImg},on:{load:e.handleImgLoad,error:e.handleImgError,mousedown:e.handleMouseDown}}):e._e()})),0)],2)])},tv=[];ev._withStripped=!0;var nv=Object.assign||function(e){for(var t=1;t0?e.handleActions("zoomIn",{zoomRate:.015,enableTransition:!1}):e.handleActions("zoomOut",{zoomRate:.015,enableTransition:!1})})),Object(Le["on"])(document,"keydown",this._keyDownHandler),Object(Le["on"])(document,rv,this._mouseWheelHandler)},deviceSupportUninstall:function(){Object(Le["off"])(document,"keydown",this._keyDownHandler),Object(Le["off"])(document,rv,this._mouseWheelHandler),this._keyDownHandler=null,this._mouseWheelHandler=null},handleImgLoad:function(e){this.loading=!1},handleImgError:function(e){this.loading=!1,e.target.alt="加载失败"},handleMouseDown:function(e){var t=this;if(!this.loading&&0===e.button){var n=this.transform,i=n.offsetX,r=n.offsetY,o=e.pageX,a=e.pageY;this._dragHandler=Object(b["rafThrottle"])((function(e){t.transform.offsetX=i+e.pageX-o,t.transform.offsetY=r+e.pageY-a})),Object(Le["on"])(document,"mousemove",this._dragHandler),Object(Le["on"])(document,"mouseup",(function(e){Object(Le["off"])(document,"mousemove",t._dragHandler)})),e.preventDefault()}},reset:function(){this.transform={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}},toggleMode:function(){if(!this.loading){var e=Object.keys(iv),t=Object.values(iv),n=t.indexOf(this.mode),i=(n+1)%e.length;this.mode=iv[e[i]],this.reset()}},prev:function(){if(!this.isFirst||this.infinite){var e=this.urlList.length;this.index=(this.index-1+e)%e}},next:function(){if(!this.isLast||this.infinite){var e=this.urlList.length;this.index=(this.index+1)%e}},handleActions:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.loading){var n=nv({zoomRate:.2,rotateDeg:90,enableTransition:!0},t),i=n.zoomRate,r=n.rotateDeg,o=n.enableTransition,a=this.transform;switch(e){case"zoomOut":a.scale>.2&&(a.scale=parseFloat((a.scale-i).toFixed(3)));break;case"zoomIn":a.scale=parseFloat((a.scale+i).toFixed(3));break;case"clocelise":a.deg+=r;break;case"anticlocelise":a.deg-=r;break}a.enableTransition=o}}},mounted:function(){this.deviceSupportInstall()}},av=ov,sv=s(av,ev,tv,!1,null,null,null);sv.options.__file="packages/image/src/image-viewer.vue";var lv=sv.exports,cv=function(){return void 0!==document.documentElement.style.objectFit},uv={NONE:"none",CONTAIN:"contain",COVER:"cover",FILL:"fill",SCALE_DOWN:"scale-down"},dv={name:"ElImage",mixins:[g.a],inheritAttrs:!1,components:{ImageViewer:lv},props:{src:String,fit:String,lazy:Boolean,scrollContainer:{},previewSrcList:{type:Array,default:function(){return[]}},zIndex:{type:Number,default:2e3}},data:function(){return{loading:!0,error:!1,show:!this.lazy,imageWidth:0,imageHeight:0,showViewer:!1}},computed:{imageStyle:function(){var e=this.fit;return!this.$isServer&&e?cv()?{"object-fit":e}:this.getImageStyle(e):{}},alignCenter:function(){return!this.$isServer&&!cv()&&this.fit!==uv.FILL},preview:function(){var e=this.previewSrcList;return Array.isArray(e)&&e.length>0}},watch:{src:function(e){this.show&&this.loadImage()},show:function(e){e&&this.loadImage()}},mounted:function(){this.lazy?this.addLazyLoadListener():this.loadImage()},beforeDestroy:function(){this.lazy&&this.removeLazyLoadListener()},methods:{loadImage:function(){var e=this;if(!this.$isServer){this.loading=!0,this.error=!1;var t=new Image;t.onload=function(n){return e.handleLoad(n,t)},t.onerror=this.handleError.bind(this),Object.keys(this.$attrs).forEach((function(n){var i=e.$attrs[n];t.setAttribute(n,i)})),t.src=this.src}},handleLoad:function(e,t){this.imageWidth=t.width,this.imageHeight=t.height,this.loading=!1},handleError:function(e){this.loading=!1,this.error=!0,this.$emit("error",e)},handleLazyLoad:function(){Object(Le["isInContainer"])(this.$el,this._scrollContainer)&&(this.show=!0,this.removeLazyLoadListener())},addLazyLoadListener:function(){if(!this.$isServer){var e=this.scrollContainer,t=null;t=Object(hh["isHtmlElement"])(e)?e:Object(hh["isString"])(e)?document.querySelector(e):Object(Le["getScrollContainer"])(this.$el),t&&(this._scrollContainer=t,this._lazyLoadHandler=jh()(200,this.handleLazyLoad),Object(Le["on"])(t,"scroll",this._lazyLoadHandler),this.handleLazyLoad())}},removeLazyLoadListener:function(){var e=this._scrollContainer,t=this._lazyLoadHandler;!this.$isServer&&e&&t&&(Object(Le["off"])(e,"scroll",t),this._scrollContainer=null,this._lazyLoadHandler=null)},getImageStyle:function(e){var t=this.imageWidth,n=this.imageHeight,i=this.$el,r=i.clientWidth,o=i.clientHeight;if(!t||!n||!r||!o)return{};var a=t/n<1;if(e===uv.SCALE_DOWN){var s=tr)return console.warn("[ElementCalendar]end time should be greater than start time"),[];if(Object(ao["validateRangeInOneMonth"])(i,r))return[[i,r]];var o=[],a=new Date(i.getFullYear(),i.getMonth()+1,1),s=this.toDate(a.getTime()-Dv);if(!Object(ao["validateRangeInOneMonth"])(a,r))return console.warn("[ElementCalendar]start time and end time interval must not exceed two months"),[];o.push([i,s]);var l=this.realFirstDayOfWeek,c=a.getDay(),u=0;return c!==l&&(0===l?u=7-c:(u=l-c,u=u>0?u:7+u)),a=this.toDate(a.getTime()+u*Dv),a.getDate()6?0:Math.floor(this.firstDayOfWeek)}},data:function(){return{selectedDay:"",now:new Date}}},Tv=Ev,Pv=s(Tv,vv,gv,!1,null,null,null);Pv.options.__file="packages/calendar/src/main.vue";var Mv=Pv.exports;Mv.install=function(e){e.component(Mv.name,Mv)};var Iv=Mv,Nv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-fade-in"}},[e.visible?n("div",{staticClass:"el-backtop",style:{right:e.styleRight,bottom:e.styleBottom},on:{click:function(t){return t.stopPropagation(),e.handleClick(t)}}},[e._t("default",[n("el-icon",{attrs:{name:"caret-top"}})])],2):e._e()])},jv=[];Nv._withStripped=!0;var Av={name:"ElBacktop",props:{visibilityHeight:{type:Number,default:200},target:[String],right:{type:Number,default:40},bottom:{type:Number,default:40}},data:function(){return{el:null,container:null,visible:!1}},computed:{styleBottom:function(){return this.bottom+"px"},styleRight:function(){return this.right+"px"}},mounted:function(){this.init(),this.throttledScrollHandler=jh()(300,this.onScroll),this.container.addEventListener("scroll",this.throttledScrollHandler)},methods:{init:function(){if(this.container=document,this.el=document.documentElement,this.target){if(this.el=document.querySelector(this.target),!this.el)throw new Error("target is not existed: "+this.target);this.container=this.el}},onScroll:function(){var e=this.el.scrollTop;this.visible=e>=this.visibilityHeight},handleClick:function(e){this.scrollToTop(),this.$emit("click",e)},scrollToTop:function(){var e=this.el,t=0,n=setInterval((function(){e.scrollTop<=0?clearInterval(n):(t+=10,e.scrollTop-=t)}),20)}},beforeDestroy:function(){this.container.removeEventListener("scroll",this.throttledScrollHandler)}},Fv=Av,Lv=s(Fv,Nv,jv,!1,null,null,null);Lv.options.__file="packages/backtop/src/main.vue";var Vv=Lv.exports;Vv.install=function(e){e.component(Vv.name,Vv)};var zv=Vv,Bv=function(e,t){if(e===window&&(e=document.documentElement),1!==e.nodeType)return[];var n=window.getComputedStyle(e,null);return t?n[t]:n},Rv=function(e){return Object.keys(e||{}).map((function(t){return[t,e[t]]}))},Hv=function(e,t){return e===window||e===document?document.documentElement[t]:e[t]},Wv=function(e){return Hv(e,"offsetHeight")},qv=function(e){return Hv(e,"clientHeight")},Uv="ElInfiniteScroll",Yv={delay:{type:Number,default:200},distance:{type:Number,default:0},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Kv=function(e,t){return Object(hh["isHtmlElement"])(e)?Rv(Yv).reduce((function(n,i){var r=i[0],o=i[1],a=o.type,s=o.default,l=e.getAttribute("infinite-scroll-"+r);switch(l=Object(hh["isUndefined"])(t[l])?l:t[l],a){case Number:l=Number(l),l=Number.isNaN(l)?s:l;break;case Boolean:l=Object(hh["isDefined"])(l)?"false"!==l&&Boolean(l):s;break;default:l=a(l)}return n[r]=l,n}),{}):{}},Gv=function(e){return e.getBoundingClientRect().top},Xv=function(e){var t=this[Uv],n=t.el,i=t.vm,r=t.container,o=t.observer,a=Kv(n,i),s=a.distance,l=a.disabled;if(!l){var c=!1;if(r===n){var u=r.scrollTop+qv(r);c=r.scrollHeight-u<=s}else{var d=Wv(n)+Gv(n)-Gv(r),h=Wv(r),f=Number.parseFloat(Bv(r,"borderBottomWidth"));c=d-h+f<=s}c&&Object(hh["isFunction"])(e)?e.call(i):o&&(o.disconnect(),this[Uv].observer=null)}},Zv={name:"InfiniteScroll",inserted:function(e,t,n){var i=t.value,r=n.context,o=Object(Le["getScrollContainer"])(e,!0),a=Kv(e,r),s=a.delay,l=a.immediate,c=F()(s,Xv.bind(e,i));if(e[Uv]={el:e,vm:r,container:o,onScroll:c},o&&(o.addEventListener("scroll",c),l)){var u=e[Uv].observer=new MutationObserver(c);u.observe(o,{childList:!0,subtree:!0}),c()}},unbind:function(e){var t=e[Uv],n=t.container,i=t.onScroll;n&&n.removeEventListener("scroll",i)},install:function(e){e.directive(Zv.name,Zv)}},Jv=Zv,Qv=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-page-header"},[n("div",{staticClass:"el-page-header__left",on:{click:function(t){e.$emit("back")}}},[n("i",{staticClass:"el-icon-back"}),n("div",{staticClass:"el-page-header__title"},[e._t("title",[e._v(e._s(e.title))])],2)]),n("div",{staticClass:"el-page-header__content"},[e._t("content",[e._v(e._s(e.content))])],2)])},eg=[];Qv._withStripped=!0;var tg={name:"ElPageHeader",props:{title:{type:String,default:function(){return Object(ti["t"])("el.pageHeader.title")}},content:String}},ng=tg,ig=s(ng,Qv,eg,!1,null,null,null);ig.options.__file="packages/page-header/src/main.vue";var rg=ig.exports;rg.install=function(e){e.component(rg.name,rg)};var og=rg,ag=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return n("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},sg=[];ag._withStripped=!0;var lg,cg,ug=n(43),dg=n.n(ug),hg=function(e){return e.stopPropagation()},fg={inject:["panel"],components:{ElCheckbox:Ai.a,ElRadio:dg.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,n=this.node,i=this.isDisabled,r=this.config,o=r.multiple,a=r.checkStrictly;!a&&i||n.loading||(r.lazy&&!n.loaded?t.lazyLoad(n,(function(){var t=e.isLeaf;if(t||e.handleExpand(),o){var i=!!t&&n.checked;e.handleMultiCheckChange(i)}})):t.handleExpand(n))},handleCheckChange:function(){var e=this.panel,t=this.value,n=this.node;e.handleCheckChange(t),e.handleExpand(n)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,n=e[t.level-1]||{};return n.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,n=this.isChecked,i=this.config,r=i.checkStrictly,o=i.multiple;return o?this.renderCheckbox(e):r?this.renderRadio(e):t&&n?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,n=this.isLeaf;return t.loading?this.renderLoadingIcon(e):n?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,n=this.config,i=this.isDisabled,r={on:{change:this.handleMultiCheckChange},nativeOn:{}};return n.checkStrictly&&(r.nativeOn.click=hg),e("el-checkbox",Ju()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:i}},r]))},renderRadio:function(e){var t=this.checkedValue,n=this.value,i=this.isDisabled;return Object(b["isEqual"])(n,t)&&(n=t),e("el-radio",{attrs:{value:t,label:n,disabled:i},on:{change:this.handleCheckChange},nativeOn:{click:hg}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,n=this.node,i=t.renderLabelFn,r=i?i({node:n,data:n.data}):null;return e("span",{class:"el-cascader-node__label"},[r||n.label])}},render:function(e){var t=this,n=this.inActivePath,i=this.inCheckedPath,r=this.isChecked,o=this.isLeaf,a=this.isDisabled,s=this.config,l=this.nodeId,c=s.expandTrigger,u=s.checkStrictly,d=s.multiple,h=!u&&a,f={on:{}};return"click"===c?f.on.click=this.handleExpand:(f.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},f.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!o||a||u||d||(f.on.click=this.handleCheckChange),e("li",Ju()([{attrs:{role:"menuitem",id:l,"aria-expanded":n,tabindex:h?null:-1},class:{"el-cascader-node":!0,"is-selectable":u,"in-active-path":n,"in-checked-path":i,"is-active":r,"is-disabled":h}},f]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},pg=fg,mg=s(pg,lg,cg,!1,null,null,null);mg.options.__file="packages/cascader-panel/src/cascader-node.vue";var vg,gg,bg=mg.exports,yg={name:"ElCascaderMenu",mixins:[g.a],inject:["panel"],components:{ElScrollbar:q.a,CascaderNode:bg},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(b["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,n=this.hoverTimer,i=this.$refs.hoverZone;if(t&&i)if(t.contains(e.target)){clearTimeout(n);var r=this.$el.getBoundingClientRect(),o=r.left,a=e.clientX-o,s=this.$el,l=s.offsetWidth,c=s.offsetHeight,u=t.offsetTop,d=u+t.offsetHeight;i.innerHTML='\n \n \n '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",Ju()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",Ju()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},_g=yg,xg=s(_g,vg,gg,!1,null,null,null);xg.options.__file="packages/cascader-panel/src/cascader-menu.vue";var wg=xg.exports,Cg=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i1?i-1:0),o=1;o0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},Cg(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(Ot["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),$g=Og;function Dg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Eg=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},Tg=function(){function e(t,n){Dg(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(b["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new $g(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new $g(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(b["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:Eg(this.nodes,e)},e.prototype.getNodeByValue=function(e){if(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(b["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null}return null},e}(),Pg=Tg,Mg=Object.assign||function(e){for(var t=1;t0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");ri()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return Object(b["isEmpty"])(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},Bg=zg,Rg=s(Bg,ag,sg,!1,null,null,null);Rg.options.__file="packages/cascader-panel/src/cascader-panel.vue";var Hg=Rg.exports;Hg.install=function(e){e.component(Hg.name,Hg)};var Wg,qg,Ug=Hg,Yg={name:"ElAvatar",props:{size:{type:[Number,String],validator:function(e){return"string"===typeof e?["large","medium","small"].includes(e):"number"===typeof e}},shape:{type:String,default:"circle",validator:function(e){return["circle","square"].includes(e)}},icon:String,src:String,alt:String,srcSet:String,error:Function,fit:{type:String,default:"cover"}},data:function(){return{isImageExist:!0}},computed:{avatarClass:function(){var e=this.size,t=this.icon,n=this.shape,i=["el-avatar"];return e&&"string"===typeof e&&i.push("el-avatar--"+e),t&&i.push("el-avatar--icon"),n&&i.push("el-avatar--"+n),i.join(" ")}},methods:{handleError:function(){var e=this.error,t=e?e():void 0;!1!==t&&(this.isImageExist=!1)},renderAvatar:function(){var e=this.$createElement,t=this.icon,n=this.src,i=this.alt,r=this.isImageExist,o=this.srcSet,a=this.fit;return r&&n?e("img",{attrs:{src:n,alt:i,srcSet:o},on:{error:this.handleError},style:{"object-fit":a}}):t?e("i",{class:t}):this.$slots.default}},render:function(){var e=arguments[0],t=this.avatarClass,n=this.size,i="number"===typeof n?{height:n+"px",width:n+"px",lineHeight:n+"px"}:{};return e("span",{class:t,style:i},[this.renderAvatar()])}},Kg=Yg,Gg=s(Kg,Wg,qg,!1,null,null,null);Gg.options.__file="packages/avatar/src/main.vue";var Xg=Gg.exports;Xg.install=function(e){e.component(Xg.name,Xg)};var Zg=Xg,Jg=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("transition",{attrs:{name:"el-drawer-fade"},on:{"after-enter":e.afterEnter,"after-leave":e.afterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-dialog__wrapper",attrs:{role:"presentation"}},[n("div",{staticClass:"el-drawer__container",class:e.visible&&"el-drawer__open",attrs:{role:"document",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.handleWrapperClick(t)}}},[n("div",{ref:"drawer",staticClass:"el-drawer",class:[e.direction,e.customClass],style:e.isHorizontal?"width: "+e.size:"height: "+e.size,attrs:{"aria-modal":"true","aria-labelledby":"el-drawer__title",role:"presentation"}},[n("header",{staticClass:"el-drawer__header",attrs:{id:"el-drawer__title"}},[e._t("title",[n("span",{attrs:{role:"heading"}},[e._v(e._s(e.title))])]),e.showClose?n("button",{staticClass:"el-drawer__close-btn",attrs:{"aria-label":"close "+(e.title||"drawer"),type:"button"},on:{click:e.closeDrawer}},[n("i",{staticClass:"el-dialog__close el-icon el-icon-close"})]):e._e()],2),e.rendered?n("section",{staticClass:"el-drawer__body"},[e._t("default")],2):e._e()])])])])},Qg=[];Jg._withStripped=!0;var eb={name:"ElDrawer",mixins:[k.a,D.a,O.a],props:{appendToBody:{type:Boolean,default:!0},beforeClose:{type:Function},customClass:{type:String,default:""},destroyOnClose:{type:Boolean,default:!1},modal:{type:Boolean,default:!0},direction:{type:String,default:"rtl",validator:function(e){return-1!==["ltr","rtl","ttb","btt"].indexOf(e)}},showClose:{type:Boolean,default:!0},size:{type:String,default:"30%"},title:{type:String,default:""},visible:{type:Boolean},wrapperClosable:{type:Boolean,default:!0}},computed:{isHorizontal:function(){return"rtl"===this.direction||"ltr"===this.direction}},data:function(){return{closed:!1}},watch:{visible:function(e){e?(this.closed=!1,this.$emit("open"),this.appendToBody&&document.body.appendChild(this.$el)):this.closed||this.$emit("close")}},methods:{afterEnter:function(){this.$emit("opened")},afterLeave:function(){this.$emit("closed")},hide:function(e){!1!==e&&(this.$emit("update:visible",!1),this.$emit("close"),!0===this.destroyOnClose&&(this.rendered=!1),this.closed=!0)},handleWrapperClick:function(){this.wrapperClosable&&this.closeDrawer()},closeDrawer:function(){"function"===typeof this.beforeClose?this.beforeClose(this.hide):this.hide()}},mounted:function(){this.visible&&(this.rendered=!0,this.open())},destroyed:function(){this.appendToBody&&this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)}},tb=eb,nb=s(tb,Jg,Qg,!1,null,null,null);nb.options.__file="packages/drawer/src/main.vue";var ib=nb.exports;ib.install=function(e){e.component(ib.name,ib)};var rb=ib,ob=[_,I,re,fe,_e,$e,qe,et,ct,vt,Pt,Vt,Ut,en,ln,mn,wn,En,An,ui,di,bi,Si,Mi,Gr,io,Pa,Ha,ns,ds,fs,Hs,Xs,il,bl,Vl,Kl,Ql,Dc,Ac,hu,Fu,Vu,Ru,xd,Dd,jd,nh,ch,gh,kh,Ph,zh,qh,Qh,sf,pf,Ef,Ep,Rp,Gp,nm,cm,vm,Sm,Tm,Fm,Wm,Zm,mv,Iv,zv,og,Ug,Zg,rb,Ye.a],ab=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ni.a.use(t.locale),ni.a.i18n(t.i18n),ob.forEach((function(t){e.component(t.name,t)})),e.use(Jv),e.use(Tu.directive),e.prototype.$ELEMENT={size:t.size||"",zIndex:t.zIndex||2e3},e.prototype.$loading=Tu.service,e.prototype.$msgbox=As,e.prototype.$alert=As.alert,e.prototype.$confirm=As.confirm,e.prototype.$prompt=As.prompt,e.prototype.$notify=Xc,e.prototype.$message=Gd};"undefined"!==typeof window&&window.Vue&&ab(window.Vue);t["default"]={version:"2.12.0",locale:ni.a.use,i18n:ni.a.i18n,install:ab,CollapseTransition:Ye.a,Loading:Tu,Pagination:_,Dialog:I,Autocomplete:re,Dropdown:fe,DropdownMenu:_e,DropdownItem:$e,Menu:qe,Submenu:et,MenuItem:ct,MenuItemGroup:vt,Input:Pt,InputNumber:Vt,Radio:Ut,RadioGroup:en,RadioButton:ln,Checkbox:mn,CheckboxButton:wn,CheckboxGroup:En,Switch:An,Select:ui,Option:di,OptionGroup:bi,Button:Si,ButtonGroup:Mi,Table:Gr,TableColumn:io,DatePicker:Pa,TimeSelect:Ha,TimePicker:ns,Popover:ds,Tooltip:fs,MessageBox:As,Breadcrumb:Hs,BreadcrumbItem:Xs,Form:il,FormItem:bl,Tabs:Vl,TabPane:Kl,Tag:Ql,Tree:Dc,Alert:Ac,Notification:Xc,Slider:hu,Icon:Fu,Row:Vu,Col:Ru,Upload:xd,Progress:Dd,Spinner:jd,Message:Gd,Badge:nh,Card:ch,Rate:gh,Steps:kh,Step:Ph,Carousel:zh,Scrollbar:qh,CarouselItem:Qh,Collapse:sf,CollapseItem:pf,Cascader:Ef,ColorPicker:Ep,Transfer:Rp,Container:Gp,Header:nm,Aside:cm,Main:vm,Footer:Sm,Timeline:Tm,TimelineItem:Fm,Link:Wm,Divider:Zm,Image:mv,Calendar:Iv,Backtop:zv,InfiniteScroll:Jv,PageHeader:og,CascaderPanel:Ug,Avatar:Zg,Drawer:rb}}])["default"]},"60ae":function(e,t,n){var i,r,o=n("da84"),a=n("b39a"),s=o.process,l=s&&s.versions,c=l&&l.v8;c?(i=c.split("."),r=i[0]+i[1]):a&&(i=a.match(/Chrome\/(\d+)/),i&&(r=i[1])),e.exports=r&&+r},"60da":function(e,t,n){"use strict";var i=n("83ab"),r=n("d039"),o=n("df75"),a=n("7418"),s=n("d1e7"),l=n("7b0b"),c=n("44ad"),u=Object.assign;e.exports=!u||r((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||o(u({},t)).join("")!=i}))?function(e,t){var n=l(e),r=arguments.length,u=1,d=a.f,h=s.f;while(r>u){var f,p=c(arguments[u++]),m=d?o(p).concat(d(p)):o(p),v=m.length,g=0;while(v>g)f=m[g++],i&&!h.call(p,f)||(n[f]=p[f])}return n}:u},6167:function(e,t,n){"use strict";var i,r;"function"===typeof Symbol&&Symbol.iterator;(function(o,a){i=a,r="function"===typeof i?i.call(t,n,t,e):i,void 0===r||(e.exports=r)})(0,(function(){var e=window,t={placement:"bottom",gpuAcceleration:!0,offset:0,boundariesElement:"viewport",boundariesPadding:5,preventOverflowOrder:["left","right","top","bottom"],flipBehavior:"flip",arrowElement:"[x-arrow]",arrowOffset:0,modifiers:["shift","offset","preventOverflow","keepTogether","arrow","flip","applyStyle"],modifiersIgnored:[],forceAbsolute:!1};function n(e,n,i){this._reference=e.jquery?e[0]:e,this.state={};var r="undefined"===typeof n||null===n,o=n&&"[object Object]"===Object.prototype.toString.call(n);return this._popper=r||o?this.parse(o?n:{}):n.jquery?n[0]:n,this._options=Object.assign({},t,i),this._options.modifiers=this._options.modifiers.map(function(e){if(-1===this._options.modifiersIgnored.indexOf(e))return"applyStyle"===e&&this._popper.setAttribute("x-placement",this._options.placement),this.modifiers[e]||e}.bind(this)),this.state.position=this._getPosition(this._popper,this._reference),d(this._popper,{position:this.state.position,top:0}),this.update(),this._setupEventListeners(),this}function i(t){var n=t.style.display,i=t.style.visibility;t.style.display="block",t.style.visibility="hidden";t.offsetWidth;var r=e.getComputedStyle(t),o=parseFloat(r.marginTop)+parseFloat(r.marginBottom),a=parseFloat(r.marginLeft)+parseFloat(r.marginRight),s={width:t.offsetWidth+a,height:t.offsetHeight+o};return t.style.display=n,t.style.visibility=i,s}function r(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function o(e){var t=Object.assign({},e);return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function a(e,t){var n,i=0;for(n in e){if(e[n]===t)return i;i++}return null}function s(t,n){var i=e.getComputedStyle(t,null);return i[n]}function l(t){var n=t.offsetParent;return n!==e.document.body&&n?n:e.document.documentElement}function c(t){var n=t.parentNode;return n?n===e.document?e.document.body.scrollTop||e.document.body.scrollLeft?e.document.body:e.document.documentElement:-1!==["scroll","auto"].indexOf(s(n,"overflow"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-x"))||-1!==["scroll","auto"].indexOf(s(n,"overflow-y"))?n:c(t.parentNode):t}function u(t){return t!==e.document.body&&("fixed"===s(t,"position")||(t.parentNode?u(t.parentNode):t))}function d(e,t){function n(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}Object.keys(t).forEach((function(i){var r="";-1!==["width","height","top","right","bottom","left"].indexOf(i)&&n(t[i])&&(r="px"),e.style[i]=t[i]+r}))}function h(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function f(e){var t={width:e.offsetWidth,height:e.offsetHeight,left:e.offsetLeft,top:e.offsetTop};return t.right=t.left+t.width,t.bottom=t.top+t.height,t}function p(e){var t=e.getBoundingClientRect(),n=-1!=navigator.userAgent.indexOf("MSIE"),i=n&&"HTML"===e.tagName?-e.scrollTop:t.top;return{left:t.left,top:i,right:t.right,bottom:t.bottom,width:t.right-t.left,height:t.bottom-i}}function m(e,t,n){var i=p(e),r=p(t);if(n){var o=c(t);r.top+=o.scrollTop,r.bottom+=o.scrollTop,r.left+=o.scrollLeft,r.right+=o.scrollLeft}var a={top:i.top-r.top,left:i.left-r.left,bottom:i.top-r.top+i.height,right:i.left-r.left+i.width,width:i.width,height:i.height};return a}function v(t){for(var n=["","ms","webkit","moz","o"],i=0;i1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(r),r;function s(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},n.prototype._getPosition=function(e,t){var n=l(t);if(this._options.forceAbsolute)return"absolute";var i=u(t,n);return i?"fixed":"absolute"},n.prototype._getOffsets=function(e,t,n){n=n.split("-")[0];var r={};r.position=this.state.position;var o="fixed"===r.position,a=m(t,l(e),o),s=i(e);return-1!==["right","left"].indexOf(n)?(r.top=a.top+a.height/2-s.height/2,r.left="left"===n?a.left-s.width:a.right):(r.left=a.left+a.width/2-s.width/2,r.top="top"===n?a.top-s.height:a.bottom),r.width=s.width,r.height=s.height,{popper:r,reference:a}},n.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=c(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},n.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},n.prototype._getBoundaries=function(t,n,i){var r,o,a={};if("window"===i){var s=e.document.body,u=e.document.documentElement;o=Math.max(s.scrollHeight,s.offsetHeight,u.clientHeight,u.scrollHeight,u.offsetHeight),r=Math.max(s.scrollWidth,s.offsetWidth,u.clientWidth,u.scrollWidth,u.offsetWidth),a={top:0,right:r,bottom:o,left:0}}else if("viewport"===i){var d=l(this._popper),h=c(this._popper),p=f(d),m=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},v=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},g="fixed"===t.offsets.popper.position?0:m(h),b="fixed"===t.offsets.popper.position?0:v(h);a={top:0-(p.top-g),right:e.document.documentElement.clientWidth-(p.left-b),bottom:e.document.documentElement.clientHeight-(p.top-g),left:0-(p.left-b)}}else a=l(this._popper)===i?{top:0,left:0,right:i.clientWidth,bottom:i.clientHeight}:f(i);return a.left+=n,a.right-=n,a.top=a.top+n,a.bottom=a.bottom-n,a},n.prototype.runModifiers=function(e,t,n){var i=t.slice();return void 0!==n&&(i=this._options.modifiers.slice(0,a(this._options.modifiers,n))),i.forEach(function(t){h(t)&&(e=t.call(this,e))}.bind(this)),e},n.prototype.isModifierRequired=function(e,t){var n=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,n).filter((function(e){return e===t})).length},n.prototype.modifiers={},n.prototype.modifiers.applyStyle=function(e){var t,n={position:e.offsets.popper.position},i=Math.round(e.offsets.popper.left),r=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=v("transform"))?(n[t]="translate3d("+i+"px, "+r+"px, 0)",n.top=0,n.left=0):(n.left=i,n.top=r),Object.assign(n,e.styles),d(this._popper,n),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&d(e.arrowElement,e.offsets.arrow),e},n.prototype.modifiers.shift=function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets.reference,a=o(e.offsets.popper),s={y:{start:{top:r.top},end:{top:r.top+r.height-a.height}},x:{start:{left:r.left},end:{left:r.left+r.width-a.width}}},l=-1!==["bottom","top"].indexOf(n)?"x":"y";e.offsets.popper=Object.assign(a,s[l][i])}return e},n.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,n=o(e.offsets.popper),i={left:function(){var t=n.left;return n.lefte.boundaries.right&&(t=Math.min(n.left,e.boundaries.right-n.width)),{left:t}},top:function(){var t=n.top;return n.tope.boundaries.bottom&&(t=Math.min(n.top,e.boundaries.bottom-n.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(n,i[t]())})),e},n.prototype.modifiers.keepTogether=function(e){var t=o(e.offsets.popper),n=e.offsets.reference,i=Math.floor;return t.righti(n.right)&&(e.offsets.popper.left=i(n.right)),t.bottomi(n.bottom)&&(e.offsets.popper.top=i(n.bottom)),e},n.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],n=r(t),i=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,n]:this._options.flipBehavior,a.forEach(function(s,l){if(t===s&&a.length!==l+1){t=e.placement.split("-")[0],n=r(t);var c=o(e.offsets.popper),u=-1!==["right","bottom"].indexOf(t);(u&&Math.floor(e.offsets.reference[t])>Math.floor(c[n])||!u&&Math.floor(e.offsets.reference[t])s[f]&&(e.offsets.popper[d]+=l[d]+p-s[f]);var m=l[d]+(n||l[u]/2-p/2),v=m-s[d];return v=Math.max(Math.min(s[u]-p-8,v),8),r[d]=v,r[h]="",e.offsets.arrow=r,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;n=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},"693d":function(e,t,n){"use strict";var i=n("ef08"),r=n("9c0e"),o=n("0bad"),a=n("512c"),s=n("ba01"),l=n("e34a").KEY,c=n("4b8b"),u=n("b367"),d=n("92f0"),h=n("8b1a"),f=n("cc15"),p=n("fcd4"),m=n("e198"),v=n("0ae2"),g=n("4ebc"),b=n("77e9"),y=n("7a41"),_=n("0983"),x=n("6ca1"),w=n("3397"),C=n("10db"),k=n("6f4f"),S=n("1836"),O=n("4d20"),$=n("fed5"),D=n("1a14"),E=n("9876"),T=O.f,P=D.f,M=S.f,I=i.Symbol,N=i.JSON,j=N&&N.stringify,A="prototype",F=f("_hidden"),L=f("toPrimitive"),V={}.propertyIsEnumerable,z=u("symbol-registry"),B=u("symbols"),R=u("op-symbols"),H=Object[A],W="function"==typeof I&&!!$.f,q=i.QObject,U=!q||!q[A]||!q[A].findChild,Y=o&&c((function(){return 7!=k(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a}))?function(e,t,n){var i=T(H,t);i&&delete H[t],P(e,t,n),i&&e!==H&&P(H,t,i)}:P,K=function(e){var t=B[e]=k(I[A]);return t._k=e,t},G=W&&"symbol"==typeof I.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof I},X=function(e,t,n){return e===H&&X(R,t,n),b(e),t=w(t,!0),b(n),r(B,t)?(n.enumerable?(r(e,F)&&e[F][t]&&(e[F][t]=!1),n=k(n,{enumerable:C(0,!1)})):(r(e,F)||P(e,F,C(1,{})),e[F][t]=!0),Y(e,t,n)):P(e,t,n)},Z=function(e,t){b(e);var n,i=v(t=x(t)),r=0,o=i.length;while(o>r)X(e,n=i[r++],t[n]);return e},J=function(e,t){return void 0===t?k(e):Z(k(e),t)},Q=function(e){var t=V.call(this,e=w(e,!0));return!(this===H&&r(B,e)&&!r(R,e))&&(!(t||!r(this,e)||!r(B,e)||r(this,F)&&this[F][e])||t)},ee=function(e,t){if(e=x(e),t=w(t,!0),e!==H||!r(B,t)||r(R,t)){var n=T(e,t);return!n||!r(B,t)||r(e,F)&&e[F][t]||(n.enumerable=!0),n}},te=function(e){var t,n=M(x(e)),i=[],o=0;while(n.length>o)r(B,t=n[o++])||t==F||t==l||i.push(t);return i},ne=function(e){var t,n=e===H,i=M(n?R:x(e)),o=[],a=0;while(i.length>a)!r(B,t=i[a++])||n&&!r(H,t)||o.push(B[t]);return o};W||(I=function(){if(this instanceof I)throw TypeError("Symbol is not a constructor!");var e=h(arguments.length>0?arguments[0]:void 0),t=function(n){this===H&&t.call(R,n),r(this,F)&&r(this[F],e)&&(this[F][e]=!1),Y(this,e,C(1,n))};return o&&U&&Y(H,e,{configurable:!0,set:t}),K(e)},s(I[A],"toString",(function(){return this._k})),O.f=ee,D.f=X,n("6438").f=S.f=te,n("1917").f=Q,$.f=ne,o&&!n("e444")&&s(H,"propertyIsEnumerable",Q,!0),p.f=function(e){return K(f(e))}),a(a.G+a.W+a.F*!W,{Symbol:I});for(var ie="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;ie.length>re;)f(ie[re++]);for(var oe=E(f.store),ae=0;oe.length>ae;)m(oe[ae++]);a(a.S+a.F*!W,"Symbol",{for:function(e){return r(z,e+="")?z[e]:z[e]=I(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in z)if(z[t]===e)return t},useSetter:function(){U=!0},useSimple:function(){U=!1}}),a(a.S+a.F*!W,"Object",{create:J,defineProperty:X,defineProperties:Z,getOwnPropertyDescriptor:ee,getOwnPropertyNames:te,getOwnPropertySymbols:ne});var se=c((function(){$.f(1)}));a(a.S+a.F*se,"Object",{getOwnPropertySymbols:function(e){return $.f(_(e))}}),N&&a(a.S+a.F*(!W||c((function(){var e=I();return"[null]"!=j([e])||"{}"!=j({a:e})||"{}"!=j(Object(e))}))),"JSON",{stringify:function(e){var t,n,i=[e],r=1;while(arguments.length>r)i.push(arguments[r++]);if(n=t=i[1],(y(t)||void 0!==e)&&!G(e))return g(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!G(t))return t}),i[1]=t,j.apply(N,i)}}),I[A][L]||n("051b")(I[A],L,I[A].valueOf),d(I,"Symbol"),d(Math,"Math",!0),d(i.JSON,"JSON",!0)},"69f3":function(e,t,n){var i,r,o,a=n("7f9a"),s=n("da84"),l=n("861d"),c=n("9112"),u=n("5135"),d=n("f772"),h=n("d012"),f=s.WeakMap,p=function(e){return o(e)?r(e):i(e,{})},m=function(e){return function(t){var n;if(!l(t)||(n=r(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}};if(a){var v=new f,g=v.get,b=v.has,y=v.set;i=function(e,t){return y.call(v,e,t),t},r=function(e){return g.call(v,e)||{}},o=function(e){return b.call(v,e)}}else{var _=d("state");h[_]=!0,i=function(e,t){return c(e,_,t),t},r=function(e){return u(e,_)?e[_]:{}},o=function(e){return u(e,_)}}e.exports={set:i,get:r,has:o,enforce:p,getterFor:m}},"6b7c":function(e,t,n){"use strict";t.__esModule=!0;var i=n("4897");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),n=0;n0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),u?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t,i=c.some((function(e){return!!~n.indexOf(e)}));i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),h=function(e,t){for(var n=0,i=Object.keys(t);n0},e}(),D="undefined"!==typeof WeakMap?new WeakMap:new n,E=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=d.getInstance(),i=new $(t,n,this);D.set(this,i)}return e}();["observe","unobserve","disconnect"].forEach((function(e){E.prototype[e]=function(){var t;return(t=D.get(this))[e].apply(t,arguments)}}));var T=function(){return"undefined"!==typeof r.ResizeObserver?r.ResizeObserver:E}();t["default"]=T}.call(this,n("c8ba"))},"6eeb":function(e,t,n){var i=n("da84"),r=n("5692"),o=n("9112"),a=n("5135"),s=n("ce4e"),l=n("9e81"),c=n("69f3"),u=c.get,d=c.enforce,h=String(l).split("toString");r("inspectSource",(function(e){return l.call(e)})),(e.exports=function(e,t,n,r){var l=!!r&&!!r.unsafe,c=!!r&&!!r.enumerable,u=!!r&&!!r.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||o(n,"name",t),d(n).source=h.join("string"==typeof t?t:"")),e!==i?(l?!u&&e[t]&&(c=!0):delete e[t],c?e[t]=n:o(e,t,n)):c?e[t]=n:s(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||l.call(this)}))},"6f4f":function(e,t,n){var i=n("77e9"),r=n("85e7"),o=n("9742"),a=n("5a94")("IE_PROTO"),s=function(){},l="prototype",c=function(){var e,t=n("05f5")("iframe"),i=o.length,r="<",a=">";t.style.display="none",n("9141").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+a+"document.F=Object"+r+"/script"+a),e.close(),c=e.F;while(i--)delete c[l][o[i]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=i(e),n=new s,s[l]=null,n[a]=e):n=c(),void 0===t?n:r(n,t)}},"722f":function(e,t,n){"use strict";t.__esModule=!0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=n("e452"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}var s,l=l||{};l.Dialog=function(e,t,n){var r=this;if(this.dialogNode=e,null===this.dialogNode||"dialog"!==this.dialogNode.getAttribute("role"))throw new Error("Dialog() requires a DOM element with ARIA role of dialog.");"string"===typeof t?this.focusAfterClosed=document.getElementById(t):"object"===("undefined"===typeof t?"undefined":i(t))?this.focusAfterClosed=t:this.focusAfterClosed=null,"string"===typeof n?this.focusFirst=document.getElementById(n):"object"===("undefined"===typeof n?"undefined":i(n))?this.focusFirst=n:this.focusFirst=null,this.focusFirst?this.focusFirst.focus():o.default.focusFirstDescendant(this.dialogNode),this.lastFocus=document.activeElement,s=function(e){r.trapFocus(e)},this.addListeners()},l.Dialog.prototype.addListeners=function(){document.addEventListener("focus",s,!0)},l.Dialog.prototype.removeListeners=function(){document.removeEventListener("focus",s,!0)},l.Dialog.prototype.closeDialog=function(){var e=this;this.removeListeners(),this.focusAfterClosed&&setTimeout((function(){e.focusAfterClosed.focus()}))},l.Dialog.prototype.trapFocus=function(e){o.default.IgnoreUtilFocusChanges||(this.dialogNode.contains(e.target)?this.lastFocus=e.target:(o.default.focusFirstDescendant(this.dialogNode),this.lastFocus===document.activeElement&&o.default.focusLastDescendant(this.dialogNode),this.lastFocus=document.activeElement))},t.default=l.Dialog},7418:function(e,t){t.f=Object.getOwnPropertySymbols},"77e9":function(e,t,n){var i=n("7a41");e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},7839:function(e,t){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7a41":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"7a77":function(e,t,n){"use strict";function i(e){this.message=e}i.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},i.prototype.__CANCEL__=!0,e.exports=i},"7aac":function(e,t,n){"use strict";var i=n("c532");e.exports=i.isStandardBrowserEnv()?function(){return{write:function(e,t,n,r,o,a){var s=[];s.push(e+"="+encodeURIComponent(t)),i.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),i.isString(r)&&s.push("path="+r),i.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"7b0b":function(e,t,n){var i=n("1d80");e.exports=function(e){return Object(i(e))}},"7b3e":function(e,t,n){"use strict";var i,r=n("a3de"); -/** - * Checks if an event is supported in the current execution environment. - * - * NOTE: This will not work correctly for non-generic events such as `change`, - * `reset`, `load`, `error`, and `select`. - * - * Borrows from Modernizr. - * - * @param {string} eventNameSuffix Event name, e.g. "click". - * @param {?boolean} capture Check if the capture phase is supported. - * @return {boolean} True if the event is supported. - * @internal - * @license Modernizr 3.0.0pre (Custom Build) | MIT - */ -function o(e,t){if(!r.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"===typeof a[n]}return!o&&i&&"wheel"===e&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}r.canUseDOM&&(i=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=o},"7c73":function(e,t,n){var i=n("825a"),r=n("37e8"),o=n("7839"),a=n("d012"),s=n("1be4"),l=n("cc12"),c=n("f772"),u=c("IE_PROTO"),d="prototype",h=function(){},f=function(){var e,t=l("iframe"),n=o.length,i="<",r="script",a=">",c="java"+r+":";t.style.display="none",s.appendChild(t),t.src=String(c),e=t.contentWindow.document,e.open(),e.write(i+r+a+"document.F=Object"+i+"/"+r+a),e.close(),f=e.F;while(n--)delete f[d][o[n]];return f()};e.exports=Object.create||function(e,t){var n;return null!==e?(h[d]=i(e),n=new h,h[d]=null,n[u]=e):n=f(),void 0===t?n:r(n,t)},a[u]=!0},"7dd0":function(e,t,n){"use strict";var i=n("23e7"),r=n("9ed3"),o=n("e163"),a=n("d2bb"),s=n("d44e"),l=n("9112"),c=n("6eeb"),u=n("b622"),d=n("c430"),h=n("3f8c"),f=n("ae93"),p=f.IteratorPrototype,m=f.BUGGY_SAFARI_ITERATORS,v=u("iterator"),g="keys",b="values",y="entries",_=function(){return this};e.exports=function(e,t,n,u,f,x,w){r(n,t,u);var C,k,S,O=function(e){if(e===f&&P)return P;if(!m&&e in E)return E[e];switch(e){case g:return function(){return new n(this,e)};case b:return function(){return new n(this,e)};case y:return function(){return new n(this,e)}}return function(){return new n(this)}},$=t+" Iterator",D=!1,E=e.prototype,T=E[v]||E["@@iterator"]||f&&E[f],P=!m&&T||O(f),M="Array"==t&&E.entries||T;if(M&&(C=o(M.call(new e)),p!==Object.prototype&&C.next&&(d||o(C)===p||(a?a(C,p):"function"!=typeof C[v]&&l(C,v,_)),s(C,$,!0,!0),d&&(h[$]=_))),f==b&&T&&T.name!==b&&(D=!0,P=function(){return T.call(this)}),d&&!w||E[v]===P||l(E,v,P),h[t]=P,f)if(k={values:O(b),keys:x?P:O(g),entries:O(y)},w)for(S in k)!m&&!D&&S in E||c(E,S,k[S]);else i({target:t,proto:!0,forced:m||D},k);return k}},"7f4d":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){for(var t=1,n=arguments.length;t0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")};var p=t.arrayFindIndex=function(e,t){for(var n=0;n!==e.length;++n)if(t(e[n]))return n;return-1},m=(t.arrayFind=function(e,t){var n=p(e,t);return-1!==n?e[n]:void 0},t.coerceTruthyValueToArray=function(e){return Array.isArray(e)?e:e?[e]:[]},t.isIE=function(){return!o.default.prototype.$isServer&&!isNaN(Number(document.documentMode))},t.isEdge=function(){return!o.default.prototype.$isServer&&navigator.userAgent.indexOf("Edge")>-1},t.isFirefox=function(){return!o.default.prototype.$isServer&&!!window.navigator.userAgent.match(/firefox/i)},t.autoprefixer=function(e){if("object"!==("undefined"===typeof e?"undefined":i(e)))return e;var t=["transform","transition","animation"],n=["ms-","webkit-"];return t.forEach((function(t){var i=e[t];t&&i&&n.forEach((function(n){e[n+t]=i}))})),e},t.kebabCase=function(e){var t=/([^-])([A-Z])/g;return e.replace(t,"$1-$2").replace(t,"$1-$2").toLowerCase()},t.capitalize=function(e){return(0,a.isString)(e)?e.charAt(0).toUpperCase()+e.slice(1):e},t.looseEqual=function(e,t){var n=(0,a.isObject)(e),i=(0,a.isObject)(t);return n&&i?JSON.stringify(e)===JSON.stringify(t):!n&&!i&&String(e)===String(t)}),v=t.arrayEquals=function(e,t){if(e=e||[],t=t||[],e.length!==t.length)return!1;for(var n=0;nl)i.f(e,n=a[l++],t[n]);return e}},"861d":function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},"8a0d":function(e,t){e.exports={}},"8b1a":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},"8bbc":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=123)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},123:function(e,t,n){"use strict";n.r(t);var i,r,o={name:"ElTag",props:{text:String,closable:Boolean,type:String,hit:Boolean,disableTransitions:Boolean,color:String,size:String,effect:{type:String,default:"light",validator:function(e){return-1!==["dark","light","plain"].indexOf(e)}}},methods:{handleClose:function(e){e.stopPropagation(),this.$emit("close",e)},handleClick:function(e){this.$emit("click",e)}},computed:{tagSize:function(){return this.size||(this.$ELEMENT||{}).size}},render:function(e){var t=this.type,n=this.tagSize,i=this.hit,r=this.effect,o=["el-tag",t?"el-tag--"+t:"",n?"el-tag--"+n:"",r?"el-tag--"+r:"",i&&"is-hit"],a=e("span",{class:o,style:{backgroundColor:this.color},on:{click:this.handleClick}},[this.$slots.default,this.closable&&e("i",{class:"el-tag__close el-icon-close",on:{click:this.handleClose}})]);return this.disableTransitions?a:e("transition",{attrs:{name:"el-zoom-in-center"}},[a])}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/tag/src/tag.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},"8c4f":function(e,t,n){"use strict"; -/*! - * vue-router v3.1.3 - * (c) 2019 Evan You - * @license MIT - */function i(e,t){0}function r(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}function o(e,t){return t instanceof e||t&&(t.name===e.name||t._name===e._name)}function a(e,t){for(var n in t)e[n]=t[n];return e}var s={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,t){var n=t.props,i=t.children,r=t.parent,o=t.data;o.routerView=!0;var s=r.$createElement,c=n.name,u=r.$route,d=r._routerViewCache||(r._routerViewCache={}),h=0,f=!1;while(r&&r._routerRoot!==r){var p=r.$vnode&&r.$vnode.data;p&&(p.routerView&&h++,p.keepAlive&&r._inactive&&(f=!0)),r=r.$parent}if(o.routerViewDepth=h,f)return s(d[c],o,i);var m=u.matched[h];if(!m)return d[c]=null,s();var v=d[c]=m.components[c];o.registerRouteInstance=function(e,t){var n=m.instances[c];(t&&n!==e||!t&&n===e)&&(m.instances[c]=t)},(o.hook||(o.hook={})).prepatch=function(e,t){m.instances[c]=t.componentInstance},o.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==m.instances[c]&&(m.instances[c]=e.componentInstance)};var g=o.props=l(u,m.props&&m.props[c]);if(g){g=o.props=a({},g);var b=o.attrs=o.attrs||{};for(var y in g)v.props&&y in v.props||(b[y]=g[y],delete g[y])}return s(v,o,i)}};function l(e,t){switch(typeof t){case"undefined":return;case"object":return t;case"function":return t(e);case"boolean":return t?e.params:void 0;default:0}}var c=/[!'()*]/g,u=function(e){return"%"+e.charCodeAt(0).toString(16)},d=/%2C/g,h=function(e){return encodeURIComponent(e).replace(c,u).replace(d,",")},f=decodeURIComponent;function p(e,t,n){void 0===t&&(t={});var i,r=n||m;try{i=r(e||"")}catch(a){i={}}for(var o in t)i[o]=t[o];return i}function m(e){var t={};return e=e.trim().replace(/^(\?|#|&)/,""),e?(e.split("&").forEach((function(e){var n=e.replace(/\+/g," ").split("="),i=f(n.shift()),r=n.length>0?f(n.join("=")):null;void 0===t[i]?t[i]=r:Array.isArray(t[i])?t[i].push(r):t[i]=[t[i],r]})),t):t}function v(e){var t=e?Object.keys(e).map((function(t){var n=e[t];if(void 0===n)return"";if(null===n)return h(t);if(Array.isArray(n)){var i=[];return n.forEach((function(e){void 0!==e&&(null===e?i.push(h(t)):i.push(h(t)+"="+h(e)))})),i.join("&")}return h(t)+"="+h(n)})).filter((function(e){return e.length>0})).join("&"):null;return t?"?"+t:""}var g=/\/?$/;function b(e,t,n,i){var r=i&&i.options.stringifyQuery,o=t.query||{};try{o=y(o)}catch(s){}var a={name:t.name||e&&e.name,meta:e&&e.meta||{},path:t.path||"/",hash:t.hash||"",query:o,params:t.params||{},fullPath:w(t,r),matched:e?x(e):[]};return n&&(a.redirectedFrom=w(n,r)),Object.freeze(a)}function y(e){if(Array.isArray(e))return e.map(y);if(e&&"object"===typeof e){var t={};for(var n in e)t[n]=y(e[n]);return t}return e}var _=b(null,{path:"/"});function x(e){var t=[];while(e)t.unshift(e),e=e.parent;return t}function w(e,t){var n=e.path,i=e.query;void 0===i&&(i={});var r=e.hash;void 0===r&&(r="");var o=t||v;return(n||"/")+o(i)+r}function C(e,t){return t===_?e===t:!!t&&(e.path&&t.path?e.path.replace(g,"")===t.path.replace(g,"")&&e.hash===t.hash&&k(e.query,t.query):!(!e.name||!t.name)&&(e.name===t.name&&e.hash===t.hash&&k(e.query,t.query)&&k(e.params,t.params)))}function k(e,t){if(void 0===e&&(e={}),void 0===t&&(t={}),!e||!t)return e===t;var n=Object.keys(e),i=Object.keys(t);return n.length===i.length&&n.every((function(n){var i=e[n],r=t[n];return"object"===typeof i&&"object"===typeof r?k(i,r):String(i)===String(r)}))}function S(e,t){return 0===e.path.replace(g,"/").indexOf(t.path.replace(g,"/"))&&(!t.hash||e.hash===t.hash)&&O(e.query,t.query)}function O(e,t){for(var n in t)if(!(n in e))return!1;return!0}function $(e,t,n){var i=e.charAt(0);if("/"===i)return e;if("?"===i||"#"===i)return t+e;var r=t.split("/");n&&r[r.length-1]||r.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a=0&&(t=e.slice(i),e=e.slice(0,i));var r=e.indexOf("?");return r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),{path:e,query:n,hash:t}}function E(e){return e.replace(/\/\//g,"/")}var T=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},P=X,M=F,I=L,N=B,j=G,A=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function F(e,t){var n,i=[],r=0,o=0,a="",s=t&&t.delimiter||"/";while(null!=(n=A.exec(e))){var l=n[0],c=n[1],u=n.index;if(a+=e.slice(o,u),o=u+l.length,c)a+=c[1];else{var d=e[o],h=n[2],f=n[3],p=n[4],m=n[5],v=n[6],g=n[7];a&&(i.push(a),a="");var b=null!=h&&null!=d&&d!==h,y="+"===v||"*"===v,_="?"===v||"*"===v,x=n[2]||s,w=p||m;i.push({name:f||r++,prefix:h||"",delimiter:x,optional:_,repeat:y,partial:b,asterisk:!!g,pattern:w?H(w):g?".*":"[^"+R(x)+"]+?"})}}return o1||!x.length)return 0===x.length?e():e("span",{},x)}if("a"===this.tag)_.on=y,_.attrs={href:l};else{var w=ae(this.$slots.default);if(w){w.isStatic=!1;var k=w.data=a({},w.data);for(var O in k.on=k.on||{},k.on){var $=k.on[O];O in y&&(k.on[O]=Array.isArray($)?$:[$])}for(var D in y)D in k.on?k.on[D].push(y[D]):k.on[D]=g;var E=w.data.attrs=a({},w.data.attrs);E.href=l}else _.on=y}return e(this.tag,_,this.$slots.default)}};function oe(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(void 0===e.button||0===e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ae(e){if(e)for(var t,n=0;n-1&&(s.params[h]=n.params[h]);return s.path=J(c.path,s.params,'named route "'+l+'"'),u(c,s,a)}if(s.path){s.params={};for(var f=0;f=e.length?n():e[r]?t(e[r],(function(){i(r+1)})):i(r+1)};i(0)}function Fe(e){return function(t,n,i){var o=!1,a=0,s=null;Le(e,(function(e,t,n,l){if("function"===typeof e&&void 0===e.cid){o=!0,a++;var c,u=Re((function(t){Be(t)&&(t=t.default),e.resolved="function"===typeof t?t:ee.extend(t),n.components[l]=t,a--,a<=0&&i()})),d=Re((function(e){var t="Failed to resolve async component "+l+": "+e;s||(s=r(e)?e:new Error(t),i(s))}));try{c=e(u,d)}catch(f){d(f)}if(c)if("function"===typeof c.then)c.then(u,d);else{var h=c.component;h&&"function"===typeof h.then&&h.then(u,d)}}})),o||i()}}function Le(e,t){return Ve(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Ve(e){return Array.prototype.concat.apply([],e)}var ze="function"===typeof Symbol&&"symbol"===typeof Symbol.toStringTag;function Be(e){return e.__esModule||ze&&"Module"===e[Symbol.toStringTag]}function Re(e){var t=!1;return function(){var n=[],i=arguments.length;while(i--)n[i]=arguments[i];if(!t)return t=!0,e.apply(this,n)}}var He=function(e){function t(t){e.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+t.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new e).stack,writable:!0,configurable:!0})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(Error);He._name="NavigationDuplicated";var We=function(e,t){this.router=e,this.base=qe(t),this.current=_,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function qe(e){if(!e)if(le){var t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^https?:\/\/[^\/]+/,"")}else e="/";return"/"!==e.charAt(0)&&(e="/"+e),e.replace(/\/$/,"")}function Ue(e,t){var n,i=Math.max(e.length,t.length);for(n=0;n-1?decodeURI(e.slice(0,i))+e.slice(i):decodeURI(e)}else n>-1&&(e=decodeURI(e.slice(0,n))+e.slice(n));return e}function st(e){var t=window.location.href,n=t.indexOf("#"),i=n>=0?t.slice(0,n):t;return i+"#"+e}function lt(e){Ie?Ne(st(e)):window.location.hash=e}function ct(e){Ie?je(st(e)):window.location.replace(st(e))}var ut=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index+1).concat(e),i.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var i=this;this.transitionTo(e,(function(e){i.stack=i.stack.slice(0,i.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var i=this.stack[n];this.confirmTransition(i,(function(){t.index=n,t.updateRoute(i)}),(function(e){o(He,e)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(We),dt=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=fe(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!Ie&&!1!==e.fallback,this.fallback&&(t="hash"),le||(t="abstract"),this.mode=t,t){case"history":this.history=new tt(this,e.base);break;case"hash":this.history=new it(this,e.base,this.fallback);break;case"abstract":this.history=new ut(this,e.base);break;default:0}},ht={currentRoute:{configurable:!0}};function ft(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function pt(e,t,n){var i="hash"===n?"#"+t:t;return e?E(e+"/"+i):i}dt.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},ht.currentRoute.get=function(){return this.history&&this.history.current},dt.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null)})),!this.app){this.app=e;var n=this.history;if(n instanceof tt)n.transitionTo(n.getCurrentLocation());else if(n instanceof it){var i=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),i,i)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},dt.prototype.beforeEach=function(e){return ft(this.beforeHooks,e)},dt.prototype.beforeResolve=function(e){return ft(this.resolveHooks,e)},dt.prototype.afterEach=function(e){return ft(this.afterHooks,e)},dt.prototype.onReady=function(e,t){this.history.onReady(e,t)},dt.prototype.onError=function(e){this.history.onError(e)},dt.prototype.push=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.push(e,t,n)}));this.history.push(e,t,n)},dt.prototype.replace=function(e,t,n){var i=this;if(!t&&!n&&"undefined"!==typeof Promise)return new Promise((function(t,n){i.history.replace(e,t,n)}));this.history.replace(e,t,n)},dt.prototype.go=function(e){this.history.go(e)},dt.prototype.back=function(){this.go(-1)},dt.prototype.forward=function(){this.go(1)},dt.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},dt.prototype.resolve=function(e,t,n){t=t||this.history.current;var i=Q(e,t,n,this),r=this.match(i,t),o=r.redirectedFrom||r.fullPath,a=this.history.base,s=pt(a,o,this.mode);return{location:i,route:r,href:s,normalizedTo:i,resolved:r}},dt.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==_&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(dt.prototype,ht),dt.install=se,dt.version="3.1.3",le&&window.Vue&&window.Vue.use(dt),t["a"]=dt},"8df4":function(e,t,n){"use strict";var i=n("7a77");function r(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new i(e),t(n.reason))}))}r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r((function(t){e=t}));return{token:t,cancel:e}},e.exports=r},"8eb7":function(e,t){var n,i,r,o,a,s,l,c,u,d,h,f,p,m,v,g=!1;function b(){if(!g){g=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),b=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(f=/\b(iPhone|iP[ao]d)/.exec(e),p=/\b(iP[ao]d)/.exec(e),d=/Android/i.exec(e),m=/FBAN\/\w+;/i.exec(e),v=/Mobile/i.exec(e),h=!!/Win64/.exec(e),t){n=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,n&&document&&document.documentMode&&(n=document.documentMode);var y=/(?:Trident\/(\d+.\d+))/.exec(e);s=y?parseFloat(y[1])+4:n,i=t[2]?parseFloat(t[2]):NaN,r=t[3]?parseFloat(t[3]):NaN,o=t[4]?parseFloat(t[4]):NaN,o?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),a=t&&t[1]?parseFloat(t[1]):NaN):a=NaN}else n=i=r=a=o=NaN;if(b){if(b[1]){var _=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);l=!_||parseFloat(_[1].replace("_","."))}else l=!1;c=!!b[2],u=!!b[3]}else l=c=u=!1}}var y={ie:function(){return b()||n},ieCompatibilityMode:function(){return b()||s>n},ie64:function(){return y.ie()&&h},firefox:function(){return b()||i},opera:function(){return b()||r},webkit:function(){return b()||o},safari:function(){return y.webkit()},chrome:function(){return b()||a},windows:function(){return b()||c},osx:function(){return b()||l},linux:function(){return b()||u},iphone:function(){return b()||f},mobile:function(){return b()||f||p||d||v},nativeApp:function(){return b()||m},android:function(){return b()||d},ipad:function(){return b()||p}};e.exports=y},"90e3":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+i).toString(36)}},9112:function(e,t,n){var i=n("83ab"),r=n("9bf2"),o=n("5c6c");e.exports=i?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},9141:function(e,t,n){var i=n("ef08").document;e.exports=i&&i.documentElement},"92f0":function(e,t,n){var i=n("1a14").f,r=n("9c0e"),o=n("cc15")("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,o)&&i(e,o,{configurable:!0,value:t})}},"92fa":function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce((function(e,t){var r,o,a,s,l;for(a in t)if(r=e[a],o=t[a],r&&n.test(a))if("class"===a&&("string"===typeof r&&(l=r,e[a]=r={},r[l]=!0),"string"===typeof o&&(l=o,t[a]=o={},o[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(s in o)r[s]=i(r[s],o[s]);else if(Array.isArray(r))e[a]=r.concat(o);else if(Array.isArray(o))e[a]=[r].concat(o);else for(s in o)r[s]=o[s];else e[a]=t[a];return e}),{})}},"94ca":function(e,t,n){var i=n("d039"),r=/#|\.prototype\./,o=function(e,t){var n=s[a(e)];return n==c||n!=l&&("function"==typeof t?i(t):!!t)},a=o.normalize=function(e){return String(e).replace(r,".").toLowerCase()},s=o.data={},l=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},9619:function(e,t,n){var i=n("597f"),r=n("0e15");e.exports={throttle:i,debounce:r}},9742:function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},9876:function(e,t,n){var i=n("03d6"),r=n("9742");e.exports=Object.keys||function(e){return i(e,r)}},"99af":function(e,t,n){"use strict";var i=n("23e7"),r=n("d039"),o=n("e8b5"),a=n("861d"),s=n("7b0b"),l=n("50c4"),c=n("8418"),u=n("65f0"),d=n("1dde"),h=n("b622"),f=n("60ae"),p=h("isConcatSpreadable"),m=9007199254740991,v="Maximum allowed index exceeded",g=f>=51||!r((function(){var e=[];return e[p]=!1,e.concat()[0]!==e})),b=d("concat"),y=function(e){if(!a(e))return!1;var t=e[p];return void 0!==t?!!t:o(e)},_=!g||!b;i({target:"Array",proto:!0,forced:_},{concat:function(e){var t,n,i,r,o,a=s(this),d=u(a,0),h=0;for(t=-1,i=arguments.length;tm)throw TypeError(v);for(n=0;n=m)throw TypeError(v);c(d,h++,o)}return d.length=h,d}})},"9bdd":function(e,t,n){var i=n("825a");e.exports=function(e,t,n,r){try{return r?t(i(n)[0],n[1]):t(n)}catch(a){var o=e["return"];throw void 0!==o&&i(o.call(e)),a}}},"9bf2":function(e,t,n){var i=n("83ab"),r=n("0cfb"),o=n("825a"),a=n("c04e"),s=Object.defineProperty;t.f=i?s:function(e,t,n){if(o(e),t=a(t,!0),o(n),r)try{return s(e,t,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},"9c0c":function(e,t,n){var i=n("1609");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},"9c0e":function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"9d11":function(e,t,n){var i=n("fc5e"),r=Math.max,o=Math.min;e.exports=function(e,t){return e=i(e),e<0?r(e+t,0):o(e,t)}},"9d7e":function(e,t,n){"use strict";t.__esModule=!0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=function(e){function t(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a=o)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(n){return"[Circular]"}break;default:return e}})),l=t[i];i()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},C={integer:function(e){return C.number(e)&&parseInt(e,10)===e},float:function(e){return C.number(e)&&!C.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===("undefined"===typeof e?"undefined":a()(e))&&!C.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(w.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(w.url)},hex:function(e){return"string"===typeof e&&!!e.match(w.hex)}};function k(e,t,n,i,r){if(e.required&&void 0===t)y(e,t,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=e.type;o.indexOf(s)>-1?C[s](t)||i.push(c(r.messages.types[s],e.fullField,e.type)):s&&("undefined"===typeof t?"undefined":a()(t))!==e.type&&i.push(c(r.messages.types[s],e.fullField,e.type))}}var S=k;function O(e,t,n,i,r){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=t,d=null,h="number"===typeof t,f="string"===typeof t,p=Array.isArray(t);if(h?d="number":f?d="string":p&&(d="array"),!d)return!1;p&&(u=t.length),f&&(u=t.replace(l,"_").length),o?u!==e.len&&i.push(c(r.messages[d].len,e.fullField,e.len)):a&&!s&&ue.max?i.push(c(r.messages[d].max,e.fullField,e.max)):a&&s&&(ue.max)&&i.push(c(r.messages[d].range,e.fullField,e.min,e.max))}var $=O,D="enum";function E(e,t,n,i,r){e[D]=Array.isArray(e[D])?e[D]:[],-1===e[D].indexOf(t)&&i.push(c(r.messages[D],e.fullField,e[D].join(", ")))}var T=E;function P(e,t,n,i,r){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||i.push(c(r.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var M=P,I={required:y,whitespace:x,type:S,range:$,enum:T,pattern:M};function N(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r,"string"),d(t,"string")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r),I.pattern(e,t,i,o,r),!0===e.whitespace&&I.whitespace(e,t,i,o,r))}n(o)}var j=N;function A(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var F=A;function L(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var V=L;function z(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var B=z;function R(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),d(t)||I.type(e,t,i,o,r)}n(o)}var H=R;function W(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var q=W;function U(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var Y=U;function K(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"array")&&!e.required)return n();I.required(e,t,i,o,r,"array"),d(t,"array")||(I.type(e,t,i,o,r),I.range(e,t,i,o,r))}n(o)}var G=K;function X(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),void 0!==t&&I.type(e,t,i,o,r)}n(o)}var Z=X,J="enum";function Q(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();I.required(e,t,i,o,r),t&&I[J](e,t,i,o,r)}n(o)}var ee=Q;function te(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t,"string")&&!e.required)return n();I.required(e,t,i,o,r),d(t,"string")||I.pattern(e,t,i,o,r)}n(o)}var ne=te;function ie(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(d(t)&&!e.required)return n();if(I.required(e,t,i,o,r),!d(t)){var s=void 0;s="number"===typeof t?new Date(t):t,I.type(e,s,i,o,r),s&&I.range(e,s.getTime(),i,o,r)}}n(o)}var re=ie;function oe(e,t,n,i,r){var o=[],s=Array.isArray(t)?"array":"undefined"===typeof t?"undefined":a()(t);I.required(e,t,i,o,r,s),n(o)}var ae=oe;function se(e,t,n,i,r){var o=e.type,a=[],s=e.required||!e.required&&i.hasOwnProperty(e.field);if(s){if(d(t,o)&&!e.required)return n();I.required(e,t,i,a,r,o),d(t,o)||I.type(e,t,i,a,r)}n(a)}var le=se,ce={string:j,method:F,number:V,boolean:B,regexp:H,integer:q,float:Y,array:G,object:Z,enum:ee,pattern:ne,date:re,url:le,hex:le,email:le,required:ae};function ue(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var de=ue();function he(e){this.rules=null,this._messages=de,this.define(e)}he.prototype={messages:function(e){return e&&(this._messages=g(ue(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof e?"undefined":a()(e))||Array.isArray(e))throw new Error("Rules must be an object");this.rules={};var t=void 0,n=void 0;for(t in e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments[2],o=e,s=n,u=i;if("function"===typeof s&&(u=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var d=this.messages();d===de&&(d=ue()),g(d,s.messages),s.messages=d}else s.messages=this.messages();var h=void 0,f=void 0,p={},b=s.keys||Object.keys(this.rules);b.forEach((function(n){h=t.rules[n],f=o[n],h.forEach((function(i){var a=i;"function"===typeof a.transform&&(o===e&&(o=r()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:r()({},a),a.validator=t.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=t.getType(a),a.validator&&(p[n]=p[n]||[],p[n].push({rule:a,value:f,source:o,field:n}))}))}));var y={};m(p,s,(function(e,t){var n=e.rule,i=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(e,t){return r()({},t,{fullField:n.fullField+"."+e})}function u(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],u=a;if(Array.isArray(u)||(u=[u]),u.length&&l("async-validator:",u),u.length&&n.message&&(u=[].concat(n.message)),u=u.map(v(n)),s.first&&u.length)return y[n.field]=1,t(u);if(i){if(n.required&&!e.value)return u=n.message?[].concat(n.message).map(v(n)):s.error?[s.error(n,c(s.messages.required,n.field))]:[],t(u);var d={};if(n.defaultField)for(var h in e.value)e.value.hasOwnProperty(h)&&(d[h]=n.defaultField);for(var f in d=r()({},d,e.rule.fields),d)if(d.hasOwnProperty(f)){var p=Array.isArray(d[f])?d[f]:[d[f]];d[f]=p.map(o.bind(null,f))}var m=new he(d);m.messages(s.messages),e.rule.options&&(e.rule.options.messages=s.messages,e.rule.options.error=s.error),m.validate(e.value,e.rule.options||s,(function(e){t(e&&e.length?u.concat(e):e)}))}else t(u)}i=i&&(n.required||!n.required&&e.value),n.field=e.field;var d=n.validator(n,e.value,u,e.source,s);d&&d.then&&d.then((function(){return u()}),(function(e){return u(e)}))}),(function(e){_(e)}))}else u&&u();function _(e){var t=void 0,n=void 0,i=[],r={};function o(e){Array.isArray(e)?i=i.concat.apply(i,e):i.push(e)}for(t=0;tf)throw TypeError(p);for(u=l(b,i),m=0;my-i+n;m--)delete b[m-1]}else if(n>i)for(m=y-i;m>_;m--)v=m+i-1,g=m+n-1,v in b?b[g]=b[v]:delete b[g];for(m=0;m0?i:n)(e)}},a742:function(e,t,n){"use strict";function i(e){return"[object String]"===Object.prototype.toString.call(e)}function r(e){return"[object Object]"===Object.prototype.toString.call(e)}function o(e){return e&&e.nodeType===Node.ELEMENT_NODE}t.__esModule=!0,t.isString=i,t.isObject=r,t.isHtmlElement=o;t.isFunction=function(e){var t={};return e&&"[object Function]"===t.toString.call(e)},t.isUndefined=function(e){return void 0===e},t.isDefined=function(e){return void 0!==e&&null!==e}},a79d:function(e,t,n){"use strict";var i=n("23e7"),r=n("c430"),o=n("fea9"),a=n("d066"),s=n("4840"),l=n("cdf9"),c=n("6eeb");i({target:"Promise",proto:!0,real:!0},{finally:function(e){var t=s(this,a("Promise")),n="function"==typeof e;return this.then(n?function(n){return l(t,e()).then((function(){return n}))}:e,n?function(n){return l(t,e()).then((function(){throw n}))}:e)}}),r||"function"!=typeof o||o.prototype["finally"]||c(o.prototype,"finally",a("Promise").prototype["finally"])},ae93:function(e,t,n){"use strict";var i,r,o,a=n("e163"),s=n("9112"),l=n("5135"),c=n("b622"),u=n("c430"),d=c("iterator"),h=!1,f=function(){return this};[].keys&&(o=[].keys(),"next"in o?(r=a(a(o)),r!==Object.prototype&&(i=r)):h=!0),void 0==i&&(i={}),u||l(i,d)||s(i,d,f),e.exports={IteratorPrototype:i,BUGGY_SAFARI_ITERATORS:h}},b041:function(e,t,n){"use strict";var i=n("f5df"),r=n("b622"),o=r("toStringTag"),a={};a[o]="z",e.exports="[object z]"!==String(a)?function(){return"[object "+i(this)+"]"}:a.toString},b367:function(e,t,n){var i=n("5524"),r=n("ef08"),o="__core-js_shared__",a=r[o]||(r[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n("e444")?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},b39a:function(e,t,n){var i=n("d066");e.exports=i("navigator","userAgent")||""},b50d:function(e,t,n){"use strict";var i=n("c532"),r=n("467f"),o=n("30b5"),a=n("c345"),s=n("3934"),l=n("2d83");e.exports=function(e){return new Promise((function(t,c){var u=e.data,d=e.headers;i.isFormData(u)&&delete d["Content-Type"];var h=new XMLHttpRequest;if(e.auth){var f=e.auth.username||"",p=e.auth.password||"";d.Authorization="Basic "+btoa(f+":"+p)}if(h.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h.onreadystatechange=function(){if(h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in h?a(h.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?h.response:h.responseText,o={data:i,status:h.status,statusText:h.statusText,headers:n,config:e,request:h};r(t,c,o),h=null}},h.onerror=function(){c(l("Network Error",e,null,h)),h=null},h.ontimeout=function(){c(l("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",h)),h=null},i.isStandardBrowserEnv()){var m=n("7aac"),v=(e.withCredentials||s(e.url))&&e.xsrfCookieName?m.read(e.xsrfCookieName):void 0;v&&(d[e.xsrfHeaderName]=v)}if("setRequestHeader"in h&&i.forEach(d,(function(e,t){"undefined"===typeof u&&"content-type"===t.toLowerCase()?delete d[t]:h.setRequestHeader(t,e)})),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(g){if("json"!==e.responseType)throw g}"function"===typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){h&&(h.abort(),c(e),h=null)})),void 0===u&&(u=null),h.send(u)}))}},b575:function(e,t,n){var i,r,o,a,s,l,c,u,d=n("da84"),h=n("06cf").f,f=n("c6b6"),p=n("2cf4").set,m=n("b39a"),v=d.MutationObserver||d.WebKitMutationObserver,g=d.process,b=d.Promise,y="process"==f(g),_=h(d,"queueMicrotask"),x=_&&_.value;x||(i=function(){var e,t;y&&(e=g.domain)&&e.exit();while(r){t=r.fn,r=r.next;try{t()}catch(n){throw r?a():o=void 0,n}}o=void 0,e&&e.enter()},y?a=function(){g.nextTick(i)}:v&&!/(iphone|ipod|ipad).*applewebkit/i.test(m)?(s=!0,l=document.createTextNode(""),new v(i).observe(l,{characterData:!0}),a=function(){l.data=s=!s}):b&&b.resolve?(c=b.resolve(void 0),u=c.then,a=function(){u.call(c,i)}):a=function(){p.call(d,i)}),e.exports=x||function(e){var t={fn:e,next:void 0};o&&(o.next=t),r||(r=t,a()),o=t}},b622:function(e,t,n){var i=n("da84"),r=n("5692"),o=n("90e3"),a=n("4930"),s=i.Symbol,l=r("wks");e.exports=function(e){return l[e]||(l[e]=a&&s[e]||(a?s:o)("Symbol."+e))}},b9c7:function(e,t,n){n("e507"),e.exports=n("5524").Object.assign},ba01:function(e,t,n){e.exports=n("051b")},bc3a:function(e,t,n){e.exports=n("cee4")},c04e:function(e,t,n){var i=n("861d");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},c098:function(e,t,n){e.exports=n("d4af")},c284:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=88)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},88:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-progress",class:["el-progress--"+e.type,e.status?"is-"+e.status:"",{"el-progress--without-text":!e.showText,"el-progress--text-inside":e.textInside}],attrs:{role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"}},["line"===e.type?n("div",{staticClass:"el-progress-bar"},[n("div",{staticClass:"el-progress-bar__outer",style:{height:e.strokeWidth+"px"}},[n("div",{staticClass:"el-progress-bar__inner",style:e.barStyle},[e.showText&&e.textInside?n("div",{staticClass:"el-progress-bar__innerText"},[e._v(e._s(e.content))]):e._e()])])]):n("div",{staticClass:"el-progress-circle",style:{height:e.width+"px",width:e.width+"px"}},[n("svg",{attrs:{viewBox:"0 0 100 100"}},[n("path",{staticClass:"el-progress-circle__track",style:e.trailPathStyle,attrs:{d:e.trackPath,stroke:"#e5e9f2","stroke-width":e.relativeStrokeWidth,fill:"none"}}),n("path",{staticClass:"el-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,stroke:e.stroke,fill:"none","stroke-linecap":"round","stroke-width":e.percentage?e.relativeStrokeWidth:0}})])]),e.showText&&!e.textInside?n("div",{staticClass:"el-progress__text",style:{fontSize:e.progressTextSize+"px"}},[e.status?n("i",{class:e.iconClass}):[e._v(e._s(e.content))]],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElProgress",props:{type:{type:String,default:"line",validator:function(e){return["line","circle","dashboard"].indexOf(e)>-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;ne)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,progress:(n+1)*t}:e}))}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},c345:function(e,t,n){"use strict";var i=n("c532"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,a={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),t=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),t){if(a[t]&&r.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},c401:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t,n){return i.forEach(n,(function(n){e=n(e,t)})),e}},c430:function(e,t){e.exports=!1},c532:function(e,t,n){"use strict";var i=n("1d2b"),r=n("c7ce"),o=Object.prototype.toString;function a(e){return"[object Array]"===o.call(e)}function s(e){return"[object ArrayBuffer]"===o.call(e)}function l(e){return"undefined"!==typeof FormData&&e instanceof FormData}function c(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function u(e){return"string"===typeof e}function d(e){return"number"===typeof e}function h(e){return"undefined"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){return"[object Date]"===o.call(e)}function m(e){return"[object File]"===o.call(e)}function v(e){return"[object Blob]"===o.call(e)}function g(e){return"[object Function]"===o.call(e)}function b(e){return f(e)&&g(e.pipe)}function y(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function _(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function w(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),a(e))for(var n=0,i=e.length;n2&&void 0!==arguments[2]?arguments[2]:300,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!e||!t)throw new Error("instance & callback is required");var r=!1,o=function(){r||(r=!0,t&&t.apply(null,arguments))};i?e.$once("after-leave",o):e.$on("after-leave",o),setTimeout((function(){o()}),n+100)}},c6b6:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},c6cd:function(e,t,n){var i=n("da84"),r=n("ce4e"),o="__core-js_shared__",a=i[o]||r(o,{});e.exports=a},c7ce:function(e,t){ -/*! - * Determine if an object is a Buffer - * - * @author Feross Aboukhadijeh - * @license MIT - */ -e.exports=function(e){return null!=e&&null!=e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},c8af:function(e,t,n){"use strict";var i=n("c532");e.exports=function(e,t){i.forEach(e,(function(n,i){i!==t&&i.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[i])}))}},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},c901:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},ca84:function(e,t,n){var i=n("5135"),r=n("fc6a"),o=n("4d64").indexOf,a=n("d012");e.exports=function(e,t){var n,s=r(e),l=0,c=[];for(n in s)!i(a,n)&&i(s,n)&&c.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(c,n)||c.push(n));return c}},cc12:function(e,t,n){var i=n("da84"),r=n("861d"),o=i.document,a=r(o)&&r(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},cc15:function(e,t,n){var i=n("b367")("wks"),r=n("8b1a"),o=n("ef08").Symbol,a="function"==typeof o,s=e.exports=function(e){return i[e]||(i[e]=a&&o[e]||(a?o:r)("Symbol."+e))};s.store=i},cca6:function(e,t,n){var i=n("23e7"),r=n("60da");i({target:"Object",stat:!0,forced:Object.assign!==r},{assign:r})},cdf9:function(e,t,n){var i=n("825a"),r=n("861d"),o=n("f069");e.exports=function(e,t){if(i(e),r(t)&&t.constructor===e)return t;var n=o.f(e),a=n.resolve;return a(t),n.promise}},ce4e:function(e,t,n){var i=n("da84"),r=n("9112");e.exports=function(e,t){try{r(i,e,t)}catch(n){i[e]=t}return t}},ce7a:function(e,t,n){var i=n("9c0e"),r=n("0983"),o=n("5a94")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},cee4:function(e,t,n){"use strict";var i=n("c532"),r=n("1d2b"),o=n("0a06"),a=n("2444");function s(e){var t=new o(e),n=r(o.prototype.request,t);return i.extend(n,o.prototype,t),i.extend(n,t),n}var l=s(a);l.Axios=o,l.create=function(e){return s(i.merge(a,e))},l.Cancel=n("7a77"),l.CancelToken=n("8df4"),l.isCancel=n("2e67"),l.all=function(e){return Promise.all(e)},l.spread=n("0df6"),e.exports=l,e.exports.default=l},d010:function(e,t,n){"use strict";function i(e,t,n){this.$children.forEach((function(r){var o=r.$options.componentName;o===e?r.$emit.apply(r,[t].concat(n)):i.apply(r,[e,t].concat([n]))}))}t.__esModule=!0,t.default={methods:{dispatch:function(e,t,n){var i=this.$parent||this.$root,r=i.$options.componentName;while(i&&(!r||r!==e))i=i.$parent,i&&(r=i.$options.componentName);i&&i.$emit.apply(i,[t].concat(n))},broadcast:function(e,t,n){i.call(this,e,t,n)}}}},d012:function(e,t){e.exports={}},d039:function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},d066:function(e,t,n){var i=n("428f"),r=n("da84"),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(i[e])||o(r[e]):i[e]&&i[e][t]||r[e]&&r[e][t]}},d16a:function(e,t,n){var i=n("fc5e"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},d1e7:function(e,t,n){"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!i.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:i},d2bb:function(e,t,n){var i=n("825a"),r=n("3bbe");e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,e.call(n,[]),t=n instanceof Array}catch(o){}return function(n,o){return i(n),r(o),t?e.call(n,o):n.__proto__=o,n}}():void 0)},d397:function(e,t,n){"use strict";function i(e){return void 0!==e&&null!==e}function r(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=i,t.isKorean=r},d3b7:function(e,t,n){var i=n("6eeb"),r=n("b041"),o=Object.prototype;r!==o.toString&&i(o,"toString",r,{unsafe:!0})},d44e:function(e,t,n){var i=n("9bf2").f,r=n("5135"),o=n("b622"),a=o("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&i(e,a,{configurable:!0,value:t})}},d4af:function(e,t,n){"use strict";var i=n("8eb7"),r=n("7b3e"),o=10,a=40,s=800;function l(e){var t=0,n=0,i=0,r=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),i=t*o,r=n*o,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||r)&&e.deltaMode&&(1==e.deltaMode?(i*=a,r*=a):(i*=s,r*=s)),i&&!t&&(t=i<1?-1:1),r&&!n&&(n=r<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:r}}l.getEventType=function(){return i.firefox()?"DOMMouseScroll":r("wheel")?"wheel":"mousewheel"},e.exports=l},d7d1:function(e,t,n){"use strict";var i;(function(r){var o={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,s="\\d\\d?",l="\\d{3}",c="\\d{4}",u="[^\\s]+",d=/\[([^]*?)\]/gm,h=function(){};function f(e){return e.replace(/[|\\{()[^$+*?.-]/g,"\\$&")}function p(e,t){for(var n=[],i=0,r=e.length;i3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return v(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return v(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return v(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return v(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return v(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return v(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return v(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return v(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return v(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return v(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return v(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+v(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},w={d:[s,function(e,t){e.day=t}],Do:[s+u,function(e,t){e.day=parseInt(t,10)}],M:[s,function(e,t){e.month=t-1}],yy:[s,function(e,t){var n=new Date,i=+(""+n.getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:[s,function(e,t){e.hour=t}],m:[s,function(e,t){e.minute=t}],s:[s,function(e,t){e.second=t}],yyyy:[c,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[s,h],ddd:[u,h],MMM:[u,m("monthNamesShort")],MMMM:[u,m("monthNames")],a:[u,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};w.dd=w.d,w.dddd=w.ddd,w.DD=w.D,w.mm=w.m,w.hh=w.H=w.HH=w.h,w.MM=w.M,w.ss=w.s,w.A=w.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks["default"];var r=[];return t=t.replace(d,(function(e,t){return r.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,i):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return r.shift()}))},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},s=[],l=[];t=t.replace(d,(function(e,t){return l.push(t),"@@@"}));var c=f(t).replace(a,(function(e){if(w[e]){var t=w[e];return s.push(t[1]),"("+t[0]+")"}return e}));c=c.replace(/@@@/g,(function(){return l.shift()}));var u=e.match(new RegExp(c,"i"));if(!u)return null;for(var h=1;h1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()-t)});t.nextDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)},t.getStartDateOfMonth=function(e,t){var n=new Date(e,t,1),i=n.getDay();return m(n,0===i?7:i)},t.getWeekNumber=function(e){if(!h(e))return null;var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},t.getRangeHours=function(e){var t=[],n=[];if((e||[]).forEach((function(e){var t=e.map((function(e){return e.getHours()}));n=n.concat(c(t[0],t[1]))})),n.length)for(var i=0;i<24;i++)t[i]=-1===n.indexOf(i);else for(var r=0;r<24;r++)t[r]=!1;return t},t.getPrevMonthLastDays=function(e,t){if(t<=0)return[];var n=new Date(e.getTime());n.setDate(0);var i=n.getDate();return g(t).map((function(e,n){return i-(t-n-1)}))},t.getMonthDays=function(e){var t=new Date(e.getFullYear(),e.getMonth()+1,0),n=t.getDate();return g(n).map((function(e,t){return t+1}))};function v(e,t,n,i){for(var r=t;r0?e.forEach((function(e){var i=e[0],r=e[1],o=i.getHours(),a=i.getMinutes(),s=r.getHours(),l=r.getMinutes();o===t&&s!==t?v(n,a,60,!0):o===t&&s===t?v(n,a,l+1,!0):o!==t&&s===t?v(n,0,l+1,!0):ot&&v(n,0,60,!0)})):v(n,0,60,!0),n};var g=t.range=function(e){return Array.apply(null,{length:e}).map((function(e,t){return t}))},b=t.modifyDate=function(e,t,n,i){return new Date(t,n,i,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())},y=t.modifyTime=function(e,t,n,i){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),t,n,i,e.getMilliseconds())},_=(t.modifyWithTimeString=function(e,t){return null!=e&&t?(t=f(t,"HH:mm:ss"),y(e,t.getHours(),t.getMinutes(),t.getSeconds())):e},t.clearTime=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},t.clearMilliseconds=function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),0)},t.limitTimeRange=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"HH:mm:ss";if(0===t.length)return e;var i=function(e){return r.default.parse(r.default.format(e,n),n)},o=i(e),a=t.map((function(e){return e.map(i)}));if(a.some((function(e){return o>=e[0]&&o<=e[1]})))return e;var s=a[0][0],l=a[0][0];a.forEach((function(e){s=new Date(Math.min(e[0],s)),l=new Date(Math.max(e[1],s))}));var c=o1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n-t,i)},t.nextYear=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=e.getFullYear(),i=e.getMonth();return x(e,n+t,i)},t.extractDateFormat=function(e){return e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim()},t.extractTimeFormat=function(e){return e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g,"").trim()},t.validateRangeInOneMonth=function(e,t){return e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}},da84:function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n("c8ba"))},dcdc:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=98)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},4:function(e,t){e.exports=n("d010")},98:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-checkbox",class:[e.border&&e.checkboxSize?"el-checkbox--"+e.checkboxSize:"",{"is-disabled":e.isDisabled},{"is-bordered":e.border},{"is-checked":e.isChecked}],attrs:{id:e.id}},[n("span",{staticClass:"el-checkbox__input",class:{"is-disabled":e.isDisabled,"is-checked":e.isChecked,"is-indeterminate":e.indeterminate,"is-focus":e.focus},attrs:{tabindex:!!e.indeterminate&&0,role:!!e.indeterminate&&"checkbox","aria-checked":!!e.indeterminate&&"mixed"}},[n("span",{staticClass:"el-checkbox__inner"}),e.trueLabel||e.falseLabel?n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",name:e.name,disabled:e.isDisabled,"true-value":e.trueLabel,"false-value":e.falseLabel},domProps:{checked:Array.isArray(e.model)?e._i(e.model,null)>-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=s,c=n(0),u=Object(c["a"])(l,i,r,!1,null,null,null);u.options.__file="packages/checkbox/src/checkbox.vue";var d=u.exports;d.install=function(e){e.component(d.name,d)};t["default"]=d}})},df75:function(e,t,n){var i=n("ca84"),r=n("7839");e.exports=Object.keys||function(e){return i(e,r)}},df7c:function(e,t,n){(function(e){function n(e,t){for(var n=0,i=e.length-1;i>=0;i--){var r=e[i];"."===r?e.splice(i,1):".."===r?(e.splice(i,1),n++):n&&(e.splice(i,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function i(e){"string"!==typeof e&&(e+="");var t,n=0,i=-1,r=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!r){n=t+1;break}}else-1===i&&(r=!1,i=t+1);return-1===i?"":e.slice(n,i)}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],i=0;i=-1&&!i;o--){var a=o>=0?arguments[o]:e.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return t=n(r(t.split("/"),(function(e){return!!e})),!i).join("/"),(i?"/":"")+t||"."},t.normalize=function(e){var i=t.isAbsolute(e),a="/"===o(e,-1);return e=n(r(e.split("/"),(function(e){return!!e})),!i).join("/"),e||i||(e="."),e&&a&&(e+="/"),(i?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function i(e){for(var t=0;t=0;n--)if(""!==e[n])break;return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var r=i(e.split("/")),o=i(n.split("/")),a=Math.min(r.length,o.length),s=a,l=0;l=1;--o)if(t=e.charCodeAt(o),47===t){if(!r){i=o;break}}else r=!1;return-1===i?n?"/":".":n&&1===i?"/":e.slice(0,i)},t.basename=function(e,t){var n=i(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,i=-1,r=!0,o=0,a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(47!==s)-1===i&&(r=!1,i=a+1),46===s?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!r){n=a+1;break}}return-1===t||-1===i||0===o||1===o&&t===i-1&&t===n+1?"":e.slice(t,i)};var o="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("4362"))},dfe5:function(e,t){},e163:function(e,t,n){var i=n("5135"),r=n("7b0b"),o=n("f772"),a=n("e177"),s=o("IE_PROTO"),l=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=r(e),i(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},e177:function(e,t,n){var i=n("d039");e.exports=!i((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},e198:function(e,t,n){var i=n("ef08"),r=n("5524"),o=n("e444"),a=n("fcd4"),s=n("1a14").f;e.exports=function(e){var t=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},e260:function(e,t,n){"use strict";var i=n("fc6a"),r=n("44d2"),o=n("3f8c"),a=n("69f3"),s=n("7dd0"),l="Array Iterator",c=a.set,u=a.getterFor(l);e.exports=s(Array,"Array",(function(e,t){c(this,{type:l,target:i(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,i=e.index++;return!t||i>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:t[i],done:!1}:{value:[i,t[i]],done:!1}}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},e2cc:function(e,t,n){var i=n("6eeb");e.exports=function(e,t,n){for(var r in t)i(e,r,t[r],n);return e}},e34a:function(e,t,n){var i=n("8b1a")("meta"),r=n("7a41"),o=n("9c0e"),a=n("1a14").f,s=0,l=Object.isExtensible||function(){return!0},c=!n("4b8b")((function(){return l(Object.preventExtensions({}))})),u=function(e){a(e,i,{value:{i:"O"+ ++s,w:{}}})},d=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,i)){if(!l(e))return"F";if(!t)return"E";u(e)}return e[i].i},h=function(e,t){if(!o(e,i)){if(!l(e))return!0;if(!t)return!1;u(e)}return e[i].w},f=function(e){return c&&p.NEED&&l(e)&&!o(e,i)&&u(e),e},p=e.exports={KEY:i,NEED:!1,fastKey:d,getWeak:h,onFreeze:f}},e444:function(e,t){e.exports=!0},e450:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=111)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},11:function(e,t){e.exports=n("f3ad")},111:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.decrease(t):null}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.increase(t):null}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),n("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return"button"in t||!e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?(t.preventDefault(),e.increase(t)):null},function(t){return"button"in t||!e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?(t.preventDefault(),e.decrease(t)):null}]}})],1)},r=[];i._withStripped=!0;var o=n(11),a=n.n(o),s=n(22),l=n.n(s),c=n(30),u={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:c["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},d=u,h=n(0),f=Object(h["a"])(d,i,r,!1,null,null,null);f.options.__file="packages/input-number/src/input-number.vue";var p=f.exports;p.install=function(e){e.component(p.name,p)};t["default"]=p},2:function(e,t){e.exports=n("5924")},22:function(e,t){e.exports=n("12f2")},30:function(e,t,n){"use strict";var i=n(2);t["a"]={bind:function(e,t,n){var r=null,o=void 0,a=function(){return n.context[t.expression].apply()},s=function(){Date.now()-o<100&&a(),clearInterval(r),r=null};Object(i["on"])(e,"mousedown",(function(e){0===e.button&&(o=Date.now(),Object(i["once"])(document,"mouseup",s),clearInterval(r),r=setInterval(a,100))}))}}}})},e452:function(e,t,n){"use strict";t.__esModule=!0;var i=i||{};i.Utils=i.Utils||{},i.Utils.focusFirstDescendant=function(e){for(var t=0;t=0;t--){var n=e.childNodes[t];if(i.Utils.attemptFocus(n)||i.Utils.focusLastDescendant(n))return!0}return!1},i.Utils.attemptFocus=function(e){if(!i.Utils.isFocusable(e))return!1;i.Utils.IgnoreUtilFocusChanges=!0;try{e.focus()}catch(t){}return i.Utils.IgnoreUtilFocusChanges=!1,document.activeElement===e},i.Utils.isFocusable=function(e){if(e.tabIndex>0||0===e.tabIndex&&null!==e.getAttribute("tabIndex"))return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&"ignore"!==e.rel;case"INPUT":return"hidden"!==e.type&&"file"!==e.type;case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},i.Utils.triggerEvent=function(e,t){var n=void 0;n=/^mouse|click/.test(t)?"MouseEvents":/^key/.test(t)?"KeyboardEvent":"HTMLEvents";for(var i=document.createEvent(n),r=arguments.length,o=Array(r>2?r-2:0),a=2;a=51&&/native code/.test(L))return!1;var e=L.resolve(1),t=function(e){e((function(){}),(function(){}))},n=e.constructor={};return n[I]=t,!(e.then((function(){}))instanceof t)})),te=ee||!x((function(e){L.all(e)["catch"]((function(){}))})),ne=function(e){var t;return!(!v(e)||"function"!=typeof(t=e.then))&&t},ie=function(e,t,n){if(!t.notified){t.notified=!0;var i=t.reactions;k((function(){var r=t.value,o=t.state==X,a=0;while(i.length>a){var s,l,c,u=i[a++],d=o?u.ok:u.fail,h=u.resolve,f=u.reject,p=u.domain;try{d?(o||(t.rejection===Q&&se(e,t),t.rejection=J),!0===d?s=r:(p&&p.enter(),s=d(r),p&&(p.exit(),c=!0)),s===u.promise?f(V("Promise-chain cycle")):(l=ne(s))?l.call(s,h,f):h(s)):f(r)}catch(m){p&&!c&&p.exit(),f(m)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&oe(e,t)}))}},re=function(e,t,n){var i,r;U?(i=z.createEvent("Event"),i.promise=t,i.reason=n,i.initEvent(e,!1,!0),c.dispatchEvent(i)):i={promise:t,reason:n},(r=c["on"+e])?r(i):e===Y&&O("Unhandled promise rejection",n)},oe=function(e,t){C.call(c,(function(){var n,i=t.value,r=ae(t);if(r&&(n=D((function(){q?B.emit("unhandledRejection",i,e):re(Y,e,i)})),t.rejection=q||ae(t)?Q:J,n.error))throw n.value}))},ae=function(e){return e.rejection!==J&&!e.parent},se=function(e,t){C.call(c,(function(){q?B.emit("rejectionHandled",e):re(K,e,t.value)}))},le=function(e,t,n,i){return function(r){e(t,n,r,i)}},ce=function(e,t,n,i){t.done||(t.done=!0,i&&(t=i),t.value=n,t.state=Z,ie(e,t,!0))},ue=function(e,t,n,i){if(!t.done){t.done=!0,i&&(t=i);try{if(e===n)throw V("Promise can't be resolved itself");var r=ne(n);r?k((function(){var i={done:!1};try{r.call(n,le(ue,e,i,t),le(ce,e,i,t))}catch(o){ce(e,i,o,t)}})):(t.value=n,t.state=X,ie(e,t,!1))}catch(o){ce(e,{done:!1},o,t)}}};ee&&(L=function(e){b(this,L,N),g(e),i.call(this);var t=j(this);try{e(le(ue,this,t),le(ce,this,t))}catch(n){ce(this,t,n)}},i=function(e){A(this,{type:N,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:G,value:void 0})},i.prototype=f(L.prototype,{then:function(e,t){var n=F(this),i=H(w(this,L));return i.ok="function"!=typeof e||e,i.fail="function"==typeof t&&t,i.domain=q?B.domain:void 0,n.parent=!0,n.reactions.push(i),n.state!=G&&ie(this,n,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),r=function(){var e=new i,t=j(e);this.promise=e,this.resolve=le(ue,e,t),this.reject=le(ce,e,t)},$.f=H=function(e){return e===L||e===o?new r(e):W(e)},l||"function"!=typeof d||(a=d.prototype.then,h(d.prototype,"then",(function(e,t){var n=this;return new L((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof R&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return S(L,R.apply(c,arguments))}}))),s({global:!0,wrap:!0,forced:ee},{Promise:L}),p(L,N,!1,!0),m(N),o=u(N),s({target:N,stat:!0,forced:ee},{reject:function(e){var t=H(this);return t.reject.call(void 0,e),t.promise}}),s({target:N,stat:!0,forced:l||ee},{resolve:function(e){return S(l&&this===o?L:this,e)}}),s({target:N,stat:!0,forced:te},{all:function(e){var t=this,n=H(t),i=n.resolve,r=n.reject,o=D((function(){var n=g(t.resolve),o=[],a=0,s=1;_(e,(function(e){var l=a++,c=!1;o.push(void 0),s++,n.call(t,e).then((function(e){c||(c=!0,o[l]=e,--s||i(o))}),r)})),--s||i(o)}));return o.error&&r(o.value),n.promise},race:function(e){var t=this,n=H(t),i=n.reject,r=D((function(){var r=g(t.resolve);_(e,(function(e){r.call(t,e).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}})},e772:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=52)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},3:function(e,t){e.exports=n("8122")},33:function(e,t,n){"use strict";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("li",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"el-select-dropdown__item",class:{selected:e.itemSelected,"is-disabled":e.disabled||e.groupDisabled||e.limitReached,hover:e.hover},on:{mouseenter:e.hoverItem,click:function(t){return t.stopPropagation(),e.selectOptionClick(t)}}},[e._t("default",[n("span",[e._v(e._s(e.currentLabel))])])],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(3),l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c={mixins:[a.a],name:"ElOption",componentName:"ElOption",inject:["select"],props:{value:{required:!0},label:[String,Number],created:Boolean,disabled:{type:Boolean,default:!1}},data:function(){return{index:-1,groupDisabled:!1,visible:!0,hitState:!1,hover:!1}},computed:{isObject:function(){return"[object object]"===Object.prototype.toString.call(this.value).toLowerCase()},currentLabel:function(){return this.label||(this.isObject?"":this.value)},currentValue:function(){return this.value||this.label||""},itemSelected:function(){return this.select.multiple?this.contains(this.select.value,this.value):this.isEqual(this.value,this.select.value)},limitReached:function(){return!!this.select.multiple&&(!this.itemSelected&&(this.select.value||[]).length>=this.select.multipleLimit&&this.select.multipleLimit>0)}},watch:{currentLabel:function(){this.created||this.select.remote||this.dispatch("ElSelect","setSelected")},value:function(e,t){var n=this.select,i=n.remote,r=n.valueKey;if(!this.created&&!i){if(r&&"object"===("undefined"===typeof e?"undefined":l(e))&&"object"===("undefined"===typeof t?"undefined":l(t))&&e[r]===t[r])return;this.dispatch("ElSelect","setSelected")}}},methods:{isEqual:function(e,t){if(this.isObject){var n=this.select.valueKey;return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}return e===t},contains:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];if(this.isObject){var n=this.select.valueKey;return e&&e.some((function(e){return Object(s["getValueByPath"])(e,n)===Object(s["getValueByPath"])(t,n)}))}return e&&e.indexOf(t)>-1},handleGroupDisabled:function(e){this.groupDisabled=e},hoverItem:function(){this.disabled||this.groupDisabled||(this.select.hoverIndex=this.select.options.indexOf(this))},selectOptionClick:function(){!0!==this.disabled&&!0!==this.groupDisabled&&this.dispatch("ElSelect","handleOptionClick",[this,!0])},queryChange:function(e){this.visible=new RegExp(Object(s["escapeRegexpString"])(e),"i").test(this.currentLabel)||this.created,this.visible||this.select.filteredOptionsCount--}},created:function(){this.select.options.push(this),this.select.cachedOptions.push(this),this.select.optionsCount++,this.select.filteredOptionsCount++,this.$on("queryChange",this.queryChange),this.$on("handleGroupDisabled",this.handleGroupDisabled)},beforeDestroy:function(){var e=this.select.cachedOptions.indexOf(this);e>-1&&this.select.cachedOptions.splice(e,1),this.select.onOptionDestroy(this.select.options.indexOf(this))}},u=c,d=n(0),h=Object(d["a"])(u,i,r,!1,null,null,null);h.options.__file="packages/select/src/option.vue";t["a"]=h.exports},4:function(e,t){e.exports=n("d010")},52:function(e,t,n){"use strict";n.r(t);var i=n(33);i["a"].install=function(e){e.component(i["a"].name,i["a"])},t["default"]=i["a"]}})},e893:function(e,t,n){var i=n("5135"),r=n("56ef"),o=n("06cf"),a=n("9bf2");e.exports=function(e,t){for(var n=r(t),s=a.f,l=o.f,c=0;c-1?"center "+n:n+" center"}},appendArrow:function(e){var t=void 0;if(!this.appended){for(var n in this.appended=!0,e.attributes)if(/^_v-/.test(e.attributes[n].name)){t=e.attributes[n].name;break}var i=document.createElement("div");t&&i.setAttribute(t,""),i.setAttribute("x-arrow",""),i.className="popper__arrow",e.appendChild(i)}}},beforeDestroy:function(){this.doDestroy(!0),this.popperElm&&this.popperElm.parentNode===document.body&&(this.popperElm.removeEventListener("click",l),document.body.removeChild(this.popperElm))},deactivated:function(){this.$options.beforeDestroy[0].call(this)}}},ea34:function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},eedf:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=118)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},118:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.disabled||(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var c=l.exports;c.install=function(e){e.component(c.name,c)};t["default"]=c}})},ef08:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},f069:function(e,t,n){"use strict";var i=n("1c0b"),r=function(e){var t,n;this.promise=new e((function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i})),this.resolve=i(t),this.reject=i(n)};e.exports.f=function(e){return new r(e)}},f0d9:function(e,t,n){"use strict";t.__esModule=!0,t.default={el:{colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"}}}},f3ad:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=74)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,c="function"===typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),i&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",(function(){return i}))},10:function(e,t){e.exports=n("2bb5")},21:function(e,t){e.exports=n("d397")},4:function(e,t){e.exports=n("d010")},74:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["textarea"===e.type?"el-textarea":"el-input",e.inputSize?"el-input--"+e.inputSize:"",{"is-disabled":e.inputDisabled,"is-exceed":e.inputExceed,"el-input-group":e.$slots.prepend||e.$slots.append,"el-input-group--append":e.$slots.append,"el-input-group--prepend":e.$slots.prepend,"el-input--prefix":e.$slots.prefix||e.prefixIcon,"el-input--suffix":e.$slots.suffix||e.suffixIcon||e.clearable||e.showPassword}],on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},["textarea"!==e.type?[e.$slots.prepend?n("div",{staticClass:"el-input-group__prepend"},[e._t("prepend")],2):e._e(),"textarea"!==e.type?n("input",e._b({ref:"input",staticClass:"el-input__inner",attrs:{tabindex:e.tabindex,type:e.showPassword?e.passwordVisible?"text":"password":e.type,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"input",e.$attrs,!1)):e._e(),e.$slots.prefix||e.prefixIcon?n("span",{staticClass:"el-input__prefix"},[e._t("prefix"),e.prefixIcon?n("i",{staticClass:"el-input__icon",class:e.prefixIcon}):e._e()],2):e._e(),e.getSuffixVisible()?n("span",{staticClass:"el-input__suffix"},[n("span",{staticClass:"el-input__suffix-inner"},[e.showClear&&e.showPwdVisible&&e.isWordLimitVisible?e._e():[e._t("suffix"),e.suffixIcon?n("i",{staticClass:"el-input__icon",class:e.suffixIcon}):e._e()],e.showClear?n("i",{staticClass:"el-input__icon el-icon-circle-close el-input__clear",on:{mousedown:function(e){e.preventDefault()},click:e.clear}}):e._e(),e.showPwdVisible?n("i",{staticClass:"el-input__icon el-icon-view el-input__clear",on:{click:e.handlePasswordVisible}}):e._e(),e.isWordLimitVisible?n("span",{staticClass:"el-input__count"},[n("span",{staticClass:"el-input__count-inner"},[e._v("\n "+e._s(e.textLength)+"/"+e._s(e.upperLimit)+"\n ")])]):e._e()],2),e.validateState?n("i",{staticClass:"el-input__icon",class:["el-input__validateIcon",e.validateIcon]}):e._e()]):e._e(),e.$slots.append?n("div",{staticClass:"el-input-group__append"},[e._t("append")],2):e._e()]:n("textarea",e._b({ref:"textarea",staticClass:"el-textarea__inner",style:e.textareaStyle,attrs:{tabindex:e.tabindex,disabled:e.inputDisabled,readonly:e.readonly,autocomplete:e.autoComplete||e.autocomplete,"aria-label":e.label},on:{compositionstart:e.handleCompositionStart,compositionupdate:e.handleCompositionUpdate,compositionend:e.handleCompositionEnd,input:e.handleInput,focus:e.handleFocus,blur:e.handleBlur,change:e.handleChange}},"textarea",e.$attrs,!1)),e.isWordLimitVisible&&"textarea"===e.type?n("span",{staticClass:"el-input__count"},[e._v(e._s(e.textLength)+"/"+e._s(e.upperLimit))]):e._e()],2)},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s=n(10),l=n.n(s),c=void 0,u="\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",d=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function h(e){var t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),i=parseFloat(t.getPropertyValue("padding-bottom"))+parseFloat(t.getPropertyValue("padding-top")),r=parseFloat(t.getPropertyValue("border-bottom-width"))+parseFloat(t.getPropertyValue("border-top-width")),o=d.map((function(e){return e+":"+t.getPropertyValue(e)})).join(";");return{contextStyle:o,paddingSize:i,borderSize:r,boxSizing:n}}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;c||(c=document.createElement("textarea"),document.body.appendChild(c));var i=h(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;c.setAttribute("style",s+";"+u),c.value=e.value||e.placeholder||"";var l=c.scrollHeight,d={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),c.value="";var f=c.scrollHeight-r;if(null!==t){var p=f*t;"border-box"===a&&(p=p+r+o),l=Math.max(p,l),d.minHeight=p+"px"}if(null!==n){var m=f*n;"border-box"===a&&(m=m+r+o),l=Math.min(m,l)}return d.height=l+"px",c.parentNode&&c.parentNode.removeChild(c),c=null,d}var p=n(9),m=n.n(p),v=n(21),g={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return m()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=f(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:f(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(){this.isComposing=!0},handleCompositionUpdate:function(e){var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(v["isKorean"])(n)},handleCompositionEnd:function(e){this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i0?i:n)(e)}},fc6a:function(e,t,n){var i=n("44ad"),r=n("1d80");e.exports=function(e){return i(r(e))}},fcd4:function(e,t,n){t.f=n("cc15")},fea9:function(e,t,n){var i=n("da84");e.exports=i.Promise},fed5:function(e,t){t.f=Object.getOwnPropertySymbols}}]); \ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/favicon.ico" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/favicon.ico" deleted file mode 100644 index df36fcfb..00000000 Binary files "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/favicon.ico" and /dev/null differ diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/index.html" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/index.html" deleted file mode 100644 index 56ded40e..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson27/bubble/templates/index.html" +++ /dev/null @@ -1 +0,0 @@ -bubble清单
\ No newline at end of file diff --git "a/Golang/Gin\346\241\206\346\236\266/Code/lesson28/hello/main.go" "b/Golang/Gin\346\241\206\346\236\266/Code/lesson28/hello/main.go" deleted file mode 100644 index e1fc38d2..00000000 --- "a/Golang/Gin\346\241\206\346\236\266/Code/lesson28/hello/main.go" +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @Description - * @Author 陌溪 - * @Date 2021/4/22 9:17 - **/ -package main - -import "fmt" - -func main() { - c := make(chan int, 1) - fmt.Print("end", <-c) - c <- 2 - -} diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/README.md" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/README.md" new file mode 100644 index 00000000..cfdd7ccc --- /dev/null +++ "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/README.md" @@ -0,0 +1,546 @@ +## 基本原理 + +首先需要有客户端和服务端,通过建立一个TCP链接进行数据传输,至于是否拥有传输协议,这个就不一定了。 + +![image-20210621113141941](images/image-20210621113141941.png) + +整个过程就是: + +- 客户端发送数据(以字节流的方式) +- 服务端接收,并解析,根据约定知道要知道执行什么,然后把结果返回客户端 + +**RPC** 就是把上述过程封装下,使其操作更加优化,使用一些大家都认可的协议,其规范化,做成一些框架,直接或间接产生利益。 + +## gRPC + +刚才我们讲的 "赚钱利器" 其中一个框架就是一款语言中立、平台中立、开源的远程过程调用(RPC)框架 **gRPC**。 + +目前 **GPRC** 支持 **Java**、**C++**、**Golang**、**PHP** 多个语言版本. + +> Golang版本:https://github.com/grpc/grpc-go + +## Protobuf + +> 参考链接:https://studygolang.com/articles/12673?fr=sidebar + +**Protobuf**(Google Protocol Buffer)是 **google** 的一种数据交换的格式,它独立于语言,独立于平台。**google** 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 + +轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。 +特点:性能高、传输快、维护方便,反正就是各种好,各种棒一些第三方 **rpc** 库都会支持 **protobuf** + +> Github地址:https://github.com/protocolbuffers/protobuf +> +> Golang库所属地址:https://github.com/golang/protobuf + +## 什么是protoc + +**protoc** 是 **protobuf** 文件(.proto)的编译器,可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。 + +![protoc编译过程示意图](images/41775c725a2745e2e785f22bbd96a08c.png) + +通过查看 **protoc** 的源码,可以知道,**protoc** 在设计上把 **protobuf** 和不同的语言解耦了,底层用 **C++** 来实现 **protobuf** 结构的存储,然后通过插件的形式来生成不同语言的源码。可以把 **protoc** 的编译过程分成简单的两个步骤(如上图所示): + +- 解析.proto文件,转译成protobuf的原生数据结构在内存中保存; +- 把protobuf相关的数据结构传递给相应语言的编译插件,由插件负责根据接收到的protobuf原生结构渲染输出特定语言的模板。 + +到下面地址,下载好 **Windows** 版的 **Protobuf** 的编译器,Protobuf编译器的作用是将 .proto 文件,转译为 **protobuf** 的原生结构 + +> https://github.com/protocolbuffers/protobuf/releases + +选择好对应的 **release** 版本进行下载 + +![image-20210621121329642](images/image-20210621121329642.png) + +解压完成后,是一个 **exe** 文件,我们将其放在指定的目录下 + +![image-20210621121537220](images/image-20210621121537220.png) + +然后配置环境变量 + +![image-20210621203221926](images/image-20210621203221926.png) + +## 什么是 protoc-gen-go + +**protoc-gen-go** 是 **protobuf** **编译插件**系列中的 **Go** 版本。从上一小节知道原生的 **protoc** 并不包含 **Go** 版本的插件,不过可以在 **Github** 上发现专门的代码库。 + +由于protoc-gen-go是Go写的,所以安装它变得很简单,只需要运行 `go get -u github.com/golang/protobuf/protoc-gen-go`,便可以在$GOPATH/bin目录下发现这个工具。至此,就可以通过下面的命令来使用protoc-gen-go了。 + +```bash +protoc --go_out=output_directory input_directory/file.proto +``` + +其中"--go_out="表示生成Go文件,protoc会自动寻找PATH(系统执行路径)中的protoc-gen-go执行文件。 + +## protoc-gen-go的源码 + +![protoc-gen-go的源码结构示意图](images/fcfa10f6aa545027a3904783f0fd6ab5.png) + +按照 **Go** 的代码风格,**protoc-gen-go** 源码主要包含六个包(package): + +- main包 + - doc.go:主要是说明。 + - link_grpc.go:显式引用protoc-gen-go/grpc包,触发grpc的init函数。 + - main.go:代码不到50行,初始化generator,并调用generator相应的方法输出protobuf的Go语言文件。 +- generator包 + - generator.go 包含了大部分由protobuf原生结构到Go语言文件的渲染方法,其中 `func (g *Generator) P(str ...interface{})` 这个方法会把渲染输出到generator的output(generator匿名嵌套了bytes.Buffer,因此有Buffer的方法)。 + - name_test.go 测试,主要包含generator中名称相关方法的测试。 +- grpc包 + - grpc.go 与generator相似,但是包含了很多生成grpc相关方法的方法,比如渲染转译protobuf中定义的rpc方法(在generator中不包含,其默认不转译service的定义) +- descriptor 包含protobuf的描述文件(.proto文件及其对应的Go编译文件),其中proto文件来自于proto库 +- plugin 包含plugin的描述文件(.proto文件及其对应的Go编译文件),其中proto文件来自于proto库 + +## 开启第一个gRPC项目 + +首先创建一个空项目,使用 **go module** 的方式 + +首先创建相关的执行下面命令,下载依赖 + +```bash + go get -u google.golang.org/grpc +``` + +然后按照 **protobuf** 下载对应的 **go** 版本插件 + +```bash +go get github.com/golang/protobuf/protoc-gen-go +``` + +此时,会在你的 GOPATH 的 bin 目录下生成可执行文件,**protobuf** 的编译插件 **protoc-gen-go** + +![image-20210621210152237](images/image-20210621210152237.png) + +稍后我们执行 **protoc** 命令时,就会自动调用这个插件。首先安装 **Goland** 的插件 **Protobuf Support** + +![image-20210621210322441](images/image-20210621210322441.png) + +## 创建文件 + +下面我们将创建一个 ProdService.proto 文件 + +```bash +syntax="proto3"; // 表示现在使用的proto是 3.0版本 +package services; +option go_package = "../services"; // 高版本的go需要添加这个,代表生成的包名 + +message ProdRequest { // 表示构建一个请求体 + int32 prod_id = 1; //商品ID +} + +message ProdResponse { // 构建响应体 + int32 prod_stock = 1; //商品库存 +} + +service ProductService { + rpc GetProductStock (ProdRequest) returns (ProdResponse); +} +``` + +## 生成 Go PRC文件 + +然后执行下面命令进行转换 + +```bash +protoc --go_out=. Prod.proto +``` + +最后会生成一个 **Prod.proto.go** 文件 + +```bash +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.22.0-devel +// protoc v3.11.4 +// source: Prod.proto + +package services + +import ( + context "context" + proto "github.com/golang/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type ProdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProdId int32 `protobuf:"varint,1,opt,name=prod_id,json=prodId,proto3" json:"prod_id,omitempty"` //商品ID +} + +func (x *ProdRequest) Reset() { + *x = ProdRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Prod_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProdRequest) ProtoMessage() {} + +func (x *ProdRequest) ProtoReflect() protoreflect.Message { + mi := &file_Prod_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProdRequest.ProtoReflect.Descriptor instead. +func (*ProdRequest) Descriptor() ([]byte, []int) { + return file_Prod_proto_rawDescGZIP(), []int{0} +} + +func (x *ProdRequest) GetProdId() int32 { + if x != nil { + return x.ProdId + } + return 0 +} + +type ProdResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProdStock int32 `protobuf:"varint,1,opt,name=prod_stock,json=prodStock,proto3" json:"prod_stock,omitempty"` //商品库存 +} + +func (x *ProdResponse) Reset() { + *x = ProdResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Prod_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProdResponse) ProtoMessage() {} + +func (x *ProdResponse) ProtoReflect() protoreflect.Message { + mi := &file_Prod_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProdResponse.ProtoReflect.Descriptor instead. +func (*ProdResponse) Descriptor() ([]byte, []int) { + return file_Prod_proto_rawDescGZIP(), []int{1} +} + +func (x *ProdResponse) GetProdStock() int32 { + if x != nil { + return x.ProdStock + } + return 0 +} + +var File_Prod_proto protoreflect.FileDescriptor + +var file_Prod_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x26, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x64, 0x49, 0x64, 0x22, 0x2d, + 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x53, 0x74, 0x6f, 0x63, 0x6b, 0x32, 0x52, 0x0a, + 0x0e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x40, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x74, 0x6f, + 0x63, 0x6b, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_Prod_proto_rawDescOnce sync.Once + file_Prod_proto_rawDescData = file_Prod_proto_rawDesc +) + +func file_Prod_proto_rawDescGZIP() []byte { + file_Prod_proto_rawDescOnce.Do(func() { + file_Prod_proto_rawDescData = protoimpl.X.CompressGZIP(file_Prod_proto_rawDescData) + }) + return file_Prod_proto_rawDescData +} + +var file_Prod_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_Prod_proto_goTypes = []interface{}{ + (*ProdRequest)(nil), // 0: services.ProdRequest + (*ProdResponse)(nil), // 1: services.ProdResponse +} +var file_Prod_proto_depIdxs = []int32{ + 0, // 0: services.ProductService.GetProductStock:input_type -> services.ProdRequest + 1, // 1: services.ProductService.GetProductStock:output_type -> services.ProdResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_Prod_proto_init() } +func file_Prod_proto_init() { + if File_Prod_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_Prod_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Prod_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProdResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_Prod_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_Prod_proto_goTypes, + DependencyIndexes: file_Prod_proto_depIdxs, + MessageInfos: file_Prod_proto_msgTypes, + }.Build() + File_Prod_proto = out.File + file_Prod_proto_rawDesc = nil + file_Prod_proto_goTypes = nil + file_Prod_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// ProductServiceClient is the client API for ProductService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ProductServiceClient interface { + GetProductStock(ctx context.Context, in *ProdRequest, opts ...grpc.CallOption) (*ProdResponse, error) +} + +type productServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewProductServiceClient(cc grpc.ClientConnInterface) ProductServiceClient { + return &productServiceClient{cc} +} + +func (c *productServiceClient) GetProductStock(ctx context.Context, in *ProdRequest, opts ...grpc.CallOption) (*ProdResponse, error) { + out := new(ProdResponse) + err := c.cc.Invoke(ctx, "/services.ProductService/GetProductStock", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ProductServiceServer is the server API for ProductService service. +type ProductServiceServer interface { + GetProductStock(context.Context, *ProdRequest) (*ProdResponse, error) +} + +// UnimplementedProductServiceServer can be embedded to have forward compatible implementations. +type UnimplementedProductServiceServer struct { +} + +func (*UnimplementedProductServiceServer) GetProductStock(context.Context, *ProdRequest) (*ProdResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProductStock not implemented") +} + +func RegisterProductServiceServer(s *grpc.Server, srv ProductServiceServer) { + s.RegisterService(&_ProductService_serviceDesc, srv) +} + +func _ProductService_GetProductStock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).GetProductStock(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/services.ProductService/GetProductStock", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).GetProductStock(ctx, req.(*ProdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ProductService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "services.ProductService", + HandlerType: (*ProductServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetProductStock", + Handler: _ProductService_GetProductStock_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "Prod.proto", +} +``` + +## 创建GRPC服务端 + +在第一节中,我们依葫芦画瓢做了一个"中间文件",并生成对应的 **go** 文件,只不过看起来好像没啥用,接下来我们就要创建真正的服务。 + +## 引入Service + +只需要修改 **Prod.proto**文件,添加如下内容 **ProductService** + +```bash +syntax="proto3"; +package services; +option go_package = "../services"; + +message ProdRequest { + int32 prod_id = 1; //商品ID +} + +message ProdResponse { + int32 prod_stock = 1; //商品库存 +} + +service ProductService { + rpc GetProductStock (ProdRequest) returns (ProdResponse); +} +``` + +然后生成我们新的 **Prod.proto.go** 文件,同时包含了 **Service** 文件 + +```bash +protoc --go_out=plugins=grpc:../services Prod.proto +``` + +## 创建实现类 + +下面我们就可以创建一个实现类了,在 **services** 文件夹下创建 **ProdService** 文件 + +![image-20210717090052476](images/image-20210717090052476.png) + +文件内容如下,只需要实现我们对应的方法即可 + +```go +/** + * @Description + * @Author 陌溪 + * @Date 2021/7/17 8:56 + **/ +package services + +import ( + "context" + "google.golang.org/grpc" + "log" +) + +// 定义的结构体 +type ProdService struct { + +} + +func (this *ProdService) GetProductStock(ctx context.Context, in *ProdRequest, opts ...grpc.CallOption) (*ProdResponse, error) { + log.Fatalln("进来了") + return &ProdResponse{ ProdStock: 20}, nil +} +``` + +## 创建RPC服务 + +最后,为了使我们的 **RPC** 进行启动,我们还需要对服务进行启动 + +```GO +package main + +import ( + "log" + "net" + + "github.com/zhuge20100104/grpc-demo/grpc-1/server/services" + "google.golang.org/grpc" +) + +func main() { + // 通过grpc创建一个Server + rpcServer := grpc.NewServer() + // 注册Service + services.RegisterProductServiceServer(rpcServer, new(services.ProdService)) + // 监听一个端口 + listen, err := net.Listen("tcp", ":8888") + if err != nil { + log.Fatalf("启动网络监听失败 %v\n", err) + } + log.Print("服务器成功监听8888端口") + // 进行通信 + rpcServer.Serve(listen) +} +``` + diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/41775c725a2745e2e785f22bbd96a08c.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/41775c725a2745e2e785f22bbd96a08c.png" new file mode 100644 index 00000000..8f16a832 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/41775c725a2745e2e785f22bbd96a08c.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/fcfa10f6aa545027a3904783f0fd6ab5.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/fcfa10f6aa545027a3904783f0fd6ab5.png" new file mode 100644 index 00000000..4b5d8320 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/fcfa10f6aa545027a3904783f0fd6ab5.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621113141941.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621113141941.png" new file mode 100644 index 00000000..84b26187 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621113141941.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121329642.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121329642.png" new file mode 100644 index 00000000..d4e5b352 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121329642.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121537220.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121537220.png" new file mode 100644 index 00000000..5e490017 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121537220.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121656093.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121656093.png" new file mode 100644 index 00000000..5e490017 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621121656093.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621203221926.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621203221926.png" new file mode 100644 index 00000000..5b499f9a Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621203221926.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210152237.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210152237.png" new file mode 100644 index 00000000..8a9ed93a Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210152237.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210322441.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210322441.png" new file mode 100644 index 00000000..7b2fda49 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210621210322441.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210717090052476.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210717090052476.png" new file mode 100644 index 00000000..6fe6bd18 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/1_RPC\345\205\245\351\227\250\345\222\214\345\210\233\345\273\272\344\270\255\351\227\264\344\273\266/images/image-20210717090052476.png" differ diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/README.md" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/README.md" new file mode 100644 index 00000000..ef11d918 --- /dev/null +++ "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/README.md" @@ -0,0 +1,52 @@ +## 前言 + +在真实的环境下,我们一般会使用证书来确保通信的安全 + +如果是window环境,使用下面地址,进行自签证书 + +```bash +http://slproweb.com/products/Win32OpenSSL.html +``` + +![image-20210621221350145](images/image-20210621221350145.png) + +下载完成后,开始进行证书的生成 + +## 生成步骤 + +首先进入 bin 目录下,执行 + +```bash +openssl +``` + +然后执行(会生成 servver.key 私钥文件) + +```bash +genrsa-des3 -out server.key 2048 +``` + +然后输入 123456 + +下面开始创建证书请求,会生成 **server.csr** + +```bash +req-new-key server.key -out server.csr +``` + +其中,common name 也是域名,可以填写 **jtthink.com** + +删除密码 + +```bash +rsa -in server.key -out server_no_passwd.key +``` + +执行下面命令生成 server.crt + +```bash +x509 -req -days 565 -in server.csr -signkey server_no_passwd.key -out server.crt +``` + +到此为止,自签证书完成 + diff --git "a/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/images/image-20210621221350145.png" "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/images/image-20210621221350145.png" new file mode 100644 index 00000000..82036262 Binary files /dev/null and "b/Golang/grpc\345\205\245\351\227\250\345\255\246\344\271\240/2_\350\207\252\347\255\276\350\257\201\344\271\246\345\222\214\346\234\215\345\212\241\345\231\250\345\212\240\345\205\245\350\257\201\344\271\246\351\252\214\350\257\201/images/image-20210621221350145.png" differ diff --git "a/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/0_\345\272\217\347\253\240/README.md" "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/0_\345\272\217\347\253\240/README.md" new file mode 100644 index 00000000..a71ba27b --- /dev/null +++ "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/0_\345\272\217\347\253\240/README.md" @@ -0,0 +1,62 @@ +## 来源 + +本文来源于**极客兔兔**的[七天用 **Go** 从零实现系列](https://geektutu.com/post/gee.html) + +## 设计一个框架 + +大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架。不同的框架设计理念和提供的功能有很大的差别。比如 Python 语言的 `django`和`flask`,前者大而全,后者小而美。Go语言/golang 也是如此,新框架层出不穷,比如`Beego`,`Gin`,`Iris`等。那为什么不直接使用标准库,而必须使用框架呢?在设计一个框架之前,我们需要回答框架核心为我们解决了什么问题。只有理解了这一点,才能想明白我们需要在框架中实现什么功能。 + +我们先看看标准库`net/http`如何处理一个请求。 + +``` +func main() { + http.HandleFunc("/", handler) + http.HandleFunc("/count", counter) + log.Fatal(http.ListenAndServe("localhost:8000", nil)) +} + +func handler(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path) +} +``` + +`net/http`提供了基础的Web功能,即监听端口,映射静态路由,解析HTTP报文。一些Web开发中简单的需求并不支持,需要手工实现。 + +- 动态路由:例如`hello/:name`,`hello/*`这类的规则。 +- 鉴权:没有分组/统一鉴权的能力,需要在每个路由映射的handler中实现。 +- 模板:没有统一简化的HTML机制。 +- … + +当我们离开框架,使用基础库时,需要频繁手工处理的地方,就是框架的价值所在。但并不是每一个频繁处理的地方都适合在框架中完成。Python有一个很著名的Web框架,名叫[`bottle`](https://github.com/bottlepy/bottle),整个框架由`bottle.py`一个文件构成,共4400行,可以说是一个微框架。那么理解这个微框架提供的特性,可以帮助我们理解框架的核心能力。 + +- 路由(Routing):将请求映射到函数,支持动态路由。例如`'/hello/:name`。 +- 模板(Templates):使用内置模板引擎提供模板渲染机制。 +- 工具集(Utilites):提供对 cookies,headers 等处理机制。 +- 插件(Plugin):Bottle本身功能有限,但提供了插件机制。可以选择安装到全局,也可以只针对某几个路由生效。 +- … + +## Gee 框架 + +这个教程将使用 Go 语言实现一个简单的 Web 框架,起名叫做`Gee`,[`geektutu.com`](https://geektutu.com/)的前三个字母。我第一次接触的 Go 语言的 Web 框架是`Gin`,`Gin`的代码总共是14K,其中测试代码9K,也就是说实际代码量只有**5K**。`Gin`也是我非常喜欢的一个框架,与Python中的`Flask`很像,小而美。 + +`7天实现Gee框架`这个教程的很多设计,包括源码,参考了`Gin`,大家可以看到很多`Gin`的影子。 + +时间关系,同时为了尽可能地简洁明了,这个框架中的很多部分实现的功能都很简单,但是尽可能地体现一个框架核心的设计原则。例如`Router`的设计,虽然支持的动态路由规则有限,但为了性能考虑匹配算法是用`Trie树`实现的,`Router`最重要的指标之一便是性能。 + +希望这个教程能够对你有所启发,如果对 Gee 有任何好的建议,欢迎提[issues - Github](https://github.com/geektutu/7days-golang/issues) 和 PR。教程中的任何问题,可以直接在文章末尾评论。 + +## 目录 + +- 第一天:[前置知识(http.Handler接口)](https://geektutu.com/post/gee-day1.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base) +- 第二天:[上下文设计(Context)](https://geektutu.com/post/gee-day2.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context) +- 第三天:[Trie树路由(Router)](https://geektutu.com/post/gee-day3.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day3-router) +- 第四天:[分组控制(Group)](https://geektutu.com/post/gee-day4.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day4-group) +- 第五天:[中间件(Middleware)](https://geektutu.com/post/gee-day5.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day5-middleware) +- 第六天:[HTML模板(Template)](https://geektutu.com/post/gee-day6.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day6-template) +- 第七天:[错误恢复(Panic Recover)](https://geektutu.com/post/gee-day7.html),[Code - Github](https://github.com/geektutu/7days-golang/tree/master/gee-web/day7-panic-recover) + +## 推荐阅读 + +- [Go 语言简明教程](https://geektutu.com/post/quick-golang.html) +- [Go Test 单元测试简明教程](https://geektutu.com/post/quick-golang.html) +- [Go Gin 简明教程](https://geektutu.com/post/quick-go-gin.html) \ No newline at end of file diff --git "a/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/1_HTTP\345\237\272\347\241\200/README.md" "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/1_HTTP\345\237\272\347\241\200/README.md" new file mode 100644 index 00000000..3619a2b9 --- /dev/null +++ "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/1_HTTP\345\237\272\347\241\200/README.md" @@ -0,0 +1,246 @@ +# Go语言动手写Web框架 - Gee第一天 http.Handler + +> 源代码/数据集已上传到 [Github - 7days-golang](https://github.com/geektutu/7days-golang) + +本文是 [7天用Go从零实现Web框架Gee教程系列](https://geektutu.com/post/gee.html)的第一篇。 + +- 简单介绍`net/http`库以及`http.Handler`接口。 +- 搭建`Gee`框架的雏形,**代码约50行**。 + +## 标准库启动Web服务 + +Go语言内置了 `net/http`库,封装了HTTP网络编程的基础的接口,我们实现的`Gee` Web 框架便是基于`net/http`的。我们接下来通过一个例子,简单介绍下这个库的使用。 + +**[day1-http-base/base1/main.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base/base1)** + +``` +package main + +import ( + "fmt" + "log" + "net/http" +) + +func main() { + http.HandleFunc("/", indexHandler) + http.HandleFunc("/hello", helloHandler) + log.Fatal(http.ListenAndServe(":9999", nil)) +} + +// handler echoes r.URL.Path +func indexHandler(w http.ResponseWriter, req *http.Request) { + fmt.Fprintf(w, "URL.Path = %q\n", req.URL.Path) +} + +// handler echoes r.URL.Header +func helloHandler(w http.ResponseWriter, req *http.Request) { + for k, v := range req.Header { + fmt.Fprintf(w, "Header[%q] = %q\n", k, v) + } +} +``` + +我们设置了2个路由,`/`和`/hello`,分别绑定 *indexHandler* 和 *helloHandler* , 根据不同的HTTP请求会调用不同的处理函数。访问`/`,响应是`URL.Path = /`,而`/hello`的响应则是请求头(header)中的键值对信息。 + +用 curl 这个工具测试一下,将会得到如下的结果。 + +``` +$ curl http://localhost:9999/ +URL.Path = "/" +$ curl http://localhost:9999/hello +Header["Accept"] = ["*/*"] +Header["User-Agent"] = ["curl/7.54.0"] +``` + +*main* 函数的最后一行,是用来启动 Web 服务的,第一个参数是地址,`:9999`表示在 *9999* 端口监听。而第二个参数则代表处理所有的HTTP请求的实例,`nil` 代表使用标准库中的实例处理。第二个参数,则是我们基于`net/http`标准库实现Web框架的入口。 + +## 实现http.Handler接口 + +``` +package http + +type Handler interface { + ServeHTTP(w ResponseWriter, r *Request) +} + +func ListenAndServe(address string, h Handler) error +``` + +第二个参数的类型是什么呢?通过查看`net/http`的源码可以发现,`Handler`是一个接口,需要实现方法 *ServeHTTP* ,也就是说,只要传入任何实现了 *ServerHTTP* 接口的实例,所有的HTTP请求,就都交给了该实例处理了。马上来试一试吧。 + +**[day1-http-base/base2/main.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base/base2)** + +``` +package main + +import ( + "fmt" + "log" + "net/http" +) + +// Engine is the uni handler for all requests +type Engine struct{} + +func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { + switch req.URL.Path { + case "/": + fmt.Fprintf(w, "URL.Path = %q\n", req.URL.Path) + case "/hello": + for k, v := range req.Header { + fmt.Fprintf(w, "Header[%q] = %q\n", k, v) + } + default: + fmt.Fprintf(w, "404 NOT FOUND: %s\n", req.URL) + } +} + +func main() { + engine := new(Engine) + log.Fatal(http.ListenAndServe(":9999", engine)) +} +``` + +- 我们定义了一个空的结构体`Engine`,实现了方法`ServeHTTP`。这个方法有2个参数,第二个参数是 *Request* ,该对象包含了该HTTP请求的所有的信息,比如请求地址、Header和Body等信息;第一个参数是 *ResponseWriter* ,利用 *ResponseWriter* 可以构造针对该请求的响应。 +- 在 *main* 函数中,我们给 *ListenAndServe* 方法的第二个参数传入了刚才创建的`engine`实例。至此,我们走出了实现Web框架的第一步,即,将所有的HTTP请求转向了我们自己的处理逻辑。还记得吗,在实现`Engine`之前,我们调用 *http.HandleFunc* 实现了路由和Handler的映射,也就是只能针对具体的路由写处理逻辑。比如`/hello`。但是在实现`Engine`之后,我们拦截了所有的HTTP请求,拥有了统一的控制入口。在这里我们可以自由定义路由映射的规则,也可以统一添加一些处理逻辑,例如日志、异常处理等。 +- 代码的运行结果与之前的是一致的。 + +## Gee框架的雏形 + +我们接下来重新组织上面的代码,搭建出整个框架的雏形。 + +最终的代码目录结构是这样的。 + +``` +gee/ + |--gee.go + |--go.mod +main.go +go.mod +``` + +### go.mod + +**[day1-http-base/base3/go.mod](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base/base3)** + +``` +module example + +go 1.13 + +require gee v0.0.0 + +replace gee => ./gee +``` + +- 在 `go.mod` 中使用 `replace` 将 gee 指向 `./gee` + +> 从 go 1.11 版本开始,引用相对路径的 package 需要使用上述方式。 + +### main.go + +**[day1-http-base/base3/main.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base/base3)** + +``` +package main + +import ( + "fmt" + "net/http" + + "gee" +) + +func main() { + r := gee.New() + r.GET("/", func(w http.ResponseWriter, req *http.Request) { + fmt.Fprintf(w, "URL.Path = %q\n", req.URL.Path) + }) + + r.GET("/hello", func(w http.ResponseWriter, req *http.Request) { + for k, v := range req.Header { + fmt.Fprintf(w, "Header[%q] = %q\n", k, v) + } + }) + + r.Run(":9999") +} +``` + +看到这里,如果你使用过`gin`框架的话,肯定会觉得无比的亲切。`gee`框架的设计以及API均参考了`gin`。使用`New()`创建 gee 的实例,使用 `GET()`方法添加路由,最后使用`Run()`启动Web服务。这里的路由,只是静态路由,不支持`/hello/:name`这样的动态路由,动态路由我们将在下一次实现。 + +### gee.go + +**[day1-http-base/base3/gee/gee.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base/base3)** + +``` +package gee + +import ( + "fmt" + "net/http" +) + +// HandlerFunc defines the request handler used by gee +type HandlerFunc func(http.ResponseWriter, *http.Request) + +// Engine implement the interface of ServeHTTP +type Engine struct { + router map[string]HandlerFunc +} + +// New is the constructor of gee.Engine +func New() *Engine { + return &Engine{router: make(map[string]HandlerFunc)} +} + +func (engine *Engine) addRoute(method string, pattern string, handler HandlerFunc) { + key := method + "-" + pattern + engine.router[key] = handler +} + +// GET defines the method to add GET request +func (engine *Engine) GET(pattern string, handler HandlerFunc) { + engine.addRoute("GET", pattern, handler) +} + +// POST defines the method to add POST request +func (engine *Engine) POST(pattern string, handler HandlerFunc) { + engine.addRoute("POST", pattern, handler) +} + +// Run defines the method to start a http server +func (engine *Engine) Run(addr string) (err error) { + return http.ListenAndServe(addr, engine) +} + +func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { + key := req.Method + "-" + req.URL.Path + if handler, ok := engine.router[key]; ok { + handler(w, req) + } else { + fmt.Fprintf(w, "404 NOT FOUND: %s\n", req.URL) + } +} +``` + +那么`gee.go`就是重头戏了。我们重点介绍一下这部分的实现。 + +- 首先定义了类型`HandlerFunc`,这是提供给框架用户的,用来定义路由映射的处理方法。我们在`Engine`中,添加了一张路由映射表`router`,key 由请求方法和静态路由地址构成,例如`GET-/`、`GET-/hello`、`POST-/hello`,这样针对相同的路由,如果请求方法不同,可以映射不同的处理方法(Handler),value 是用户映射的处理方法。 +- 当用户调用`(*Engine).GET()`方法时,会将路由和处理方法注册到映射表 *router* 中,`(*Engine).Run()`方法,是 *ListenAndServe* 的包装。 +- `Engine`实现的 *ServeHTTP* 方法的作用就是,解析请求的路径,查找路由映射表,如果查到,就执行注册的处理方法。如果查不到,就返回 *404 NOT FOUND* 。 + +执行`go run main.go`,再用 *curl* 工具访问,结果与最开始的一致。 + +``` +$ curl http://localhost:9999/ +URL.Path = "/" +$ curl http://localhost:9999/hello +Header["Accept"] = ["*/*"] +Header["User-Agent"] = ["curl/7.54.0"] +curl http://localhost:9999/world +404 NOT FOUND: /world +``` + +至此,整个`Gee`框架的原型已经出来了。实现了路由映射表,提供了用户注册静态路由的方法,包装了启动服务的函数。当然,到目前为止,我们还没有实现比`net/http`标准库更强大的能力,不用担心,很快就可以将动态路由、中间件等功能添加上去了。 \ No newline at end of file diff --git "a/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/3_\344\270\212\344\270\213\346\226\207/README.md" "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/3_\344\270\212\344\270\213\346\226\207/README.md" new file mode 100644 index 00000000..867e15fc --- /dev/null +++ "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/3_\344\270\212\344\270\213\346\226\207/README.md" @@ -0,0 +1,247 @@ +# Go语言动手写Web框架 - Gee第二天 上下文Context + +> 源代码/数据集已上传到 [Github - 7days-golang](https://github.com/geektutu/7days-golang) + +本文是 [7天用Go从零实现Web框架Gee教程系列](https://geektutu.com/post/gee.html)的第二篇。 + +- 将`路由(router)`独立出来,方便之后增强。 +- 设计`上下文(Context)`,封装 Request 和 Response ,提供对 JSON、HTML 等返回类型的支持。 +- 动手写 Gee 框架的第二天,**框架代码140行,新增代码约90行** + +## 使用效果 + +为了展示第二天的成果,我们看一看在使用时的效果。 + +[day2-context/main.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context) + +``` +func main() { + r := gee.New() + r.GET("/", func(c *gee.Context) { + c.HTML(http.StatusOK, "

Hello Gee

") + }) + r.GET("/hello", func(c *gee.Context) { + // expect /hello?name=geektutu + c.String(http.StatusOK, "hello %s, you're at %s\n", c.Query("name"), c.Path) + }) + + r.POST("/login", func(c *gee.Context) { + c.JSON(http.StatusOK, gee.H{ + "username": c.PostForm("username"), + "password": c.PostForm("password"), + }) + }) + + r.Run(":9999") +} +``` + +- `Handler`的参数变成成了`gee.Context`,提供了查询Query/PostForm参数的功能。 +- `gee.Context`封装了`HTML/String/JSON`函数,能够快速构造HTTP响应。 + +## 设计Context + +### 必要性 + +1. 对Web服务来说,无非是根据请求`*http.Request`,构造响应`http.ResponseWriter`。但是这两个对象提供的接口粒度太细,比如我们要构造一个完整的响应,需要考虑消息头(Header)和消息体(Body),而 Header 包含了状态码(StatusCode),消息类型(ContentType)等几乎每次请求都需要设置的信息。因此,如果不进行有效的封装,那么框架的用户将需要写大量重复,繁杂的代码,而且容易出错。针对常用场景,能够高效地构造出 HTTP 响应是一个好的框架必须考虑的点。 + +用返回 JSON 数据作比较,感受下封装前后的差距。 + +封装前 + +``` +obj = map[string]interface{}{ + "name": "geektutu", + "password": "1234", +} +w.Header().Set("Content-Type", "application/json") +w.WriteHeader(http.StatusOK) +encoder := json.NewEncoder(w) +if err := encoder.Encode(obj); err != nil { + http.Error(w, err.Error(), 500) +} +``` + +VS 封装后: + +``` +c.JSON(http.StatusOK, gee.H{ + "username": c.PostForm("username"), + "password": c.PostForm("password"), +}) +``` + +1. 针对使用场景,封装`*http.Request`和`http.ResponseWriter`的方法,简化相关接口的调用,只是设计 Context 的原因之一。对于框架来说,还需要支撑额外的功能。例如,将来解析动态路由`/hello/:name`,参数`:name`的值放在哪呢?再比如,框架需要支持中间件,那中间件产生的信息放在哪呢?Context 随着每一个请求的出现而产生,请求的结束而销毁,和当前请求强相关的信息都应由 Context 承载。因此,设计 Context 结构,扩展性和复杂性留在了内部,而对外简化了接口。路由的处理函数,以及将要实现的中间件,参数都统一使用 Context 实例, Context 就像一次会话的百宝箱,可以找到任何东西。 +2. 其实 **Go** 中的 **Context** 就可以当做是 **Spring** 中的 **HttpServletRequest** 对象,每个请求都会创建一个,并且可以在整个请求过程中进行使用 + +### 具体实现 + +[day2-context/gee/context.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context) + +``` +type H map[string]interface{} + +type Context struct { + // origin objects + Writer http.ResponseWriter + Req *http.Request + // request info + Path string + Method string + // response info + StatusCode int +} + +func newContext(w http.ResponseWriter, req *http.Request) *Context { + return &Context{ + Writer: w, + Req: req, + Path: req.URL.Path, + Method: req.Method, + } +} + +func (c *Context) PostForm(key string) string { + return c.Req.FormValue(key) +} + +func (c *Context) Query(key string) string { + return c.Req.URL.Query().Get(key) +} + +func (c *Context) Status(code int) { + c.StatusCode = code + c.Writer.WriteHeader(code) +} + +func (c *Context) SetHeader(key string, value string) { + c.Writer.Header().Set(key, value) +} + +func (c *Context) String(code int, format string, values ...interface{}) { + c.SetHeader("Content-Type", "text/plain") + c.Status(code) + c.Writer.Write([]byte(fmt.Sprintf(format, values...))) +} + +func (c *Context) JSON(code int, obj interface{}) { + c.SetHeader("Content-Type", "application/json") + c.Status(code) + encoder := json.NewEncoder(c.Writer) + if err := encoder.Encode(obj); err != nil { + http.Error(c.Writer, err.Error(), 500) + } +} + +func (c *Context) Data(code int, data []byte) { + c.Status(code) + c.Writer.Write(data) +} + +func (c *Context) HTML(code int, html string) { + c.SetHeader("Content-Type", "text/html") + c.Status(code) + c.Writer.Write([]byte(html)) +} +``` + +- 代码最开头,给`map[string]interface{}`起了一个别名`gee.H`,构建JSON数据时,显得更简洁。 +- `Context`目前只包含了`http.ResponseWriter`和`*http.Request`,另外提供了对 Method 和 Path 这两个常用属性的直接访问。 +- 提供了访问Query和PostForm参数的方法。 +- 提供了快速构造String/Data/JSON/HTML响应的方法。 + +## 路由(Router) + +我们将和路由相关的方法和结构提取了出来,放到了一个新的文件中`router.go`,方便我们下一次对 router 的功能进行增强,例如提供动态路由的支持。 router 的 handle 方法作了一个细微的调整,即 handler 的参数,变成了 Context。 + +[day2-context/gee/router.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context) + +``` +type router struct { + handlers map[string]HandlerFunc +} + +func newRouter() *router { + return &router{handlers: make(map[string]HandlerFunc)} +} + +func (r *router) addRoute(method string, pattern string, handler HandlerFunc) { + log.Printf("Route %4s - %s", method, pattern) + key := method + "-" + pattern + r.handlers[key] = handler +} + +func (r *router) handle(c *Context) { + key := c.Method + "-" + c.Path + if handler, ok := r.handlers[key]; ok { + handler(c) + } else { + c.String(http.StatusNotFound, "404 NOT FOUND: %s\n", c.Path) + } +} +``` + +## 框架入口 + +[day2-context/gee/gee.go](https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context) + +``` +// HandlerFunc defines the request handler used by gee +type HandlerFunc func(*Context) + +// Engine implement the interface of ServeHTTP +type Engine struct { + router *router +} + +// New is the constructor of gee.Engine +func New() *Engine { + return &Engine{router: newRouter()} +} + +func (engine *Engine) addRoute(method string, pattern string, handler HandlerFunc) { + engine.router.addRoute(method, pattern, handler) +} + +// GET defines the method to add GET request +func (engine *Engine) GET(pattern string, handler HandlerFunc) { + engine.addRoute("GET", pattern, handler) +} + +// POST defines the method to add POST request +func (engine *Engine) POST(pattern string, handler HandlerFunc) { + engine.addRoute("POST", pattern, handler) +} + +// Run defines the method to start a http server +func (engine *Engine) Run(addr string) (err error) { + return http.ListenAndServe(addr, engine) +} + +func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) { + c := newContext(w, req) + engine.router.handle(c) +} +``` + +将`router`相关的代码独立后,`gee.go`简单了不少。最重要的还是通过实现了 ServeHTTP 接口,接管了所有的 HTTP 请求。相比第一天的代码,这个方法也有细微的调整,在调用 router.handle 之前,构造了一个 Context 对象。这个对象目前还非常简单,仅仅是包装了原来的两个参数,之后我们会慢慢地给Context插上翅膀。 + +如何使用,`main.go`一开始就已经亮相了。运行`go run main.go`,借助 curl ,一起看一看今天的成果吧。 + +``` +$ curl -i http://localhost:9999/ +HTTP/1.1 200 OK +Date: Mon, 12 Aug 2019 16:52:52 GMT +Content-Length: 18 +Content-Type: text/html; charset=utf-8 +

Hello Gee

+ +$ curl "http://localhost:9999/hello?name=geektutu" +hello geektutu, you're at /hello + +$ curl "http://localhost:9999/login" -X POST -d 'username=geektutu&password=1234' +{"password":"1234","username":"geektutu"} + +$ curl "http://localhost:9999/xxx" +404 NOT FOUND: /xxx +``` \ No newline at end of file diff --git "a/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/README.md" "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/README.md" new file mode 100644 index 00000000..5c3a72c7 --- /dev/null +++ "b/Golang/\344\270\203\345\244\251\347\224\250Go\345\256\236\347\216\260Web\346\241\206\346\236\266-Gee/README.md" @@ -0,0 +1,3 @@ +本教程来源于 极客兔兔 的 7天用Go从零实现Web框架Gee教程 + +> 地址:https://geektutu.com/post/gee.html \ No newline at end of file diff --git "a/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/13_StringTable/README.md" "b/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/13_StringTable/README.md" index c6945a1f..cb0c0b12 100644 --- "a/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/13_StringTable/README.md" +++ "b/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/13_StringTable/README.md" @@ -458,14 +458,14 @@ System.out.println(s == s2); // false String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; -System.out.println(s3 == s4); // true +System.out.println(s3 == s4); // false ``` 输出结果 ``` false -true +false ``` 为什么对象会不一样呢? @@ -495,7 +495,7 @@ System.out.println(s == s2); // true String s = new String("1"); s.intern(); String s2 = "1"; -System.out.println(s == s2); // true +System.out.println(s == s2); // false String s3 = new String("1") + new String("1"); s3.intern(); diff --git "a/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/2_\347\261\273\345\212\240\350\275\275\345\255\220\347\263\273\347\273\237/README.md" "b/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/2_\347\261\273\345\212\240\350\275\275\345\255\220\347\263\273\347\273\237/README.md" index a9cac44d..149717ac 100644 --- "a/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/2_\347\261\273\345\212\240\350\275\275\345\255\220\347\263\273\347\273\237/README.md" +++ "b/JVM/1_\345\206\205\345\255\230\344\270\216\345\236\203\345\234\276\345\233\236\346\224\266\347\257\207/2_\347\261\273\345\212\240\350\275\275\345\255\220\347\263\273\347\273\237/README.md" @@ -54,7 +54,7 @@ public class HelloLoader { ![image-20200705082601441](images/image-20200705082601441.png) -## 加载阶段 +### 加载阶段 通过一个类的全限定名获取定义此类的二进制字节流 diff --git a/JVM/README.md b/JVM/README.md index cb9a7862..d059928a 100644 --- a/JVM/README.md +++ b/JVM/README.md @@ -5,7 +5,6 @@

- ## 介绍 > 来源Bilibili尚硅谷宋红康老师JVM教程:[硅谷2020最新版宋红康JVM教程](https://www.bilibili.com/video/BV1PJ411n7xZ) @@ -14,23 +13,23 @@ ### 内存与垃圾回收篇 -- [JVM与Java体系结构](./1_内存与垃圾回收篇/1_JVM与Java体系结构) -- [类加载子系统](./1_内存与垃圾回收篇/2_类加载子系统) -- [运行时数据区概述及线程](./1_内存与垃圾回收篇/3_运行时数据区概述及线程) -- [程序计数器](./1_内存与垃圾回收篇/4_程序计数器) -- [虚拟机栈](./1_内存与垃圾回收篇/5_虚拟机栈) -- [本地方法接口](./1_内存与垃圾回收篇/6_本地方法接口) -- [本地方法栈](./1_内存与垃圾回收篇/7_本地方法栈) -- [堆](./1_内存与垃圾回收篇/8_堆) -- [方法区](./1_内存与垃圾回收篇/9_方法区) -- [对象实例化内存布局与访问定位](./1_内存与垃圾回收篇/10_对象实例化内存布局与访问定位) -- [直接内存](./1_内存与垃圾回收篇/11_直接内存) -- [执行引擎](./1_内存与垃圾回收篇/12_执行引擎) -- [StringTable](./1_内存与垃圾回收篇/13_StringTable) -- [垃圾回收概述](./1_内存与垃圾回收篇/14_垃圾回收概述) -- [垃圾回收相关算法](./1_内存与垃圾回收篇/15_垃圾回收相关算法) -- [垃圾回收相关概念](./1_内存与垃圾回收篇/16_垃圾回收相关概念) -- [垃圾回收器](./1_内存与垃圾回收篇/17_垃圾回收器) +- [JVM与Java体系结构](http://www.moguit.cn/info/428) +- [类加载子系统](http://www.moguit.cn/info/47) +- [运行时数据区概述及线程](http://www.moguit.cn/info/112) +- [程序计数器](http://www.moguit.cn/info/98) +- [虚拟机栈](http://www.moguit.cn/info/106) +- [本地方法接口](http://www.moguit.cn/info/407) +- [本地方法栈](http://www.moguit.cn/info/55) +- [堆](http://www.moguit.cn/info/196) +- [方法区](http://www.moguit.cn/info/420) +- [对象实例化内存布局与访问定位](http://www.moguit.cn/info/211) +- [直接内存](http://www.moguit.cn/info/424) +- [执行引擎](http://www.moguit.cn/info/100) +- [StringTable](http://www.moguit.cn/info/99) +- [垃圾回收概述](http://www.moguit.cn/info/410) +- [垃圾回收相关算法](http://www.moguit.cn/info/310) +- [垃圾回收相关概念](http://www.moguit.cn/info/269) +- [垃圾回收器](http://www.moguit.cn/info/36) ## 字节码与类的加载篇 diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/README.md" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/README.md" new file mode 100644 index 00000000..c48805bf --- /dev/null +++ "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/README.md" @@ -0,0 +1,407 @@ +在代码审核讨论的时候,我们有时会听到有关线程安全和并发工具的一些片面的观点和结论, + +比如“把 HashMap 改为 ConcurrentHashMap,就可以解决并发问题了呀”“要不我们试试无锁的 CopyOnWriteArrayList 吧,性能更好”。事实上,这些说法都不太准确。 + +的确,为了方便开发者进行多线程编程,现代编程语言会提供各种并发工具类。但如果我们没有充分了解它们的使用场景、解决的问题,以及最佳实践的话,盲目使用就可能会导致一些坑,小则损失性能,大则无法确保多线程情况下业务逻辑的正确性。 + +我需要先说明下,这里的并发工具类是指用来解决多线程环境下并发问题的工具类库。一般而言并发工具包括同步器和容器两大类,业务代码中使用并发容器的情况会多一些,我今天分享的例子也会侧重并发容器。 + +接下来,我们就看看在使用并发工具时,最常遇到哪些坑,以及如何解决、避免这些坑吧。 + +## **没有意识到线程重用导致用户信息错乱的**Bug + +之前有业务同学和我反馈,在生产上遇到一个诡异的问题,有时获取到的用户信息是别人的。查看代码后,我发现他使用了 **ThreadLocal** 来缓存获取到的用户信息。 + +我们知道,**ThreadLocal** 适用于变量在线程间隔离,而在方法或类间共享的场景。如果用户信息的获取比较昂贵(比如从数据库查询用户信息),那么在 ThreadLocal 中缓存数据是比较合适的做法。但,这么做为什么会出现用户信息错乱的 **Bug** 呢? + +我们看一个具体的案例吧。 + +使用 **Spring Boot** 创建一个 Web 应用程序,使用 **ThreadLocal** 存放一个 **Integer** 的值,来暂且代表需要在线程中保存的用户信息,这个值初始是 **null**。在业务逻辑中,我先从 **ThreadLocal** 获取一次值,然后把外部传入的参数设置到 **ThreadLocal** 中,来模拟从当前上 + +下文获取到用户信息的逻辑,随后再获取一次值,最后输出两次获得的值和线程名称。 + +```java +private static final ThreadLocal currentUser = ThreadLocal.withInitial(()) + +@GetMapping("wrong") +public Map wrong(@RequestParam("userId") Integer userId) { + //设置用户信息之前先查询一次ThreadLocal中的用户信息 + String before = Thread.currentThread().getName() + ":" + currentUser.get(); + //设置用户信息到ThreadLocal 9 currentUser.set(userId); 10 //设置用户信息之后再查询一次ThreadLocal中的用户信息 + String after = Thread.currentThread().getName() + ":" + currentUser.get(); + //汇总输出两次查询结果 + Map result = new HashMap(); + result.put("before", before); + result.put("after", after); + return result; +} +``` + +按理说,在设置用户信息之前第一次获取的值始终应该是 null,但我们要意识到,程序运行在 **Tomcat** 中,执行程序的线程是 Tomcat 的工作线程,而 Tomcat 的工作线程是基于线程池的。 + +**顾名思义,线程池会重用固定的几个线程,一旦线程重用,那么很可能首次从 ThreadLocal获取的值是之前其他用户的请求遗留的值。这时,ThreadLocal 中的用户信息就是其他用户的信息。** + +为了更快地重现这个问题,我在配置文件中设置一下 **Tomcat** 的参数,把工作线程池最大线程数设置为 1,这样始终是同一个线程在处理请求: + +```bash +server.tomcat.max-threads=1 +``` + +运行程序后先让 **用户1** 来请求接口,可以看到第一和第二次获取到用户 **ID** 分别是 **null** 和 **1**,符合预期: + +![image-20220514214512266](images/image-20220514214512266.png) + +随后 **用户 2** 来请求接口,这次就出现了 Bug,第一和第二次获取到用户 **ID** 分别是 **1** 和 **2**,显然第一次获取到了用户 **1** 的信息,原因就是 **Tomcat** 的线程池重用了线程。从图中可以看到,两次请求的线程都是同一个线程:**http-nio-8080-exec-1**。 + +![image-20220514214623717](images/image-20220514214623717.png) + +这个例子告诉我们,在写业务代码时,首先要理解代码会跑在什么线程上: + +- 我们可能会抱怨学多线程没用,因为代码里没有开启使用多线程。但其实,可能只是我们没有意识到,在 Tomcat 这种 Web 服务器下跑的业务代码,本来就运行在一个多线程环境(否则接口也不可能支持这么高的并发),**并不能认为没有显式开启多线程就不会有线程安全问题**。 + +- 因为线程的创建比较昂贵,所以 Web 服务器往往会使用线程池来处理请求,这就意味着线程会被重用。这时,**使用类似 ThreadLocal 工具来存放一些数据时,需要特别注意在代码运行完后,显式地去清空设置的数据**。如果在代码中使用了自定义的线程池,也同样会遇到这个问题。 + +理解了这个知识点后,我们修正这段代码的方案是,在代码的 **finally** 代码块中,显式清除 **ThreadLocal** 中的数据。这样一来,新的请求过来即使使用了之前的线程也不会获取到错误的用户信息了。修正后的代码如下: + +```java +@GetMapping("right") public Map right(@RequestParam("userId") Integer userId){ + String before = Thread.currentThread().getName() + ":" + currentUser.get(); + currentUser.set(userId); + try + { + String after = Thread.currentThread().getName() + ":" + currentUser.get() Map result = new HashMap(); + result.put("before", before); + result.put("after", after); + return result; + } + finally + { //在finally代码块中删除ThreadLocal中的数据,确保数据不串 + currentUser.remove(); + } +} +``` + +重新运行程序可以验证,再也不会出现第一次查询用户信息查询到之前用户请求的 **Bug**: + +![image-20220514215302118](images/image-20220514215302118.png) + +**ThreadLocal** 是利用独占资源的方式,来解决线程安全问题,那如果我们确实需要有资源在线程之间共享,应该怎么办呢?这时,我们可能就需要用到线程安全的容器了。 + +## **使用了线程安全的并发工具,并不代表解决了所有线程安全问题** + +**JDK 1.5** 后推出的 ConcurrentHashMap,是一个高性能的线程安全的哈希表容器。“线程安全”这四个字特别容易让人误解,因为 **ConcurrentHashMap 只能保证提供的原子性读写操作是线程安全的。** + +我在相当多的业务代码中看到过这个误区,比如下面这个场景。有一个含 **900** 个元素的 **Map**,现在再补充 **100** 个元素进去,这个补充操作由 **10** 个线程并发进行。开发人员误以为使用了 **ConcurrentHashMap** 就不会有线程安全问题,于是不加思索地写出了下面的代码: + +在每一个线程的代码逻辑中先通过 **size** 方法拿到当前元素数量,计算 **ConcurrentHashMap** 目前还需要补充多少元素,并在日志中输出了这个值,然后通过 **putAll** 方法把缺少的元素添加进去。 + +为方便观察问题,我们输出了这个 **Map** 一开始和最后的元素个数。 + +```java +//线程个数 +private static int THREAD_COUNT = 10; +//总元素数量 +private static int ITEM_COUNT = 1000; +//帮助方法,用来获得一个指定元素数量模拟数据的ConcurrentHashMap +private ConcurrentHashMap < String, Long > getData(int count){ + return LongStream.rangeClosed(1, count) 9. boxed() 10. collect(Collectors.toConcurrentMap(i - > UUID.randomUUID().toString() 11(o1, o2) - > o1, ConcurrentHashMap::new)); +} + +@GetMapping("wrong") 15 public String wrong() throws InterruptedException +{ + ConcurrentHashMap < String, Long > concurrentHashMap = getData(ITEM_COUNT - 100) 17 //初始900个元素 + log.info("init size:{}", concurrentHashMap.size()); + ForkJoinPool forkJoinPool = new ForkJoinPool(THREAD_COUNT); + //使用线程池并发处理逻辑 + forkJoinPool.execute(() - > IntStream.rangeClosed(1, 10).parallel().forEach(i + //查询还需要补充多少个元素 + int gap = ITEM_COUNT - concurrentHashMap.size(); + log.info("gap size:{}", gap); + //补充元素 + concurrentHashMap.putAll(getData(gap)); + })); + //等待所有任务完成 + forkJoinPool.shutdown(); + forkJoinPool.awaitTermination(1, TimeUnit.HOURS); + //最后元素个数会是1000吗? + log.info("finish size:{}", concurrentHashMap.size()); + return "OK"; +} +``` + +访问接口后程序输出的日志内容如下: + +![image-20220514215723352](images/image-20220514215723352.png) + +从日志中可以看到: + +- 初始大小 900 符合预期,还需要填充 100 个元素。 +- worker1 线程查询到当前需要填充的元素为 36,竟然还不是 100 的倍数。 +- worker13 线程查询到需要填充的元素数是负的,显然已经过度填充了。 +- 最后 HashMap 的总项目数是 1536,显然不符合填充满 1000 的预期。 + +针对这个场景,我们可以举一个形象的例子。ConcurrentHashMap 就像是一个大篮子,现在这个篮子里有 900 个桔子,我们期望把这个篮子装满 1000 个桔子,也就是再装 100 个桔子。有 10 个工人来干这件事儿,大家先后到岗后会计算还需要补多少个桔子进去,最后把桔子装入篮子。 + +ConcurrentHashMap 这个篮子本身,可以确保多个工人在装东西进去时,不会相互影响干扰,但无法确保工人 A 看到还需要装 100 个桔子但是还未装的时候,工人 B 就看不到篮子中的桔子数量。更值得注意的是,你往这个篮子装 100 个桔子的操作不是原子性的,在别人看来可能会有一个瞬间篮子里有 964 个桔子,还需要补 36 个桔子。 + +回到 ConcurrentHashMap,我们需要注意 **ConcurrentHashMap 对外提供的方法或能力的限制**: + +- 使用了 ConcurrentHashMap,不代表对它的多个操作之间的状态是一致的,是没有其他线程在操作它的,如果需要确保需要手动加锁。 +- 诸如 size、isEmpty 和 containsValue 等聚合方法,在并发情况下可能会反映ConcurrentHashMap 的中间状态。因此在并发情况下,这些方法的返回值只能用作参考,而不能用于流程控制。显然,利用 size 方法计算差异值,是一个流程控制。 +- 诸如 putAll 这样的聚合方法也不能确保原子性,在 putAll 的过程中去获取数据可能会获取到部分数据。 + +代码的修改方案很简单,整段逻辑加锁即可: + +```java +@GetMapping("right") +publicStringright()throwsInterruptedException{ + ConcurrentHashMapconcurrentHashMap=getData(ITEM_COUNT-10log.info("initsize:{}",concurrentHashMap.size()); + ForkJoinPoolforkJoinPool=newForkJoinPool(THREAD_COUNT); + forkJoinPool.execute(()->IntStream.rangeClosed(1,10).parallel().forEach + //下面的这段复合逻辑需要锁一下这个ConcurrentHashMap + synchronized(concurrentHashMap){ + intgap=ITEM_COUNT-concurrentHashMap.size(); + log.info("gapsize:{}",gap); + concurrentHashMap.putAll(getData(gap)); + } + })); + forkJoinPool.shutdown(); + forkJoinPool.awaitTermination(1,TimeUnit.HOURS); + log.info("finishsize:{}",concurrentHashMap.size()); + return"OK"; +} +``` + +重新调用接口,程序的日志输出结果符合预期: + +![image-20220514220033215](images/image-20220514220033215.png) + +可以看到,只有一个线程查询到了需要补 100 个元素,其他 9 个线程查询到不需要补元素,最后 Map 大小为 1000。 + +到了这里,你可能又要问了,使用 ConcurrentHashMap 全程加锁,还不如使用普通的HashMap 呢。 + +其实不完全是这样。 + +ConcurrentHashMap 提供了一些原子性的简单复合逻辑方法,用好这些方法就可以发挥其威力。这就引申出代码中常见的另一个问题:在使用一些类库提供的高级工具类时,开发人员可能还是按照旧的方式去使用这些新类,因为没有使用其特性,所以无法发挥其威力。 + +## 没有充分了解并发工具的特性,从而无法发挥其威力 + +- 我们来看一个使用 Map 来统计 Key 出现次数的场景吧,这个逻辑在业务代码中非常常见。 + +- 使用 ConcurrentHashMap 来统计,Key 的范围是 10。 + +- 使用最多 10 个并发,循环操作 1000 万次,每次操作累加随机的 Key。 + +- 如果 Key 不存在的话,首次设置值为 1。 + +代码如下: + +```java +//循环次数 +privatestaticintLOOP_COUNT=10000000; +//线程数量 +privatestaticintTHREAD_COUNT=10; +//元素数量 +privatestaticintITEM_COUNT=1000; +privateMapnormaluse()throwsInterruptedException{ + ConcurrentHashMapfreqs=newConcurrentHashMap<>(ITEM_COUNT)ForkJoinPoolforkJoinPool=newForkJoinPool(THREAD_COUNT); + forkJoinPool.execute(()->IntStream.rangeClosed(1,LOOP_COUNT).parallel() + //获得一个随机的Key + Stringkey="item"+ThreadLocalRandom.current().nextint(ITEM_COUNT); + synchronized(freqs){ + if(freqs.containsKey(key)){ + //Key存在则+1 + freqs.put(key,freqs.get(key)+1); + } else{ + //Key不存在则初始化为1 + freqs.put(key,1L); + } + } + } + )); + forkJoinPool.shutdown(); + forkJoinPool.awaitTermination(1,TimeUnit.HOURS); + returnfreqs; +} +``` + +我们吸取之前的教训,直接通过锁的方式锁住 Map,然后做判断、读取现在的累计值、加1、保存累加后值的逻辑。这段代码在功能上没有问题,但无法充分发挥ConcurrentHashMap 的威力,改进后的代码如下: + +```java +privateMapgooduse()throwsInterruptedException{ + ConcurrentHashMapfreqs=newConcurrentHashMap<>(ITEM_CForkJoinPoolforkJoinPool=newForkJoinPool(THREAD_COUNT); + forkJoinPool.execute(()->IntStream.rangeClosed(1,LOOP_COUNT).parallel() + Stringkey="item"+ThreadLocalRandom.current().nextint(ITEM_COUNT); + //利用computeIfAbsent()方法来实例化LongAdder,然后利用LongAdder来进行 + freqs.computeIfAbsent(key,k->newLongAdder()).increment(); + } + )); + forkJoinPool.shutdown(); + forkJoinPool.awaitTermination(1,TimeUnit.HOURS); + //因为我们的Value是LongAdder而不是Long,所以需要做一次转换才能返回 + returnfreqs.entrySet().stream() + .collect(Collectors.toMap( + e->e.getKey(), + e->e.getValue().longValue()) + ); +} +``` + +在这段改进后的代码中,我们巧妙利用了下面两点: + +使用 ConcurrentHashMap 的原子性方法 computeIfAbsent 来做复合逻辑操作,判断Key 是否存在 Value,如果不存在则把 Lambda 表达式运行后的结果放入 Map 作为Value,也就是新创建一个 LongAdder 对象,最后返回 Value。 +由于 computeIfAbsent 方法返回的 Value 是 LongAdder,是一个线程安全的累加器,因此可以直接调用其 increment 方法进行累加。 +这样在确保线程安全的情况下达到极致性能,把之前 7 行代码替换为了 1 行。 + +我们通过一个简单的测试比较一下修改前后两段代码的性能: + + +```java +@GetMapping("good") +publicStringgood()throwsInterruptedException{ + StopWatchstopWatch=newStopWatch(); + stopWatch.start("normaluse"); + Mapnormaluse=normaluse(); + stopWatch.stop(); + //校验元素数量 + Assert.isTrue(normaluse.size()==ITEM_COUNT,"normalusesizeerror"); + //校验累计总数 + Assert.isTrue(normaluse.entrySet().stream() + .mapToLong(item->item.getValue()).reduce(0,Long::sum)== + ,"normalusecounterror"); + stopWatch.start("gooduse"); + Mapgooduse=gooduse(); + stopWatch.stop(); + Assert.isTrue(gooduse.size()==ITEM_COUNT,"goodusesizeerror"); + Assert.isTrue(gooduse.entrySet().stream() + .mapToLong(item->item.getValue()) + .reduce(0,Long::sum)==LOOP_COUNT + ,"goodusecounterror"); + log.info(stopWatch.prettyPrint()); + return"OK"; +} +``` + +这段测试代码并无特殊之处,使用 StopWatch 来测试两段代码的性能,最后跟了一个断言判断 Map 中元素的个数以及所有 Value 的和,是否符合预期来校验代码的正确性。测试结果如下: + +![image-20220514220157751](images/image-20220514220157751.png) + +可以看到,优化后的代码,相比使用锁来操作 ConcurrentHashMap 的方式,性能提升了 10 倍。 + +你可能会问,computeIfAbsent 为什么如此高效呢? + +答案就在源码最核心的部分,也就是 Java 自带的 Unsafe 实现的 CAS。它在虚拟机层面确保了写入数据的原子性,比加锁的效率高得多: + +```java +staticfinalbooleancasTabAt(Node[]tab,inti, + Nodec,Nodev){ + returnU.compareAndSetObject(tab,((long)i<copyOnWriteArrayList=newCopyOnWriteArrayList<>();ListsynchronizedList=Collections.synchronizedList(newArrayListStopWatchstopWatch=newStopWatch(); + intloopCount=100000; + stopWatch.start("Write:copyOnWriteArrayList"); + //循环100000次并发往CopyOnWriteArrayList写入随机元素 + IntStream.rangeClosed(1,loopCount).parallel().forEach(__->copyOnWriteAr + stopWatch.stop(); + stopWatch.start("Write:synchronizedList"); + //循环100000次并发往加锁的ArrayList写入随机元素 + IntStream.rangeClosed(1,loopCount).parallel().forEach(__->synchronizedListopWatch.stop(); + log.info(stopWatch.prettyPrint()); + Mapresult=newHashMap(); + result.put("copyOnWriteArrayList",copyOnWriteArrayList.size()); + result.put("synchronizedList",synchronizedList.size()); + returnresult; +} +//帮助方法用来填充List +privatevoidaddAll(Listlist){ + list.addAll(IntStream.rangeClosed(1,1000000).boxed().collect(Collectors.to +} +//测试并发读的性能 +@GetMapping("read") +publicMaptestRead(){ + //创建两个测试对象 + ListcopyOnWriteArrayList=newCopyOnWriteArrayList<>();ListsynchronizedList=Collections.synchronizedList(newArrayList//填充数据 + addAll(copyOnWriteArrayList); + addAll(synchronizedList); + StopWatchstopWatch=newStopWatch(); + intloopCount=1000000; + intcount=copyOnWriteArrayList.size(); + stopWatch.start("Read:copyOnWriteArrayList"); + //循环1000000次并发从CopyOnWriteArrayList随机查询元素 + IntStream.rangeClosed(1,loopCount).parallel().forEach(__->copyOnWriteArstopWatch.stop(); + stopWatch.start("Read:synchronizedList"); + //循环1000000次并发从加锁的ArrayList随机查询元素 + IntStream.range(0,loopCount).parallel().forEach(__->synchronizedList.getstopWatch.stop(); + log.info(stopWatch.prettyPrint()); + Mapresult=newHashMap(); + result.put("copyOnWriteArrayList",copyOnWriteArrayList.size()); + result.put("synchronizedList",synchronizedList.size()); + returnresult; +} +``` + +运行程序可以看到,**大量写的场景(10 万次 add 操作),CopyOnWriteArray 几乎比同步的 ArrayList 慢一百倍**: + +![image-20220514220243945](images/image-20220514220243945.png) + +而在大量读的场景下(100 万次 get 操作),CopyOnWriteArray 又比同步的 ArrayList快五倍以上: + +![image-20220514220304455](images/image-20220514220304455.png) + +你可能会问,为何在大量写的场景下,CopyOnWriteArrayList 会这么慢呢? + +答案就在源码中。以 add 方法为例,每次 add 时,都会用 Arrays.copyOf 创建一个新数组,频繁 add 时内存的申请释放消耗会很大: + +```java +/** +*Appendsthespecifiedelementtotheendofthislist. +* +*@parameelementtobeappendedtothislist +*@return{@codetrue}(asspecifiedby{@linkCollection#add}) +*/ +publicbooleanadd(Ee){ + synchronized(lock){ + Object[]elements=getArray(); + intlen=elements.length; + Object[]newElements=Arrays.copyOf(elements,len+1);newElements[len]=e; + setArray(newElements); + returntrue; + } +} +``` + +## 总结 + +本文主要分享了开发人员使用并发工具来解决线程安全问题时容易犯的四类错。 + +- 一是,只知道使用并发工具,但并不清楚当前线程的来龙去脉,解决多线程问题却不了解线程。比如,使用 ThreadLocal 来缓存数据,以为 ThreadLocal 在线程之间做了隔离不会有线程安全问题,没想到线程重用导致数据串了。请务必记得,在业务逻辑结束之前清理ThreadLocal 中的数据。 + +- 二是,误以为使用了并发工具就可以解决一切线程安全问题,期望通过把线程不安全的类替换为线程安全的类来一键解决问题。比如,认为使用了 ConcurrentHashMap 就可以解决线程安全问题,没对复合逻辑加锁导致业务逻辑错误。如果你希望在一整段业务逻辑中,对容器的操作都保持整体一致性的话,需要加锁处理。 + +- 三是,没有充分了解并发工具的特性,还是按照老方式使用新工具导致无法发挥其性能。比如,使用了 ConcurrentHashMap,但没有充分利用其提供的基于 CAS 安全的方法,还是使用锁的方式来实现逻辑。 + 四是,没有了解清楚工具的适用场景,在不合适的场景下使用了错误的工具导致性能更差。比如,没有理解 CopyOnWriteArrayList 的适用场景,把它用在了读写均衡或者大量写操作的场景下,导致性能问题。对于这种场景,你可以考虑是用普通的 List。 + 其实,这四类坑之所以容易踩到,原因可以归结为,我们在使用并发工具的时候,并没有充分理解其可能存在的问题、适用场景等。所以最后,我还要和你分享两点建议: + +一定要认真阅读官方文档(比如 Oracle JDK 文档)。充分阅读官方文档,理解工具的适用场景及其 API 的用法,并做一些小实验。了解之后再去使用,就可以避免大部分坑。 + +如果你的代码运行在多线程环境下,那么就会有并发问题,并发问题不那么容易重现,可能需要使用压力测试模拟并发场景,来发现其中的 Bug 或性能问题。 diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214512266.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214512266.png" new file mode 100644 index 00000000..5c85041c Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214512266.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214623717.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214623717.png" new file mode 100644 index 00000000..6b381620 Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514214623717.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215302118.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215302118.png" new file mode 100644 index 00000000..0847cd25 Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215302118.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215723352.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215723352.png" new file mode 100644 index 00000000..1402e590 Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514215723352.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220033215.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220033215.png" new file mode 100644 index 00000000..c50c225a Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220033215.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220157751.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220157751.png" new file mode 100644 index 00000000..d9d9966f Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220157751.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220243945.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220243945.png" new file mode 100644 index 00000000..91edcaea Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220243945.png" differ diff --git "a/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220304455.png" "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220304455.png" new file mode 100644 index 00000000..420cec82 Binary files /dev/null and "b/Java/1_\344\275\277\347\224\250\344\272\206\345\271\266\345\217\221\345\267\245\345\205\267\347\261\273\345\272\223\357\274\214\347\272\277\347\250\213\345\256\211\345\205\250\345\260\261\351\253\230\346\236\225\346\227\240\345\277\247\344\272\206\345\220\227\357\274\237/images/image-20220514220304455.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/README.md" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/README.md" new file mode 100644 index 00000000..4a19c71e --- /dev/null +++ "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/README.md" @@ -0,0 +1,382 @@ +今天,我们来看看解决线程安全问题的另一种重要手段—**锁**,在使用上比较容易犯哪些错。 + +我先和你分享一个有趣的案例吧。有一天,一位同学在群里说“见鬼了,疑似遇到了一个 **JVM** 的 **Bug**”,我们都很好奇是什么 **Bug**。 + +于是,他贴出了这样一段代码:在一个类里有两个 **int** 类型的字段 a 和 **b**,有一个 add 方法循环 **1** 万次对 a 和 **b** 进行 ++ 操作,有另一个 compare 方法,同样循环 1 万次判断 a 是否小于 b,条件成立就打印 a 和 b 的值,并判断 a>b 是否成立。 + +``` +@Slf4j +public class Interesting { + volatile int a = 1; + volatile int b = 1; + public void add() { + + log.info("add start"); + for (int i = 0; i < 10000; i++) { + a++; + b++; + } + log.info("add done"); + } + + public void compare() { + log.info("compare start"); + for (int i = 0; i < 10000; i++) { + //a始终等于b吗? + if (a < b) { + log.info("a:{},b:{},{}", a, b, a > b); + //最后的a>b应该始终是false吗? + } + } + log.info("compare done"); + } +} +``` + +他起了两个线程来分别执行 add 和 compare 方法: + +``` +Interesting interesting = new Interesting(); +new Thread(() -> interesting.add()).start(); +new Thread(() -> interesting.compare()).start(); +``` + +按道理,a 和 b 同样进行累加操作,应该始终相等,compare 中的第一次判断应该始终不会成立,不会输出任何日志。但,执行代码后发现不但输出了日志,而且更诡异的是,compare 方法在判断 ab 也成立: + +![img](images/9ec61aada64ac6d38681dd199c0ee61d.png) + +群里一位同学看到这个问题笑了,说:“这哪是 JVM 的 Bug,分明是线程安全问题嘛。很明显,你这是在操作两个字段 a 和 b,有线程安全问题,应该为 add 方法加上锁,确保 a 和 b 的 ++ 是原子性的,就不会错乱了。”随后,他为 add 方法加上了锁: + +``` +public synchronized void add() +``` + +但,加锁后问题并没有解决。 + +我们来仔细想一下,为什么锁可以解决线程安全问题呢。因为只有一个线程可以拿到锁,所以加锁后的代码中的资源操作是线程安全的。但是,这个案例中的 add 方法始终只有一个线程在操作,显然只为 add 方法加锁是没用的。 + +之所以出现这种错乱,是因为两个线程是交错执行 add 和 compare 方法中的业务逻辑,而且这些业务逻辑不是原子性的:a++ 和 b++ 操作中可以穿插在 compare 方法的比较代码中;更需要注意的是,a new Data().wrong()); + return Data.getCounter(); + +} +``` + +因为默认运行 100 万次,所以执行后应该输出 100 万,但页面输出的是 639242: + +![img](images/777f520e9d0be89b66e814d3e7c1a30b.png) + +我们来分析下为什么会出现这个问题吧。 + +在非静态的 wrong 方法上加锁,只能确保多个线程无法执行同一个实例的 wrong 方法,却不能保证不会执行不同实例的 wrong 方法。而静态的 counter 在多个实例中共享,所以必然会出现线程安全问题。 + +理清思路后,修正方法就很清晰了:同样在类中定义一个 Object 类型的静态字段,在操作 counter 之前对这个字段加锁。 + +``` +class Data { + + @Getter + private static int counter = 0; + private static Object locker = new Object(); + public void right() { + synchronized (locker) { + counter++; + } + } + +} +``` + +你可能要问了,把 wrong 方法定义为静态不就可以了,这个时候锁是类级别的。可以是可以,但我们不可能为了解决线程安全问题改变代码结构,把实例方法改为静态方法。 + +感兴趣的同学还可以从字节码以及 JVM 的层面继续探索一下,代码块级别的 synchronized 和方法上标记 synchronized 关键字,在实现上有什么区别。 + +## 加锁要考虑锁的粒度和场景问题 + +在方法上加 synchronized 关键字实现加锁确实简单,也因此我曾看到一些业务代码中几乎所有方法都加了 synchronized,但这种滥用 synchronized 的做法: + +一是,没必要。通常情况下 60% 的业务代码是三层架构,数据经过无状态的 Controller、Service、Repository 流转到数据库,没必要使用 synchronized 来保护什么数据。 + +二是,可能会极大地降低性能。使用 Spring 框架时,默认情况下 Controller、Service、Repository 是单例的,加上 synchronized 会导致整个程序几乎就只能支持单线程,造成极大的性能问题。 + +即使我们确实有一些共享资源需要保护,也要尽可能降低锁的粒度,仅对必要的代码块甚至是需要保护的资源本身加锁。 + +比如,在业务代码中,有一个 ArrayList 因为会被多个线程操作而需要保护,又有一段比较耗时的操作(代码中的 slow 方法)不涉及线程安全问题,应该如何加锁呢? + +错误的做法是,给整段业务逻辑加锁,把 slow 方法和操作 ArrayList 的代码同时纳入 synchronized 代码块;更合适的做法是,把加锁的粒度降到最低,只在操作 ArrayList 的时候给这个 ArrayList 加锁。 + +``` +private List data = new ArrayList<>(); + +//不涉及共享资源的慢方法 + +private void slow() { + + try { + TimeUnit.MILLISECONDS.sleep(10); + } catch (InterruptedException e) { + } + +} + +//错误的加锁方法 + +@GetMapping("wrong") +public int wrong() { + long begin = System.currentTimeMillis(); + IntStream.rangeClosed(1, 1000).parallel().forEach(i -> { + + //加锁粒度太粗了 + synchronized (this) { + slow(); + data.add(i); + } + }); + + log.info("took:{}", System.currentTimeMillis() - begin); + return data.size(); + +} + +//正确的加锁方法 + +@GetMapping("right") +public int right() { + long begin = System.currentTimeMillis(); + IntStream.rangeClosed(1, 1000).parallel().forEach(i -> { + slow(); + //只对List加锁 + synchronized (data) { + data.add(i); + } + }); + + log.info("took:{}", System.currentTimeMillis() - begin); + return data.size(); + +} +``` + +执行这段代码,同样是 1000 次业务操作,正确加锁的版本耗时 1.4 秒,而对整个业务逻辑加锁的话耗时 11 秒。 + +![img](images/1cb278c010719ee00d988dbb2a42c543.png) + +如果精细化考虑了锁应用范围后,性能还无法满足需求的话,我们就要考虑另一个维度的粒度问题了,即:区分读写场景以及资源的访问冲突,考虑使用悲观方式的锁还是乐观方式的锁。 + +一般业务代码中,很少需要进一步考虑这两种更细粒度的锁,所以我只和你分享几个大概的结论,你可以根据自己的需求来考虑是否有必要进一步优化: + +对于读写比例差异明显的场景,考虑使用 ReentrantReadWriteLock 细化区分读写锁,来提高性能。 + +如果你的 JDK 版本高于 1.8、共享资源的冲突概率也没那么大的话,考虑使用 StampedLock 的乐观读的特性,进一步提高性能。 + +JDK 里 ReentrantLock 和 ReentrantReadWriteLock 都提供了公平锁的版本,在没有明确需求的情况下不要轻易开启公平锁特性,在任务很轻的情况下开启公平锁可能会让性能下降上百倍。 + +## 多把锁要小心死锁问题 + +刚才我们聊到锁的粒度够用就好,这就意味着我们的程序逻辑中有时会存在一些细粒度的锁。但一个业务逻辑如果涉及多把锁,容易产生死锁问题。 + +之前我遇到过这样一个案例:下单操作需要锁定订单中多个商品的库存,拿到所有商品的锁之后进行下单扣减库存操作,全部操作完成之后释放所有的锁。代码上线后发现,下单失败概率很高,失败后需要用户重新下单,极大影响了用户体验,还影响到了销量。 + +经排查发现是死锁引起的问题,背后原因是扣减库存的顺序不同,导致并发的情况下多个线程可能相互持有部分商品的锁,又等待其他线程释放另一部分商品的锁,于是出现了死锁问题。 + +接下来,我们剖析一下核心的业务代码。 + +首先,定义一个商品类型,包含商品名、库存剩余和商品的库存锁三个属性,每一种商品默认库存 1000 个;然后,初始化 10 个这样的商品对象来模拟商品清单: + +``` +@Data +@RequiredArgsConstructor +static class Item { + + final String name; //商品名 + int remaining = 1000; //库存剩余 + @ToString.Exclude //ToString不包含这个字段 + ReentrantLock lock = new ReentrantLock(); + +} +``` + +随后,写一个方法模拟在购物车进行商品选购,每次从商品清单(items 字段)中随机选购三个商品(为了逻辑简单,我们不考虑每次选购多个同类商品的逻辑,购物车中不体现商品数量): + +``` +private List createCart() { + return IntStream.rangeClosed(1, 3) + .mapToObj(i -> "item" + ThreadLocalRandom.current().nextInt(items.size())) + .map(name -> items.get(name)).collect(Collectors.toList()); + +} +``` + +下单代码如下:先声明一个 List 来保存所有获得的锁,然后遍历购物车中的商品依次尝试获得商品的锁,最长等待 10 秒,获得全部锁之后再扣减库存;如果有无法获得锁的情况则解锁之前获得的所有锁,返回 false 下单失败。 + +``` +private boolean createOrder(List order) { + + //存放所有获得的锁 + List locks = new ArrayList<>(); + for (Item item : order) { + try { + //获得锁10秒超时 + if (item.lock.tryLock(10, TimeUnit.SECONDS)) { + locks.add(item.lock); + } else { + locks.forEach(ReentrantLock::unlock); + return false; + } + } catch (InterruptedException e) { + + } + } + + //锁全部拿到之后执行扣减库存业务逻辑 + try { + order.forEach(item -> item.remaining--); + } finally { + locks.forEach(ReentrantLock::unlock); + } + return true; +} +``` + +我们写一段代码测试这个下单操作。模拟在多线程情况下进行 100 次创建购物车和下单操作,最后通过日志输出成功的下单次数、总剩余的商品个数、100 次下单耗时,以及下单完成后的商品库存明细: + +``` +@GetMapping("wrong") +public long wrong() { + long begin = System.currentTimeMillis(); + //并发进行100次下单操作,统计成功次数 + long success = IntStream.rangeClosed(1, 100).parallel() + .mapToObj(i -> { + List cart = createCart(); + return createOrder(cart); + }) + + .filter(result -> result) + .count(); + + log.info("success:{} totalRemaining:{} took:{}ms items:{}", + success, + items.entrySet().stream().map(item -> item.getValue().remaining).reduce(0, Integer::sum), + System.currentTimeMillis() - begin, items); + return success; + +} +``` + +运行程序,输出如下日志: + +![img](images/141a5ed915e08e50c0f6b066bea36e05.png) + +可以看到,100 次下单操作成功了 65 次,10 种商品总计 10000 件,库存总计为 9805,消耗了 195 件符合预期(65 次下单成功,每次下单包含三件商品),总耗时 50 秒。 + +为什么会这样呢? + +使用 JDK 自带的 VisualVM 工具来跟踪一下,重新执行方法后不久就可以看到,线程 Tab 中提示了死锁问题,根据提示点击右侧线程 Dump 按钮进行线程抓取操作: + +![img](images/ff24ac10bd0635ef4bf5987038b622ce.png) + +查看抓取出的线程栈,在页面中部可以看到如下日志: + +![img](images/c32cb32eb5433aae3b392738a80bca42.png) + +显然,是出现了死锁,线程 4 在等待的一个锁被线程 3 持有,线程 3 在等待的另一把锁被线程 4 持有。 + +那为什么会有死锁问题呢? + +我们仔细回忆一下购物车添加商品的逻辑,随机添加了三种商品,假设一个购物车中的商品是 item1 和 item2,另一个购物车中的商品是 item2 和 item1,一个线程先获取到了 item1 的锁,同时另一个线程获取到了 item2 的锁,然后两个线程接下来要分别获取 item2 和 item1 的锁,这个时候锁已经被对方获取了,只能相互等待一直到 10 秒超时。 + +其实,避免死锁的方案很简单,为购物车中的商品排一下序,让所有的线程一定是先获取 item1 的锁然后获取 item2 的锁,就不会有问题了。所以,我只需要修改一行代码,对 createCart 获得的购物车按照商品名进行排序即可: + +``` +@GetMapping("right") +public long right() { + ... + long success = IntStream.rangeClosed(1, 100).parallel() + .mapToObj(i -> { + List cart = createCart().stream() + .sorted(Comparator.comparing(Item::getName)) + .collect(Collectors.toList()); + return createOrder(cart); + }) + .filter(result -> result) + .count(); + ... + return success; + +} +``` + +测试一下 right 方法,不管执行多少次都是 100 次成功下单,而且性能相当高,达到了 3000 以上的 TPS: + +![img](images/a41d077eeecc8b922503409d13a465e4.png) + +这个案例中,虽然产生了死锁问题,但因为尝试获取锁的操作并不是无限阻塞的,所以没有造成永久死锁,之后的改进就是避免循环等待,通过对购物车的商品进行排序来实现有顺序的加锁,避免循环等待。 + +## 重点回顾 + +我们一起总结回顾下,使用锁来解决多线程情况下线程安全问题的坑吧。 + +第一,使用 synchronized 加锁虽然简单,但我们首先要弄清楚共享资源是类还是实例级别的、会被哪些线程操作,synchronized 关联的锁对象或方法又是什么范围的。 + +第二,加锁尽可能要考虑粒度和场景,锁保护的代码意味着无法进行多线程操作。对于 Web 类型的天然多线程项目,对方法进行大范围加锁会显著降级并发能力,要考虑尽可能地只为必要的代码块加锁,降低锁的粒度;而对于要求超高性能的业务,还要细化考虑锁的读写场景,以及悲观优先还是乐观优先,尽可能针对明确场景精细化加锁方案,可以在适当的场景下考虑使用 ReentrantReadWriteLock、StampedLock 等高级的锁工具类。 + +第三,业务逻辑中有多把锁时要考虑死锁问题,通常的规避方案是,避免无限等待和循环等待。 + +此外,如果业务逻辑中锁的实现比较复杂的话,要仔细看看加锁和释放是否配对,是否有遗漏释放或重复释放的可能性;并且对于分布式锁要考虑锁自动超时释放了,而业务逻辑却还在进行的情况下,如果别的线线程或进程拿到了相同的锁,可能会导致重复执行。 + +为演示方便,今天的案例是在 Controller 的逻辑中开新的线程或使用线程池进行并发模拟,我们当然可以意识到哪些对象是并发操作的。但对于 Web 应用程序的天然多线程场景,你可能更容易忽略这点,并且也可能因为误用锁降低应用整体的吞吐量。如果你的业务代码涉及复杂的锁操作,强烈建议 Mock 相关外部接口或数据库操作后对应用代码进行压测,通过压测排除锁误用带来的性能问题和死锁问题。 + +今天用到的代码,我都放在了 GitHub 上,你可以点击这个链接查看。 + +## 思考与讨论 + +本文开头的例子里,变量 a、b 都使用了 volatile 关键字,你知道原因吗?我之前遇到过这样一个坑:我们开启了一个线程无限循环来跑一些任务,有一个 bool 类型的变量来控制循环的退出,默认为 true 代表执行,一段时间后主线程将这个变量设置为了 false。如果这个变量不是 volatile 修饰的,子线程可以退出吗?你能否解释其中的原因呢? + +文末我们又提了两个坑,一是加锁和释放没有配对的问题,二是锁自动释放导致的重复逻辑执行的问题。你有什么方法来发现和解决这两种问题吗? + +在使用锁的过程中,你还遇到过其他坑吗?我是朱晔,欢迎在评论区与我留言分享你的想法,也欢迎你把这篇文章分享给你的朋友或同事,一起交流。 \ No newline at end of file diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/141a5ed915e08e50c0f6b066bea36e05.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/141a5ed915e08e50c0f6b066bea36e05.png" new file mode 100644 index 00000000..d3183d7c Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/141a5ed915e08e50c0f6b066bea36e05.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/1cb278c010719ee00d988dbb2a42c543.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/1cb278c010719ee00d988dbb2a42c543.png" new file mode 100644 index 00000000..e587aea5 Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/1cb278c010719ee00d988dbb2a42c543.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/777f520e9d0be89b66e814d3e7c1a30b.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/777f520e9d0be89b66e814d3e7c1a30b.png" new file mode 100644 index 00000000..2e3a5403 Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/777f520e9d0be89b66e814d3e7c1a30b.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/9ec61aada64ac6d38681dd199c0ee61d.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/9ec61aada64ac6d38681dd199c0ee61d.png" new file mode 100644 index 00000000..63c583fb Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/9ec61aada64ac6d38681dd199c0ee61d.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/a41d077eeecc8b922503409d13a465e4.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/a41d077eeecc8b922503409d13a465e4.png" new file mode 100644 index 00000000..7ea8267a Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/a41d077eeecc8b922503409d13a465e4.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/c32cb32eb5433aae3b392738a80bca42.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/c32cb32eb5433aae3b392738a80bca42.png" new file mode 100644 index 00000000..3e8c2af9 Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/c32cb32eb5433aae3b392738a80bca42.png" differ diff --git "a/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/ff24ac10bd0635ef4bf5987038b622ce.png" "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/ff24ac10bd0635ef4bf5987038b622ce.png" new file mode 100644 index 00000000..fdbaf934 Binary files /dev/null and "b/Java/2_\344\273\243\347\240\201\345\212\240\351\224\201\357\274\214\344\270\215\350\246\201\350\256\251\342\200\234\351\224\201\342\200\235\346\210\220\344\270\272\347\203\246\345\277\203\344\272\213/images/ff24ac10bd0635ef4bf5987038b622ce.png" differ diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/README.md" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/README.md" new file mode 100644 index 00000000..c1b80dc3 --- /dev/null +++ "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/README.md" @@ -0,0 +1,382 @@ +程序中,我们会用各种池化技术来缓存创建昂贵的对象,比如线程池、连接池、内存池。一般是预先创建一些对象放入池中,使用的时候直接取出使用,用完归还以便复用,还会通过一定的策略调整池中缓存对象的数量,实现池的动态伸缩。 + +由于线程的创建比较昂贵,随意、没有控制地创建大量线程会造成性能问题,因此短平快的任务一般考虑使用线程池来处理,而不是直接创建线程。 + +今天,我们就针对线程池这个话题展开讨论,通过三个生产事故,来看看使用线程池应该注意些什么。 + +## 线程池的声明需要手动进行 + +**Java** 中的 **Executors** 类定义了一些快捷的工具方法,来帮助我们快速创建线程池。《阿里巴巴Java开发手册》中提到,禁止使用这些方法来创建线程池,而应该手动 **new ThreadPoolExecutor** 来创建线程池。这一条规则的背后,是大量血淋淋的生产事故,最典型的就是 **newFixedThreadPool** 和**newCachedThreadPool** ,可能因为资源耗尽导致 **OOM** 问题。 + +首先,我们来看一下 **newFixedThreadPool** 为什么可能会出现 **OOM** 的问题。 + +我们写一段测试代码,来初始化一个单线程的 **FixedThreadPool** ,循环1亿次向线程池提交任务,每个任务都会创建一个比较大的字符串然后休眠一小时: + +```java +@GetMapping("oom1") +public void oom1() throws InterruptedException { +ThreadPoolExecutor threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(1); +//打印线程池的信息,稍后我会解释这段代码 +printStats(threadPool); +for (int i = 0; i < 100000000; i++) { + threadPool.execute(() -> { + String payload = IntStream.rangeClosed(1, 1000000) + .mapToObj(__ -> "a") + .collect(Collectors.joining("")) + UUID.randomUUID().toString(); + try { + TimeUnit.HOURS.sleep(1); + } catch (InterruptedException e) { + } + log.info(payload); + }); +} + +threadPool.shutdown(); +threadPool.awaitTermination(1, TimeUnit.HOURS); + +} +``` + +执行程序后不久,日志中就出现了如下 **OOM** : + +```bash +Exception in thread "http-nio-45678-ClientPoller" java.lang.OutOfMemoryError: GC overhead limit exceeded +``` + +翻看 **newFixedThreadPool** 方法的源码不难发现,线程池的工作队列直接 **new** 了一个 **LinkedBlockingQueue**,而默认构造方法的 **LinkedBlockingQueue** 是一个 **Integer.MAX_VALUE** 长度的队列,可以认为是无界的: + +```java +public static ExecutorService newFixedThreadPool(int nThreads) { +return new ThreadPoolExecutor(nThreads, nThreads, +0L, TimeUnit.MILLISECONDS, +new LinkedBlockingQueue()); +} +public class LinkedBlockingQueue extends AbstractQueue +implements BlockingQueue, java.io.Serializable { +... +/** + * Creates a {@code LinkedBlockingQueue} with a capacity of + * {@link Integer#MAX_VALUE}. + */ +public LinkedBlockingQueue() { + this(Integer.MAX_VALUE); +} + +... +} +``` + +虽然使用 **newFixedThreadPool** 可以把工作线程控制在固定的数量上,但任务队列是无界的。如果任务较多并且执行较慢的话,队列可能会快速积压,撑爆内存导致OOM。 + +我们再把刚才的例子稍微改一下,改为使用 **newCachedThreadPool** 方法来获得线程池。程序运行不久后,同样看到了如下 **OOM** 异常: + +```bash +[11:30:30.487] [http-nio-45678-exec-1] [ERROR] [.a.c.c.C.[.[.[/].[dispatcherServlet]:175 ] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread] with root cause +java.lang.OutOfMemoryError: unable to create new native thread +``` + +从日志中可以看到,这次 **OOM** 的原因是无法创建线程,翻看 **newCachedThreadPool** 的源码可以看到,这种线程池的最大线程数是**Integer.MAX_VALUE**,可以认为是没有上限的,而其工作队列 **SynchronousQueue** 是一个没有存储空间的阻塞队列。这意味着,只要有请求到来,就必须找到一条工作线程来处理,如果当前没有空闲的线程就再创建一条新的。 + +由于我们的任务需要 **1** 小时才能执行完成,大量的任务进来后会创建大量的线程。我们知道线程是需要分配一定的内存空间作为线程栈的,比如 **1MB**,因此无限制创建线程必然会导致 **OOM**: + +```java +public static ExecutorService newCachedThreadPool() { + return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue()); +} +``` + +其实,大部分 **Java** 开发同学知道这两种线程池的特性,只是抱有侥幸心理,觉得只是使用线程池做一些轻量级的任务,不可能造成队列积压或开启大量线程。 + +但,现实往往是残酷的。我之前就遇到过这么一个事故:用户注册后,我们调用一个外部服务去发送短信,发送短信接口正常时可以在 **100** 毫秒内响应,TPS **100**的注册量,**CachedThreadPool** 能稳定在占用 **10** 个左右线程的情况下满足需求。在某个时间点,外部短信服务不可用了,我们调用这个服务的超时又特别长,比如1分钟,1分钟可能就进来了 **6000** 用户,产生 **6000** 个发送短信的任务,需要 **6000** 个线程,没多久就因为无法创建线程导致了 **OOM**,整个应用程序崩溃。 + +因此,我同样不建议使用 **Executors** 提供的两种快捷的线程池,原因如下: + +我们需要根据自己的场景、并发情况来评估线程池的几个核心参数,包括核心线程数、最大线程数、线程回收策略、工作队列的类型,以及拒绝策略,确保线程池的工作行为符合需求,一般都需要设置有界的工作队列和可控的线程数。 + +任何时候,都应该为自定义线程池指定有意义的名称,以方便排查问题。当出现线程数量暴增、线程死锁、线程占用大量CPU、线程执行出现异常等问题时,我们往往会抓取线程栈。此时,有意义的线程名称,就可以方便我们定位问题。 + +除了建议手动声明线程池以外,我还建议用一些监控手段来观察线程池的状态。线程池这个组件往往会表现得任劳任怨、默默无闻,除非是出现了拒绝策略,否则压力再大都不会抛出一个异常。如果我们能提前观察到线程池队列的积压,或者线程数量的快速膨胀,往往可以提早发现并解决问题。 + +## 线程池线程管理策略详解 + +在之前的 **Demo** 中,我们用一个 **printStats** 方法实现了最简陋的监控,每秒输出一次线程池的基本内部信息,包括线程数、活跃线程数、完成了多少任务,以及队列中还有多少积压任务等信息: + +```java +private void printStats(ThreadPoolExecutor threadPool) { + Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> { + log.info("========================="); + log.info("Pool Size: {}", threadPool.getPoolSize()); + log.info("Active Threads: {}", threadPool.getActiveCount()); + log.info("Number of Tasks Completed: {}", threadPool.getCompletedTaskCount()); + log.info("Number of Tasks in Queue: {}", threadPool.getQueue().size()); + log.info("========================="); + }, 0, 1, TimeUnit.SECONDS); +} +``` + +接下来,我们就利用这个方法来观察一下线程池的基本特性吧。 + +首先,自定义一个线程池。这个线程池具有 **2** 个核心线程、**5** 个最大线程、使用容量为 **10** 的 **ArrayBlockingQueue** 阻塞队列作为工作队列,使用默认的**AbortPolicy** 拒绝策略,也就是任务添加到线程池失败会抛出 **RejectedExecutionException** 。此外,我们借助了 **Jodd** 类库的 **ThreadFactoryBuilder** 方法来构造一个线程工厂,实现线程池线程的自定义命名。 + +然后,我们写一段测试代码来观察线程池管理线程的策略。测试代码的逻辑为,每次间隔 **1** 秒向线程池提交任务,循环 **20** 次,每个任务需要 **10** 秒才能执行完成,代码如下: + +```java +@GetMapping("right") +public int right() throws InterruptedException { +//使用一个计数器跟踪完成的任务数 +AtomicInteger atomicInteger = new AtomicInteger(); +//创建一个具有2个核心线程、5个最大线程,使用容量为10的ArrayBlockingQueue阻塞队列作为工作队列的线程池,使用默认的AbortPolicy拒绝策略 +ThreadPoolExecutor threadPool = new ThreadPoolExecutor( +2, 5, +5, TimeUnit.SECONDS, +new ArrayBlockingQueue<>(10), +new ThreadFactoryBuilder().setNameFormat("demo-threadpool-%d").get(), +new ThreadPoolExecutor.AbortPolicy()); +printStats(threadPool); +//每隔1秒提交一次,一共提交20次任务 +IntStream.rangeClosed(1, 20).forEach(i -> { + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + e.printStackTrace(); + } + int id = atomicInteger.incrementAndGet(); + try { + threadPool.submit(() -> { + log.info("{} started", id); + //每个任务耗时10秒 + try { + TimeUnit.SECONDS.sleep(10); + } catch (InterruptedException e) { + } + log.info("{} finished", id); + }); + } catch (Exception ex) { + //提交出现异常的话,打印出错信息并为计数器减一 + log.error("error submitting task {}", id, ex); + atomicInteger.decrementAndGet(); + } +}); + +TimeUnit.SECONDS.sleep(60); +return atomicInteger.intValue(); + +} +``` + +**60** 秒后页面输出了 **17**,有3次提交失败了: + +![image-20220517082615656](images/image-20220517082615656.png) + +并且日志中也出现了 **3** 次类似的错误信息: + +```java +[14:24:52.879] [http-nio-45678-exec-1] [ERROR] [.t.c.t.demo1.ThreadPoolOOMController:103 ] - error submitting task 18 +java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@163a2dec rejected from java.util.concurrent.ThreadPoolExecutor@18061ad2[Running, pool size = 5, active threads = 5, queued tasks = 10, completed tasks = 2] +``` + +我们把 **printStats** 方法打印出的日志绘制成图表,得出如下曲线: + +![image-20220517082642564](images/image-20220517082642564.png) + +至此,我们可以总结出线程池默认的工作行为: + +不会初始化 **corePoolSize** 个线程,有任务来了才创建工作线程; + +- 当核心线程满了之后不会立即扩容线程池,而是把任务堆积到工作队列中; +- 当工作队列满了后扩容线程池,一直到线程个数达到 **maximumPoolSize** 为止; +- 如果队列已满且达到了最大线程后还有任务进来,按照拒绝策略处理; +- 当线程数大于核心线程数时,线程等待 **keepAliveTime** 后还是没有任务需要处理的话,收缩线程到核心线程数。 + +了解这个策略,有助于我们根据实际的容量规划需求,为线程池设置合适的初始化参数。当然,我们也可以通过一些手段来改变这些默认工作行为,比如: + +- 声明线程池后立即调用 **prestartAllCoreThreads** 方法,来启动所有核心线程; +- 传入 **true** 给 **allowCoreThreadTimeOut** 方法,来让线程池在空闲的时候同样回收核心线程。 + +不知道你有没有想过:**Java** 线程池是先用工作队列来存放来不及处理的任务,满了之后再扩容线程池。当我们的工作队列设置得很大时,最大线程数这个参数显得没有意义,因为队列很难满,或者到满的时候再去扩容线程池已经于事无补了。 + +那么,我们有没有办法让线程池更激进一点,优先开启更多的线程,而把队列当成一个后备方案呢?比如我们这个例子,任务执行得很慢,需要10秒,如果线程池可以优先扩容到 **5** 个最大线程,那么这些任务最终都可以完成,而不会因为线程池扩容过晚导致慢任务来不及处理。 + +限于篇幅,这里我只给你一个大致思路: + +- 由于线程池在工作队列满了无法入队的情况下会扩容线程池,那么我们是否可以重写队列的offer方法,造成这个队列已满的假象呢? +- 由于我们 **Hack** 了队列,在达到了最大线程后势必会触发拒绝策略,那么能否实现一个自定义的拒绝策略处理程序,这个时候再把任务真正插入队列呢? + 接下来,就请你动手试试看如何实现这样一个“弹性”线程池吧。**Tomcat** 线程池也实现了类似的效果,可供你借鉴。 + +## 务必确认清楚线程池本身是不是复用的 + +不久之前我遇到了这样一个事故:某项目生产环境时不时有报警提示线程数过多,超过 **2000** 个,收到报警后查看监控发现,瞬时线程数比较多但过一会儿又会降下来,线程数抖动很厉害,而应用的访问量变化不大。 + +为了定位问题,我们在线程数比较高的时候进行线程栈抓取,抓取后发现内存中有 **1000** 多个自定义线程池。一般而言,线程池肯定是复用的,有5个以内的线程池都可以认为正常,而 **1000** 多个线程池肯定不正常。 + +在项目代码里,我们没有搜到声明线程池的地方,搜索execute关键字后定位到,原来是业务代码调用了一个类库来获得线程池,类似如下的业务代码:调用**ThreadPoolHelper** 的 **getThreadPool** 方法来获得线程池,然后提交数个任务到线程池处理,看不出什么异常。 + +```java +@GetMapping("wrong") +public String wrong() throws InterruptedException { + ThreadPoolExecutor threadPool = ThreadPoolHelper.getThreadPool(); + IntStream.rangeClosed(1, 10).forEach(i -> { + threadPool.execute(() -> { + ... + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + } + }); + }); + return "OK"; +} +``` + +但是,来到 **ThreadPoolHelper** 的实现让人大跌眼镜,**getThreadPool** 方法居然是每次都使用 **Executors.newCachedThreadPool** 来创建一个线程池。 + +```java +class ThreadPoolHelper { + public static ThreadPoolExecutor getThreadPool() { + //线程池没有复用 + return (ThreadPoolExecutor) Executors.newCachedThreadPool(); + } +} +``` + +通过上一小节的学习,我们可以想到 **newCachedThreadPool** 会在需要时创建必要多的线程,业务代码的一次业务操作会向线程池提交多个慢任务,这样执行一次业务操作就会开启多个线程。如果业务操作并发量较大的话,的确有可能一下子开启几千个线程。 + +那,为什么我们能在监控中看到线程数量会下降,而不会撑爆内存呢? + +回到 **newCachedThreadPool** 的定义就会发现,它的核心线程数是0,而 **keepAliveTime** 是60秒,也就是在 **60** 秒之后所有的线程都是可以回收的。好吧,就因为这个特性,我们的业务程序死得没太难看。 + +要修复这个Bug也很简单,使用一个静态字段来存放线程池的引用,返回线程池的代码直接返回这个静态字段即可。这里一定要记得我们的最佳实践,手动创建线程池。修复后的 **ThreadPoolHelper** 类如下: + +```java +class ThreadPoolHelper { + + private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( + 10, 50, + 2, TimeUnit.SECONDS, + new ArrayBlockingQueue<>(1000), + new ThreadFactoryBuilder().setNameFormat("demo-threadpool-%d").get()); + + public static ThreadPoolExecutor getRightThreadPool() { + return threadPoolExecutor; + } +} + +``` + +## 需要仔细斟酌线程池的混用策略 + +线程池的意义在于复用,那这是不是意味着程序应该始终使用一个线程池呢? + +当然不是。通过第一小节的学习我们知道,要根据任务的“轻重缓急”来指定线程池的核心参数,包括线程数、回收策略和任务队列: + +对于执行比较慢、数量不大的IO任务,或许要考虑更多的线程数,而不需要太大的队列。 +而对于吞吐量较大的计算型任务,线程数量不宜过多,可以是CPU核数或核数*2(理由是,线程一定调度到某个CPU进行执行,如果任务本身是CPU绑定的任务,那么过多的线程只会增加线程切换的开销,并不能提升吞吐量),但可能需要较长的队列来做缓冲。 +之前我也遇到过这么一个问题,业务代码使用了线程池异步处理一些内存中的数据,但通过监控发现处理得非常慢,整个处理过程都是内存中的计算不涉及IO操作,也需要数秒的处理时间,应用程序CPU占用也不是特别高,有点不可思议。 + +经排查发现,业务代码使用的线程池,还被一个后台的文件批处理任务用到了。 + +或许是够用就好的原则,这个线程池只有 **2** 个核心线程,最大线程也是 **2** ,使用了容量为 **100** 的 **ArrayBlockingQueue** 作为工作队列,使用了 **CallerRunsPolicy** 拒绝策略: + +```java +private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor( + 2, 2, + 1, TimeUnit.HOURS, + new ArrayBlockingQueue<>(100), + new ThreadFactoryBuilder().setNameFormat("batchfileprocess-threadpool-%d").get(), + new ThreadPoolExecutor.CallerRunsPolicy()); +``` + +这里,我们模拟一下文件批处理的代码,在程序启动后通过一个线程开启死循环逻辑,不断向线程池提交任务,任务的逻辑是向一个文件中写入大量的数据: + +```java +@PostConstruct +public void init() { + printStats(threadPool); +new Thread(() -> { + //模拟需要写入的大量数据 + String payload = IntStream.rangeClosed(1, 1_000_000) + .mapToObj(__ -> "a") + .collect(Collectors.joining("")); + while (true) { + threadPool.execute(() -> { + try { + //每次都是创建并写入相同的数据到相同的文件 + Files.write(Paths.get("demo.txt"), Collections.singletonList(LocalTime.now().toString() + ":" + payload), UTF_8, CREATE, TRUNCATE_EXISTING); + } catch (IOException e) { + e.printStackTrace(); + } + log.info("batch file processing done"); + }); + } +}).start(); + +} +``` + +可以想象到,这个线程池中的2个线程任务是相当重的。通过printStats方法打印出的日志,我们观察下线程池的负担: + +![image-20220517083249217](images/image-20220517083249217.png) + +可以看到,线程池的2个线程始终处于活跃状态,队列也基本处于打满状态。因为开启了CallerRunsPolicy拒绝处理策略,所以当线程满载队列也满的情况下,任务会在提交任务的线程,或者说调用execute方法的线程执行,也就是说不能认为提交到线程池的任务就一定是异步处理的。如果使用了CallerRunsPolicy策略,那么有可能异步任务变为同步执行。从日志的第四行也可以看到这点。这也是这个拒绝策略比较特别的原因。 + +不知道写代码的同学为什么设置这个策略,或许是测试时发现线程池因为任务处理不过来出现了异常,而又不希望线程池丢弃任务,所以最终选择了这样的拒绝策略。不管怎样,这些日志足以说明线程池是饱和状态。 + +可以想象到,业务代码复用这样的线程池来做内存计算,命运一定是悲惨的。我们写一段代码测试下,向线程池提交一个简单的任务,这个任务只是休眠10毫秒没有其他逻辑: + +```java +private Callable calcTask() { + + return () -> { + TimeUnit.MILLISECONDS.sleep(10); + return 1; + }; + +} + +@GetMapping("wrong") +public int wrong() throws ExecutionException, InterruptedException { + return threadPool.submit(calcTask()).get(); +} + +``` + +我们使用 **wrk** 工具对这个接口进行一个简单的压测,可以看到 **TPS** 为 75,性能的确非常差。 + +![image-20220517083339012](images/image-20220517083339012.png) + +细想一下,问题其实没有这么简单。因为原来执行IO任务的线程池使用的是CallerRunsPolicy策略,所以直接使用这个线程池进行异步计算的话,当线程池饱和的时候,计算任务会在执行Web请求的Tomcat线程执行,这时就会进一步影响到其他同步处理的线程,甚至造成整个应用程序崩溃。 + +解决方案很简单,使用独立的线程池来做这样的“计算任务”即可。计算任务打了双引号,是因为我们的模拟代码执行的是休眠操作,并不属于CPU绑定的操作,更类似IO绑定的操作,如果线程池线程数设置太小会限制吞吐能力: + +```java +private static ThreadPoolExecutor asyncCalcThreadPool = new ThreadPoolExecutor( + 200, 200, + 1, TimeUnit.HOURS, + new ArrayBlockingQueue<>(1000), + new ThreadFactoryBuilder().setNameFormat("asynccalc-threadpool-%d").get()); + +@GetMapping("right") +public int right() throws ExecutionException, InterruptedException { + return asyncCalcThreadPool.submit(calcTask()).get(); +} +``` + +使用单独的线程池改造代码后再来测试一下性能,TPS提高到了1727: + +![image-20220517083402523](images/image-20220517083402523.png) + +可以看到,盲目复用线程池混用线程的问题在于,别人定义的线程池属性不一定适合你的任务,而且混用会相互干扰。这就好比,我们往往会用虚拟化技术来实现资源的隔离,而不是让所有应用程序都直接使用物理机。 + +就线程池混用问题,我想再和你补充一个坑:Java 8的parallel stream功能,可以让我们很方便地并行处理集合中的元素,其背后是共享同一个ForkJoinPool,默认并行度是CPU核数-1。对于CPU绑定的任务来说,使用这样的配置比较合适,但如果集合操作涉及同步IO操作的话(比如数据库操作、外部服务调用等),建议自定义一个ForkJoinPool(或普通线程池)。你可以参考第一讲的相关Demo。 + +## 重点回顾 + +线程池管理着线程,线程又属于宝贵的资源,有许多应用程序的性能问题都来自线程池的配置和使用不当。在今天的学习中,我通过三个和线程池相关的生产事故,和你分享了使用线程池的几个最佳实践。 + +第一,Executors 类提供的一些快捷声明线程池的方法虽然简单,但隐藏了线程池的参数细节。因此,使用线程池时,我们一定要根据场景和需求配置合理的线程数、任务队列、拒绝策略、线程回收策略,并对线程进行明确的命名方便排查问题。 + +第二,既然使用了线程池就需要确保线程池是在复用的,每次 new 一个线程池出来可能比不用线程池还糟糕。如果你没有直接声明线程池而是使用其他同学提供的类库来获得一个线程池,请务必查看源码,以确认线程池的实例化方式和配置是符合预期的。 + +第三,复用线程池不代表应用程序始终使用同一个线程池,我们应该根据任务的性质来选用不同的线程池。特别注意 IO 绑定的任务和 CPU 绑定的任务对于线程池属性的偏好,如果希望减少任务间的相互干扰,考虑按需使用隔离的线程池。 + +最后我想强调的是,线程池作为应用程序内部的核心组件往往缺乏监控(如果你使用类似 RabbitMQ 这样的 MQ 中间件,运维同学一般会帮我们做好中间件监控),往往到程序崩溃后才发现线程池的问题,很被动。在设计篇中我们会重新谈及这个问题及其解决方案。 \ No newline at end of file diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082615656.png" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082615656.png" new file mode 100644 index 00000000..2d950fb9 Binary files /dev/null and "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082615656.png" differ diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082642564.png" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082642564.png" new file mode 100644 index 00000000..ce066e00 Binary files /dev/null and "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517082642564.png" differ diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083249217.png" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083249217.png" new file mode 100644 index 00000000..493d3f7c Binary files /dev/null and "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083249217.png" differ diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083339012.png" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083339012.png" new file mode 100644 index 00000000..78cc657d Binary files /dev/null and "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083339012.png" differ diff --git "a/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083402523.png" "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083402523.png" new file mode 100644 index 00000000..9d114e1b Binary files /dev/null and "b/Java/3_\347\272\277\347\250\213\346\261\240\357\274\232\344\270\232\345\212\241\344\273\243\347\240\201\346\234\200\345\270\270\347\224\250\344\271\237\346\234\200\345\256\271\346\230\223\347\212\257\351\224\231\347\232\204\347\273\204\344\273\266/images/image-20220517083402523.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/README.md" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/README.md" new file mode 100644 index 00000000..2cefb61b --- /dev/null +++ "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/README.md" @@ -0,0 +1,520 @@ +# 连接池:别让连接池帮了倒忙 + +今天,我们来聊聊使用连接池需要注意的问题。 + +在上一讲,我们学习了使用线程池需要注意的问题。今天,我再与你说说另一种很重要的池化技术,即连接池。 + +我先和你说说连接池的结构。连接池一般对外提供获得连接、归还连接的接口给客户端使用,并暴露最小空闲连接数、最大连接数等可配置参数,在内部则实现连接建立、连接心跳保持、连接管理、空闲连接回收、连接可用性检测等功能。连接池的结构示意图,如下所示: + +![img](images/1685d9db2602e1de8483de171af6fd7e.png) + +业务项目中经常会用到的连接池,主要是数据库连接池、Redis 连接池和 HTTP 连接池。所以,今天我就以这三种连接池为例,和你聊聊使用和配置连接池容易出错的地方。 + +## 注意鉴别客户端 SDK 是否基于连接池 + +在使用三方客户端进行网络通信时,我们首先要确定客户端 SDK 是否是基于连接池技术实现的。我们知道,TCP 是面向连接的基于字节流的协议: + +面向连接,意味着连接需要先创建再使用,创建连接的三次握手有一定开销; + +基于字节流,意味着字节是发送数据的最小单元,TCP 协议本身无法区分哪几个字节是完整的消息体,也无法感知是否有多个客户端在使用同一个 TCP 连接,TCP 只是一个读写数据的管道。 + +如果客户端 SDK 没有使用连接池,而直接是 TCP 连接,那么就需要考虑每次建立 TCP 连接的开销,并且因为 TCP 基于字节流,在多线程的情况下对同一连接进行复用,可能会产生线程安全问题。 + +我们先看一下涉及 TCP 连接的客户端 SDK,对外提供 API 的三种方式。在面对各种三方客户端的时候,只有先识别出其属于哪一种,才能理清楚使用方式。 + +连接池和连接分离的 API:有一个 XXXPool 类负责连接池实现,先从其获得连接 XXXConnection,然后用获得的连接进行服务端请求,完成后使用者需要归还连接。通常,XXXPool 是线程安全的,可以并发获取和归还连接,而 XXXConnection 是非线程安全的。对应到连接池的结构示意图中,XXXPool 就是右边连接池那个框,左边的客户端是我们自己的代码。 + +内部带有连接池的 API:对外提供一个 XXXClient 类,通过这个类可以直接进行服务端请求;这个类内部维护了连接池,SDK 使用者无需考虑连接的获取和归还问题。一般而言,XXXClient 是线程安全的。对应到连接池的结构示意图中,整个 API 就是蓝色框包裹的部分。 + +非连接池的 API:一般命名为 XXXConnection,以区分其是基于连接池还是单连接的,而不建议命名为 XXXClient 或直接是 XXX。直接连接方式的 API 基于单一连接,每次使用都需要创建和断开连接,性能一般,且通常不是线程安全的。对应到连接池的结构示意图中,这种形式相当于没有右边连接池那个框,客户端直接连接服务端创建连接。 + +虽然上面提到了 SDK 一般的命名习惯,但不排除有一些客户端特立独行,因此在使用三方 SDK 时,一定要先查看官方文档了解其最佳实践,或是在类似 Stackoverflow 的网站搜索 XXX threadsafe/singleton 字样看看大家的回复,也可以一层一层往下看源码,直到定位到原始 Socket 来判断 Socket 和客户端 API 的对应关系。 + +明确了 SDK 连接池的实现方式后,我们就大概知道了使用 SDK 的最佳实践: + +如果是分离方式,那么连接池本身一般是线程安全的,可以复用。每次使用需要从连接池获取连接,使用后归还,归还的工作由使用者负责。 + +如果是内置连接池,SDK 会负责连接的获取和归还,使用的时候直接复用客户端。 + +如果 SDK 没有实现连接池(大多数中间件、数据库的客户端 SDK 都会支持连接池),那通常不是线程安全的,而且短连接的方式性能不会很高,使用的时候需要考虑是否自己封装一个连接池。 + +接下来,我就以 Java 中用于操作 Redis 最常见的库 Jedis 为例,从源码角度分析下 Jedis 类到底属于哪种类型的 API,直接在多线程环境下复用一个连接会产生什么问题,以及如何用最佳实践来修复这个问题。 + +首先,向 Redis 初始化 2 组数据,Key=a、Value=1,Key=b、Value=2: + +``` +@PostConstruct + +public void init() { + + try (Jedis jedis = new Jedis("127.0.0.1", 6379)) { + + Assert.isTrue("OK".equals(jedis.set("a", "1")), "set a = 1 return OK"); + + Assert.isTrue("OK".equals(jedis.set("b", "2")), "set b = 2 return OK"); + + } + +} +``` + +然后,启动两个线程,共享操作同一个 Jedis 实例,每一个线程循环 1000 次,分别读取 Key 为 a 和 b 的 Value,判断是否分别为 1 和 2: + +``` +Jedis jedis = new Jedis("127.0.0.1", 6379); +new Thread(() -> { + for (int i = 0; i < 1000; i++) { + String result = jedis.get("a"); + if (!result.equals("1")) { + log.warn("Expect a to be 1 but found {}", result); + return; + } + } +}).start(); + +new Thread(() -> { + for (int i = 0; i < 1000; i++) { + String result = jedis.get("b"); + if (!result.equals("2")) { + log.warn("Expect b to be 2 but found {}", result); + return; + } + } +}).start(); +TimeUnit.SECONDS.sleep(5); +``` + +执行程序多次,可以看到日志中出现了各种奇怪的异常信息,有的是读取 Key 为 b 的 Value 读取到了 1,有的是流非正常结束,还有的是连接关闭异常: + +``` +//错误1 + +[14:56:19.069] [Thread-28] [WARN ] [.t.c.c.redis.JedisMisreuseController:45 ] - Expect b to be 2 but found 1 + +//错误2 + +redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream. + at redis.clients.jedis.util.RedisInputStream.ensureFill(RedisInputStream.java:202) + at redis.clients.jedis.util.RedisInputStream.readLine(RedisInputStream.java:50) + at redis.clients.jedis.Protocol.processError(Protocol.java:114) + at redis.clients.jedis.Protocol.process(Protocol.java:166) + at redis.clients.jedis.Protocol.read(Protocol.java:220) + at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:318) + at redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:255) + at redis.clients.jedis.Connection.getBulkReply(Connection.java:245) + at redis.clients.jedis.Jedis.get(Jedis.java:181) + at org.geekbang.time.commonmistakes.connectionpool.redis.JedisMisreuseController.lambda$wrong$1(JedisMisreuseController.java:43) + at java.lang.Thread.run(Thread.java:748) + +//错误3 +java.io.IOException: Socket Closed + at java.net.AbstractPlainSocketImpl.getOutputStream(AbstractPlainSocketImpl.java:440) + at java.net.Socket$3.run(Socket.java:954) + at java.net.Socket$3.run(Socket.java:952) + at java.security.AccessController.doPrivileged(Native Method) + at java.net.Socket.getOutputStream(Socket.java:951) + at redis.clients.jedis.Connection.connect(Connection.java:200) + ... 7 more +``` + +让我们分析一下 Jedis 类的源码,搞清楚其中缘由吧。 + +``` +public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, + AdvancedJedisCommands, ScriptingCommands, BasicCommands, ClusterCommands, SentinelCommands, ModuleCommands { +} + +public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKeyBinaryCommands, + AdvancedBinaryJedisCommands, BinaryScriptingCommands, Closeable { + protected Client client = null; + ... +} + +public class Client extends BinaryClient implements Commands { + +} + +public class BinaryClient extends Connection { + +} + +public class Connection implements Closeable { + + private Socket socket; + private RedisOutputStream outputStream; + private RedisInputStream inputStream; + +} +``` + +可以看到,Jedis 继承了 BinaryJedis,BinaryJedis 中保存了单个 Client 的实例,Client 最终继承了 Connection,Connection 中保存了单个 Socket 的实例,和 Socket 对应的两个读写流。因此,一个 Jedis 对应一个 Socket 连接。类图如下: + +![img](images/e72120b1f6daf4a951e75c05b9191a0f.png) + +BinaryClient 封装了各种 Redis 命令,其最终会调用基类 Connection 的方法,使用 Protocol 类发送命令。看一下 Protocol 类的 sendCommand 方法的源码,可以发现其发送命令时是直接操作 RedisOutputStream 写入字节。 + +我们在多线程环境下复用 Jedis 对象,其实就是在复用 RedisOutputStream。如果多个线程在执行操作,那么既无法确保整条命令以一个原子操作写入 Socket,也无法确保写入后、读取前没有其他数据写到远端: + +``` +private static void sendCommand(final RedisOutputStream os, final byte[] command, + + final byte[]... args) { + + try { + os.write(ASTERISK_BYTE); + os.writeIntCrLf(args.length + 1); + os.write(DOLLAR_BYTE); + os.writeIntCrLf(command.length); + os.write(command); + os.writeCrLf(); + + for (final byte[] arg : args) { + os.write(DOLLAR_BYTE); + os.writeIntCrLf(arg.length); + os.write(arg); + os.writeCrLf(); + } + + } catch (IOException e) { + throw new JedisConnectionException(e); + } + +} +``` + +看到这里我们也可以理解了,为啥多线程情况下使用 Jedis 对象操作 Redis 会出现各种奇怪的问题。 + +比如,写操作互相干扰,多条命令相互穿插的话,必然不是合法的 Redis 命令,那么 Redis 会关闭客户端连接,导致连接断开;又比如,线程 1 和 2 先后写入了 get a 和 get b 操作的请求,Redis 也返回了值 1 和 2,但是线程 2 先读取了数据 1 就会出现数据错乱的问题。 + +修复方式是,使用 Jedis 提供的另一个线程安全的类 JedisPool 来获得 Jedis 的实例。JedisPool 可以声明为 static 在多个线程之间共享,扮演连接池的角色。使用时,按需使用 try-with-resources 模式从 JedisPool 获得和归还 Jedis 实例。 + +``` +private static JedisPool jedisPool = new JedisPool("127.0.0.1", 6379); + +new Thread(() -> { + + try (Jedis jedis = jedisPool.getResource()) { + for (int i = 0; i < 1000; i++) { + String result = jedis.get("a"); + if (!result.equals("1")) { + log.warn("Expect a to be 1 but found {}", result); + return; + } + } + } + +}).start(); + +new Thread(() -> { + try (Jedis jedis = jedisPool.getResource()) { + for (int i = 0; i < 1000; i++) { + String result = jedis.get("b"); + if (!result.equals("2")) { + log.warn("Expect b to be 2 but found {}", result); + return; + } + } + } + +}).start(); +``` + +这样修复后,代码不再有线程安全问题了。此外,我们最好通过 shutdownhook,在程序退出之前关闭 JedisPool: + +``` +@PostConstruct +public void init() { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + jedisPool.close(); + })); + +} +``` + +看一下 Jedis 类 close 方法的实现可以发现,如果 Jedis 是从连接池获取的话,那么 close 方法会调用连接池的 return 方法归还连接: + +``` +public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, + AdvancedJedisCommands, ScriptingCommands, BasicCommands, ClusterCommands, SentinelCommands, ModuleCommands { + protected JedisPoolAbstract dataSource = null; + + @Override + public void close() { + if (dataSource != null) { + JedisPoolAbstract pool = this.dataSource; + this.dataSource = null; + if (client.isBroken()) { + pool.returnBrokenResource(this); + } else { + pool.returnResource(this); + } + } else { + super.close(); + } + } +} +``` + +如果不是,则直接关闭连接,其最终调用 Connection 类的 disconnect 方法来关闭 TCP 连接: + +``` +public void disconnect() { + + if (isConnected()) { + try { + outputStream.flush(); + socket.close(); + } catch (IOException ex) { + broken = true; + throw new JedisConnectionException(ex); + } finally { + IOUtils.closeQuietly(socket); + } + } +} +``` + +可以看到,Jedis 可以独立使用,也可以配合连接池使用,这个连接池就是 JedisPool。我们再看看 JedisPool 的实现。 + +``` +public class JedisPool extends JedisPoolAbstract { + +@Override + public Jedis getResource() { + Jedis jedis = super.getResource(); + jedis.setDataSource(this); + return jedis; + } + + @Override + protected void returnResource(final Jedis resource) { + if (resource != null) { + try { + resource.resetState(); + returnResourceObject(resource); + } catch (Exception e) { + returnBrokenResource(resource); + throw new JedisException("Resource is returned to the pool as broken", e); + } + } + } +} + +public class JedisPoolAbstract extends Pool { + +} + +public abstract class Pool implements Closeable { + protected GenericObjectPool internalPool; +} +``` + +JedisPool 的 getResource 方法在拿到 Jedis 对象后,将自己设置为了连接池。连接池 JedisPool,继承了 JedisPoolAbstract,而后者继承了抽象类 Pool,Pool 内部维护了 Apache Common 的通用池 GenericObjectPool。JedisPool 的连接池就是基于 GenericObjectPool 的。 + +看到这里我们了解了,Jedis 的 API 实现是我们说的三种类型中的第一种,也就是连接池和连接分离的 API,JedisPool 是线程安全的连接池,Jedis 是非线程安全的单一连接。知道了原理之后,我们再使用 Jedis 就胸有成竹了。 + +## 使用连接池务必确保复用 + +在介绍线程池的时候我们强调过,池一定是用来复用的,否则其使用代价会比每次创建单一对象更大。对连接池来说更是如此,原因如下: + +创建连接池的时候很可能一次性创建了多个连接,大多数连接池考虑到性能,会在初始化的时候维护一定数量的最小连接(毕竟初始化连接池的过程一般是一次性的),可以直接使用。如果每次使用连接池都按需创建连接池,那么很可能你只用到一个连接,但是创建了 N 个连接。 + +连接池一般会有一些管理模块,也就是连接池的结构示意图中的绿色部分。举个例子,大多数的连接池都有闲置超时的概念。连接池会检测连接的闲置时间,定期回收闲置的连接,把活跃连接数降到最低(闲置)连接的配置值,减轻服务端的压力。一般情况下,闲置连接由独立线程管理,启动了空闲检测的连接池相当于还会启动一个线程。此外,有些连接池还需要独立线程负责连接保活等功能。因此,启动一个连接池相当于启动了 N 个线程。 + +除了使用代价,连接池不释放,还可能会引起线程泄露。接下来,我就以 Apache HttpClient 为例,和你说说连接池不复用的问题。 + +首先,创建一个 CloseableHttpClient,设置使用 PoolingHttpClientConnectionManager 连接池并启用空闲连接驱逐策略,最大空闲时间为 60 秒,然后使用这个连接来请求一个会返回 OK 字符串的服务端接口: + +``` +@GetMapping("wrong1") +public String wrong1() { + CloseableHttpClient client = HttpClients.custom() + .setConnectionManager(new PoolingHttpClientConnectionManager()) + .evictIdleConnections(60, TimeUnit.SECONDS).build(); + try (CloseableHttpResponse response = client.execute(new HttpGet("http://127.0.0.1:45678/httpclientnotreuse/test"))) { + return EntityUtils.toString(response.getEntity()); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; +} +``` + +访问这个接口几次后查看应用线程情况,可以看到有大量叫作 Connection evictor 的线程,且这些线程不会销毁: + +![img](images/33a2389c20653e97b8157897d06c1510.png) + +对这个接口进行几秒的压测(压测使用 wrk,1 个并发 1 个连接)可以看到,已经建立了三千多个 TCP 连接到 45678 端口(其中有 1 个是压测客户端到 Tomcat 的连接,大部分都是 HttpClient 到 Tomcat 的连接): + +![img](images/54a71ee9a7bbbd5e121b12fe6289aff2.png) + +好在有了空闲连接回收的策略,60 秒之后连接处于 CLOSE_WAIT 状态,最终彻底关闭。 + +![img](images/8ea5f53e6510d76cf447c23fb15daa77.png) + +这 2 点证明,CloseableHttpClient 属于第二种模式,即内部带有连接池的 API,其背后是连接池,最佳实践一定是复用。 + +复用方式很简单,你可以把 CloseableHttpClient 声明为 static,只创建一次,并且在 JVM 关闭之前通过 addShutdownHook 钩子关闭连接池,在使用的时候直接使用 CloseableHttpClient 即可,无需每次都创建。 + +首先,定义一个 right 接口来实现服务端接口调用: + +``` +private static CloseableHttpClient httpClient = null; + +static { + //当然,也可以把CloseableHttpClient定义为Bean,然后在@PreDestroy标记的方法内close这个HttpClient + httpClient = HttpClients.custom().setMaxConnPerRoute(1).setMaxConnTotal(1).evictIdleConnections(60, TimeUnit.SECONDS).build(); + + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + httpClient.close(); + } catch (IOException ignored) { + + } + })); + +} + +@GetMapping("right") +public String right() { + try (CloseableHttpResponse response = httpClient.execute(new HttpGet("http://127.0.0.1:45678/httpclientnotreuse/test"))) { + return EntityUtils.toString(response.getEntity()); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; +} +``` + +然后,重新定义一个 wrong2 接口,修复之前按需创建 CloseableHttpClient 的代码,每次用完之后确保连接池可以关闭: + +``` +@GetMapping("wrong2") +public String wrong2() { + try (CloseableHttpClient client = HttpClients.custom() + .setConnectionManager(new PoolingHttpClientConnectionManager()) + .evictIdleConnections(60, TimeUnit.SECONDS).build(); + CloseableHttpResponse response = client.execute(new HttpGet("http://127.0.0.1:45678/httpclientnotreuse/test"))) { + return EntityUtils.toString(response.getEntity()); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; +} +``` + +使用 wrk 对 wrong2 和 right 两个接口分别压测 60 秒,可以看到两种使用方式性能上的差异,每次创建连接池的 QPS 是 337,而复用连接池的 QPS 是 2022: + +![img](images/b79fb99cf8a5c3a17e60b0850544472d.png) + +如此大的性能差异显然是因为 TCP 连接的复用。你可能注意到了,刚才定义连接池时,我将最大连接数设置为 1。所以,复用连接池方式复用的始终应该是同一个连接,而新建连接池方式应该是每次都会创建新的 TCP 连接。 + +接下来,我们通过网络抓包工具 Wireshark 来证实这一点。 + +如果调用 wrong2 接口每次创建新的连接池来发起 HTTP 请求,从 Wireshark 可以看到,每次请求服务端 45678 的客户端端口都是新的。这里我发起了三次请求,程序通过 HttpClient 访问服务端 45678 的客户端端口号,分别是 51677、51679 和 51681: + +![img](images/7b8f651755cef0c05ecb08727d315e35.png) + +也就是说,每次都是新的 TCP 连接,放开 HTTP 这个过滤条件也可以看到完整的 TCP 握手、挥手的过程: + +![img](images/4815c0edd21d5bf0cae8c0c3e578960d.png) + +而复用连接池方式的接口 right 的表现就完全不同了。可以看到,第二次 HTTP 请求 #41 的客户端端口 61468 和第一次连接 #23 的端口是一样的,Wireshark 也提示了整个 TCP 会话中,当前 #41 请求是第二次请求,前一次是 #23,后面一次是 #75: + +![img](images/2cbada9be98ce33321b29d38adb09f2c.png) + +只有 TCP 连接闲置超过 60 秒后才会断开,连接池会新建连接。你可以尝试通过 Wireshark 观察这一过程。 + +接下来,我们就继续聊聊连接池的配置问题。 + +## 连接池的配置不是一成不变的 + +为方便根据容量规划设置连接处的属性,连接池提供了许多参数,包括最小(闲置)连接、最大连接、闲置连接生存时间、连接生存时间等。其中,最重要的参数是最大连接数,它决定了连接池能使用的连接数量上限,达到上限后,新来的请求需要等待其他请求释放连接。 + +但,最大连接数不是设置得越大越好。如果设置得太大,不仅仅是客户端需要耗费过多的资源维护连接,更重要的是由于服务端对应的是多个客户端,每一个客户端都保持大量的连接,会给服务端带来更大的压力。这个压力又不仅仅是内存压力,可以想一下如果服务端的网络模型是一个 TCP 连接一个线程,那么几千个连接意味着几千个线程,如此多的线程会造成大量的线程切换开销。 + +当然,连接池最大连接数设置得太小,很可能会因为获取连接的等待时间太长,导致吞吐量低下,甚至超时无法获取连接。 + +接下来,我们就模拟下压力增大导致数据库连接池打满的情况,来实践下如何确认连接池的使用情况,以及有针对性地进行参数优化。 + +首先,定义一个用户注册方法,通过 @Transactional 注解为方法开启事务。其中包含了 500 毫秒的休眠,一个数据库事务对应一个 TCP 连接,所以 500 多毫秒的时间都会占用数据库连接: + +``` +@Transactional + +public User register(){ + User user=new User(); + user.setName("new-user-"+System.currentTimeMillis()); + userRepository.save(user); + try { + TimeUnit.MILLISECONDS.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return user; +} +``` + +随后,修改配置文件启用 register-mbeans,使 Hikari 连接池能通过 JMX MBean 注册连接池相关统计信息,方便观察连接池: + +``` +spring.datasource.hikari.register-mbeans=true +``` + +启动程序并通过 JConsole 连接进程后,可以看到默认情况下最大连接数为 10: + +![img](images/7b8e5aff5a3ef6ade1d8027c20c92f94.png) + +使用 wrk 对应用进行压测,可以看到连接数一下子从 0 到了 10,有 20 个线程在等待获取连接: + +![img](images/b22169b8d8bbfabbb8b93ece11a1f9ef.png) + +不久就出现了无法获取数据库连接的异常,如下所示: + +``` +[15:37:56.156] [http-nio-45678-exec-15] [ERROR] [.a.c.c.C.[.[.[/].[dispatcherServlet]:175 ] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: unable to obtain isolated JDBC connection; nested exception is org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection] with root cause + +java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms. +``` + +从异常信息中可以看到,数据库连接池是 HikariPool,解决方式很简单,修改一下配置文件,调整数据库连接池最大连接参数到 50 即可。 + +``` +spring.datasource.hikari.maximum-pool-size=50 +``` + +然后,再观察一下这个参数是否适合当前压力,满足需求的同时也不占用过多资源。从监控来看这个调整是合理的,有一半的富余资源,再也没有线程需要等待连接了: + +![img](images/d24f23f05d49378a10a857cd8b9ef031.png) + +在这个 Demo 里,我知道压测大概能对应使用 25 左右的并发连接,所以直接把连接池最大连接设置为了 50。在真实情况下,只要数据库可以承受,你可以选择在遇到连接超限的时候先设置一个足够大的连接数,然后观察最终应用的并发,再按照实际并发数留出一半的余量来设置最终的最大连接。 + +其实,看到错误日志后再调整已经有点儿晚了。更合适的做法是,对类似数据库连接池的重要资源进行持续检测,并设置一半的使用量作为报警阈值,出现预警后及时扩容。 + +在这里我是为了演示,才通过 JConsole 查看参数配置后的效果,生产上需要把相关数据对接到指标监控体系中持续监测。 + +这里要强调的是,修改配置参数务必验证是否生效,并且在监控系统中确认参数是否生效、是否合理。之所以要“强调”,是因为这里有坑。 + +我之前就遇到过这样一个事故。应用准备针对大促活动进行扩容,把数据库配置文件中 Druid 连接池最大连接数 maxActive 从 50 提高到了 100,修改后并没有通过监控验证,结果大促当天应用因为连接池连接数不够爆了。 + +经排查发现,当时修改的连接数并没有生效。原因是,应用虽然一开始使用的是 Druid 连接池,但后来框架升级了,把连接池替换为了 Hikari 实现,原来的那些配置其实都是无效的,修改后的参数配置当然也不会生效。 + +所以说,对连接池进行调参,一定要眼见为实。 + +## 重点回顾 + +今天,我以三种业务代码最常用的 Redis 连接池、HTTP 连接池、数据库连接池为例,和你探讨了有关连接池实现方式、使用姿势和参数配置的三大问题。 + +客户端 SDK 实现连接池的方式,包括池和连接分离、内部带有连接池和非连接池三种。要正确使用连接池,就必须首先鉴别连接池的实现方式。比如,Jedis 的 API 实现的是池和连接分离的方式,而 Apache HttpClient 是内置连接池的 API。 + +对于使用姿势其实就是两点,一是确保连接池是复用的,二是尽可能在程序退出之前显式关闭连接池释放资源。连接池设计的初衷就是为了保持一定量的连接,这样连接可以随取随用。从连接池获取连接虽然很快,但连接池的初始化会比较慢,需要做一些管理模块的初始化以及初始最小闲置连接。一旦连接池不是复用的,那么其性能会比随时创建单一连接更差。 + +最后,连接池参数配置中,最重要的是最大连接数,许多高并发应用往往因为最大连接数不够导致性能问题。但,最大连接数不是设置得越大越好,够用就好。需要注意的是,针对数据库连接池、HTTP 连接池、Redis 连接池等重要连接池,务必建立完善的监控和报警机制,根据容量规划及时调整参数配置。 + +今天用到的代码,我都放在了 GitHub 上,你可以点击这个链接查看。 + +## 思考与讨论 + +有了连接池之后,获取连接是从连接池获取,没有足够连接时连接池会创建连接。这时,获取连接操作往往有两个超时时间:一个是从连接池获取连接的最长等待时间,通常叫作请求连接超时 connectRequestTimeout 或连接等待超时 connectWaitTimeout;一个是连接池新建 TCP 连接三次握手的连接超时,通常叫作连接超时 connectTimeout。针对 JedisPool、Apache HttpClient 和 Hikari 数据库连接池,你知道如何设置这 2 个参数吗? + +对于带有连接池的 SDK 的使用姿势,最主要的是鉴别其内部是否实现了连接池,如果实现了连接池要尽量复用 Client。对于 NoSQL 中的 MongoDB 来说,使用 MongoDB Java 驱动时,MongoClient 类应该是每次都创建还是复用呢?你能否在官方文档中找到答案呢? diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/1685d9db2602e1de8483de171af6fd7e.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/1685d9db2602e1de8483de171af6fd7e.png" new file mode 100644 index 00000000..b600e4fd Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/1685d9db2602e1de8483de171af6fd7e.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/2cbada9be98ce33321b29d38adb09f2c.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/2cbada9be98ce33321b29d38adb09f2c.png" new file mode 100644 index 00000000..6d599648 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/2cbada9be98ce33321b29d38adb09f2c.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/33a2389c20653e97b8157897d06c1510.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/33a2389c20653e97b8157897d06c1510.png" new file mode 100644 index 00000000..be9924e8 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/33a2389c20653e97b8157897d06c1510.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/4815c0edd21d5bf0cae8c0c3e578960d.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/4815c0edd21d5bf0cae8c0c3e578960d.png" new file mode 100644 index 00000000..4d73712c Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/4815c0edd21d5bf0cae8c0c3e578960d.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/54a71ee9a7bbbd5e121b12fe6289aff2.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/54a71ee9a7bbbd5e121b12fe6289aff2.png" new file mode 100644 index 00000000..c5e6b328 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/54a71ee9a7bbbd5e121b12fe6289aff2.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8e5aff5a3ef6ade1d8027c20c92f94.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8e5aff5a3ef6ade1d8027c20c92f94.png" new file mode 100644 index 00000000..aa1c2589 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8e5aff5a3ef6ade1d8027c20c92f94.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8f651755cef0c05ecb08727d315e35.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8f651755cef0c05ecb08727d315e35.png" new file mode 100644 index 00000000..8c1b4c75 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/7b8f651755cef0c05ecb08727d315e35.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/8ea5f53e6510d76cf447c23fb15daa77.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/8ea5f53e6510d76cf447c23fb15daa77.png" new file mode 100644 index 00000000..999dc912 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/8ea5f53e6510d76cf447c23fb15daa77.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b22169b8d8bbfabbb8b93ece11a1f9ef.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b22169b8d8bbfabbb8b93ece11a1f9ef.png" new file mode 100644 index 00000000..eaf91333 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b22169b8d8bbfabbb8b93ece11a1f9ef.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b79fb99cf8a5c3a17e60b0850544472d.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b79fb99cf8a5c3a17e60b0850544472d.png" new file mode 100644 index 00000000..570db3f1 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/b79fb99cf8a5c3a17e60b0850544472d.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/d24f23f05d49378a10a857cd8b9ef031.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/d24f23f05d49378a10a857cd8b9ef031.png" new file mode 100644 index 00000000..32637504 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/d24f23f05d49378a10a857cd8b9ef031.png" differ diff --git "a/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/e72120b1f6daf4a951e75c05b9191a0f.png" "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/e72120b1f6daf4a951e75c05b9191a0f.png" new file mode 100644 index 00000000..3dc05bc9 Binary files /dev/null and "b/Java/4_\350\277\236\346\216\245\346\261\240\357\274\232\345\210\253\350\256\251\350\277\236\346\216\245\346\261\240\345\270\256\344\272\206\345\200\222\345\277\231/images/e72120b1f6daf4a951e75c05b9191a0f.png" differ diff --git "a/Java/5_HTTP\350\260\203\347\224\250\357\274\232\344\275\240\350\200\203\350\231\221\345\210\260\350\266\205\346\227\266\343\200\201\351\207\215\350\257\225\343\200\201\345\271\266\345\217\221\344\272\206\345\220\227\357\274\237/README.md" "b/Java/5_HTTP\350\260\203\347\224\250\357\274\232\344\275\240\350\200\203\350\231\221\345\210\260\350\266\205\346\227\266\343\200\201\351\207\215\350\257\225\343\200\201\345\271\266\345\217\221\344\272\206\345\220\227\357\274\237/README.md" new file mode 100644 index 00000000..e3b00df0 --- /dev/null +++ "b/Java/5_HTTP\350\260\203\347\224\250\357\274\232\344\275\240\350\200\203\350\231\221\345\210\260\350\266\205\346\227\266\343\200\201\351\207\215\350\257\225\343\200\201\345\271\266\345\217\221\344\272\206\345\220\227\357\274\237/README.md" @@ -0,0 +1,547 @@ +今天,我们一起聊聊进行 HTTP 调用需要注意的超时、重试、并发等问题。 + +与执行本地方法不同,进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性,因此我们必须考虑到这三点: + +首先,框架设置的默认超时是否合理; + +其次,考虑到网络的不稳定,超时后的请求重试是一个不错的选择,但需要考虑服务端接口的幂等性设计是否允许我们重试; + +最后,需要考虑框架是否会像浏览器那样限制并发连接数,以免在服务并发很大的情况下,**HTTP** 调用的并发数限制成为瓶颈。 + +**Spring Cloud** 是 **Java** 微服务架构的代表性框架。如果使用 **Spring Cloud** 进行微服务开发,就会使用 **Feign** 进行声明式的服务调用。如果不使用 **Spring Cloud**,而直接使用 **Spring Boot** 进行微服务开发的话,可能会直接使用 **Java** 中最常用的 **HTTP** 客户端 **Apache HttpClient** 进行服务调用。 + +接下来,我们就看看使用 **Feign** 和 **Apache HttpClient** 进行 HTTP 接口调用时,可能会遇到的超时、重试和并发方面的坑。 + +## 配置连接超时和读取超时参数的学问 + +对于 **HTTP** 调用,虽然应用层走的是 HTTP 协议,但网络层面始终是 **TCP/IP** 协议。**TCP/IP** 是面向连接的协议,在传输数据之前需要建立连接。几乎所有的网络框架都会提供这么两个超时参数: + +- 连接超时参数 **ConnectTimeout**,让用户配置建连阶段的最长等待时间; + +- 读取超时参数 ReadTimeout,用来控制从 **Socket** 上读取数据的最长等待时间。 + +这两个参数看似是网络层偏底层的配置参数,不足以引起开发同学的重视。但,正确理解和配置这两个参数,对业务应用特别重要,毕竟超时不是单方面的事情,需要客户端和服务端对超时有一致的估计,协同配合方能平衡吞吐量和错误率。 + +连接超时参数和连接超时的误区有这么两个: + +连接超时配置得特别长,比如 **60** 秒。一般来说,TCP 三次握手建立连接需要的时间非常短,通常在毫秒级最多到秒级,不可能需要十几秒甚至几十秒。如果很久都无法建连,很可能是网络或防火墙配置的问题。这种情况下,如果几秒连接不上,那么可能永远也连接不上。因此,设置特别长的连接超时意义不大,将其配置得短一些(比如 1~5 秒)即可。如果是纯内网调用的话,这个参数可以设置得更短,在下游服务离线无法连接的时候,可以快速失败。 + +排查连接超时问题,却没理清连的是哪里。通常情况下,我们的服务会有多个节点,如果别的客户端通过客户端负载均衡技术来连接服务端,那么客户端和服务端会直接建立连接,此时出现连接超时大概率是服务端的问题;而如果服务端通过类似 **Nginx** 的反向代理来负载均衡,客户端连接的其实是 **Nginx**,而不是服务端,此时出现连接超时应该排查 **Nginx**。 + +读取超时参数和读取超时则会有更多的误区,我将其归纳为如下三个。 + +第一个误区:认为出现了读取超时,服务端的执行就会中断。 + +我们来简单测试下。定义一个 client 接口,内部通过 HttpClient 调用服务端接口 server,客户端读取超时 2 秒,服务端接口执行耗时 5 秒。 + +``` +@RestController +@RequestMapping("clientreadtimeout") +@Slf4j +public class ClientReadTimeoutController { + private String getResponse(String url, int connectTimeout, int readTimeout) throws IOException { + return Request.Get("http://localhost:45678/clientreadtimeout" + url) + .connectTimeout(connectTimeout) + .socketTimeout(readTimeout) + .execute() + .returnContent() + .asString(); + } + + + + @GetMapping("client") + public String client() throws IOException { + log.info("client1 called"); + //服务端5s超时,客户端读取超时2秒 + return getResponse("/server?timeout=5000", 1000, 2000); + } + + @GetMapping("server") + public void server(@RequestParam("timeout") int timeout) throws InterruptedException { + log.info("server called"); + TimeUnit.MILLISECONDS.sleep(timeout); + log.info("Done"); + } +} +``` + +调用 client 接口后,从日志中可以看到,客户端 2 秒后出现了 SocketTimeoutException,原因是读取超时,服务端却丝毫没受影响在 3 秒后执行完成。 + +``` +[11:35:11.943] [http-nio-45678-exec-1] [INFO ] [.t.c.c.d.ClientReadTimeoutController:29 ] - client1 called +[11:35:12.032] [http-nio-45678-exec-2] [INFO ] [.t.c.c.d.ClientReadTimeoutController:36 ] - server called +[11:35:14.042] [http-nio-45678-exec-1] [ERROR] [.a.c.c.C.[.[.[/].[dispatcherServlet]:175 ] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception +java.net.SocketTimeoutException: Read timed out + at java.net.SocketInputStream.socketRead0(Native Method) + ... +[11:35:17.036] [http-nio-45678-exec-2] [INFO ] [.t.c.c.d.ClientReadTimeoutController:38 ] - Done +``` + +我们知道,类似 **Tomcat** 的 **Web** 服务器都是把服务端请求提交到线程池处理的,只要服务端收到了请求,网络层面的超时和断开便不会影响服务端的执行。因此,出现读取超时不能随意假设服务端的处理情况,需要根据业务状态考虑如何进行后续处理。 + +第二个误区:认为读取超时只是 **Socket** 网络层面的概念,是数据传输的最长耗时,故将其配置得非常短,比如 **100** 毫秒。 + +其实,发生了读取超时,网络层面无法区分是服务端没有把数据返回给客户端,还是数据在网络上耗时较久或丢包。 + +但,因为 **TCP** 是先建立连接后传输数据,对于网络情况不是特别糟糕的服务调用,通常可以认为出现连接超时是网络问题或服务不在线,而出现读取超时是服务处理超时。确切地说,读取超时指的是,向 Socket 写入数据后,我们等到 **Socket** 返回数据的超时时间,其中包含的时间或者说绝大部分的时间,是服务端处理业务逻辑的时间。 + +第三个误区:认为超时时间越长任务接口成功率就越高,将读取超时参数配置得太长。 + +进行 HTTP 请求一般是需要获得结果的,属于同步调用。如果超时时间很长,在等待服务端返回数据的同时,客户端线程(通常是 Tomcat 线程)也在等待,当下游服务出现大量超时的时候,程序可能也会受到拖累创建大量线程,最终崩溃。 + +对定时任务或异步任务来说,读取超时配置得长些问题不大。但面向用户响应的请求或是微服务短平快的同步接口调用,并发量一般较大,我们应该设置一个较短的读取超时时间,以防止被下游服务拖慢,通常不会设置超过 30 秒的读取超时。 + +你可能会说,如果把读取超时设置为 2 秒,服务端接口需要 3 秒,岂不是永远都拿不到执行结果了?的确是这样,因此设置读取超时一定要根据实际情况,过长可能会让下游抖动影响到自己,过短又可能影响成功率。甚至,有些时候我们还要根据下游服务的 SLA,为不同的服务端接口设置不同的客户端读取超时。 + +## Feign 和 Ribbon 配合使用,你知道怎么配置超时吗? + +刚才我强调了根据自己的需求配置连接超时和读取超时的重要性,你是否尝试过为 Spring Cloud 的 Feign 配置超时参数呢,有没有被网上的各种资料绕晕呢? + +在我看来,为 Feign 配置超时参数的复杂之处在于,Feign 自己有两个超时参数,它使用的负载均衡组件 Ribbon 本身还有相关配置。那么,这些配置的优先级是怎样的,又哪些什么坑呢?接下来,我们做一些实验吧。 + +为测试服务端的超时,假设有这么一个服务端接口,什么都不干只休眠 10 分钟: + +``` +@PostMapping("/server") +public void server() throws InterruptedException { + TimeUnit.MINUTES.sleep(10); +} +``` + +首先,定义一个 Feign 来调用这个接口: + +``` +@FeignClient(name = "clientsdk") +public interface Client { + @PostMapping("/feignandribbon/server") + void server(); +} +``` + +然后,通过 Feign Client 进行接口调用: + +``` +@GetMapping("client") +public void timeout() { + long begin=System.currentTimeMillis(); + try{ + client.server(); + }catch (Exception ex){ + log.warn("执行耗时:{}ms 错误:{}", System.currentTimeMillis() - begin, ex.getMessage()); + } +} +``` + +在配置文件仅指定服务端地址的情况下: + +``` +clientsdk.ribbon.listOfServers=localhost:45678 +``` + +得到如下输出: + +``` +[15:40:16.094] [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController :26 ] - 执行耗时:1007ms 错误:Read timed out executing POST http://clientsdk/feignandribbon/server +``` + +从这个输出中,我们可以得到结论一,默认情况下 Feign 的读取超时是 1 秒,如此短的读取超时算是坑点一。 + +我们来分析一下源码。打开 RibbonClientConfiguration 类后,会看到 DefaultClientConfigImpl 被创建出来之后,ReadTimeout 和 ConnectTimeout 被设置为 1s: + +``` +/** + \* Ribbon client default connect timeout. + */ + +public static final int DEFAULT_CONNECT_TIMEOUT = 1000; +/** + \* Ribbon client default read timeout. + */ + +public static final int DEFAULT_READ_TIMEOUT = 1000; +@Bean +@ConditionalOnMissingBean +public IClientConfig ribbonClientConfig() { + + DefaultClientConfigImpl config = new DefaultClientConfigImpl(); + config.loadProperties(this.name); + config.set(CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT); + config.set(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT); + config.set(CommonClientConfigKey.GZipPayload, DEFAULT_GZIP_PAYLOAD); + return config; + +} +``` + +如果要修改 Feign 客户端默认的两个全局超时时间,你可以设置 feign.client.config.default.readTimeout 和 feign.client.config.default.connectTimeout 参数: + +``` +feign.client.config.default.readTimeout=3000 +feign.client.config.default.connectTimeout=3000 +``` + +修改配置后重试,得到如下日志: + +``` +[15:43:39.955] [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController :26 ] - 执行耗时:3006ms 错误:Read timed out executing POST http://clientsdk/feignandribbon/server +``` + +可见,3 秒读取超时生效了。注意:这里有一个大坑,如果你希望只修改读取超时,可能会只配置这么一行: + +``` +feign.client.config.default.readTimeout=3000 +``` + +测试一下你就会发现,这样的配置是无法生效的! + +结论二,也是坑点二,如果要配置 Feign 的读取超时,就必须同时配置连接超时,才能生效。 + +打开 FeignClientFactoryBean 可以看到,只有同时设置 ConnectTimeout 和 ReadTimeout,Request.Options 才会被覆盖: + +``` +if (config.getConnectTimeout() != null && config.getReadTimeout() != null) { + builder.options(new Request.Options(config.getConnectTimeout(), + config.getReadTimeout())); +} +``` + +更进一步,如果你希望针对单独的 Feign Client 设置超时时间,可以把 default 替换为 Client 的 name: + +``` +feign.client.config.default.readTimeout=3000 +feign.client.config.default.connectTimeout=3000 +feign.client.config.clientsdk.readTimeout=2000 +feign.client.config.clientsdk.connectTimeout=2000 +``` + +可以得出结论三,单独的超时可以覆盖全局超时,这符合预期,不算坑: + +``` +[15:45:51.708] [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController :26 ] - 执行耗时:2006ms 错误:Read timed out executing POST http://clientsdk/feignandribbon/server +``` + +结论四,除了可以配置 Feign,也可以配置 Ribbon 组件的参数来修改两个超时时间。这里的坑点三是,参数首字母要大写,和 Feign 的配置不同。 + +``` +ribbon.ReadTimeout=4000 +ribbon.ConnectTimeout=4000 +``` + +可以通过日志证明参数生效: + +``` +[15:55:18.019] [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController :26 ] - 执行耗时:4003ms 错误:Read timed out executing POST http://clientsdk/feignandribbon/server +``` + +最后,我们来看看同时配置 Feign 和 Ribbon 的参数,最终谁会生效?如下代码的参数配置: + +``` +clientsdk.ribbon.listOfServers=localhost:45678 +feign.client.config.default.readTimeout=3000 +feign.client.config.default.connectTimeout=3000 +ribbon.ReadTimeout=4000 +ribbon.ConnectTimeout=4000 +``` + +日志输出证明,最终生效的是 Feign 的超时: + +``` +[16:01:19.972] [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController :26 ] - 执行耗时:3006ms 错误:Read timed out executing POST http://clientsdk/feignandribbon/server +``` + +结论五,同时配置 Feign 和 Ribbon 的超时,以 Feign 为准。这有点反直觉,因为 Ribbon 更底层所以你会觉得后者的配置会生效,但其实不是这样的。 + +在 LoadBalancerFeignClient 源码中可以看到,如果 Request.Options 不是默认值,就会创建一个 FeignOptionsClientConfig 代替原来 Ribbon 的 DefaultClientConfigImpl,导致 Ribbon 的配置被 Feign 覆盖: + +``` +IClientConfig getClientConfig(Request.Options options, String clientName) { + IClientConfig requestConfig; + if (options == DEFAULT_OPTIONS) { + requestConfig = this.clientFactory.getClientConfig(clientName); + } + else { + requestConfig = new FeignOptionsClientConfig(options); + } + return requestConfig; +} +``` + +但如果这么配置最终生效的还是 Ribbon 的超时(4 秒),这容易让人产生 Ribbon 覆盖了 Feign 的错觉,其实这还是因为坑二所致,单独配置 Feign 的读取超时并不能生效: + +``` +clientsdk.ribbon.listOfServers=localhost:45678 +feign.client.config.default.readTimeout=3000 +feign.client.config.clientsdk.readTimeout=2000 +ribbon.ReadTimeout=4000 +``` + +## 你是否知道 Ribbon 会自动重试请求呢? + +一些 HTTP 客户端往往会内置一些重试策略,其初衷是好的,毕竟因为网络问题导致丢包虽然频繁但持续时间短,往往重试下第二次就能成功,但一定要小心这种自作主张是否符合我们的预期。 + +之前遇到过一个短信重复发送的问题,但短信服务的调用方用户服务,反复确认代码里没有重试逻辑。那问题究竟出在哪里了?我们来重现一下这个案例。 + +首先,定义一个 Get 请求的发送短信接口,里面没有任何逻辑,休眠 2 秒模拟耗时: + +``` +@RestController +@RequestMapping("ribbonretryissueserver") +@Slf4j +public class RibbonRetryIssueServerController { + @GetMapping("sms") + public void sendSmsWrong(@RequestParam("mobile") String mobile, @RequestParam("message") String message, HttpServletRequest request) throws InterruptedException { + //输出调用参数后休眠2秒 + log.info("{} is called, {}=>{}", request.getRequestURL().toString(), mobile, message); + TimeUnit.SECONDS.sleep(2); + } +} +``` + +配置一个 Feign 供客户端调用: + +``` +@FeignClient(name = "SmsClient") +public interface SmsClient { + @GetMapping("/ribbonretryissueserver/sms") + void sendSmsWrong(@RequestParam("mobile") String mobile, @RequestParam("message") String message); +} +``` + +Feign 内部有一个 Ribbon 组件负责客户端负载均衡,通过配置文件设置其调用的服务端为两个节点: + +``` +SmsClient.ribbon.listOfServers=localhost:45679,localhost:45678 +``` + +写一个客户端接口,通过 Feign 调用服务端: + +``` +@RestController +@RequestMapping("ribbonretryissueclient") +@Slf4j +public class RibbonRetryIssueClientController { + @Autowired + private SmsClient smsClient; + @GetMapping("wrong") + public String wrong() { + log.info("client is called"); + try{ + //通过Feign调用发送短信接口 + smsClient.sendSmsWrong("13600000000", UUID.randomUUID().toString()); + } catch (Exception ex) { + //捕获可能出现的网络错误 + log.error("send sms failed : {}", ex.getMessage()); + } + return "done"; + } +} +``` + +在 45678 和 45679 两个端口上分别启动服务端,然后访问 45678 的客户端接口进行测试。因为客户端和服务端控制器在一个应用中,所以 45678 同时扮演了客户端和服务端的角色。 + +在 45678 日志中可以看到,29 秒时客户端收到请求开始调用服务端接口发短信,同时服务端收到了请求,2 秒后(注意对比第一条日志和第三条日志)客户端输出了读取超时的错误信息: + +``` +[12:49:29.020] [http-nio-45678-exec-4] [INFO ] [c.d.RibbonRetryIssueClientController:23 ] - client is called + +[12:49:29.026] [http-nio-45678-exec-5] [INFO ] [c.d.RibbonRetryIssueServerController:16 ] - http://localhost:45678/ribbonretryissueserver/sms is called, 13600000000=>a2aa1b32-a044-40e9-8950-7f0189582418 + +[12:49:31.029] [http-nio-45678-exec-4] [ERROR] [c.d.RibbonRetryIssueClientController:27 ] - send sms failed : Read timed out executing GET http://SmsClient/ribbonretryissueserver/sms?mobile=13600000000&message=a2aa1b32-a044-40e9-8950-7f0189582418 +``` + +而在另一个服务端 45679 的日志中还可以看到一条请求,30 秒时收到请求,也就是客户端接口调用后的 1 秒: + +``` +[12:49:30.029] [http-nio-45679-exec-2] [INFO ] [c.d.RibbonRetryIssueServerController:16 ] - http://localhost:45679/ribbonretryissueserver/sms is called, 13600000000=>a2aa1b32-a044-40e9-8950-7f0189582418 +``` + +客户端接口被调用的日志只输出了一次,而服务端的日志输出了两次。虽然 Feign 的默认读取超时时间是 1 秒,但客户端 2 秒后才出现超时错误。显然,这说明客户端自作主张进行了一次重试,导致短信重复发送。 + +翻看 Ribbon 的源码可以发现,MaxAutoRetriesNextServer 参数默认为 1,也就是 Get 请求在某个服务端节点出现问题(比如读取超时)时,Ribbon 会自动重试一次: + +``` +// DefaultClientConfigImpl + +public static final int DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER = 1; +public static final int DEFAULT_MAX_AUTO_RETRIES = 0; +// RibbonLoadBalancedRetryPolicy +public boolean canRetry(LoadBalancedRetryContext context) { + HttpMethod method = context.getRequest().getMethod(); + return HttpMethod.GET == method || lbContext.isOkToRetryOnAllOperations(); +} + +@Override +public boolean canRetrySameServer(LoadBalancedRetryContext context) { + return sameServerCount < lbContext.getRetryHandler().getMaxRetriesOnSameServer() + && canRetry(context); +} + +@Override + +public boolean canRetryNextServer(LoadBalancedRetryContext context) { + + // this will be called after a failure occurs and we increment the counter + + // so we check that the count is less than or equals to too make sure + + // we try the next server the right number of times + + return nextServerCount <= lbContext.getRetryHandler().getMaxRetriesOnNextServer() + + && canRetry(context); + +} +``` + +解决办法有两个: + +一是,把发短信接口从 Get 改为 Post。其实,这里还有一个 API 设计问题,有状态的 API 接口不应该定义为 Get。根据 HTTP 协议的规范,Get 请求用于数据查询,而 Post 才是把数据提交到服务端用于修改或新增。选择 Get 还是 Post 的依据,应该是 API 的行为,而不是参数大小。这里的一个误区是,Get 请求的参数包含在 Url QueryString 中,会受浏览器长度限制,所以一些同学会选择使用 JSON 以 Post 提交大参数,使用 Get 提交小参数。 + +二是,将 MaxAutoRetriesNextServer 参数配置为 0,禁用服务调用失败后在下一个服务端节点的自动重试。在配置文件中添加一行即可: + +``` +ribbon.MaxAutoRetriesNextServer=0 +``` + +看到这里,你觉得问题出在用户服务还是短信服务呢? + +在我看来,双方都有问题。就像之前说的,Get 请求应该是无状态或者幂等的,短信接口可以设计为支持幂等调用的;而用户服务的开发同学,如果对 Ribbon 的重试机制有所了解的话,或许就能在排查问题上少走些弯路。 + +## 并发限制了爬虫的抓取能力 + +除了超时和重试的坑,进行 HTTP 请求调用还有一个常见的问题是,并发数的限制导致程序的处理能力上不去。 + +我之前遇到过一个爬虫项目,整体爬取数据的效率很低,增加线程池数量也无济于事,只能堆更多的机器做分布式的爬虫。现在,我们就来模拟下这个场景,看看问题出在了哪里。 + +假设要爬取的服务端是这样的一个简单实现,休眠 1 秒返回数字 1: + +``` +@GetMapping("server") +public int server() throws InterruptedException { + + TimeUnit.SECONDS.sleep(1); + + return 1; + +} +``` + +爬虫需要多次调用这个接口进行数据抓取,为了确保线程池不是并发的瓶颈,我们使用一个没有线程上限的 newCachedThreadPool 作为爬取任务的线程池(再次强调,除非你非常清楚自己的需求,否则一般不要使用没有线程数量上限的线程池),然后使用 HttpClient 实现 HTTP 请求,把请求任务循环提交到线程池处理,最后等待所有任务执行完成后输出执行耗时: + +``` +private int sendRequest(int count, Supplier client) throws InterruptedException { + + //用于计数发送的请求个数 + AtomicInteger atomicInteger = new AtomicInteger(); + //使用HttpClient从server接口查询数据的任务提交到线程池并行处理 + ExecutorService threadPool = Executors.newCachedThreadPool(); + long begin = System.currentTimeMillis(); + IntStream.rangeClosed(1, count).forEach(i -> { + threadPool.execute(() -> { + try (CloseableHttpResponse response = client.get().execute(new HttpGet("http://127.0.0.1:45678/routelimit/server"))) { + atomicInteger.addAndGet(Integer.parseInt(EntityUtils.toString(response.getEntity()))); + } catch (Exception ex) { + ex.printStackTrace(); + } + }); + }); + + //等到count个任务全部执行完毕 + + threadPool.shutdown(); + threadPool.awaitTermination(1, TimeUnit.HOURS); + log.info("发送 {} 次请求,耗时 {} ms", atomicInteger.get(), System.currentTimeMillis() - begin); + return atomicInteger.get(); +} +``` + +首先,使用默认的 PoolingHttpClientConnectionManager 构造的 CloseableHttpClient,测试一下爬取 10 次的耗时: + +``` +static CloseableHttpClient httpClient1; +static { + httpClient1 = HttpClients.custom().setConnectionManager(new PoolingHttpClientConnectionManager()).build(); +} + +@GetMapping("wrong") +public int wrong(@RequestParam(value = "count", defaultValue = "10") int count) throws InterruptedException { + return sendRequest(count, () -> httpClient1); + +} +``` + +虽然一个请求需要 1 秒执行完成,但我们的线程池是可以扩张使用任意数量线程的。按道理说,10 个请求并发处理的时间基本相当于 1 个请求的处理时间,也就是 1 秒,但日志中显示实际耗时 5 秒: + +``` +[12:48:48.122] [http-nio-45678-exec-1] [INFO ] [o.g.t.c.h.r.RouteLimitController :54 ] - 发送 10 次请求,耗时 5265 ms +``` + +查看 PoolingHttpClientConnectionManager 源码,可以注意到有两个重要参数: + +defaultMaxPerRoute=2,也就是同一个主机 / 域名的最大并发请求数为 2。我们的爬虫需要 10 个并发,显然是默认值太小限制了爬虫的效率。 + +maxTotal=20,也就是所有主机整体最大并发为 20,这也是 HttpClient 整体的并发度。目前,我们请求数是 10 最大并发是 10,20 不会成为瓶颈。举一个例子,使用同一个 HttpClient 访问 10 个域名,defaultMaxPerRoute 设置为 10,为确保每一个域名都能达到 10 并发,需要把 maxTotal 设置为 100。 + +``` +public PoolingHttpClientConnectionManager( + + final HttpClientConnectionOperator httpClientConnectionOperator, + final HttpConnectionFactory connFactory, + final long timeToLive, final TimeUnit timeUnit) { + ... + this.pool = new CPool(new InternalConnectionFactory( + this.configData, connFactory), 2, 20, timeToLive, timeUnit); + ... +} + +public CPool( + final ConnFactory connFactory, + final int defaultMaxPerRoute, final int maxTotal, + final long timeToLive, final TimeUnit timeUnit) { + ... + +}} +``` + +HttpClient 是 Java 非常常用的 HTTP 客户端,这个问题经常出现。你可能会问,为什么默认值限制得这么小。 + +其实,这不能完全怪 HttpClient,很多早期的浏览器也限制了同一个域名两个并发请求。对于同一个域名并发连接的限制,其实是 HTTP 1.1 协议要求的,这里有这么一段话: + +``` +Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion. +``` + +HTTP 1.1 协议是 20 年前制定的,现在 HTTP 服务器的能力强很多了,所以有些新的浏览器没有完全遵从 2 并发这个限制,放开并发数到了 8 甚至更大。如果需要通过 HTTP 客户端发起大量并发请求,不管使用什么客户端,请务必确认客户端的实现默认的并发度是否满足需求。 + +既然知道了问题所在,我们就尝试声明一个新的 HttpClient 放开相关限制,设置 maxPerRoute 为 50、maxTotal 为 100,然后修改一下刚才的 wrong 方法,使用新的客户端进行测试: + +``` +httpClient2 = HttpClients.custom().setMaxConnPerRoute(10).setMaxConnTotal(20).build(); +``` + +输出如下,10 次请求在 1 秒左右执行完成。可以看到,因为放开了一个 Host 2 个并发的默认限制,爬虫效率得到了大幅提升: + +``` +[12:58:11.333] [http-nio-45678-exec-3] [INFO ] [o.g.t.c.h.r.RouteLimitController :54 ] - 发送 10 次请求,耗时 1023 ms +``` + +## 重点回顾 + +今天,我和你分享了 HTTP 调用最常遇到的超时、重试和并发问题。 + +连接超时代表建立 TCP 连接的时间,读取超时代表了等待远端返回数据的时间,也包括远端程序处理的时间。在解决连接超时问题时,我们要搞清楚连的是谁;在遇到读取超时问题的时候,我们要综合考虑下游服务的服务标准和自己的服务标准,设置合适的读取超时时间。此外,在使用诸如 Spring Cloud Feign 等框架时务必确认,连接和读取超时参数的配置是否正确生效。 + +对于重试,因为 HTTP 协议认为 Get 请求是数据查询操作,是无状态的,又考虑到网络出现丢包是比较常见的事情,有些 HTTP 客户端或代理服务器会自动重试 Get/Head 请求。如果你的接口设计不支持幂等,需要关闭自动重试。但,更好的解决方案是,遵从 HTTP 协议的建议来使用合适的 HTTP 方法。 + +最后我们看到,包括 HttpClient 在内的 HTTP 客户端以及浏览器,都会限制客户端调用的最大并发数。如果你的客户端有比较大的请求调用并发,比如做爬虫,或是扮演类似代理的角色,又或者是程序本身并发较高,如此小的默认值很容易成为吞吐量的瓶颈,需要及时调整。 + +今天用到的代码,我都放在了 GitHub 上,你可以点击这个链接查看。 + +## 思考与讨论 + +第一节中我们强调了要注意连接超时和读取超时参数的配置,大多数的 HTTP 客户端也都有这两个参数。有读就有写,但为什么我们很少看到“写入超时”的概念呢? + +除了 Ribbon 的 AutoRetriesNextServer 重试机制,Nginx 也有类似的重试功能。你了解 Nginx 相关的配置吗? + +针对 HTTP 调用,你还遇到过什么坑吗? \ No newline at end of file diff --git "a/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/README.md" "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/README.md" new file mode 100644 index 00000000..b22350b3 --- /dev/null +++ "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/README.md" @@ -0,0 +1,551 @@ +今天,我来和你聊聊业务代码中与数据库事务相关的坑。 + +**Spring** 针对 **Java** **Transaction API** (**JTA**)、**JDBC**、**Hibernate** 和 **Java Persistence API (JPA)** 等事务 **API**,实现了一致的编程模型,而 **Spring** 的声明式事务功能更是提供了极其方便的事务配置方式,配合 **Spring Boot** 的自动配置,大多数 **Spring Boot** 项目只需要在方法上标记 **@Transactional** 注解,即可一键开启方法的事务性配置。 + +据我观察,大多数业务开发同学都有事务的概念,也知道如果整体考虑多个数据库操作要么成功要么失败时,需要通过数据库事务来实现多个操作的一致性和原子性。但,在使用上大多仅限于为方法标记 **@Transactional**,不会去关注事务是否有效、出错后事务是否正确回滚,也不会考虑复杂的业务代码中涉及多个子业务逻辑时,怎么正确处理事务。 + +事务没有被正确处理,一般来说不会过于影响正常流程,也不容易在测试阶段被发现。但当系统越来越复杂、压力越来越大之后,就会带来大量的数据不一致问题,随后就是大量的人工介入查看和修复数据。 + +所以说,一个成熟的业务系统和一个基本可用能完成功能的业务系统,在事务处理细节上的差异非常大。要确保事务的配置符合业务功能的需求,往往不仅仅是技术问题,还涉及产品流程和架构设计的问题。今天这一讲的标题“ **20% 的业务代码的 Spring 声明式事务,可能都没处理正确** ”中,20% 这个数字在我看来还是比较保守的。 + +我今天要分享的内容,就是帮助你在技术问题上理清思路,避免因为事务处理不当让业务逻辑的实现产生大量偶发 Bug。 + +## 小心 Spring 的事务可能没有生效 + +在使用 **@Transactional** 注解开启声明式事务时, 第一个最容易忽略的问题是,很可能事务并没有生效。 + +实现下面的 **Demo** 需要一些基础类,首先定义一个具有 ID 和姓名属性的 **UserEntity**,也就是一个包含两个字段的用户表: + +``` +@Entity +@Data +public class UserEntity { + + @Id + @GeneratedValue(strategy = AUTO) + private Long id; + + private String name; + + public UserEntity() { } + + public UserEntity(String name) { + this.name = name; + } + +} +``` + +为了方便理解,我使用 **Spring JPA** 做数据库访问,实现这样一个 **Repository**,新增一个根据用户名查询所有数据的方法: + +``` +@Repository +public interface UserRepository extends JpaRepository { + List findByName(String name); +} +``` + +定义一个 **UserService** 类,负责业务逻辑处理。如果不清楚 **@Transactional** 的实现方式,只考虑代码逻辑的话,这段代码看起来没有问题。 + +定义一个入口方法 **createUserWrong1** 来调用另一个私有方法 **createUserPrivate**,私有方法上标记了 **@Transactional** 注解。当传入的用户名包含 **test** 关键字时判断为用户名不合法,抛出异常,让用户创建操作失败,期望事务可以回滚: + +```java +@Service +@Slf4j +public class UserService { + + @Autowired + private UserRepository userRepository; + + //一个公共方法供Controller调用,内部调用事务性的私有方法 + + public int createUserWrong1(String name) { + try { + this.createUserPrivate(new UserEntity(name)); + } catch (Exception ex) { + log.error("create user failed because {}", ex.getMessage()); + } + return userRepository.findByName(name).size(); + } + + //标记了@Transactional的private方法 + + @Transactional + private void createUserPrivate(UserEntity entity) { + userRepository.save(entity); + if (entity.getName().contains("test")) + throw new RuntimeException("invalid username!"); + } + + //根据用户名查询用户数 + + public int getUserCount(String name) { + return userRepository.findByName(name).size(); + } + +} +``` + +下面是 **Controller** 的实现,只是调用一下刚才定义的 **UserService** 中的入口方法 **createUserWrong1**。 + +```java +@Autowired +private UserService userService; + +@GetMapping("wrong1") +public int wrong1(@RequestParam("name") String name) { + return userService.createUserWrong1(name); + +} +``` + +调用接口后发现,即便用户名不合法,用户也能创建成功。刷新浏览器,多次发现有十几个的非法用户注册。 + +这里给出 **@Transactional** 生效原则 1,除非特殊配置(比如使用 **AspectJ** 静态织入实现 **AOP**),否则只有定义在 **public** 方法上的 **@Transactional** 才能生效。原因是,**Spring** 默认通过动态代理的方式实现 **AOP**,对目标方法进行增强,**private** 方法无法代理到,**Spring** 自然也无法动态增强事务处理逻辑。 + +你可能会说,修复方式很简单,把标记了事务注解的 **createUserPrivate** 方法改为 **public** 即可。在 **UserService** 中再建一个入口方法 **createUserWrong2**,来调用这个 **public** 方法再次尝试: + +```java +public int createUserWrong2(String name) { + try { + this.createUserPublic(new UserEntity(name)); + } catch (Exception ex) { + log.error("create user failed because {}", ex.getMessage()); + } + return userRepository.findByName(name).size(); +} + +//标记了@Transactional的public方法 +@Transactional +public void createUserPublic(UserEntity entity) { + userRepository.save(entity); + if (entity.getName().contains("test")) + throw new RuntimeException("invalid username!"); +} +``` + +测试发现,调用新的 **createUserWrong2** 方法事务同样不生效。这里,我给出 **@Transactional** 生效原则 2,必须通过代理过的类从外部调用目标方法才能生效。 + +**Spring** 通过 AOP 技术对方法进行增强,要调用增强过的方法必然是调用代理后的对象。我们尝试修改下 **UserService** 的代码,注入一个 **self**,然后再通过 self 实例调用标记有 **@Transactional** 注解的 **createUserPublic** 方法。设置断点可以看到,**self** 是由 Spring 通过 **CGLIB** 方式增强过的类: + +**CGLIB** 通过继承方式实现代理类,**private** 方法在子类不可见,自然也就无法进行事务增强; + +this 指针代表对象自己,Spring 不可能注入 this,所以通过 this 访问方法必然不是代理。 + +![img](images/b077c033fa394353309fbb4f8368e46c.png) + +把 this 改为 self 后测试发现,在 Controller 中调用 createUserRight 方法可以验证事务是生效的,非法的用户注册操作可以回滚。 + +虽然在 UserService 内部注入自己调用自己的 createUserPublic 可以正确实现事务,但更合理的实现方式是,让 Controller 直接调用之前定义的 UserService 的 createUserPublic 方法,因为注入自己调用自己很奇怪,也不符合分层实现的规范: + +``` +@GetMapping("right2") +public int right2(@RequestParam("name") String name) { + try { + userService.createUserPublic(new UserEntity(name)); + } catch (Exception ex) { + log.error("create user failed because {}", ex.getMessage()); + } + return userService.getUserCount(name); +} +``` + +我们再通过一张图来回顾下 this 自调用、通过 self 调用,以及在 Controller 中调用 UserService 三种实现的区别: + +![img](images/c43ea620b0b611ae194f8438506d7570.png) + +通过 this 自调用,没有机会走到 Spring 的代理类;后两种改进方案调用的是 Spring 注入的 UserService,通过代理调用才有机会对 createUserPublic 方法进行动态增强。 + +这里,我还有一个小技巧,强烈建议你在开发时打开相关的 Debug 日志,以方便了解 Spring 事务实现的细节,并及时判断事务的执行情况。 + +我们的 Demo 代码使用 JPA 进行数据库访问,可以这么开启 Debug 日志: + +``` +logging.level.org.springframework.orm.jpa=DEBUG +``` + +开启日志后,我们再比较下在 UserService 中通过 this 调用和在 Controller 中通过注入的 UserService Bean 调用 createUserPublic 区别。很明显,this 调用因为没有走代理,事务没有在 createUserPublic 方法上生效,只在 Repository 的 save 方法层面生效: + +``` +//在UserService中通过this调用public的createUserPublic + +[10:10:19.913] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :370 ] - Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT + +//在Controller中通过注入的UserService Bean调用createUserPublic + +[10:10:47.750] [http-nio-45678-exec-6] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :370 ] - Creating new transaction with name [org.geekbang.time.commonmistakes.transaction.demo1.UserService.createUserPublic]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT +``` + +你可能还会考虑一个问题,这种实现在 Controller 里处理了异常显得有点繁琐,还不如直接把 createUserWrong2 方法加上 @Transactional 注解,然后在 Controller 中直接调用这个方法。这样一来,既能从外部(Controller 中)调用 UserService 中的方法,方法又是 public 的能够被动态代理 AOP 增强。 + +你可以试一下这种方法,但很容易就会踩第二个坑,即因为没有正确处理异常,导致事务即便生效也不一定能回滚。 + +## 事务即便生效也不一定能回滚 + +通过 AOP 实现事务处理可以理解为,使用 try…catch…来包裹标记了 @Transactional 注解的方法,当方法出现了异常并且满足一定条件的时候,在 catch 里面我们可以设置事务回滚,没有异常则直接提交事务。 + +这里的“一定条件”,主要包括两点。 + +第一,只有异常传播出了标记了 @Transactional 注解的方法,事务才能回滚。在 Spring 的 TransactionAspectSupport 里有个 invokeWithinTransaction 方法,里面就是处理事务的逻辑。可以看到,只有捕获到异常才能进行后续事务处理: + +``` +try { + // This is an around advice: Invoke the next interceptor in the chain. + // This will normally result in a target object being invoked. + retVal = invocation.proceedWithInvocation(); +} + +catch (Throwable ex) { + // target invocation exception + completeTransactionAfterThrowing(txInfo, ex); + throw ex; +} + +finally { + cleanupTransactionInfo(txInfo); +} +``` + +第二,默认情况下,出现 RuntimeException(非受检异常)或 Error 的时候,Spring 才会回滚事务。 + +打开 Spring 的 DefaultTransactionAttribute 类能看到如下代码块,可以发现相关证据,通过注释也能看到 Spring 这么做的原因,大概的意思是受检异常一般是业务异常,或者说是类似另一种方法的返回值,出现这样的异常可能业务还能完成,所以不会主动回滚;而 Error 或 RuntimeException 代表了非预期的结果,应该回滚: + +``` +/** + * The default behavior is as with EJB: rollback on unchecked exception + * ({@link RuntimeException}), assuming an unexpected outcome outside of any + * business rules. Additionally, we also attempt to rollback on {@link Error} which + * is clearly an unexpected outcome as well. By contrast, a checked exception is + * considered a business exception and therefore a regular expected outcome of the + * transactional business method, i.e. a kind of alternative return value which + * still allows for regular completion of resource operations. + *

This is largely consistent with TransactionTemplate's default behavior, + * except that TransactionTemplate also rolls back on undeclared checked exceptions + * (a corner case). For declarative transactions, we expect checked exceptions to be + * intentionally declared as business exceptions, leading to a commit by default. + * @see org.springframework.transaction.support.TransactionTemplate#execute + */ +@Override +public boolean rollbackOn(Throwable ex) { + + return (ex instanceof RuntimeException || ex instanceof Error); + +} +``` + +接下来,我和你分享 2 个反例。 + +重新实现一下 UserService 中的注册用户操作: + +在 createUserWrong1 方法中会抛出一个 RuntimeException,但由于方法内 catch 了所有异常,异常无法从方法传播出去,事务自然无法回滚。 + +在 createUserWrong2 方法中,注册用户的同时会有一次 otherTask 文件读取操作,如果文件读取失败,我们希望用户注册的数据库操作回滚。虽然这里没有捕获异常,但因为 otherTask 方法抛出的是受检异常,createUserWrong2 传播出去的也是受检异常,事务同样不会回滚。 + +``` +@Service +@Slf4j +public class UserService { + + @Autowired + private UserRepository userRepository; + + //异常无法传播出方法,导致事务无法回滚 + + @Transactional + public void createUserWrong1(String name) { + try { + userRepository.save(new UserEntity(name)); + throw new RuntimeException("error"); + } catch (Exception ex) { + log.error("create user failed", ex); + } + } + + //即使出了受检异常也无法让事务回滚 + @Transactional + public void createUserWrong2(String name) throws IOException { + userRepository.save(new UserEntity(name)); + otherTask(); + } + + //因为文件不存在,一定会抛出一个IOException + private void otherTask() throws IOException { + Files.readAllLines(Paths.get("file-that-not-exist")); + } + +} +``` + +Controller 中的实现,仅仅是调用 UserService 的 createUserWrong1 和 createUserWrong2 方法,这里就贴出实现了。这 2 个方法的实现和调用,虽然完全避开了事务不生效的坑,但因为异常处理不当,导致程序没有如我们期望的文件操作出现异常时回滚事务。 + +现在,我们来看下修复方式,以及如何通过日志来验证是否修复成功。针对这 2 种情况,对应的修复方法如下。 + +第一,如果你希望自己捕获异常进行处理的话,也没关系,可以手动设置让当前事务处于回滚状态: + +``` +@Transactional +public void createUserRight1(String name) { + try { + userRepository.save(new UserEntity(name)); + throw new RuntimeException("error"); + } catch (Exception ex) { + log.error("create user failed", ex); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + +} +``` + +运行后可以在日志中看到 Rolling back 字样,确认事务回滚了。同时,我们还注意到“Transactional code has requested rollback”的提示,表明手动请求回滚: + +``` +[22:14:49.352] [http-nio-45678-exec-4] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :698 ] - Transactional code has requested rollback + +[22:14:49.353] [http-nio-45678-exec-4] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :834 ] - Initiating transaction rollback + +[22:14:49.353] [http-nio-45678-exec-4] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :555 ] - Rolling back JPA transaction on EntityManager [SessionImpl(1906719643)] +``` + +第二,在注解中声明,期望遇到所有的 Exception 都回滚事务(来突破默认不回滚受检异常的限制): + +``` +@Transactional(rollbackFor = Exception.class) +public void createUserRight2(String name) throws IOException { + userRepository.save(new UserEntity(name)); + otherTask(); +} +``` + +运行后,同样可以在日志中看到回滚的提示: + +``` +[22:10:47.980] [http-nio-45678-exec-4] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :834 ] - Initiating transaction rollback + +[22:10:47.981] [http-nio-45678-exec-4] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :555 ] - Rolling back JPA transaction on EntityManager [SessionImpl(1419329213)] +``` + +在这个例子中,我们展现的是一个复杂的业务逻辑,其中有数据库操作、IO 操作,在 IO 操作出现问题时希望让数据库事务也回滚,以确保逻辑的一致性。在有些业务逻辑中,可能会包含多次数据库操作,我们不一定希望将两次操作作为一个事务来处理,这时候就需要仔细考虑事务传播的配置了,否则也可能踩坑。 + +## 请确认事务传播配置是否符合自己的业务逻辑 + +有这么一个场景:一个用户注册的操作,会插入一个主用户到用户表,还会注册一个关联的子用户。我们希望将子用户注册的数据库操作作为一个独立事务来处理,即使失败也不会影响主流程,即不影响主用户的注册。 + +接下来,我们模拟一个实现类似业务逻辑的 UserService: + +``` +@Autowired +private UserRepository userRepository; + +@Autowired +private SubUserService subUserService; + +@Transactional +public void createUserWrong(UserEntity entity) { + + createMainUser(entity); + subUserService.createSubUserWithExceptionWrong(entity); + +} + +private void createMainUser(UserEntity entity) { + userRepository.save(entity); + log.info("createMainUser finish"); + +} +``` + +SubUserService 的 createSubUserWithExceptionWrong 实现正如其名,因为最后我们抛出了一个运行时异常,错误原因是用户状态无效,所以子用户的注册肯定是失败的。我们期望子用户的注册作为一个事务单独回滚,不影响主用户的注册,这样的逻辑可以实现吗? + +``` +@Service +@Slf4j +public class SubUserService { + + @Autowired + private UserRepository userRepository; + + @Transactional + public void createSubUserWithExceptionWrong(UserEntity entity) { + log.info("createSubUserWithExceptionWrong start"); + userRepository.save(entity); + throw new RuntimeException("invalid status"); + } +} +``` + +我们在 Controller 里实现一段测试代码,调用 UserService: + +``` +@GetMapping("wrong") +public int wrong(@RequestParam("name") String name) { + + try { + userService.createUserWrong(new UserEntity(name)); + } catch (Exception ex) { + log.error("createUserWrong failed, reason:{}", ex.getMessage()); + } + + return userService.getUserCount(name); + +} +``` + +调用后可以在日志中发现如下信息,很明显事务回滚了,最后 Controller 打出了创建子用户抛出的运行时异常: + +``` +[22:50:42.866] [http-nio-45678-exec-8] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :555 ] - Rolling back JPA transaction on EntityManager [SessionImpl(103972212)] + +[22:50:42.869] [http-nio-45678-exec-8] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :620 ] - Closing JPA EntityManager [SessionImpl(103972212)] after transaction + +[22:50:42.869] [http-nio-45678-exec-8] [ERROR] [t.d.TransactionPropagationController:23 ] - createUserWrong failed, reason:invalid status +``` + +你马上就会意识到,不对呀,因为运行时异常逃出了 @Transactional 注解标记的 createUserWrong 方法,Spring 当然会回滚事务了。如果我们希望主方法不回滚,应该把子方法抛出的异常捕获了。 + +也就是这么改,把 subUserService.createSubUserWithExceptionWrong 包裹上 catch,这样外层主方法就不会出现异常了: + +``` +@Transactional +public void createUserWrong2(UserEntity entity) { + + createMainUser(entity); + try{ + subUserService.createSubUserWithExceptionWrong(entity); + } catch (Exception ex) { + // 虽然捕获了异常,但是因为没有开启新事务,而当前事务因为异常已经被标记为rollback了,所以最终还是会回滚。 + log.error("create sub user error:{}", ex.getMessage()); + } + +} +``` + +运行程序后可以看到如下日志: + +``` +[22:57:21.722] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :370 ] - Creating new transaction with name [org.geekbang.time.commonmistakes.transaction.demo3.UserService.createUserWrong2]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT + +[22:57:21.739] [http-nio-45678-exec-3] [INFO ] [t.c.transaction.demo3.SubUserService:19 ] - createSubUserWithExceptionWrong start + +[22:57:21.739] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :356 ] - Found thread-bound EntityManager [SessionImpl(1794007607)] for JPA transaction + +[22:57:21.739] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :471 ] - Participating in existing transaction + +[22:57:21.740] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :843 ] - Participating transaction failed - marking existing transaction as rollback-only + +[22:57:21.740] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :580 ] - Setting JPA transaction on EntityManager [SessionImpl(1794007607)] rollback-only + +[22:57:21.740] [http-nio-45678-exec-3] [ERROR] [.g.t.c.transaction.demo3.UserService:37 ] - create sub user error:invalid status + +[22:57:21.740] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :741 ] - Initiating transaction commit + +[22:57:21.740] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :529 ] - Committing JPA transaction on EntityManager [SessionImpl(1794007607)] + +[22:57:21.743] [http-nio-45678-exec-3] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :620 ] - Closing JPA EntityManager [SessionImpl(1794007607)] after transaction + +[22:57:21.743] [http-nio-45678-exec-3] [ERROR] [t.d.TransactionPropagationController:33 ] - createUserWrong2 failed, reason:Transaction silently rolled back because it has been marked as rollback-only + +org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only + +... +``` + +需要注意以下几点: + +如第 1 行所示,对 createUserWrong2 方法开启了异常处理; + +如第 5 行所示,子方法因为出现了运行时异常,标记当前事务为回滚; + +如第 7 行所示,主方法的确捕获了异常打印出了 create sub user error 字样; + +如第 9 行所示,主方法提交了事务; + +奇怪的是,如第 11 行和 12 行所示,Controller 里出现了一个 UnexpectedRollbackException,异常描述提示最终这个事务回滚了,而且是静默回滚的。之所以说是静默,是因为 createUserWrong2 方法本身并没有出异常,只不过提交后发现子方法已经把当前事务设置为了回滚,无法完成提交。 + +这挺反直觉的。我们之前说,出了异常事务不一定回滚,这里说的却是不出异常,事务也不一定可以提交。原因是,主方法注册主用户的逻辑和子方法注册子用户的逻辑是同一个事务,子逻辑标记了事务需要回滚,主逻辑自然也不能提交了。 + +看到这里,修复方式就很明确了,想办法让子逻辑在独立事务中运行,也就是改一下 SubUserService 注册子用户的方法,为注解加上 propagation = Propagation.REQUIRES_NEW 来设置 REQUIRES_NEW 方式的事务传播策略,也就是执行到这个方法时需要开启新的事务,并挂起当前事务: + +``` +@Transactional(propagation = Propagation.REQUIRES_NEW) +public void createSubUserWithExceptionRight(UserEntity entity) { + log.info("createSubUserWithExceptionRight start"); + userRepository.save(entity); + throw new RuntimeException("invalid status"); + +} +``` + +主方法没什么变化,同样需要捕获异常,防止异常漏出去导致主事务回滚,重新命名为 createUserRight: + +``` +@Transactional +public void createUserRight(UserEntity entity) { + createMainUser(entity); + try{ + subUserService.createSubUserWithExceptionRight(entity); + } catch (Exception ex) { + // 捕获异常,防止主方法回滚 + log.error("create sub user error:{}", ex.getMessage()); + } +} +``` + +改造后,重新运行程序可以看到如下的关键日志: + +第 1 行日志提示我们针对 createUserRight 方法开启了主方法的事务; + +第 2 行日志提示创建主用户完成; + +第 3 行日志可以看到主事务挂起了,开启了一个新的事务,针对 createSubUserWithExceptionRight 方案,也就是我们的创建子用户的逻辑; + +第 4 行日志提示子方法事务回滚; + +第 5 行日志提示子方法事务完成,继续主方法之前挂起的事务; + +第 6 行日志提示主方法捕获到了子方法的异常; + +第 8 行日志提示主方法的事务提交了,随后我们在 Controller 里没看到静默回滚的异常。 + +``` +[23:17:20.935] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :370 ] - Creating new transaction with name [org.geekbang.time.commonmistakes.transaction.demo3.UserService.createUserRight]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT + +[23:17:21.079] [http-nio-45678-exec-1] [INFO ] [.g.t.c.transaction.demo3.UserService:55 ] - createMainUser finish + +[23:17:21.082] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :420 ] - Suspending current transaction, creating new transaction with name [org.geekbang.time.commonmistakes.transaction.demo3.SubUserService.createSubUserWithExceptionRight] + +[23:17:21.153] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :834 ] - Initiating transaction rollback + +[23:17:21.160] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :1009] - Resuming suspended transaction after completion of inner transaction + +[23:17:21.161] [http-nio-45678-exec-1] [ERROR] [.g.t.c.transaction.demo3.UserService:49 ] - create sub user error:invalid status + +[23:17:21.161] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :741 ] - Initiating transaction commit + +[23:17:21.161] [http-nio-45678-exec-1] [DEBUG] [o.s.orm.jpa.JpaTransactionManager :529 ] - Committing JPA transaction on EntityManager [SessionImpl(396441411)] +``` + +运行测试程序看到如下结果,getUserCount 得到的用户数量为 1,代表只有一个用户也就是主用户注册完成了,符合预期: + +![img](images/3bd9c32b5144025f1a2de5b4ec436ff8.png) + +## 重点回顾 + +今天,我针对业务代码中最常见的使用数据库事务的方式,即 Spring 声明式事务,与你总结了使用上可能遇到的三类坑,包括: + +第一,因为配置不正确,导致方法上的事务没生效。我们务必确认调用 @Transactional 注解标记的方法是 public 的,并且是通过 Spring 注入的 Bean 进行调用的。 + +第二,因为异常处理不正确,导致事务虽然生效但出现异常时没回滚。Spring 默认只会对标记 @Transactional 注解的方法出现了 RuntimeException 和 Error 的时候回滚,如果我们的方法捕获了异常,那么需要通过手动编码处理事务回滚。如果希望 Spring 针对其他异常也可以回滚,那么可以相应配置 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来覆盖其默认设置。 + +第三,如果方法涉及多次数据库操作,并希望将它们作为独立的事务进行提交或回滚,那么我们需要考虑进一步细化配置事务传播方式,也就是 @Transactional 注解的 Propagation 属性。 + +可见,正确配置事务可以提高业务项目的健壮性。但,又因为健壮性问题往往体现在异常情况或一些细节处理上,很难在主流程的运行和测试中发现,导致业务代码的事务处理逻辑往往容易被忽略,因此我在代码审查环节一直很关注事务是否正确处理。 + +如果你无法确认事务是否真正生效,是否按照预期的逻辑进行,可以尝试打开 Spring 的部分 Debug 日志,通过事务的运作细节来验证。也建议你在单元测试时尽量覆盖多的异常场景,这样在重构时,也能及时发现因为方法的调用方式、异常处理逻辑的调整,导致的事务失效问题。 + +今天用到的代码,我都放在了 GitHub 上,你可以点击这个链接查看。 + +## 思考与讨论 + +考虑到 Demo 的简洁,文中所有数据访问使用的都是 Spring Data JPA。国内大多数互联网业务项目是使用 MyBatis 进行数据访问的,使用 MyBatis 配合 Spring 的声明式事务也同样需要注意文中提到的这些点。你可以尝试把今天的 Demo 改为 MyBatis 做数据访问实现,看看日志中是否可以体现出这些坑。 + +在第一节中我们提到,如果要针对 private 方法启用事务,动态代理方式的 AOP 不可行,需要使用静态织入方式的 AOP,也就是在编译期间织入事务增强代码,可以配置 Spring 框架使用 AspectJ 来实现 AOP。你能否参阅 Spring 的文档“Using @Transactional with AspectJ”试试呢?注意:AspectJ 配合 lombok 使用,还可能会踩一些坑。 \ No newline at end of file diff --git "a/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/3bd9c32b5144025f1a2de5b4ec436ff8.png" "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/3bd9c32b5144025f1a2de5b4ec436ff8.png" new file mode 100644 index 00000000..d9fbc8d6 Binary files /dev/null and "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/3bd9c32b5144025f1a2de5b4ec436ff8.png" differ diff --git "a/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/b077c033fa394353309fbb4f8368e46c.png" "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/b077c033fa394353309fbb4f8368e46c.png" new file mode 100644 index 00000000..7f3bee12 Binary files /dev/null and "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/b077c033fa394353309fbb4f8368e46c.png" differ diff --git "a/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/c43ea620b0b611ae194f8438506d7570.png" "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/c43ea620b0b611ae194f8438506d7570.png" new file mode 100644 index 00000000..03e44a07 Binary files /dev/null and "b/Java/6_20%\347\232\204\344\270\232\345\212\241\344\273\243\347\240\201\347\232\204Spring\345\243\260\346\230\216\345\274\217\344\272\213\345\212\241\357\274\214\345\217\257\350\203\275\351\203\275\346\262\241\345\244\204\347\220\206\346\255\243\347\241\256/images/c43ea620b0b611ae194f8438506d7570.png" differ diff --git "a/Java/7_\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\357\274\232\347\264\242\345\274\225\345\271\266\344\270\215\346\230\257\344\270\207\350\203\275\350\215\257/README.md" "b/Java/7_\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\357\274\232\347\264\242\345\274\225\345\271\266\344\270\215\346\230\257\344\270\207\350\203\275\350\215\257/README.md" new file mode 100644 index 00000000..88d02c1d --- /dev/null +++ "b/Java/7_\346\225\260\346\215\256\345\272\223\347\264\242\345\274\225\357\274\232\347\264\242\345\274\225\345\271\266\344\270\215\346\230\257\344\270\207\350\203\275\350\215\257/README.md" @@ -0,0 +1,388 @@ +几乎所有的业务项目都会涉及数据存储,虽然当前各种 **NoSQL** 和文件系统大行其道,但 **MySQL** 等关系型数据库。 + +因为满足 **ACID**、可靠性高、对开发友好等特点,仍然最常被用于存储重要数据。在关系型数据库中,索引是优化查询性能的重要手段。 + +为此,我经常看到一些同学一遇到查询性能问题,就盲目要求运维或 **DBA** 给数据表相关字段创建大量索引。显然,这种想法是错误的。今天,我们就以 **MySQL** 为例来深入理解下索引的原理,以及相关误区。 + +## InnoDB 是如何存储数据的? + +**MySQL** 把数据存储和查询操作抽象成了存储引擎,不同的存储引擎,对数据的存储和读取方式各不相同。**MySQL** 支持多种存储引擎,并且可以以表为粒度设置存储引擎。因为支持事务,我们最常使用的是 **InnoDB**。为方便理解下面的内容,我先和你简单说说 **InnoDB** 是如何存储数据的。 + +虽然数据保存在磁盘中,但其处理是在内存中进行的。为了减少磁盘随机读取次数,**InnoDB** 采用页而不是行的粒度来保存数据,即数据被分成若干页,以页为单位保存在磁盘中。**InnoDB** 的页大小,一般是 **16KB**。 + +各个数据页组成一个双向链表,每个数据页中的记录按照主键顺序组成单向链表;每一个数据页中有一个页目录,方便按照主键查询记录。数据页的结构如下: + +![img](images/1302b4a8d877609486c9a9eed2d8d8d1.png) + +页目录通过槽把记录分成不同的小组,每个小组有若干条记录。如图所示,记录中最前面的小方块中的数字,代表的是当前分组的记录条数,最小和最大的槽指向 2 个特殊的伪记录。有了槽之后,我们按照主键搜索页中记录时,就可以采用二分法快速搜索,无需从最小记录开始遍历整个页中的记录链表。 + +举一个例子,如果要搜索主键(PK)=15 的记录: + +先二分得出槽中间位是 (0+6)/2=3,看到其指向的记录是 12<15,所以需要从 #3 槽后继续搜索记录; + +再使用二分搜索出 #3 槽和 #6 槽的中间位是 (3+6)/2=4.5 取整 4,#4 槽对应的记录是 16>15,所以记录一定在 #4 槽中; + +再从 #3 槽指向的 12 号记录开始向下搜索 3 次,定位到 15 号记录。 + +理解了 InnoDB 存储数据的原理后,我们就可以继续学习 MySQL 索引相关的原理和坑了。 + +## 聚簇索引和二级索引 + +说到索引,页目录就是最简单的索引,是通过对记录进行一级分组来降低搜索的时间复杂度。但,这样能够降低的时间复杂度数量级,非常有限。当有无数个数据页来存储表数据的时候,我们就需要考虑如何建立合适的索引,才能方便定位记录所在的页。 + +为了解决这个问题,InnoDB 引入了 B+ 树。如下图所示,B+ 树是一棵倒过来的树: + +![img](images/e76adf029e63a045e05956039f81f265.png) + +B+ 树的特点包括: + +最底层的节点叫作叶子节点,用来存放数据; + +其他上层节点叫作非叶子节点,仅用来存放目录项,作为索引; + +非叶子节点分为不同层次,通过分层来降低每一层的搜索量; + +所有节点按照索引键大小排序,构成一个双向链表,加速范围查找。 + +因此,InnoDB 使用 B+ 树,既可以保存实际数据,也可以加速数据搜索,这就是聚簇索引。如果把上图叶子节点下面方块中的省略号看作实际数据的话,那么它就是聚簇索引的示意图。由于数据在物理上只会保存一份,所以包含实际数据的聚簇索引只能有一个。 + +InnoDB 会自动使用主键(唯一定义一条记录的单个或多个字段)作为聚簇索引的索引键(如果没有主键,就选择第一个不包含 NULL 值的唯一列)。上图方框中的数字代表了索引键的值,对聚簇索引而言一般就是主键。 + +我们再看看 B+ 树如何实现快速查找主键。比如,我们要搜索 PK=4 的数据,通过根节点中的索引可以知道数据在第一个记录指向的 2 号页中,通过 2 号页的索引又可以知道数据在 5 号页,5 号页就是实际的数据页,然后再通过二分法查找页目录马上可以找到记录的指针。 + +为了实现非主键字段的快速搜索,就引出了二级索引,也叫作非聚簇索引、辅助索引。二级索引,也是利用的 B+ 树的数据结构,如下图所示: + +![img](images/4be8f22d993bd92878209d00a1264b3a.png) + +这次二级索引的叶子节点中保存的不是实际数据,而是主键,获得主键值后去聚簇索引中获得数据行。这个过程就叫作回表。 + +举个例子,有个索引是针对用户名字段创建的,索引记录上面方块中的字母是用户名,按照顺序形成链表。如果我们要搜索用户名为 b 的数据,经过两次定位可以得出在 #5 数据页中,查出所有的主键为 7 和 6,再拿着这两个主键继续使用聚簇索引进行两次回表得到完整数据。 + +## 考虑额外创建二级索引的代价 + +创建二级索引的代价,主要表现在维护代价、空间代价和回表代价三个方面。接下来,我就与你仔细分析下吧。 + +首先是维护代价。创建 N 个二级索引,就需要再创建 N 棵 B+ 树,新增数据时不仅要修改聚簇索引,还需要修改这 N 个二级索引。 + +我们通过实验测试一下创建索引的代价。假设有一个 person 表,有主键 ID,以及 name、score、create_time 三个字段: + +``` +CREATE TABLE `person` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `score` int(11) NOT NULL, + `create_time` timestamp NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` + +通过下面的存储过程循环创建 10 万条测试数据,我的机器的耗时是 140 秒(本文的例子均在 MySQL 5.7.26 中执行): + +``` +CREATE DEFINER=`root`@`%` PROCEDURE `insert_person`() + +begin + + declare c_id integer default 1; + while c_id<=100000 do + insert into person values(c_id, concat('name',c_id), c_id+100, date_sub(NOW(), interval c_id second)); + set c_id=c_id+1; + end while; +end +``` + +如果再创建两个索引,一个是 name 和 score 构成的联合索引,另一个是单一列 create_time 的索引,那么创建 10 万条记录的耗时提高到 154 秒: + +``` +KEY `name_score` (`name`,`score`) USING BTREE, +KEY `create_time` (`create_time`) USING BTREE +``` + +这里,我再额外提一下,页中的记录都是按照索引值从小到大的顺序存放的,新增记录就需要往页中插入数据,现有的页满了就需要新创建一个页,把现有页的部分数据移过去,这就是页分裂;如果删除了许多数据使得页比较空闲,还需要进行页合并。页分裂和合并,都会有 IO 代价,并且可能在操作过程中产生死锁。 + +你可以查看这个文档,以进一步了解如何设置合理的合并阈值,来平衡页的空闲率和因为再次页分裂产生的代价。 + +其次是空间代价。虽然二级索引不保存原始数据,但要保存索引列的数据,所以会占用更多的空间。比如,person 表创建了两个索引后,使用下面的 SQL 查看数据和索引占用的磁盘: + +``` +DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_NAME='person' +``` + +结果显示,数据本身只占用了 4.7M,而索引占用了 8.4M。 + +最后是回表的代价。二级索引不保存原始数据,通过索引找到主键后需要再查询聚簇索引,才能得到我们要的数据。比如,使用 SELECT * 按照 name 字段查询用户,使用 EXPLAIN 查看执行计划: + +``` +EXPLAIN SELECT * FROM person WHERE NAME='name1' +``` + +执行计划如下,可以发现: + +![img](images/f380ee99efb997a8520d16f5433f7e21.png) + +key 字段代表实际走的是哪个索引,其值是 name_score,说明走的是 name_score 这个索引。 + +type 字段代表了访问表的方式,其值 ref 说明是二级索引等值匹配,符合我们的查询。 + +把 SQL 中的 * 修改为 NAME 和 SCORE,也就是 SELECT name_score 联合索引包含的两列: + +``` +EXPLAIN SELECT NAME,SCORE FROM person WHERE NAME='name1' +``` + +再来看看执行计划: + +![img](images/88809b6f547238596d141eab27f3d7e7.png) + +可以看到,Extra 列多了一行 Using index 的提示,证明这次查询直接查的是二级索引,免去了回表。 + +原因很简单,联合索引中其实保存了多个索引列的值,对于页中的记录先按照字段 1 排序,如果相同再按照字段 2 排序,如图所示: + +![img](images/803c3e6a8df1d6031db70473dc948472.png) + +图中,叶子节点每一条记录的第一和第二个方块是索引列的数据,第三个方块是记录的主键。如果我们需要查询的是索引列索引或联合索引能覆盖的数据,那么查询索引本身已经“覆盖”了需要的数据,不再需要回表查询。因此,这种情况也叫作索引覆盖。我会在最后一小节介绍如何查看不同查询的成本,和你一起看看索引覆盖和索引查询后回表的代价差异。 + +最后,我和你总结下关于索引开销的最佳实践吧。 + +第一,无需一开始就建立索引,可以等到业务场景明确后,或者是数据量超过 1 万、查询变慢后,再针对需要查询、排序或分组的字段创建索引。创建索引后可以使用 EXPLAIN 命令,确认查询是否可以使用索引。我会在下一小节展开说明。 + +第二,尽量索引轻量级的字段,比如能索引 int 字段就不要索引 varchar 字段。索引字段也可以是部分前缀,在创建的时候指定字段索引长度。针对长文本的搜索,可以考虑使用 Elasticsearch 等专门用于文本搜索的索引数据库。 + +第三,尽量不要在 SQL 语句中 SELECT *,而是 SELECT 必要的字段,甚至可以考虑使用联合索引来包含我们要搜索的字段,既能实现索引加速,又可以避免回表的开销。 + +## 不是所有针对索引列的查询都能用上索引 + +在上一个案例中,我创建了一个 name+score 的联合索引,仅搜索 name 时就能够用上这个联合索引。这就引出两个问题: + +是不是建了索引一定可以用上? + +怎么选择创建联合索引还是多个独立索引? + +首先,我们通过几个案例来分析一下索引失效的情况。 + +第一,索引只能匹配列前缀。比如下面的 LIKE 语句,搜索 name 后缀为 name123 的用户无法走索引,执行计划的 type=ALL 代表了全表扫描: + +``` +EXPLAIN SELECT * FROM person WHERE NAME LIKE '%name123' LIMIT 100 +``` + +![img](images/e1033c6534938f8381fce051fb8ef8c9.png) + +把百分号放到后面走前缀匹配,type=range 表示走索引扫描,key=name_score 看到实际走了 name_score 索引: + +``` +EXPLAIN SELECT * FROM person WHERE NAME LIKE 'name123%' LIMIT 100 +``` + +![img](images/95074c69e68039738046fd4275c4d85a.png) + +原因很简单,索引 B+ 树中行数据按照索引值排序,只能根据前缀进行比较。如果要按照后缀搜索也希望走索引的话,并且永远只是按照后缀搜索的话,可以把数据反过来存,用的时候再倒过来。 + +第二,条件涉及函数操作无法走索引。比如搜索条件用到了 LENGTH 函数,肯定无法走索引: + +``` +EXPLAIN SELECT * FROM person WHERE LENGTH(NAME)=7 +``` + +![img](images/f1eadcdd35b96c9f982115e528ee6808.png) + +同样的原因,索引保存的是索引列的原始值,而不是经过函数计算后的值。如果需要针对函数调用走数据库索引的话,只能保存一份函数变换后的值,然后重新针对这个计算列做索引。 + +第三,联合索引只能匹配左边的列。也就是说,虽然对 name 和 score 建了联合索引,但是仅按照 score 列搜索无法走索引: + +``` +EXPLAIN SELECT * FROM person WHERE SCORE>45678 +``` + +![img](images/0d3d1a4ad0ae545f0264be3de781e0e3.png) + +原因也很简单,在联合索引的情况下,数据是按照索引第一列排序,第一列数据相同时才会按照第二列排序。也就是说,如果我们想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。如果我们仅仅按照第二列搜索,肯定无法走索引。尝试把搜索条件加入 name 列,可以看到走了 name_score 索引: + +``` +EXPLAIN SELECT * FROM person WHERE SCORE>45678 AND NAME LIKE 'NAME45%' +``` + +![img](images/77c946fcf49059d40673cf6075119d17.png) + +需要注意的是,因为有查询优化器,所以 name 作为 WHERE 子句的第几个条件并不是很重要。 + +现在回到最开始的两个问题。 + +是不是建了索引一定可以用上?并不是,只有当查询能符合索引存储的实际结构时,才能用上。这里,我只给出了三个肯定用不上索引的反例。其实,有的时候即使可以走索引,MySQL 也不一定会选择使用索引。我会在下一小节展开这一点。 + +怎么选择建联合索引还是多个独立索引?如果你的搜索条件经常会使用多个字段进行搜索,那么可以考虑针对这几个字段建联合索引;同时,针对多字段建立联合索引,使用索引覆盖的可能更大。如果只会查询单个字段,可以考虑建单独的索引,毕竟联合索引保存了不必要字段也有成本。 + +## 数据库基于成本决定是否走索引 + +通过前面的案例,我们可以看到,查询数据可以直接在聚簇索引上进行全表扫描,也可以走二级索引扫描后到聚簇索引回表。看到这里,你不禁要问了,MySQL 到底是怎么确定走哪种方案的呢。 + +其实,MySQL 在查询数据之前,会先对可能的方案做执行计划,然后依据成本决定走哪个执行计划。 + +这里的成本,包括 IO 成本和 CPU 成本: + +IO 成本,是从磁盘把数据加载到内存的成本。默认情况下,读取数据页的 IO 成本常数是 1(也就是读取 1 个页成本是 1)。 + +CPU 成本,是检测数据是否满足条件和排序等 CPU 操作的成本。默认情况下,检测记录的成本是 0.2。 + +基于此,我们分析下全表扫描的成本。 + +全表扫描,就是把聚簇索引中的记录依次和给定的搜索条件做比较,把符合搜索条件的记录加入结果集的过程。那么,要计算全表扫描的代价需要两个信息: + +聚簇索引占用的页面数,用来计算读取数据的 IO 成本; + +表中的记录数,用来计算搜索的 CPU 成本。 + +那么,MySQL 是实时统计这些信息的吗?其实并不是,MySQL 维护了表的统计信息,可以使用下面的命令查看: + +``` +SHOW TABLE STATUS LIKE 'person' +``` + +输出如下: + +![img](images/5554af3acf1005fac1b6a494b6578732.png) + +可以看到: + +总行数是 100086 行(之前 EXPLAIN 时,也看到 rows 为 100086)。你可能说,person 表不是有 10 万行记录吗,为什么这里多了 86 行?其实,MySQL 的统计信息是一个估算,其统计方式比较复杂我就不再展开了。但不妨碍我们根据这个值估算 CPU 成本,是 100086*0.2=20017 左右。 + +数据长度是 4734976 字节。对于 InnoDB 来说,这就是聚簇索引占用的空间,等于聚簇索引的页面数量 * 每个页面的大小。InnoDB 每个页面的大小是 16KB,大概计算出页面数量是 289,因此 IO 成本是 289 左右。 + +所以,全表扫描的总成本是 20306 左右。 + +接下来,我还是用 person 表这个例子,和你分析下 MySQL 如何基于成本来制定执行计划。现在,我要用下面的 SQL 查询 name>‘name84059’ AND create_time>‘2020-01-24 05:00:00’ + +``` +EXPLAIN SELECT * FROM person WHERE NAME >'name84059' AND create_time>'2020-01-24 05:00:00' +``` + +其执行计划是全表扫描: + +![img](images/54c6e60d390b54d5e1ae1e8bc2451fa8.png) + +只要把 create_time 条件中的 5 点改为 6 点就变为走索引了,并且走的是 create_time 索引而不是 name_score 联合索引: + +![img](images/2501093bce47944d4a9c2b090c2f8baa.png) + +我们可以得到两个结论: + +MySQL 选择索引,并不是按照 WHERE 条件中列的顺序进行的; + +即便列有索引,甚至有多个可能的索引方案,MySQL 也可能不走索引。 + +其原因就是,MySQL 并不是猜拳决定是否走索引的,而是根据成本来判断的。虽然表的统计信息不完全准确,但足够用于策略的判断了。 + +不过,有时会因为统计信息的不准确或成本估算的问题,实际开销会和 MySQL 统计出来的差距较大,导致 MySQL 选择错误的索引或是直接选择走全表扫描,这个时候就需要人工干预,使用强制索引了。比如,像这样强制走 name_score 索引: + +``` +EXPLAIN SELECT * FROM person FORCE INDEX(name_score) WHERE NAME >'name84059' AND create_time>'2020-01-24 05:00:00' +``` + +我们介绍了 MySQL 会根据成本选择执行计划,也通过 EXPLAIN 知道了优化器最终会选择怎样的执行计划,但 MySQL 如何制定执行计划始终是一个黑盒。那么,有没有什么办法可以了解各种执行计划的成本,以及 MySQL 做出选择的依据呢? + +在 MySQL 5.6 及之后的版本中,我们可以使用 optimizer trace 功能查看优化器生成执行计划的整个过程。有了这个功能,我们不仅可以了解优化器的选择过程,更可以了解每一个执行环节的成本,然后依靠这些信息进一步优化查询。 + +如下代码所示,打开 optimizer_trace 后,再执行 SQL 就可以查询 information_schema.OPTIMIZER_TRACE 表查看执行计划了,最后可以关闭 optimizer_trace 功能: + +``` +SET optimizer_trace="enabled=on"; + +SELECT * FROM person WHERE NAME >'name84059' AND create_time>'2020-01-24 05:00:00'; + +SELECT * FROM information_schema.OPTIMIZER_TRACE; + +SET optimizer_trace="enabled=off"; +``` + +对于按照 create_time>'2020-01-24 05:00:00’条件走全表扫描的 SQL,我从 OPTIMIZER_TRACE 的执行结果中,摘出了几个重要片段来重点分析: + +使用 name_score 对 name84059= IntegerCache.low && i <= IntegerCache.high) + return IntegerCache.cache[i + (-IntegerCache.low)]; + return new Integer(i); +} +``` + +第二个案例中,之所以同样的代码 128 就返回 false 的原因是,默认情况下会缓存[-128, 127]的数值,而 128 处于这个区间之外。设置 JVM 参数加上 -XX:AutoBoxCacheMax=1000 再试试,是不是就返回 true 了呢? + +```java +private static class IntegerCache { + + static final int low = -128; + static final int high; + + static { + // high value may be configured by property + int h = 127; + String integerCacheHighPropValue = + sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); + if (integerCacheHighPropValue != null) { + try { + int i = parseInt(integerCacheHighPropValue); + i = Math.max(i, 127); + // Maximum array size is Integer.MAX_VALUE + h = Math.min(i, Integer.MAX_VALUE - (-low) -1); + } catch( NumberFormatException nfe) { + // If the property cannot be parsed into an int, ignore it. + } + } + high = h; + + cache = new Integer[(high - low) + 1]; + int j = low; + for(int k = 0; k < cache.length; k++) + cache[k] = new Integer(j++); + + // range [-128, 127] must be interned (JLS7 5.1.7) + assert IntegerCache.high >= 127; + } +} +``` + +第三和第四个案例中,New 出来的 Integer 始终是不走缓存的新对象。比较两个新对象,或者比较一个新对象和一个来自缓存的对象,结果肯定不是相同的对象,因此返回 false。 + +第五个案例中,我们把装箱的 Integer 和基本类型 int 比较,前者会先拆箱再比较,比较的肯定是数值而不是引用,因此返回 true。 + +看到这里,对于 Integer 什么时候是相同对象什么时候是不同对象,就很清楚了吧。但知道这些其实意义不大,因为在大多数时候,我们并不关心 Integer 对象是否是同一个,只需要记得比较 Integer 的值请使用 equals,而不是 ==(对于基本类型 int 的比较当然只能使用 ==)。 + +其实,我们应该都知道这个原则,只是有的时候特别容易忽略。以我之前遇到过的一个生产事故为例,有这么一个枚举定义了订单状态和对于状态的描述: + +```java +enum StatusEnum { + + CREATED(1000, "已创建"), + PAID(1001, "已支付"), + DELIVERED(1002, "已送到"), + FINISHED(1003, "已完成"); + + private final Integer status; //注意这里的Integer + + private final String desc; + + StatusEnum(Integer status, String desc) { + this.status = status; + this.desc = desc; + } +} +``` + +在业务代码中,开发同学使用了 == 对枚举和入参 OrderQuery 中的 status 属性进行判等: + +```java +@Data +public class OrderQuery { + + private Integer status; + private String name; + +} + +@PostMapping("enumcompare") +public void enumcompare(@RequestBody OrderQuery orderQuery){ + + StatusEnum statusEnum = StatusEnum.DELIVERED; + + log.info("orderQuery:{} statusEnum:{} result:{}", orderQuery, statusEnum, statusEnum.status == orderQuery.getStatus()); + +} +``` + +因为枚举和入参 OrderQuery 中的 status 都是包装类型,所以通过 == 判等肯定是有问题的。只是这个问题比较隐晦,究其原因在于: + +只看枚举的定义 CREATED(1000, “已创建”),容易让人误解 status 值是基本类型; + +因为有 Integer 缓存机制的存在,所以使用 == 判等并不是所有情况下都有问题。在这次事故中,订单状态的值从 100 开始增长,程序一开始不出问题,直到订单状态超过 127 后才出现 Bug。 + +在了解清楚为什么 Integer 使用 == 判等有时候也有效的原因之后,我们再来看看为什么 String 也有这个问题。我们使用几个用例来测试下: + +对两个直接声明的值都为 1 的 String 使用 == 判等; + +对两个 new 出来的值都为 2 的 String 使用 == 判等; + +对两个 new 出来的值都为 3 的 String 先进行 intern 操作,再使用 == 判等; + +对两个 new 出来的值都为 4 的 String 通过 equals 判等。 + +```java +String a = "1"; +String b = "1"; +log.info("\nString a = \"1\";\n" + + "String b = \"1\";\n" + + "a == b ? {}", a == b); //true + +String c = new String("2"); +String d = new String("2"); + +log.info("\nString c = new String(\"2\");\n" + + "String d = new String(\"2\");" + + "c == d ? {}", c == d); //false + +String e = new String("3").intern(); +String f = new String("3").intern(); +log.info("\nString e = new String(\"3\").intern();\n" + + "String f = new String(\"3\").intern();\n" + + "e == f ? {}", e == f); //true + +String g = new String("4"); +String h = new String("4"); +log.info("\nString g = new String(\"4\");\n" + + "String h = new String(\"4\");\n" + + "g == h ? {}", g.equals(h)); //true +``` + +在分析这个结果之前,我先和你说说 Java 的字符串常量池机制。首先要明确的是其设计初衷是节省内存。当代码中出现双引号形式创建字符串对象时,JVM 会先对这个字符串进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回;否则,创建新的字符串对象,然后将这个引用放入字符串常量池,并返回该引用。这种机制,就是字符串驻留或池化。 + +再回到刚才的例子,再来分析一下运行结果: + +第一个案例返回 true,因为 Java 的字符串驻留机制,直接使用双引号声明出来的两个 String 对象指向常量池中的相同字符串。 + +第二个案例,new 出来的两个 String 是不同对象,引用当然不同,所以得到 false 的结果。 + +第三个案例,使用 String 提供的 intern 方法也会走常量池机制,所以同样能得到 true。 + +第四个案例,通过 equals 对值内容判等,是正确的处理方式,当然会得到 true。 + +虽然使用 new 声明的字符串调用 intern 方法,也可以让字符串进行驻留,但在业务代码中滥用 intern,可能会产生性能问题。 + +写代码测试一下,通过循环把 1 到 1000 万之间的数字以字符串形式 intern 后,存入一个 List: + +```java +List list = new ArrayList<>(); + +@GetMapping("internperformance") +public int internperformance(@RequestParam(value = "size", defaultValue = "10000000")int size) { + + //-XX:+PrintStringTableStatistics + //-XX:StringTableSize=10000000 + long begin = System.currentTimeMillis(); + list = IntStream.rangeClosed(1, size) + .mapToObj(i-> String.valueOf(i).intern()) + .collect(Collectors.toList()); + + log.info("size:{} took:{}", size, System.currentTimeMillis() - begin); + return list.size(); +} +``` + +在启动程序时设置 JVM 参数 -XX:+PrintStringTableStatistic,程序退出时可以打印出字符串常量表的统计信息。调用接口后关闭程序,输出如下: + +```java +[11:01:57.770] [http-nio-45678-exec-2] [INFO ] [.t.c.e.d.IntAndStringEqualController:54 ] - size:10000000 took:44907 +StringTable statistics: +Number of buckets : 60013 = 480104 bytes, avg 8.000 +Number of entries : 10030230 = 240725520 bytes, avg 24.000 +Number of literals : 10030230 = 563005568 bytes, avg 56.131 +Total footprint : = 804211192 bytes +Average bucket size : 167.134 +Variance of bucket size : 55.808 +Std. dev. of bucket size: 7.471 +Maximum bucket size : 198 +``` + +可以看到,1000 万次 intern 操作耗时居然超过了 44 秒。 + +其实,原因在于字符串常量池是一个固定容量的 Map。如果容量太小(Number of buckets=60013)、字符串太多(1000 万个字符串),那么每一个桶中的字符串数量会非常多,所以搜索起来就很慢。输出结果中的 Average bucket size=167,代表了 Map 中桶的平均长度是 167。 + +解决方式是,设置 JVM 参数 -XX:StringTableSize,指定更多的桶。设置 -XX:StringTableSize=10000000 后,重启应用: + +```java +[11:09:04.475] [http-nio-45678-exec-1] [INFO ] [.t.c.e.d.IntAndStringEqualController:54 ] - size:10000000 took:5557 +StringTable statistics: +Number of buckets : 10000000 = 80000000 bytes, avg 8.000 +Number of entries : 10030156 = 240723744 bytes, avg 24.000 +Number of literals : 10030156 = 562999472 bytes, avg 56.131 +Total footprint : = 883723216 bytes +Average bucket size : 1.003 +Variance of bucket size : 1.587 +Std. dev. of bucket size: 1.260 +Maximum bucket size : 10 +``` + +可以看到,1000 万次调用耗时只有 5.5 秒,Average bucket size 降到了 1,效果明显。 + +好了,是时候给出第二原则了:没事别轻易用 intern,如果要用一定要注意控制驻留的字符串的数量,并留意常量表的各项指标。 + +## 实现一个 equals 没有这么简单 + +如果看过 Object 类源码,你可能就知道,equals 的实现其实是比较对象引用: + +```java +public boolean equals(Object obj) { + return (this == obj); +} +``` + +之所以 Integer 或 String 能通过 equals 实现内容判等,是因为它们都重写了这个方法。比如,String 的 equals 的实现: + +```java +public boolean equals(Object anObject) { + + if (this == anObject) { + return true; + } + + if (anObject instanceof String) { + String anotherString = (String)anObject; + int n = value.length; + if (n == anotherString.value.length) { + char v1[] = value; + char v2[] = anotherString.value; + int i = 0; + while (n-- != 0) { + if (v1[i] != v2[i]) + return false; + i++; + } + return true; + } + } + return false; +} +``` + +对于自定义类型,如果不重写 equals 的话,默认就是使用 Object 基类的按引用的比较方式。我们写一个自定义类测试一下。 + +假设有这样一个描述点的类 Point,有 x、y 和描述三个属性: + +```java +class Point { + + private int x; + private int y; + private final String desc; + + public Point(int x, int y, String desc) { + this.x = x; + this.y = y; + this.desc = desc; + } +} +``` + +定义三个点 p1、p2 和 p3,其中 p1 和 p2 的描述属性不同,p1 和 p3 的三个属性完全相同,并写一段代码测试一下默认行为: + +```java +Point p1 = new Point(1, 2, "a"); +Point p2 = new Point(1, 2, "b"); +Point p3 = new Point(1, 2, "a"); + +log.info("p1.equals(p2) ? {}", p1.equals(p2)); +log.info("p1.equals(p3) ? {}", p1.equals(p3)); +``` + +通过 equals 方法比较 p1 和 p2、p1 和 p3 均得到 false,原因正如刚才所说,我们并没有为 Point 类实现自定义的 equals 方法,Object 超类中的 equals 默认使用 == 判等,比较的是对象的引用。 + +我们期望的逻辑是,只要 x 和 y 这 2 个属性一致就代表是同一个点,所以写出了如下的改进代码,重写 equals 方法,把参数中的 Object 转换为 Point 比较其 x 和 y 属性: + +```java +class PointWrong { + + private int x; + private int y; + + private final String desc; + + public PointWrong(int x, int y, String desc) { + this.x = x; + this.y = y; + this.desc = desc; + } + + @Override + public boolean equals(Object o) { + PointWrong that = (PointWrong) o; + return x == that.x && y == that.y; + } +} +``` + +为测试改进后的 Point 是否可以满足需求,我们定义了三个用例: + +比较一个 Point 对象和 null; + +比较一个 Object 对象和一个 Point 对象; + +比较两个 x 和 y 属性值相同的 Point 对象。 + +```java +PointWrong p1 = new PointWrong(1, 2, "a"); +try { + log.info("p1.equals(null) ? {}", p1.equals(null)); +} catch (Exception ex) { + log.error(ex.getMessage()); +} + +Object o = new Object(); + +try { + log.info("p1.equals(expression) ? {}", p1.equals(o)); +} catch (Exception ex) { + log.error(ex.getMessage()); +} + +PointWrong p2 = new PointWrong(1, 2, "b"); +log.info("p1.equals(p2) ? {}", p1.equals(p2)); +``` + +通过日志中的结果可以看到,第一次比较出现了空指针异常,第二次比较出现了类型转换异常,第三次比较符合预期输出了 true。 + +```log +[17:54:39.120] [http-nio-45678-exec-1] [ERROR] [t.c.e.demo1.EqualityMethodController:32 ] - java.lang.NullPointerException +[17:54:39.120] [http-nio-45678-exec-1] [ERROR] [t.c.e.demo1.EqualityMethodController:39 ] - java.lang.ClassCastException: java.lang.Object cannot be cast to org.geekbang.time.commonmistakes.equals.demo1.EqualityMethodController$PointWrong +[17:54:39.120] [http-nio-45678-exec-1] [INFO ] [t.c.e.demo1.EqualityMethodController:43 ] - p1.equals(p2) ? true +``` + +通过这些失效的用例,我们大概可以总结出实现一个更好的 equals 应该注意的点: + +考虑到性能,可以先进行指针判等,如果对象是同一个那么直接返回 true; + +需要对另一方进行判空,空对象和自身进行比较,结果一定是 fasle; + +需要判断两个对象的类型,如果类型都不同,那么直接返回 false; + +确保类型相同的情况下再进行类型强制转换,然后逐一判断所有字段。 + +修复和改进后的 equals 方法如下: + +```java +@Override +public boolean equals(Object o) { + + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PointRight that = (PointRight) o; + return x == that.x && y == that.y; +} +``` + +改进后的 equals 看起来完美了,但还没完。我们继续往下看。 + +## hashCode 和 equals 要配对实现 + +我们来试试下面这个用例,定义两个 x 和 y 属性值完全一致的 Point 对象 p1 和 p2,把 p1 加入 HashSet,然后判断这个 Set 中是否存在 p2: + +```java +PointWrong p1 = new PointWrong(1, 2, "a"); +PointWrong p2 = new PointWrong(1, 2, "b"); + +HashSet points = new HashSet<>(); +points.add(p1); +log.info("points.contains(p2) ? {}", points.contains(p2)); +``` + +按照改进后的 equals 方法,这 2 个对象可以认为是同一个,Set 中已经存在了 p1 就应该包含 p2,但结果却是 false。 + +出现这个 Bug 的原因是,散列表需要使用 hashCode 来定位元素放到哪个桶。如果自定义对象没有实现自定义的 hashCode 方法,就会使用 Object 超类的默认实现,得到的两个 hashCode 是不同的,导致无法满足需求。 + +要自定义 hashCode,我们可以直接使用 Objects.hash 方法来实现,改进后的 Point 类如下: + +```java +class PointRight { + + private final int x; + private final int y; + private final String desc; + + ... + + @Override + public boolean equals(Object o) { + ... + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} +``` + +改进 equals 和 hashCode 后,再测试下之前的四个用例,结果全部符合预期。 + +```log +[18:25:23.091] [http-nio-45678-exec-4] [INFO ] [t.c.e.demo1.EqualityMethodController:54 ] - p1.equals(null) ? false +[18:25:23.093] [http-nio-45678-exec-4] [INFO ] [t.c.e.demo1.EqualityMethodController:61 ] - p1.equals(expression) ? false +[18:25:23.094] [http-nio-45678-exec-4] [INFO ] [t.c.e.demo1.EqualityMethodController:67 ] - p1.equals(p2) ? true +[18:25:23.094] [http-nio-45678-exec-4] [INFO ] [t.c.e.demo1.EqualityMethodController:71 ] - points.contains(p2) ? true +``` + +看到这里,你可能会觉得自己实现 equals 和 hashCode 很麻烦,实现 equals 有很多注意点而且代码量很大。不过,实现这两个方法也有简单的方式,一是后面要讲到的 Lombok 方法,二是使用 IDE 的代码生成功能。IDEA 的类代码快捷生成菜单支持的功能如下: + +![img](images/944fe3549e4c24936e9837d0bf1e3936.jpg) + +## 注意 compareTo 和 equals 的逻辑一致性 + +除了自定义类型需要确保 equals 和 hashCode 要逻辑一致外,还有一个更容易被忽略的问题,即 compareTo 同样需要和 equals 确保逻辑一致性。 + +我之前遇到过这么一个问题,代码里本来使用了 ArrayList 的 indexOf 方法进行元素搜索,但是一位好心的开发同学觉得逐一比较的时间复杂度是 O(n),效率太低了,于是改为了排序后通过 Collections.binarySearch 方法进行搜索,实现了 O(log n) 的时间复杂度。没想到,这么一改却出现了 Bug。 + +我们来重现下这个问题。首先,定义一个 Student 类,有 id 和 name 两个属性,并实现了一个 Comparable 接口来返回两个 id 的值: + +```java +@Data +@AllArgsConstructor +class Student implements Comparable{ + + private int id; + private String name; + + @Override + public int compareTo(Student other) { + + int result = Integer.compare(other.id, id); + if (result==0) + log.info("this {} == other {}", this, other); + return result; + } +} +``` + +然后,写一段测试代码分别通过 indexOf 方法和 Collections.binarySearch 方法进行搜索。列表中我们存放了两个学生,第一个学生 id 是 1 叫 zhang,第二个学生 id 是 2 叫 wang,搜索这个列表是否存在一个 id 是 2 叫 li 的学生: + +```java +@GetMapping("wrong") +public void wrong(){ + + List list = new ArrayList<>(); + list.add(new Student(1, "zhang")); + list.add(new Student(2, "wang")); + + Student student = new Student(2, "li"); + log.info("ArrayList.indexOf"); + + int index1 = list.indexOf(student); + Collections.sort(list); + log.info("Collections.binarySearch"); + + int index2 = Collections.binarySearch(list, student); + log.info("index1 = " + index1); + log.info("index2 = " + index2); +} +``` + +代码输出的日志如下: + +```log +[18:46:50.226] [http-nio-45678-exec-1] [INFO ] [t.c.equals.demo2.CompareToController:28 ] - ArrayList.indexOf +[18:46:50.226] [http-nio-45678-exec-1] [INFO ] [t.c.equals.demo2.CompareToController:31 ] - Collections.binarySearch +[18:46:50.227] [http-nio-45678-exec-1] [INFO ] [t.c.equals.demo2.CompareToController:67 ] - this CompareToController.Student(id=2, name=wang) == other CompareToController.Student(id=2, name=li) +[18:46:50.227] [http-nio-45678-exec-1] [INFO ] [t.c.equals.demo2.CompareToController:34 ] - index1 = -1 +[18:46:50.227] [http-nio-45678-exec-1] [INFO ] [t.c.equals.demo2.CompareToController:35 ] - index2 = 1 +``` + +我们注意到如下几点: + +binarySearch 方法内部调用了元素的 compareTo 方法进行比较; + +indexOf 的结果没问题,列表中搜索不到 id 为 2、name 是 li 的学生; + +binarySearch 返回了索引 1,代表搜索到的结果是 id 为 2,name 是 wang 的学生。 + +修复方式很简单,确保 compareTo 的比较逻辑和 equals 的实现一致即可。重新实现一下 Student 类,通过 Comparator.comparing 这个便捷的方法来实现两个字段的比较: + +```java +@Data +@AllArgsConstructor +class StudentRight implements Comparable{ + + private int id; + private String name; + + @Override + public int compareTo(StudentRight other) { + return Comparator.comparing(StudentRight::getName) + .thenComparingInt(StudentRight::getId) + .compare(this, other); + } +} +``` + +其实,这个问题容易被忽略的原因在于两方面: + +一是,我们使用了 Lombok 的 @Data 标记了 Student,@Data 注解(详见这里)其实包含了 @EqualsAndHashCode 注解(详见这里)的作用,也就是默认情况下使用类型所有的字段(不包括 static 和 transient 字段)参与到 equals 和 hashCode 方法的实现中。因为这两个方法的实现不是我们自己实现的,所以容易忽略其逻辑。 + +二是,compareTo 方法需要返回数值,作为排序的依据,容易让人使用数值类型的字段随意实现。 + +我再强调下,对于自定义的类型,如果要实现 Comparable,请记得 equals、hashCode、compareTo 三者逻辑一致。 + +## 小心 Lombok 生成代码的“坑” + +Lombok 的 @Data 注解会帮我们实现 equals 和 hashcode 方法,但是有继承关系时,Lombok 自动生成的方法可能就不是我们期望的了。 + +我们先来研究一下其实现:定义一个 Person 类型,包含姓名和身份证两个字段: + +```java +@Data +class Person { + + private String name; + private String identity; + + public Person(String name, String identity) { + this.name = name; + this.identity = identity; + } +} +``` + +对于身份证相同、姓名不同的两个 Person 对象: + +```java +Person person1 = new Person("zhuye","001"); +Person person2 = new Person("Joseph","001"); +log.info("person1.equals(person2) ? {}", person1.equals(person2)); +``` + +使用 equals 判等会得到 false。如果你希望只要身份证一致就认为是同一个人的话,可以使用 @EqualsAndHashCode.Exclude 注解来修饰 name 字段,从 equals 和 hashCode 的实现中排除 name 字段: + +```java +@EqualsAndHashCode.Exclude +private String name; +``` + +修改后得到 true。打开编译后的代码可以看到,Lombok 为 Person 生成的 equals 方法的实现,确实只包含了 identity 属性: + +```java +public boolean equals(final Object o) { + + if (o == this) { + return true; + } else if (!(o instanceof LombokEquealsController.Person)) { + return false; + } else { + LombokEquealsController.Person other = (LombokEquealsController.Person)o; + if (!other.canEqual(this)) { + return false; + } else { + Object this$identity = this.getIdentity(); + Object other$identity = other.getIdentity(); + if (this$identity == null) { + if (other$identity != null) { + return false; + } + } else if (!this$identity.equals(other$identity)) { + return false; + } + return true; + } + } +} +``` + +但到这里还没完,如果类型之间有继承,Lombok 会怎么处理子类的 equals 和 hashCode 呢?我们来测试一下,写一个 Employee 类继承 Person,并新定义一个公司属性: + +```java +@Data +class Employee extends Person { + + private String company; + + public Employee(String name, String identity, String company) { + super(name, identity); + this.company = company; + } +} +``` + +在如下的测试代码中,声明两个 Employee 实例,它们具有相同的公司名称,但姓名和身份证均不同: + +```java +Employee employee1 = new Employee("zhuye","001", "bkjk.com"); +Employee employee2 = new Employee("Joseph","002", "bkjk.com"); + +log.info("employee1.equals(employee2) ? {}", employee1.equals(employee2)); +``` + +很遗憾,结果是 true,显然是没有考虑父类的属性,而认为这两个员工是同一人,说明 @EqualsAndHashCode 默认实现没有使用父类属性。 + +为解决这个问题,我们可以手动设置 callSuper 开关为 true,来覆盖这种默认行为: + +```java +@Data +@EqualsAndHashCode(callSuper = true) +class Employee extends Person { +``` + +修改后的代码,实现了同时以子类的属性 company 加上父类中的属性 identity,作为 equals 和 hashCode 方法的实现条件(实现上其实是调用了父类的 equals 和 hashCode)。 + +## 重点回顾 + +现在,我们来回顾下对象判等和比较的重点内容吧。 + +首先,我们要注意 equals 和 == 的区别。业务代码中进行内容的比较,针对基本类型只能使用 ==,针对 Integer、String 在内的引用类型,需要使用 equals。Integer 和 String 的坑在于,使用 == 判等有时也能获得正确结果。 + +其次,对于自定义类型,如果类型需要参与判等,那么务必同时实现 equals 和 hashCode 方法,并确保逻辑一致。如果希望快速实现 equals、hashCode 方法,我们可以借助 IDE 的代码生成功能,或使用 Lombok 来生成。如果类型也要参与比较,那么 compareTo 方法的逻辑同样需要和 equals、hashCode 方法一致。 + +最后,Lombok 的 @EqualsAndHashCode 注解实现 equals 和 hashCode 的时候,默认使用类型所有非 static、非 transient 的字段,且不考虑父类。如果希望改变这种默认行为,可以使用 @EqualsAndHashCode.Exclude 排除一些字段,并设置 callSuper = true 来让子类的 equals 和 hashCode 调用父类的相应方法。 + +在比较枚举值和 POJO 参数值的例子中,我们还可以注意到,使用 == 来判断两个包装类型的低级错误,确实容易被忽略。所以,我建议你在 IDE 中安装阿里巴巴的 Java 规约插件(详见这里),来及时提示我们这类低级错误: + +![img](images/fe020d747a35cec23e5d92c1277d02c3.png) + +今天用到的代码,我都放在了 GitHub 上,你可以点击这个链接查看。 + +## 思考与讨论 + +在实现 equals 时,我是先通过 getClass 方法判断两个对象的类型,你可能会想到还可以使用 instanceof 来判断。你能说说这两种实现方式的区别吗? + +在第三节的例子中,我演示了可以通过 HashSet 的 contains 方法判断元素是否在 HashSet 中,同样是 Set 的 TreeSet 其 contains 方法和 HashSet 有什么区别吗? + +有关对象判等、比较,你还遇到过其他坑吗? \ No newline at end of file diff --git "a/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/944fe3549e4c24936e9837d0bf1e3936.jpg" "b/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/944fe3549e4c24936e9837d0bf1e3936.jpg" new file mode 100644 index 00000000..b30ce75b Binary files /dev/null and "b/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/944fe3549e4c24936e9837d0bf1e3936.jpg" differ diff --git "a/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/fe020d747a35cec23e5d92c1277d02c3.png" "b/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/fe020d747a35cec23e5d92c1277d02c3.png" new file mode 100644 index 00000000..0c8290b0 Binary files /dev/null and "b/Java/8_\345\210\244\347\255\211\351\227\256\351\242\230\357\274\232\347\250\213\345\272\217\351\207\214\345\246\202\344\275\225\347\241\256\345\256\232\344\275\240\345\260\261\346\230\257\344\275\240\357\274\237/images/fe020d747a35cec23e5d92c1277d02c3.png" differ diff --git "a/Java/9_\346\225\260\345\200\274\350\256\241\347\256\227\357\274\232\346\263\250\346\204\217\347\262\276\345\272\246\343\200\201\350\210\215\345\205\245\345\222\214\346\272\242\345\207\272\351\227\256\351\242\230/README.md" "b/Java/9_\346\225\260\345\200\274\350\256\241\347\256\227\357\274\232\346\263\250\346\204\217\347\262\276\345\272\246\343\200\201\350\210\215\345\205\245\345\222\214\346\272\242\345\207\272\351\227\256\351\242\230/README.md" new file mode 100644 index 00000000..c1309c5e --- /dev/null +++ "b/Java/9_\346\225\260\345\200\274\350\256\241\347\256\227\357\274\232\346\263\250\346\204\217\347\262\276\345\272\246\343\200\201\350\210\215\345\205\245\345\222\214\346\272\242\345\207\272\351\227\256\351\242\230/README.md" @@ -0,0 +1,355 @@ +今天,我要和你说说数值计算的精度、舍入和溢出问题。 + +之所以要单独分享数值计算,是因为很多时候我们习惯的或者说认为理所当然的计算,在计算器或计算机看来并不是那么回事儿。就比如前段时间爆出的一条新闻,说是手机计算器把 **10%** + **10%** 算成了 **0.11** 而不是 **0.2**。 + +出现这种问题的原因在于,国外的计算程序使用的是单步计算法。在单步计算法中,**a+b%** 代表的是 **a*(1+b%)** 。所以,手机计算器计算 **10%+10%** 时,其实计算的是 **10%*(1+10%)**,所以得到的是 **0.11** 而不是 **0.2**。 + +在我看来,计算器或计算机会得到反直觉的计算结果的原因,可以归结为: + +在人看来,浮点数只是具有小数点的数字,**0.1** 和 1 都是一样精确的数字。但,计算机其实无法精确保存浮点数,因此浮点数的计算结果也不可能精确。 + +在人看来,一个超大的数字只是位数多一点而已,多写几个 1 并不会让大脑死机。但,计算机是把数值保存在了变量中,不同类型的数值变量能保存的数值范围不同,当数值超过类型能表达的数值上限则会发生溢出问题。 + +接下来,我们就具体看看这些问题吧。 + +## “危险”的 Double + +我们先从简单的反直觉的四则运算看起。对几个简单的浮点数进行加减乘除运算: + +```java +System.out.println(0.1+0.2); +System.out.println(1.0-0.8); +System.out.println(4.015*100); +System.out.println(123.3/100); + +double amount1 = 2.15; +double amount2 = 1.10; + +if (amount1 - amount2 == 1.05) + System.out.println("OK"); +``` + +输出结果如下: + +```text +0.30000000000000004 +0.19999999999999996 +401.49999999999994 +1.2329999999999999 +``` + +可以看到,输出结果和我们预期的很不一样。比如,**0.1+0.2** 输出的不是 **0.3** 而是 0.30000000000000004;再比如,对 **2.15-1.10** 和 **1.05** 判等,结果判等不成立。 + +出现这种问题的主要原因是,计算机是以二进制存储数值的,浮点数也不例外。**Java** 采用了 **IEEE 754** 标准实现浮点数的表达和运算,你可以通过这里查看数值转化为二进制的结果。 + +比如,**0.1** 的二进制表示为 **0.0 0011 0011 0011**… (0011 无限循环),再转换为十进制就是 **0.1000000000000000055511151231257827021181583404541015625**。对于计算机而言,0.1 无法精确表达,这是浮点数计算造成精度损失的根源。 + +你可能会说,以 0.1 为例,其十进制和二进制间转换后相差非常小,不会对计算产生什么影响。但,所谓积土成山,如果大量使用 **double** 来作大量的金钱计算,最终损失的精度就是大量的资金出入。比如,每天有一百万次交易,每次交易都差一分钱,一个月下来就差 **30** 万。这就不是小事儿了。那,如何解决这个问题呢? + +我们大都听说过 **BigDecimal** 类型,浮点数精确表达和运算的场景,一定要使用这个类型。不过,在使用 **BigDecimal** 时有几个坑需要避开。我们用 BigDecimal 把之前的四则运算改一下: + +```java +System.out.println(new BigDecimal(0.1).add(new BigDecimal(0.2))); +System.out.println(new BigDecimal(1.0).subtract(new BigDecimal(0.8))); +System.out.println(new BigDecimal(4.015).multiply(new BigDecimal(100))); +System.out.println(new BigDecimal(123.3).divide(new BigDecimal(100))); +``` + +输出如下: + +```java +0.3000000000000000166533453693773481063544750213623046875 +0.1999999999999999555910790149937383830547332763671875 +401.49999999999996802557689079549163579940795898437500 +1.232999999999999971578290569595992565155029296875 +``` + +可以看到,运算结果还是不精确,只不过是精度高了而已。这里给出浮点数运算避坑第一原则:使用 **BigDecimal** 表示和计算浮点数,且务必使用字符串的构造方法来初始化 **BigDecimal**: + +```java +System.out.println(new BigDecimal("0.1").add(new BigDecimal("0.2"))); +System.out.println(new BigDecimal("1.0").subtract(new BigDecimal("0.8"))); +System.out.println(new BigDecimal("4.015").multiply(new BigDecimal("100"))); +System.out.println(new BigDecimal("123.3").divide(new BigDecimal("100"))); +``` + +改进后,就能得到我们想要的输出了: + +```java +0.3 +0.2 +401.500 +1.233 +``` + +到这里,你可能会继续问,不能调用 **BigDecimal** 传入 **Double** 的构造方法,但手头只有一个 **Double**,如何转换为精确表达的 BigDecimal 呢? + +我们试试用 Double.toString 把 double 转换为字符串,看看行不行? + +```java +System.out.println(new BigDecimal("4.015").multiply(new BigDecimal(Double.toString(100)))); +``` + +输出为 **401.5000**。与上面字符串初始化 **100** 和 4.015 相乘得到的结果 **401.500** 相比,这里为什么多了 1 个 0 呢?原因就是,**BigDecimal** 有 **scale** 和 precision 的概念,**scale** 表示小数点右边的位数,而 **precision** 表示精度,也就是有效数字的长度。 + +调试一下可以发现,**new BigDecimal(Double.toString(100))** 得到的 **BigDecimal** 的 **scale=1**、**precision=4**;而 **new BigDecimal(“100”)** 得到的 **BigDecimal** 的 **scale=0、precision=3**。对于 **BigDecimal** 乘法操作,返回值的 **scale** 是两个数的 **scale** 相加。所以,初始化 100 的两种不同方式,导致最后结果的 scale 分别是 4 和 3: + +```java +private static void testScale() { + + BigDecimal bigDecimal1 = new BigDecimal("100"); + BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(100d)); + BigDecimal bigDecimal3 = new BigDecimal(String.valueOf(100)); + BigDecimal bigDecimal4 = BigDecimal.valueOf(100d); + BigDecimal bigDecimal5 = new BigDecimal(Double.toString(100)); + + print(bigDecimal1); //scale 0 precision 3 result 401.500 + print(bigDecimal2); //scale 1 precision 4 result 401.5000 + print(bigDecimal3); //scale 0 precision 3 result 401.500 + print(bigDecimal4); //scale 1 precision 4 result 401.5000 + print(bigDecimal5); //scale 1 precision 4 result 401.5000 +} + +private static void print(BigDecimal bigDecimal) { + + log.info("scale {} precision {} result {}", bigDecimal.scale(), bigDecimal.precision(), bigDecimal.multiply(new BigDecimal("4.015"))); +} +``` + +**BigDecimal** 的 **toString** 方法得到的字符串和 **scale** 相关,又会引出了另一个问题:对于浮点数的字符串形式输出和格式化,我们应该考虑显式进行,通过格式化表达式或格式化工具来明确小数位数和舍入方式。接下来,我们就聊聊浮点数舍入和格式化。 + +## 考虑浮点数舍入和格式化的方式 + +除了使用 **Double** 保存浮点数可能带来精度问题外,更匪夷所思的是这种精度问题,加上 **String.format** 的格式化舍入方式,可能得到让人摸不着头脑的结果。 + +我们看一个例子吧。首先用 **double** 和 **float** 初始化两个 **3.35** 的浮点数,然后通过 **String.format** 使用 **%.1f** 来格式化这 **2** 个数字: + +```java +double num1 = 3.35; +float num2 = 3.35f; + +System.out.println(String.format("%.1f", num1));//四舍五入 +System.out.println(String.format("%.1f", num2)); +``` + +得到的结果居然是 3.4 和 3.3。 + +这就是由精度问题和舍入方式共同导致的,double 和 float 的 3.35 其实相当于 3.350xxx 和 3.349xxx: + +```java +3.350000000000000088817841970012523233890533447265625 +3.349999904632568359375 +``` + +**String.format** 采用四舍五入的方式进行舍入,取 1 位小数,double 的 3.350 四舍五入为 3.4,而 float 的 3.349 四舍五入为 3.3。 + +我们看一下 Formatter 类的相关源码,可以发现使用的舍入模式是 HALF_UP(代码第 11 行): + +```java +else if (c == Conversion.DECIMAL_FLOAT) { + + // Create a new BigDecimal with the desired precision. + int prec = (precision == -1 ? 6 : precision); + int scale = value.scale(); + + if (scale > prec) { + // more "scale" digits than the requested "precision" + int compPrec = value.precision(); + if (compPrec <= scale) { + // case of 0.xxxxxx + value = value.setScale(prec, RoundingMode.HALF_UP); + } else { + compPrec -= (scale - prec); + value = new BigDecimal(value.unscaledValue(), + scale, + new MathContext(compPrec)); + } + } +} +``` + +如果我们希望使用其他舍入方式来格式化字符串的话,可以设置 DecimalFormat,如下代码所示: + +```java +double num1 = 3.35; +float num2 = 3.35f; +DecimalFormat format = new DecimalFormat("#.##"); + +format.setRoundingMode(RoundingMode.DOWN); +System.out.println(format.format(num1)); +format.setRoundingMode(RoundingMode.DOWN); +System.out.println(format.format(num2)); +``` + +当我们把这 2 个浮点数向下舍入取 2 位小数时,输出分别是 3.35 和 3.34,还是我们之前说的浮点数无法精确存储的问题。 + +因此,即使通过 DecimalFormat 来精确控制舍入方式,double 和 float 的问题也可能产生意想不到的结果,所以浮点数避坑第二原则:**浮点数的字符串格式化也要通过 BigDecimal 进行**。 + +比如下面这段代码,使用 **BigDecimal** 来格式化数字 3.35,分别使用向下舍入和四舍五入方式取 1 位小数进行格式化: + +```java +BigDecimal num1 = new BigDecimal("3.35"); +BigDecimal num2 = num1.setScale(1, BigDecimal.ROUND_DOWN); + +System.out.println(num2); +BigDecimal num3 = num1.setScale(1, BigDecimal.ROUND_HALF_UP); +System.out.println(num3); +``` + +这次得到的结果是 **3.3** 和 **3.4**,符合预期。 + +## 用 equals 做判等,就一定是对的吗? + +现在我们知道了,应该使用 **BigDecimal** 来进行浮点数的表示、计算、格式化。在上一讲介绍判等问题时,我提到一个原则:包装类的比较要通过 **equals** 进行,而不能使用 **==**。那么,使用 **equals** 方法对两个 **BigDecimal** 判等,一定能得到我们想要的结果吗? + +我们来看下面的例子。使用 **equals** 方法比较 1.0 和 1 这两个 **BigDecimal**: + +```java +System.out.println(new BigDecimal("1.0").equals(new BigDecimal("1"))) +``` + +你可能已经猜到我要说什么了,结果当然是 **false**。 + +**BigDecimal** 的 **equals** 方法的注释中说明了原因,**equals** 比较的是 **BigDecimal** 的 value 和 **scale**,1.0 的 scale 是 **1**,1 的 scale 是 **0**,所以结果一定是 : + +```java +/** + * Compares this {@code BigDecimal} with the specified + * {@code Object} for equality. Unlike {@link + * #compareTo(BigDecimal) compareTo}, this method considers two + * {@code BigDecimal} objects equal only if they are equal in + * value and scale (thus 2.0 is not equal to 2.00 when compared by + * this method). + * + * @param x {@code Object} to which this {@code BigDecimal} is + * to be compared. + * @return {@code true} if and only if the specified {@code Object} is a + * {@code BigDecimal} whose value and scale are equal to this + * {@code BigDecimal}'s. + * @see #compareTo(java.math.BigDecimal) + * @see #hashCode + */ +@Override +public boolean equals(Object x) +``` + +如果我们希望只比较 **BigDecimal** 的 **value**,可以使用 **compareTo** 方法,修改后代码如下: + +```java +System.out.println(new BigDecimal("1.0").compareTo(new BigDecimal("1"))==0); +``` + +学过上一讲,你可能会意识到 **BigDecimal** 的 **equals** 和 **hashCode** 方法会同时考虑 **value** 和 **scale**,如果结合 **HashSet** 或 **HashMap** 使用的话就可能会出现麻烦。比如,我们把值为 **1.0** 的 **BigDecimal** 加入 **HashSet**,然后判断其是否存在值为 **1** 的 **BigDecimal**,得到的结果是 **false**: + +```java +Set hashSet1 = new HashSet<>(); +hashSet1.add(new BigDecimal("1.0")); +System.out.println(hashSet1.contains(new BigDecimal("1")));//返回false +``` + +解决这个问题的办法有两个: + +第一个方法是,使用 **TreeSet** 替换 **HashSet**。**TreeSet** 不使用 **hashCode** 方法,也不使用 **equals** 比较元素,而是使用 **compareTo** 方法,所以不会有问题。 + +```java +Set treeSet = new TreeSet<>(); +treeSet.add(new BigDecimal("1.0")); +System.out.println(treeSet.contains(new BigDecimal("1")));//返回true +``` + +第二个方法是,把 **BigDecimal** 存入 **HashSet** 或 **HashMap** 前,先使用 **stripTrailingZeros** 方法去掉尾部的零,比较的时候也去掉尾部的 **0**,确保 **value** 相同的 **BigDecimal**,**scale** 也是一致的: + +```java +Set hashSet2 = new HashSet<>(); +hashSet2.add(new BigDecimal("1.0").stripTrailingZeros()); +System.out.println(hashSet2.contains(new BigDecimal("1.000").stripTrailingZeros()));//返回true +``` + +## 小心数值溢出问题 + +数值计算还有一个要小心的点是溢出,不管是 **int** 还是 **long**,所有的基本数值类型都有超出表达范围的可能性。 + +比如,对 **Long** 的最大值进行 +1 操作: + +```java +long l = Long.MAX_VALUE; +System.out.println(l + 1); +System.out.println(l + 1 == Long.MIN_VALUE); +``` + +输出结果是一个负数,因为 **Long** 的最大值 **+1** 变为了 **Long** 的最小值: + +```java +-9223372036854775808 +true +``` + +显然这是发生了溢出,而且是默默地溢出,并没有任何异常。这类问题非常容易被忽略,改进方式有下面 2 种。 + +方法一是,考虑使用 **Math** 类的 **addExact**、**subtractExact** 等 **xxExact** 方法进行数值运算,这些方法可以在数值溢出时主动抛出异常。我们来测试一下,使用 **Math.addExact** 对 **Long** 最大值做 **+1** 操作: + +```java +try { + long l = Long.MAX_VALUE; + System.out.println(Math.addExact(l, 1)); +} catch (Exception ex) { + ex.printStackTrace(); +} +``` + +执行后,可以得到 **ArithmeticException**,这是一个 **RuntimeException**: + +```log +java.lang.ArithmeticException: long overflow + at java.lang.Math.addExact(Math.java:809) + at org.geekbang.time.commonmistakes.numeralcalculations.demo3.CommonMistakesApplication.right2(CommonMistakesApplication.java:25) + at org.geekbang.time.commonmistakes.numeralcalculations.demo3.CommonMistakesApplication.main(CommonMistakesApplication.java:13) +``` + +方法二是,使用大数类 **BigInteger**。**BigDecimal** 是处理浮点数的专家,而 **BigInteger** 则是对大数进行科学计算的专家。 + +如下代码,使用 **BigInteger** 对 **Long** 最大值进行 **+1** 操作;如果希望把计算结果转换一个 **Long** 变量的话,可以使用 **BigInteger** 的 **longValueExact** 方法,在转换出现溢出时,同样会抛出 **ArithmeticException**: + +```log +BigInteger i = new BigInteger(String.valueOf(Long.MAX_VALUE)); +System.out.println(i.add(BigInteger.ONE).toString()); +try { + long l = i.add(BigInteger.ONE).longValueExact(); +} catch (Exception ex) { + ex.printStackTrace(); +} +``` + +输出结果如下: + +```java +9223372036854775808 +java.lang.ArithmeticException: BigInteger out of long range + at java.math.BigInteger.longValueExact(BigInteger.java:4632) + at org.geekbang.time.commonmistakes.numeralcalculations.demo3.CommonMistakesApplication.right1(CommonMistakesApplication.java:37) + at org.geekbang.time.commonmistakes.numeralcalculations.demo3.CommonMistakesApplication.main(CommonMistakesApplication.java:11) +``` + +可以看到,通过 **BigInteger** 对 **Long** 的最大值加 **1** 一点问题都没有,当尝试把结果转换为 **Long** 类型时,则会提示 **BigInteger out of long range**。 + +## 重点回顾 + +今天,我与你分享了浮点数的表示、计算、舍入和格式化、溢出等涉及的一些坑。 + +第一,切记,要精确表示浮点数应该使用 **BigDecimal**。并且,使用 **BigDecimal** 的 **Double** 入参的构造方法同样存在精度丢失问题,应该使用 **String** 入参的构造方法或者 **BigDecimal.valueOf** 方法来初始化。 + +第二,对浮点数做精确计算,参与计算的各种数值应该始终使用 **BigDecimal**,所有的计算都要通过 **BigDecimal** 的方法进行,切勿只是让 **BigDecimal** 来走过场。任何一个环节出现精度损失,最后的计算结果可能都会出现误差。 + +第三,对于浮点数的格式化,如果使用 **String.format** 的话,需要认识到它使用的是四舍五入,可以考虑使用 **DecimalFormat** 来明确指定舍入方式。但考虑到精度问题,我更建议使用 **BigDecimal** 来表示浮点数,并使用其 **setScale** 方法指定舍入的位数和方式。 + +第四,进行数值运算时要小心溢出问题,虽然溢出后不会出现异常,但得到的计算结果是完全错误的。我们考虑使用 **Math.xxxExact** 方法来进行运算,在溢出时能抛出异常,更建议对于可能会出现溢出的大数运算使用 **BigInteger** 类。 + +总之,对于金融、科学计算等场景,请尽可能使用 **BigDecimal** 和 **BigInteger**,避免由精度和溢出问题引发难以发现,但影响重大的 **Bug**。 + +## 思考与讨论 + +**BigDecimal** 提供了 **8** 种舍入模式,你能通过一些例子说说它们的区别吗? + +数据库(比如 **MySQL**)中的浮点数和整型数字,你知道应该怎样定义吗?又如何实现浮点数的准确计算呢? + +针对数值运算,你还遇到过什么坑吗? \ No newline at end of file diff --git "a/K8S/16_Kubernetes\346\214\201\344\271\205\345\214\226\345\255\230\345\202\250/README.md" "b/K8S/16_Kubernetes\346\214\201\344\271\205\345\214\226\345\255\230\345\202\250/README.md" index 76cb297b..1ed5112d 100644 --- "a/K8S/16_Kubernetes\346\214\201\344\271\205\345\214\226\345\255\230\345\202\250/README.md" +++ "b/K8S/16_Kubernetes\346\214\201\344\271\205\345\214\226\345\255\230\345\202\250/README.md" @@ -24,7 +24,7 @@ yum install -y nfs-utils 首先创建存放数据的目录 ```bash -mkdir -p /data/nfx +mkdir -p /data/nfs ``` 设置挂载路径 @@ -53,7 +53,10 @@ yum install -y nfs-utils 下面我们回到nfs服务端,启动我们的nfs服务 ```bash +# 启动服务 systemctl start nfs +# 或者使用以下命令进行启动 +service nfs-server start ``` ![image-20201119082047766](images/image-20201119082047766.png) diff --git "a/K8S/1_Kubernetes\347\256\200\344\273\213/README.md" "b/K8S/1_Kubernetes\347\256\200\344\273\213/README.md" index 32717593..4ab28ee1 100644 --- "a/K8S/1_Kubernetes\347\256\200\344\273\213/README.md" +++ "b/K8S/1_Kubernetes\347\256\200\344\273\213/README.md" @@ -215,7 +215,7 @@ k8s 集群控制节点,对集群进行调度管理,接受集群外用户去 ### Controller - 确保预期的pod副本数量【ReplicaSet】 -- 无状态应用部署【Depoltment】 +- 无状态应用部署【Deployment】 - 无状态就是指,不需要依赖于网络或者ip - 有状态应用部署【StatefulSet】 - 有状态需要特定的条件 diff --git "a/K8S/30_\344\275\277\347\224\250kubeadm-ha\350\204\232\346\234\254\344\270\200\351\224\256\345\256\211\350\243\205K8S/README.md" "b/K8S/30_\344\275\277\347\224\250kubeadm-ha\350\204\232\346\234\254\344\270\200\351\224\256\345\256\211\350\243\205K8S/README.md" index b387c098..6df4b58b 100644 --- "a/K8S/30_\344\275\277\347\224\250kubeadm-ha\350\204\232\346\234\254\344\270\200\351\224\256\345\256\211\350\243\205K8S/README.md" +++ "b/K8S/30_\344\275\277\347\224\250kubeadm-ha\350\204\232\346\234\254\344\270\200\351\224\256\345\256\211\350\243\205K8S/README.md" @@ -2,12 +2,13 @@ ## 前情提示 -以前安装k8s集群的时候使用的是k8s官网的教程 使用的镜像源都是国外的 速度慢就不说了 还有一些根本就下载不动 导致安装失败 最后在群里小伙伴(蘑菇博客交流群/@你钉钉响了)的建议下使用一个开源的一键安装k8s的脚本就好了起来了 -Github地址:https://github.com/TimeBye/kubeadm-ha +以前安装 **K8S** 集群的时候使用的是 **k8s** 官网的教程 使用的镜像源都是国外的 速度慢就不说了 还有一些根本就下载不动 导致安装失败 最后在群里小伙伴(蘑菇博客交流群/@你钉钉响了) 的建议下使用一个开源的一键安装k8s的脚本就好了起来了 + +> Github地址:https://github.com/TimeBye/kubeadm-ha ## 环境准备 -官网的安装说明也很简单但是还有些细节还是没有提到 所以我自己照着官网的教程 补充了一些细节 +官网的安装说明也很简单但是还有些细节还是没有提到,所以我自己照着官网的教程 补充了一些细节 ### 硬件系统要求 @@ -38,7 +39,7 @@ Github地址:https://github.com/TimeBye/kubeadm-ha ping baidu.com ``` -建议关闭centos的防火墙 +建议关闭 **CentOS** 的防火墙 ```sh systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld @@ -90,7 +91,7 @@ sudo ./install-ansible.sh vi example/hosts.s-master.ip.ini ``` -具体要修改的就是ip 和密码 其他的保持默认 +具体要修改的就是 ip 和密码 其他的保持默认 我的hosts.s-master.ip.ini 文件预览 diff --git "a/K8S/53_Helm\345\205\245\351\227\250/README.md" "b/K8S/53_Helm\345\205\245\351\227\250/README.md" new file mode 100644 index 00000000..8bce6320 --- /dev/null +++ "b/K8S/53_Helm\345\205\245\351\227\250/README.md" @@ -0,0 +1,206 @@ +# Heml应用包管理器 + +helm学习文档:https://helm.sh/zh/docs/ + +## 为什么要使用Helm? + +**K8S** 上的应用对象,都是由特定的资源描述组成,包括 **deployment**、**services** 等。都保存各自文件中或者集中写到 +一个配置文件。然后 **kubectl apply -f** 部署。 + +![image-20220815224019379](images/image-20220815224019379.png) + + 如果应用只由一个或几个这样的服务组成,上面部署方式足够了。 + +而对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十 +个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的 +方式就显得力不从心了。 + +且由于缺少对发布过的应用版本管理和控制,使 **Kubernetes** 上的应用维护和更新等面临诸多的桃战,主要面临以下问题: + +- 如何将这些服务作为一个整体管理 +- 这些资源文件如何高效复用 +- 不支持应用级别的版本管理 + +## Helm介绍 + +Helm是一个Kubernetes的包管理工具,就像 Linux下的包管理器,如 yml、apt等,可以方便将之前打包好的 yaml 文件部署到 Kubernetes 上 + +Heml 有两个重要的概念: + +- heml:一个命令行客户端工具,主要用于 kubernetes 应用 chart 的创建、打包、发布和管理 +- Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合 +- Release:基于Chart的部署实体,一个chart 被 helm 运行后将会生成一个release,将在 k8s 中创建出真实运行的资源对象 + +## Helm v3 变化 + +2019 年 11 月 13 日,Helm 团队发布 helm v3 的第一个稳定版本 + +该版本主要的变化如下: + +### 架构变化 + +最明显的是 Tiller 的删除 + +![image-20220815224715228](images/image-20220815224715228.png) + + + +- release 名称可以在不同命名空间重用 + +- 支持将Chart推送至Docker 镜像仓库中 +- 使用JSONSchema验证 chart values + +## 部署 helm 客户端 + +Helm客户端下载地址:Github 搜 heml + +> https://github.com/helm/helm/releases/tag/v3.9.3 + +## Helm常用命令 + +| 命令 | 描述 | +| ---------- | ------------------------------------------------------------ | +| create | 创建一个chart并指定名称 | +| dependency | 管理chart依赖 | +| get | 下载release,可用子命令:all、hooks、manifest、notes、value | +| history | 获取release历史 | +| install | 安装一个chart | +| list | 列出release | +| package | 将chart目录打包到chart存档文件中 | +| pull | 从远程仓库中下载chart并解压到本地; helm pull stable/mysql --untar | +| repo | 添加、列出、移除、更新和索引chart仓库 | +| rollback | 从之前版本回滚 | +| search | 根据关键字搜索Chart | +| show | 查看chart详细信息 | +| template | 本地呈现模板 | +| uninstall | 卸载一个release | +| upgrade | 更新一个release | +| version | 查看helm客户端版本 | + +## 配置国内 **chart** 仓库 + +- 微软仓库 +- 阿里云仓库 +- 官方仓库,官方chart仓库,国内不太好使 + +添加存储库 + +```bash +helm repo add stable http://xxxx.xxx +helm repo add aliyun http://xxx.xxx +helm repo update +``` + +查看配置的存储库 + +```bash +helm repo list +helm repo repo stable +``` + +一直在stable存储库中安装 charts,你可以配置其它存储库 + +删除存储库 + +```bash +helm repo remove aliyun +``` + +## helm基本使用 + +主要介绍三个命令 + +- chart install:安装 +- chart upgrade:升级 +- chart rollback:回滚 + +### 使用chart部署一个应用 + +查找chart + +```bash +helm search repo +helm search repo mysql +``` + +为什么 mariadb 也在列表中?因为和mysql有关 + +```bash +helm show stable/mysql values +``` + +部署 mysql + +```bash +helm install my_db stable/mysql +``` + +查看 pod 的详细信息 + +```bash +kubectl get pods +kubectl describe pod pod_name +``` + +需要绑定 pv + +## 自定义chart配置选项 + +上面部署的mysql并没有成功,这是因为并不是所有的charts都能够按照默认配置运行成功,可能会依赖一些环境依赖,比如 PV + +所有,我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据: + +- --values(或 -f):指定带有覆盖的YAML文件,这里可以多次指定,最右边的文件优先 +- --set:在命令行上指定替代,如果两者都用,--set优先级高 + +--values使用,先将修改的变量写到一个文件中 + +```BASH +heml show values stable/mysql +cat config.yaml +``` + +然后在 config.yaml 中,写上下面的数据 + +![image-20220815232418023](images/image-20220815232418023.png) + +然后执行下列命令 + +```bash +helm install db -f config.yaml stable/mysql; +kubectl get pods; +``` + +以上,将创建具有名称的默认MySQL用户k8s,并授权此用户访问新创建的数据库的权限,但将接收该图标的数据所有其余默认值 + +命令行替换变量: + +```bash +helm install db --set persistence.storageClass= "managed-ngf-storage" stable/mysql +``` + +也可以将chart包下载下来,查看详情 + +```bash +helm pull stable/mysql --untar +``` + +values yaml 与 set 使用 + +![image-20220815233153748](images/image-20220815233153748.png) + + + +以蘑菇为例,如何制作 heml 包 + +![image-20220815233329363](images/image-20220815233329363.png) + +## 构建一个Heml Chart + +可以通过下面名, 创建一个 heml 目录 + +```bash +helm create mychart +``` + +最后生成的目录结构如上所示 \ No newline at end of file diff --git "a/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224019379.png" "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224019379.png" new file mode 100644 index 00000000..2ca806db Binary files /dev/null and "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224019379.png" differ diff --git "a/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224715228.png" "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224715228.png" new file mode 100644 index 00000000..1bf40ee3 Binary files /dev/null and "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815224715228.png" differ diff --git "a/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815232418023.png" "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815232418023.png" new file mode 100644 index 00000000..7210cb50 Binary files /dev/null and "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815232418023.png" differ diff --git "a/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233153748.png" "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233153748.png" new file mode 100644 index 00000000..14de4ac0 Binary files /dev/null and "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233153748.png" differ diff --git "a/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233329363.png" "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233329363.png" new file mode 100644 index 00000000..7dc1b7db Binary files /dev/null and "b/K8S/53_Helm\345\205\245\351\227\250/images/image-20220815233329363.png" differ diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/README.md" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/README.md" new file mode 100644 index 00000000..a560be35 --- /dev/null +++ "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/README.md" @@ -0,0 +1,143 @@ +# 云平台核心 + +# 1、为什么用云平台 + +- 环境统一:网络和软件统一 +- 按需付费 + +- 即开即用:随开随用,非常方便 +- 稳定性强:有专业的团队 + +- ...... + + + +国内常见云平台: + +- [阿里云](https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=50sid5bu&utm_source=50sid5bu)、百度云、[腾讯云](https://curl.qcloud.com/iyFTRSJb)、[华为云](https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=d1a6f32e-d6d0-4702-9213-eafe022a0708&utm_source=bGVpZmVuZ3lhbmc==&utm_medium=cps&utm_campaign=201905)、青云...... + +国外常见云平台: + +- 亚马逊 AWS、微软 Azure ... + +## 1、公有云 + +> 购买云服务商提供的公共服务器 + +公有云是最常见的云计算部署类型。公有云资源(例如服务器和存储空间)由第三方云服务提供商拥有和运营,这些资源通过 Internet 提供。在公有云中,所有硬件、软件和其他支持性基础结构均为云提供商所拥有和管理。Microsoft Azure 是公有云的一个示例。 + +在公有云中,你与其他组织或云“租户”共享相同的硬件、存储和网络设备,并且你可以使用 Web 浏览器访问服务和管理帐户。公有云部署通常用于提供基于 Web 的电子邮件、网上办公应用、存储以及测试和开发环境。 + +公有云优势: + +- **成本更低**:无需购买硬件或软件,仅对使用的服务付费。 +- **无需维护**:维护由服务提供商提供。 + +- **近乎无限制的缩放性**:提供按需资源,可满足业务需求。 +- **高可靠性**:具备众多服务器,确保免受故障影响。 + +- - 可用性: N个9 全年的故障时间: 365*24*3600*(1-99.9999%) + +## 2、私有云 + +> 自己搭建云平台,或者购买 + +私有云由专供一个企业或组织使用的云计算资源构成。私有云可在物理上位于组织的现场数据中心,也可由第三方服务提供商托管。但是,在私有云中,服务和基础结构始终在私有网络上进行维护,硬件和软件专供组织使用。 + +这样,私有云可使组织更加方便地自定义资源,从而满足特定的 **IT** 需求。私有云的使用对象通常为政府机构、金融机构以及其他具备业务关键性运营且希望对环境拥有更大控制权的中型到大型组织。 + +私有云优势: + +- **灵活性更强**:组织可自定义云环境以满足特定业务需求。 +- **控制力更强**:资源不与其他组织共享,因此能获得更高的控制力以及更高的隐私级别。 + +- **可伸缩性更强**:与本地基础结构相比,私有云通常具有更强的可伸缩性。 + +**没有一种云计算类型适用于所有人。多种不同的云计算模型、类型和服务已得到发展,可以满足组织快速变化的技术需求。** + +**部署云计算资源有三种不同的方法:公共云、私有云和混合云。采用的部署方法取决于业务需求。** + +# 2、核心构架 + +## 所需软件 + +[electerm](https://electerm.github.io/electerm/): https://electerm.github.io/electerm/ + +https://wwa.lanzoui.com/b016k9bha + +密码:900h + +xshell + +注册云平台: + +- 阿里云:aliyun.com +- 腾讯云: cloud.tencent.com + +- 华为云:cloud.huawei.com + +- 青云:qingcloud.com +- 百度云: cloud.baidu.com + +- ... + +## 1、基础概念 + +- 云服务器作为应用的最终载体 +- VPC为所有云服务器提供网络隔离 + +- 所有云服务器都是绑定某个私有网络 +- 安全组控制每个服务器的防火墙规则 + +- 公网IP使得资源可访问 +- 端口转发的方式访问到具体服务器 + +## 2、实战操作 + +1、开通按量付费服务器 + +你做完了吗? + +2、开通基于VPC的服务器集群 + +理解VPC了吗? + +# 云平台操作 + +安全组:防火墙相关的端口设置 + +![image-20211107212324033](images/image-20211107212324033.png) + +如果搭建集群,每个服务器是通过私有ip来进行访问 + +![image-20211107212450580](images/image-20211107212450580.png) + +通过私有ip访问,就不会走公网的流量,也不会有流量的付费;并且私有ip的服务也比公网ip快的多,因为公网流量会有带宽限制 + +## VPC + +> VPC: virtual private cloud + +VPC也被称为 **私有网络**、**专有网络** + +VPC里面有一个 **IPv4** 网段,若设置了 **192.168.0.0/16** 表示有下面的可用的 **ip** 地址 + +![image-20211107212939804](images/image-20211107212939804.png) + +其中 **192.168.0.0** 和 **192.168.255.255** 分别是 网络地址 和 广播地址,因此实际可用的地址个数为:**65536** 个。 + +## 交换机 + +在vpc的下面,还可以创建交换机;交换机的也可以理解为子网划分 + +我们 创建一个交换机:**192.168.0.0/24** + +![image-20211107213740908](images/image-20211107213740908.png) + +相当于可用ip有 **254** 个 + +## VPC隔离 + +VPC和VPC之间是会进行隔离的,创建的不同VPC之间通过私有ip是无法正常访问的。类似于每个人都有自己的专属网络。这个隔离是在物理层面做的 + +![image-20211107214217029](images/image-20211107214217029.png) \ No newline at end of file diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212324033.png" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212324033.png" new file mode 100644 index 00000000..d9599d26 Binary files /dev/null and "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212324033.png" differ diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212450580.png" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212450580.png" new file mode 100644 index 00000000..92d601e1 Binary files /dev/null and "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212450580.png" differ diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212939804.png" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212939804.png" new file mode 100644 index 00000000..fd6ff2f5 Binary files /dev/null and "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107212939804.png" differ diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107213740908.png" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107213740908.png" new file mode 100644 index 00000000..64777e22 Binary files /dev/null and "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107213740908.png" differ diff --git "a/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107214217029.png" "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107214217029.png" new file mode 100644 index 00000000..64364f51 Binary files /dev/null and "b/K8S/Kubesphere/1_\344\272\221\345\271\263\345\217\260\346\240\270\345\277\203/images/image-20211107214217029.png" differ diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/README.md" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/README.md" new file mode 100644 index 00000000..817132ba --- /dev/null +++ "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/README.md" @@ -0,0 +1,457 @@ +# Docker基本概念 + +# 1、解决的问题 + +## 1、统一标准 + +- 应用构建 + +- - Java、C++、JavaScript + - 打成软件包 + +- - .exe + - docker build :打包成镜像 + +- 应用分享 + +- - 所有软件的镜像放到一个指定地方: dockerhub + - 安卓:应用市场 + +- 应用运行 + +- - 统一标准的镜像** + - 直接执行:docker run + +- ....... + +> Docker的出现,进了容器化时代 + + 下面是虚拟化技术和容器化技术的对比 + +### 虚拟化技术 + +虚拟化技术的代表作是:VMware + +- 基础镜像都是GB级别 +- 创建使用稍微复杂 +- 隔离性强 +- 启动速度慢 +- 移植与分享不方便 + +![image-20211107221144406](images/image-20211107221144406.png) + +### 容器化技术 + +容器化技术: + +- 基础镜像MB级别 +- 创建简单 +- 隔离性强 +- 启动速度秒级 +- 移植与分享方便 + +![image-20211107221052435](images/image-20211107221052435.png) + +## 2、资源隔离 + +- cpu、memory资源隔离与限制 +- 访问设备隔离与限制 + +- 网络隔离与限制 +- 用户、用户组隔离限制 + +- ...... + + + +# 2、架构 + +![img](images/architecture.svg) + +- Docker_Host: + +- - 安装Docker的主机 + +- Docker Daemon: + +- - 运行在Docker主机上的Docker后台进程 + +- Client: + +- - 操作Docker主机的客户端(命令行、UI等) + +- Registry: + +- - 镜像仓库 + - Docker Hub + +- Images: + +- - 镜像,带环境打包好的程序,可以直接启动运行 + +- Containers: + +- - 容器,由镜像启动起来正在运行中的程序 + +交互逻辑 + +装好**Docker**,然后去 **软件市场** 寻找**镜像**,下载并运行,查看**容器**状态日志等排错 + +# 3、安装 + +## 1、centos下安装docker + +其他系统参照如下文档 + +https://docs.docker.com/engine/install/centos/ + + + +### 1、移除以前docker相关包 + +```bash +sudo yum remove docker \ + docker-client \ + docker-client-latest \ + docker-common \ + docker-latest \ + docker-latest-logrotate \ + docker-logrotate \ + docker-engine +``` + +### 2、配置yum源 + +```bash +sudo yum install -y yum-utils +sudo yum-config-manager \ +--add-repo \ +http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo +``` + + + +### 3、安装docker + +```bash +sudo yum install -y docker-ce docker-ce-cli containerd.io + + +#以下是在安装k8s的时候使用 +yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6 +``` + +- docker-ce:是docker的社区版 +- docker-ce-cli:操作docker的命令行程序 +- containerd.io:docker的容器化运行环境 + +### 4、启动 + +```bash +systemctl enable docker --now +``` + + + +### 5、配置加速 + +这里额外添加了docker的生产环境核心配置cgroup,配置阿里云的镜像工具,镜像镜像加速 + +```bash +sudo mkdir -p /etc/docker +sudo tee /etc/docker/daemon.json <<-'EOF' +{ + "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"], + "exec-opts": ["native.cgroupdriver=systemd"], + "log-driver": "json-file", + "log-opts": { + "max-size": "100m" + }, + "storage-driver": "overlay2" +} +EOF +sudo systemctl daemon-reload +sudo systemctl restart docker +``` + + + +# Docker命令实战 + +# 常用命令 + +![img](images/image.png) + + + +# 基础实战 + +## 1、找镜像 + +去[docker hub](http://hub.docker.com),找到nginx镜像 + +```bash +docker pull nginx #下载最新版 + +镜像名:版本名(标签) + +docker pull nginx:1.20.1 + + +docker pull redis #下载最新 +docker pull redis:6.2.4 + +## 下载来的镜像都在本地 +docker images #查看所有镜像 + +redis = redis:latest + +docker rmi 镜像名:版本号/镜像id +``` + +## 2、启动容器 + +启动 **nginx** 应用容器,并映射88端口,测试的访问 + +```bash +docker run [OPTIONS] IMAGE [COMMAND] [ARG...] + +【docker run 设置项 镜像名 】 镜像启动运行的命令(镜像里面默认有的,一般不会写) + +# -d:后台运行 +# --restart=always: 开机自启 +docker run --name=mynginx -d --restart=always -p 88:80 nginx + +# 查看正在运行的容器 +docker ps +# 查看所有 +docker ps -a +# 删除停止的容器 +docker rm 容器id/名字 +docker rm -f mynginx #强制删除正在运行中的 + +#停止容器 +docker stop 容器id/名字 +#再次启动 +docker start 容器id/名字 + +#应用开机自启 +docker update 容器 id/名字 --restart=always +``` + +## 3、修改容器内容 + +修改默认的index.html 页面 + +### 1、进容器内部修改 + +```bash +# 进入容器内部的系统,修改容器内容 +docker exec -it 容器id /bin/bash +``` + + + +### 2、挂载数据到外部修改 + +```bash +docker run --name=mynginx \ +-d --restart=always \ +-p 88:80 -v /data/html:/usr/share/nginx/html:ro \ +nginx + +# 修改页面只需要去 主机的 /data/html +``` + +将容器内部的端口号映射出来 + +![image-20211107233847964](images/image-20211107233847964.png) + + + +## 4、提交改变 + +将自己修改好的镜像提交 + +```bash +docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] + +docker commit -a "leifengyang" -m "首页变化" 341d81f7504f guignginx:v1.0 +``` + + + +### 1、镜像传输 + +```bash +# 将镜像保存成压缩包 +docker save -o abc.tar guignginx:v1.0 + +# 远程拷贝到别的机器 +scp abc.tar root@xxx.xxx.xx:/home + +# 别的机器加载这个镜像 +docker load -i abc.tar + +# 离线安装 +``` + +## 5、推送远程仓库 + +推送镜像到docker hub;应用市场 + +```bash +docker tag local-image:tagname new-repo:tagname +docker push new-repo:tagname +# 把旧镜像的名字,改成仓库要求的新版名字 +docker tag guignginx:v1.0 leifengyang/guignginx:v1.0 + +# 登录到docker hub +docker login + + +docker logout(推送完成镜像后退出) + +# 推送 +docker push leifengyang/guignginx:v1.0 + + +# 别的机器下载 +docker pull leifengyang/guignginx:v1.0 +``` + + + +## 6、补充 + +```bash +# 查看日志 +docker logs 容器名/id 排错 + +# 进入容器内部修改配置 +docker exec -it 容器id /bin/bash + + +# docker 经常修改nginx配置文件 +docker run -d -p 80:80 \ +-v /data/html:/usr/share/nginx/html:ro \ +-v /data/conf/nginx.conf:/etc/nginx/nginx.conf \ +--name mynginx-02 \ +nginx + + +#把容器指定位置的东西复制出来 +docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf +#把外面的内容复制到容器里面 +docker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf +``` + +# 进阶实战 + +## 1、编写自己的应用 + +编写一个HelloWorld应用 + +https://start.spring.io/ + +示例代码: https://gitee.com/leifengyang/java-demo.git + +## 2、将应用打包成镜像 + +编写 **Dockerfile** 将自己的应用打包镜像 + +### 1、以前 + +**Java** 为例 + +- **SpringBoot** 打包成可执行 **jar** + +- 把 **jar** 包上传给服务 + +- 服务器运行 **java -jar** + +### 2、现在 + +所有机器都安装 **Docker**,任何应用都是镜像,所有机器都可以运行 + +### 3、怎么打包-Dockerfile + +```dockerfile +# Java基础环境 类似于 docker pull +FROM openjdk:8-jdk-slim +# 镜像的作者是谁 +LABEL maintainer=leifengyang + +COPY target/*.jar /app.jar + +ENTRYPOINT ["java","-jar","/app.jar"] +``` + +```bash +docker build -t java-demo:v1.0 . +``` + +思考: + +每个应用每次打包,都需要本地编译、再上传服务器、再进行docker构建,如果有1000个应用要打包镜像怎么办?有没有更好的方式? + +关于 **CMD** 和 **ENTRYPOINT** 的区别 + +```BASH +在 Dockerfile 中, 应该至少指定一个 CMD 和 ENTRYPOINT; +将 Docker 当作可执行程序时, 应该使用 ENTRYPOINT 进行配置; +CMD 可以用作 ENTRYPOINT 默认参数, 或者用作 Docker 的默认命令; +CMD 可以被 docker run 传入的参数覆盖; +docker run 传入的参数会附加到 ENTRYPOINT 之后, 前提是使用了exec格式 +``` + + + +## 3、启动容器 + +启动应用容器 + +```bash +docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 +``` + +分享镜像 + +```bash +# 登录docker hub +docker login + +#给旧镜像起名 +docker tag java-demo:v1.0 leifengyang/java-demo:v1.0 + +# 推送到docker hub +docker push leifengyang/java-demo:v1.0 + +# 别的机器 +docker pull leifengyang/java-demo:v1.0 + +# 别的机器运行 +docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 +``` + +## 4、部署中间件 + +部署一个Redis+应用,尝试应用操作Redis产生数据 + + + +```bash +docker run [OPTIONS] IMAGE [COMMAND] [ARG...] + +#redis使用自定义配置文件启动 + +docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \ +-v /data/redis/data:/data \ +-d --name myredis \ +-p 6379:6379 \ +redis:latest redis-server /etc/redis/redis.conf +``` + +需要将redis的配置文件和数据挂载出来 + +![image-20211108085600489](images/image-20211108085600489.png) \ No newline at end of file diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221052435.png" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221052435.png" new file mode 100644 index 00000000..4949049b Binary files /dev/null and "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221052435.png" differ diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221144406.png" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221144406.png" new file mode 100644 index 00000000..cc69523d Binary files /dev/null and "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107221144406.png" differ diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107233847964.png" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107233847964.png" new file mode 100644 index 00000000..d5944a2c Binary files /dev/null and "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211107233847964.png" differ diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211108085600489.png" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211108085600489.png" new file mode 100644 index 00000000..a17cbe7d Binary files /dev/null and "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image-20211108085600489.png" differ diff --git "a/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image.png" "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image.png" new file mode 100644 index 00000000..68ba11cd Binary files /dev/null and "b/K8S/Kubesphere/2_Docker\345\237\272\347\241\200/images/image.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/README.md" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/README.md" new file mode 100644 index 00000000..26432b39 --- /dev/null +++ "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/README.md" @@ -0,0 +1,752 @@ +# Kubernetes基础概念 + +# 1、是什么 + +![img](images/image.png) + + + +我们急需一个大规模容器编排系统 + + + +kubernetes具有以下特性: + +- **服务发现和负载均衡** + Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 +- **存储编排** + Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。 + +- **自动部署和回滚** + 你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。 +- **自动完成装箱计算** + Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。 + +- **自我修复** + Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 +- **密钥与配置管理** + Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。 + + + +***Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。\*** + +# 2、架构 + +## 1、工作方式 + +Kubernetes **Cluster** **=** N **Master** Node **+** N **Worker** Node:N主节点+N工作节点; N>=1 + +## 2、组件架构 + +![img](images/image-1636471368715.png) + +### 1、控制平面组件(Control Plane Components) + +控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 `replicas` 字段时,启动新的 [pod](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/))。 + +控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。 请参阅[使用 kubeadm 构建高可用性集群](https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/high-availability/) 中关于多 VM 控制平面设置的示例。 + +#### kube-apiserver + +API 服务器是 Kubernetes [控制面](https://kubernetes.io/zh/docs/reference/glossary/?all=true#term-control-plane)的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。 + +Kubernetes API 服务器的主要实现是 [kube-apiserver](https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/)。 kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。 + +#### etcd + +etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 + +您的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。 + +要了解 etcd 更深层次的信息,请参考 [etcd 文档](https://etcd.io/docs/)。 + +#### kube-scheduler + +控制平面组件,负责监视新创建的、未指定运行[节点(node)](https://kubernetes.io/zh/docs/concepts/architecture/nodes/)的 [Pods](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/),选择节点让 Pod 在上面运行。 + +调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。 + +#### kube-controller-manager + +在主节点上运行 [控制器](https://kubernetes.io/zh/docs/concepts/architecture/controller/) 的组件。 + +从逻辑上讲,每个[控制器](https://kubernetes.io/zh/docs/concepts/architecture/controller/)都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。 + +这些控制器包括: + +- 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应 +- 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成 + +- 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod) +- 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌 + +#### cloud-controller-manager + +云控制器管理器是指嵌入特定云的控制逻辑的 [控制平面](https://kubernetes.io/zh/docs/reference/glossary/?all=true#term-control-plane)组件。 云控制器管理器允许您链接集群到云提供商的应用编程接口中, 并把和该云平台交互的组件与只和您的集群交互的组件分离开。 + +`cloud-controller-manager` 仅运行特定于云平台的控制回路。 如果你在自己的环境中运行 Kubernetes,或者在本地计算机中运行学习环境, 所部署的环境中不需要云控制器管理器。 + +与 `kube-controller-manager` 类似,`cloud-controller-manager` 将若干逻辑上独立的 控制回路组合到同一个可执行文件中,供你以同一进程的方式运行。 你可以对其执行水平扩容(运行不止一个副本)以提升性能或者增强容错能力。 + +下面的控制器都包含对云平台驱动的依赖: + +- 节点控制器(Node Controller): 用于在节点终止响应后检查云提供商以确定节点是否已被删除 +- 路由控制器(Route Controller): 用于在底层云基础架构中设置路由 + +- 服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器 + +### 2、Node 组件 + +节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。 + +#### kubelet + +一个在集群中每个[节点(node)](https://kubernetes.io/zh/docs/concepts/architecture/nodes/)上运行的代理。 它保证[容器(containers)](https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/#why-containers)都 运行在 [Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/) 中。 + +kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。 + +#### kube-proxy + +[kube-proxy](https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/) 是集群中每个节点上运行的网络代理, 实现 Kubernetes [服务(Service)](https://kubernetes.io/zh/docs/concepts/services-networking/service/) 概念的一部分。 + +kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。 + +如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。 + +![img](images/image.png) + +### 动态演示 + +![image-20211110083453090](images/image-20211110083453090.png) + +# 3、kubeadm创建集群 + +请参照以前Docker安装。先提前为所有机器安装Docker + +- 首先需要在三台机器上安装容器运行时环境 +- 然后,通过kubeadm init 选择一个主节点(选择主节点后,会在里面安装各种主节点才有的软件) + - 如 scheduler、kube-proxy、api-server、etcd、controller-managet +- 然后另外的节点就需要加入到主节点中,通过 kubeadm join 命令 + +![image-20211110083932498](images/image-20211110083932498.png) + + + + + +![image-20211110085324658](images/image-20211110085324658.png) + + + +## 1、安装kubeadm + +- 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令 +- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存) + +- 2 CPU 核或更多 +- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以) + +- - **设置防火墙放行规则** + +- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见[这里](https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#verify-mac-address)了解更多详细信息。 + +- - **设置不同hostname** + +- 开启机器上的某些端口。请参见[这里](https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#check-required-ports) 了解更多详细信息。 + +- - **内网互信** + +- 禁用交换分区。为了保证 kubelet 正常工作,你 **必须** 禁用交换分区。 + +- - **永久关闭** + +### 1、基础环境 + +所有机器执行以下操作 + +```bash +#各个机器设置自己的域名 +hostnamectl set-hostname xxxx + + +# 将 SELinux 设置为 permissive 模式(相当于将其禁用) +sudo setenforce 0 +sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config + +#关闭swap +swapoff -a +sed -ri 's/.*swap.*/#&/' /etc/fstab + +#允许 iptables 检查桥接流量 +cat <> /etc/hosts + + + +#主节点初始化 +kubeadm init \ +--apiserver-advertise-address=172.31.0.4 \ +--control-plane-endpoint=cluster-endpoint \ +--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ +--kubernetes-version v1.20.9 \ +--service-cidr=10.96.0.0/16 \ +--pod-network-cidr=192.168.0.0/16 + +#所有网络范围不重叠 +``` + + + +```bash +Your Kubernetes control-plane has initialized successfully! + +To start using your cluster, you need to run the following as a regular user: + + mkdir -p $HOME/.kube + sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + sudo chown $(id -u):$(id -g) $HOME/.kube/config + +Alternatively, if you are the root user, you can run: + + export KUBECONFIG=/etc/kubernetes/admin.conf + +You should now deploy a pod network to the cluster. +Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: + https://kubernetes.io/docs/concepts/cluster-administration/addons/ + +You can now join any number of control-plane nodes by copying certificate authorities +and service account keys on each node and then running the following as root: + + kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \ + --discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3 \ + --control-plane + +Then you can join any number of worker nodes by running the following on each as root: + +kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \ + --discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3 +``` + + + +```bash +#查看集群所有节点 +kubectl get nodes + +#根据配置文件,给集群创建资源 +kubectl apply -f xxxx.yaml + +#查看集群部署了哪些应用? +docker ps === kubectl get pods -A +# 运行中的应用在docker里面叫容器,在k8s里面叫Pod +kubectl get pods -A +``` + + + +### 3、根据提示继续 + +master成功后提示如下: + +![img](images/image-1636471368714.png) + + + +#### 1、设置.kube/config + +复制上面命令 + + + +#### 2、安装网络组件 + +[calico官网](https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-more-than-50-nodes) + +```bash +curl https://docs.projectcalico.org/manifests/calico.yaml -O + +kubectl apply -f calico.yaml +``` + + + +### 4、加入node节点 + +```bash +kubeadm join cluster-endpoint:6443 --token x5g4uy.wpjjdbgra92s25pp \ + --discovery-token-ca-cert-hash sha256:6255797916eaee52bf9dda9429db616fcd828436708345a308f4b917d3457a22 +``` + +新令牌 + +kubeadm token create --print-join-command + + + +***高可用部署方式,也是在这一步的时候,使用添加主节点的命令即可\*** + + + + + +### 5、验证集群 + + + +- 验证集群节点状态 + +- - kubectl get nodes + + + + + +### 6、部署dashboard + +#### 1、部署 + +kubernetes官方提供的可视化界面 + +https://github.com/kubernetes/dashboard + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml +``` + + + +```yaml +# Copyright 2017 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Namespace +metadata: + name: kubernetes-dashboard + +--- + +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard + +--- + +kind: Service +apiVersion: v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard +spec: + ports: + - port: 443 + targetPort: 8443 + selector: + k8s-app: kubernetes-dashboard + +--- + +apiVersion: v1 +kind: Secret +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard-certs + namespace: kubernetes-dashboard +type: Opaque + +--- + +apiVersion: v1 +kind: Secret +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard-csrf + namespace: kubernetes-dashboard +type: Opaque +data: + csrf: "" + +--- + +apiVersion: v1 +kind: Secret +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard-key-holder + namespace: kubernetes-dashboard +type: Opaque + +--- + +kind: ConfigMap +apiVersion: v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard-settings + namespace: kubernetes-dashboard + +--- + +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard +rules: + # Allow Dashboard to get, update and delete Dashboard exclusive secrets. + - apiGroups: [""] + resources: ["secrets"] + resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"] + verbs: ["get", "update", "delete"] + # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map. + - apiGroups: [""] + resources: ["configmaps"] + resourceNames: ["kubernetes-dashboard-settings"] + verbs: ["get", "update"] + # Allow Dashboard to get metrics. + - apiGroups: [""] + resources: ["services"] + resourceNames: ["heapster", "dashboard-metrics-scraper"] + verbs: ["proxy"] + - apiGroups: [""] + resources: ["services/proxy"] + resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"] + verbs: ["get"] + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard +rules: + # Allow Metrics Scraper to get metrics from the Metrics server + - apiGroups: ["metrics.k8s.io"] + resources: ["pods", "nodes"] + verbs: ["get", "list", "watch"] + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubernetes-dashboard +subjects: + - kind: ServiceAccount + name: kubernetes-dashboard + namespace: kubernetes-dashboard + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: kubernetes-dashboard +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kubernetes-dashboard +subjects: + - kind: ServiceAccount + name: kubernetes-dashboard + namespace: kubernetes-dashboard + +--- + +kind: Deployment +apiVersion: apps/v1 +metadata: + labels: + k8s-app: kubernetes-dashboard + name: kubernetes-dashboard + namespace: kubernetes-dashboard +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + k8s-app: kubernetes-dashboard + template: + metadata: + labels: + k8s-app: kubernetes-dashboard + spec: + containers: + - name: kubernetes-dashboard + image: kubernetesui/dashboard:v2.3.1 + imagePullPolicy: Always + ports: + - containerPort: 8443 + protocol: TCP + args: + - --auto-generate-certificates + - --namespace=kubernetes-dashboard + # Uncomment the following line to manually specify Kubernetes API server Host + # If not specified, Dashboard will attempt to auto discover the API server and connect + # to it. Uncomment only if the default does not work. + # - --apiserver-host=http://my-address:port + volumeMounts: + - name: kubernetes-dashboard-certs + mountPath: /certs + # Create on-disk volume to store exec logs + - mountPath: /tmp + name: tmp-volume + livenessProbe: + httpGet: + scheme: HTTPS + path: / + port: 8443 + initialDelaySeconds: 30 + timeoutSeconds: 30 + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsUser: 1001 + runAsGroup: 2001 + volumes: + - name: kubernetes-dashboard-certs + secret: + secretName: kubernetes-dashboard-certs + - name: tmp-volume + emptyDir: {} + serviceAccountName: kubernetes-dashboard + nodeSelector: + "kubernetes.io/os": linux + # Comment the following tolerations if Dashboard must not be deployed on master + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + +--- + +kind: Service +apiVersion: v1 +metadata: + labels: + k8s-app: dashboard-metrics-scraper + name: dashboard-metrics-scraper + namespace: kubernetes-dashboard +spec: + ports: + - port: 8000 + targetPort: 8000 + selector: + k8s-app: dashboard-metrics-scraper + +--- + +kind: Deployment +apiVersion: apps/v1 +metadata: + labels: + k8s-app: dashboard-metrics-scraper + name: dashboard-metrics-scraper + namespace: kubernetes-dashboard +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + k8s-app: dashboard-metrics-scraper + template: + metadata: + labels: + k8s-app: dashboard-metrics-scraper + annotations: + seccomp.security.alpha.kubernetes.io/pod: 'runtime/default' + spec: + containers: + - name: dashboard-metrics-scraper + image: kubernetesui/metrics-scraper:v1.0.6 + ports: + - containerPort: 8000 + protocol: TCP + livenessProbe: + httpGet: + scheme: HTTP + path: / + port: 8000 + initialDelaySeconds: 30 + timeoutSeconds: 30 + volumeMounts: + - mountPath: /tmp + name: tmp-volume + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsUser: 1001 + runAsGroup: 2001 + serviceAccountName: kubernetes-dashboard + nodeSelector: + "kubernetes.io/os": linux + # Comment the following tolerations if Dashboard must not be deployed on master + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + volumes: + - name: tmp-volume + emptyDir: {} +``` + + + +#### 2、设置访问端口 + +```bash +kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard +``` + +type: ClusterIP 改为 type: NodePort + + + +```bash +kubectl get svc -A |grep kubernetes-dashboard +## 找到端口,在安全组放行 +``` + + + +访问: https://集群任意IP:端口 https://139.198.165.238:32759 + + + +#### 3、创建访问账号 + +```yaml +#创建访问账号,准备一个yaml文件; vi dash.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: admin-user + namespace: kubernetes-dashboard +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: admin-user +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: admin-user + namespace: kubernetes-dashboard +kubectl apply -f dash.yaml +``` + +#### 4、令牌访问 + +```bash +#获取访问令牌 +kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}" +``` + + + +```json +eyJhbGciOiJSUzI1NiIsImtpZCI6InpXSkU0TjhCUmVKQzBJaC03Nk9ES2NMZ1daRTRmQ1FMZU9rRUJ3VXRnM3MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXgyczhmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzOTZmYjdlNS0wMjA2LTQxMjctOGQzYS0xMzRlODVmYjU0MDAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Hf5mhl35_R0iBfBW7fF198h_klEnN6pRKfk_roAzOtAN-Aq21E4804PUhe9Rr9e_uFzLfoFDXacjJrHCuhiML8lpHIfJLK_vSD2pZNaYc2NWZq2Mso-BMGpObxGA23hW0nLQ5gCxlnxIAcyE76aYTAB6U8PxpvtVdgUknBVrwXG8UC_D8kHm9PTwa9jgbZfSYAfhOHWmZxNYo7CF2sHH-AT_WmIE8xLmB7J11vDzaunv92xoUoI0ju7OBA2WRr61bOmSd8WJgLCDcyBblxz4Wa-3zghfKlp0Rgb8l56AAI7ML_snF59X6JqaCuAcCJjIu0FUTS5DuyIObEeXY-z-Rw +``` + +#### 5、界面 + +![img](images/image-1636471368716.png) \ No newline at end of file diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368714.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368714.png" new file mode 100644 index 00000000..8237c101 Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368714.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368715.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368715.png" new file mode 100644 index 00000000..b19c07f6 Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368715.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368716.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368716.png" new file mode 100644 index 00000000..ef945d8b Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-1636471368716.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083349101.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083349101.png" new file mode 100644 index 00000000..565f953d Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083349101.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083453090.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083453090.png" new file mode 100644 index 00000000..01f9132b Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083453090.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083932498.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083932498.png" new file mode 100644 index 00000000..cee4992f Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110083932498.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110085324658.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110085324658.png" new file mode 100644 index 00000000..e36ec157 Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image-20211110085324658.png" differ diff --git "a/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image.png" "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image.png" new file mode 100644 index 00000000..cff9e889 Binary files /dev/null and "b/K8S/Kubesphere/3_Kubernetes\345\205\245\351\227\250/images/image.png" differ diff --git a/K8S/Kubesphere/README.md b/K8S/Kubesphere/README.md new file mode 100644 index 00000000..6586e81d --- /dev/null +++ b/K8S/Kubesphere/README.md @@ -0,0 +1,95 @@ +文档地址:https://www.yuque.com/leifengyang/oncloud/vfvmcd + +## 云原生实战 + +Docker、Kubernetes、Kubesphere上云实战,是架构师的第一课 + +## 适合人群 + +- 开发工程师 +- 传统运维工程师 +- 运维工程师 +- 测试工程师 +- 传统架构师 + +## 课程特色 + +- 实战方式快速系统了解云原生核心 + +- 完全云上实战、消除环境差异性 +- 资源与笔记齐全:https://www.yuque.com/leifengyang/oncloud +- 提供答疑渠道 + +### 前置要求 + +- 会基本的 **Linux** 操作 + +- 了解常用中间件、比如 Nginx、MySQL、Redis等 +- 分布式经验更加,比如 **SpringCloud** + +## 课程大纲 + +从零开始的云原生王者之路公开课 + +- 课程简介 + - 适合人群 + - 初学者了解云原生技术栈; + - 不包括高级技术讲解,高级技术参考大厂学苑《拥抱云原生》课程 + - 课程特色 + - 快速系统了解概念 + - 云上真实环境实战 + - 云原生入门介绍 + - 公有云与私有云 + - 云资源介绍:ECS、VPC +- 容器化基础 + - Docker安装与介绍 + - Docker镜像操作 + - Docker容器运行与访问 + - Docker数据卷挂载 +- Kubernetes基础 + - Kubernetes是什么? + - Kubernetes集群快速搭建 + - Kubernetes-Pod + - Kubernetes-NameSpace + - Kubernetes-Deployment + - Kubernetes-Service + - Kubernetes-Ingress + - Kubernetes-StatefulSet:简介介绍,没有详细讲 +- 使用KubeSphere简化Kubernetes集群部署 + - 在Linux上部署KubeSphere 3.1:All-in-one模式部署KubeSphere;多节点模式部署KubeSphere + - 在Kubernetes上部署KubeSphere + - KubeSphere平台的使用 + - 管理节点HA模式 + - 离线安装模式 + - 从KubeSphere老版本升级到3.1.2 + - 多集群模式 +- 使用KubeSphere简化Kubernetes集群与应用的管理 +- DevOps基础与实践 + - DevOps基础概念 + - DevOps过程简介 + - DevOps运维和弹性伸缩 + - DevOps沙盘演练(示例应用) + - 从企业视角了解DevOps的实施过程 + - DevOps核心技术及常见生态工具的设计与落地 + - 持续集成、技术交付全流程流水线工具的设计与落地 + - 在KubeSphere上时间DevOps流水线 +- 微服务基础与实践 + - 微服务的基础概念 + - 微服务的最佳实践 + - 在KubeSphere上构建第一个微服务 + - 在KubeSphere上部署SpringCloud全家桶及示例应用 + - 在KubeSphere上部署Dubbo及示例应用 + - 企业应用微服务化改造路径与最佳实践 +- 使用KubeSphere实现Kubernetes可观测性 + - 集群与应用日志 + - 日志的使用场景 + - KubeSphere日志技术原理简介 + - 对接KubeSphere日志系统实战 + - 监控与告警 + - Prometheus基础 + - 对接Kubesphere平台监控系统实战 +- KubeSphere助力应用从云端走向边缘 + + + + \ No newline at end of file diff --git a/K8S/README.md b/K8S/README.md index fa929dd5..80d4a6ee 100644 --- a/K8S/README.md +++ b/K8S/README.md @@ -12,25 +12,29 @@ ## 目录 -- [Kubernetes简介](./1_Kubernetes简介/README.md) -- [搭建K8S集群前置知识](./2_搭建K8S集群前置知识/README.md) -- [使用kubeadm方式搭建K8S集群](./3_使用kubeadm方式搭建K8S集群/README.md) +- [Kubernetes简介](http://www.moguit.cn/info/250) +- [搭建K8S集群前置知识](http://www.moguit.cn/info/7) +- [使用kubeadm方式搭建K8S集群](http://www.moguit.cn/info/548) - [使用二进制方式搭建K8S集群](./4_使用二进制方式搭建K8S集群/README.md) - [Kubeadm和二进制方式对比](./5_Kubeadm和二进制方式对比/README.md) -- [Kubernetes集群管理工具kubectl](./6_Kubernetes集群管理工具kubectl/README.md) -- [Kubernetes集群YAML文件详解](./7_Kubernetes集群YAML文件详解/README.md) -- [Kubernetes核心技术Pod](./8_Kubernetes核心技术Pod/README.md) -- [Kubernetes核心技术Controller](./9_Kubernetes核心技术Controller/README.md) -- [Kubernetes核心技术Service](./10_Kubernetes核心技术Service/README.md) -- [Kubernetes控制器Controller详解](./11_Kubernetes控制器Controller详解/README.md) -- [Kubernetes配置管理](./12_Kubernetes配置管理/README.md) -- [Kubernetes集群安全机制](./13_Kubernetes集群安全机制/README.md) -- [Kubernetes核心技术Ingress](./14_Kubernetes核心技术Ingress/README.md) -- [Kubernetes核心技术Helm](./15_Kubernetes核心技术Helm/README.md) -- [Kubernetes持久化存储](./16_Kubernetes持久化存储/README.md) -- [Kubernetes集群资源监控](./17_Kubernetes集群资源监控/README.md) -- [Kubernetes搭建高可用集群](./18_Kubernetes搭建高可用集群/README.md) -- [Kubernetes容器交付介绍](./19_Kubernetes容器交付介绍/README.md) +- [Kubernetes集群管理工具kubectl](http://www.moguit.cn/info/549) +- [Kubernetes集群YAML文件详解](http://www.moguit.cn/info/551) +- [Kubernetes核心技术Pod](http://www.moguit.cn/info/552) +- [Kubernetes核心技术Controller](http://www.moguit.cn/info/553) +- [Kubernetes核心技术Service](http://www.moguit.cn/info/554) +- [Kubernetes控制器Controller详解](http://www.moguit.cn/#/info?blogUid=bf58178837d8b3eba8e5b092a3193211) +- [Kubernetes配置管理](http://www.moguit.cn/info/556) +- [Kubernetes集群安全机制](http://www.moguit.cn/info/558) +- [Kubernetes核心技术Ingress](http://www.moguit.cn/info/559) +- [Kubernetes核心技术Helm](http://www.moguit.cn/info/560) +- [Kubernetes持久化存储](http://www.moguit.cn/info/561) +- [Kubernetes集群资源监控](http://www.moguit.cn/info/562) +- [Kubernetes搭建高可用集群](http://www.moguit.cn/info/563) +- [Kubernetes容器交付介绍](http://www.moguit.cn/info/574) +- [使用kubeadm-ha脚本一键安装K8S](./30_使用kubeadm-ha脚本一键安装K8S/README.md) +- [Kubernetes可视化界面kubesphere](./31_Kubernetes可视化界面kubesphere/README.md) + +- [Kubernetes配置默认存储类](./32_Kubernetes配置默认存储类/README.md) diff --git "a/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/README.md" "b/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/README.md" new file mode 100644 index 00000000..41716d01 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/README.md" @@ -0,0 +1,31 @@ +你好,我是林晓斌,网名“丁奇”,欢迎加入我的专栏,和我一起开始 MySQL 学习之旅。我曾先后在百度和阿里任职,从事 MySQL 数据库方面的工作,一步步地从一个数据库小白成为 MySQL 内核开发人员。回想起来,从我第一次带着疑问翻 MySQL 的源码查到答案至今,已经有十个年头了。在这个过程中,走了不少弯路,但同时也收获了很多的知识和思考,希望能在这个专栏里分享给你。 + +记得刚开始接触 MySQL,是我在百度贴吧做权限系统的时候。我们遇到了一个奇怪的问题,一个正常 10 毫秒就能完成的 SQL 查询请求偶尔要执行 100 多毫秒才结束。当时主管问我是什么原因,我其实也搞不清楚,就上网查答案,但怎么找都找不到,又脸皮薄不想说自己不知道,只好硬着头皮翻源码。后来遇到了越来越多的问题,也是类似的情景,所以我逐步养成了通过分析源码理解原理的习惯。 + +当时,我自己的感觉是,即使我只是一个开发工程师,只是 MySQL 的用户,在了解了一个个系统模块的原理后,再来使用它,感觉是完全不一样的。当在代码里写下一行数据库命令的时候,我就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让我的应用程序访问数据库的性能最高。进一步,哪些数据处理让数据库系统来做性能会更好,哪些数据处理在缓存里做性能会更好,我心里也会更清楚。在建表和建索引的时候,我也会更有意识地为将来的查询优化做综合考虑,比如确定是否使用递增主键、主键的列怎样选择,等等。 + +但随后我又有了一个新的困惑,我觉得自己了解的 MySQL 知识点是零散的,没有形成网络。于是解决完一个问题后,很容易忘记。再碰到类似的问题,我又得再翻一次代码。 + +所幸在阿里工作的时候,我参与了阿里云关系型数据库服务内核的开发,并且负责开发开源分支 AliSQL,让我对 MySQL 内核和源码有了更深层次的研究和理解。在服务内部客户和公有云客户的过程中,我有机会面对和解决足够多的问题,再通过手册进行系统的学习,算是比较坎坷地将 MySQL 的知识网络补了起来。 + +所以,在回顾这个过程的时候,我的第一个感受是,如果一开始就有一些从理论到实战的系统性指导,那该多好啊,也许我可以学习得更快些。 + +在极客时间团队跟我联系策划这个专栏的时候,我还是持怀疑态度的。为什么呢?现在不比当年了,犹记得十余年前,你使用 MySQL 的过程中碰到问题的话,基本上都只能到代码里去找答案,因为那时网上的资料太少了。 + +而近十年来,MySQL 在中国广泛普及,技术分享文章可以说是浩如烟海。所以,现在要系统地介绍一遍 MySQL 的话,恐怕里面提及的大多数知识点,都可以在社区文章中找到。那么我们做这个专栏的意义在哪里,而它又凭什么可以收费呢? + +直到收到极客时间团队的答复,我才开始对这个专栏“想做和可以做”的事情感觉清晰起来。数据库是一个综合系统,其背后是发展了几十年的数据库理论。同时,数据库系统也是一个应用系统,可能一个业务开发人员用了两三年 MySQL,还未必清楚那些自己一直在用的“最佳实践”为什么是最佳的。 + +于是,我希望这个专栏能够帮助这样的一些开发者:他们正在使用 MySQL,知道如何写出逻辑正确的 SQL 语句来实现业务目标,却不确定这个语句是不是最优的;他们听说了一些使用数据库的最佳实践,但是更想了解为什么这么做;他们使用的数据库偶尔会出问题,亟需了解如何更快速、更准确地定位问题,甚至自己解决问题…… + +在过去的七年里,我带过十几个应届毕业生,看着他们成长,要求他们原理先行,再实践验证。几年下来,他们的成长速度都很快,其中好几个毕业没两年就成为团队的骨干力量了。我也在社招的时候面试过很多有着不错的运维实践经验和能力的候选人,但都因为对数据库原理仅有一知半解的了解,而最终遗憾地没有通过面试。 + +因此,我希望这个专栏能够激发开发者对数据库原理的探索欲,从而更好地理解工作中遇到的问题,更能知道背后的为什么。所以**我会选那些平时使用数据库时高频出现的知识,如事务、索引、锁等内容构成专栏的主线**。这些主线上是一个个的知识点。每个点就是一个概念、一个机制或者一个原理说明。在每个说明之后,我会和你讨论一个实践相关的问题。 + +希望能以这样的方式,让你对 MySQL 的几条主线有一个整体的认识,并且了解基本概念。在之后的实践篇中,我会引用到这些主线的知识背景,并着力说明它们是怎样指导实践的。这样,**你可以从点到线,再到面,形成自己的 MySQL 知识网络。** + +在这里,有一份目录,你也可以先了解下整个专栏的知识结构。 + +![img](images/a78db0b99bbf1149c39b7960f7183c7e.jpg) + +如前面说的,这几条主线上的每个知识点几乎都不是最新的,有些甚至十年前就这样,并没有改过。但我希望针对这些点的说明,可以让你在使用 MySQL 时心里更有底,知道怎么做选择,并且明白为什么。了解了原理,才能在实践中不断创新,提升个人的价值和工作输出。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/images/a78db0b99bbf1149c39b7960f7183c7e.jpg" "b/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/images/a78db0b99bbf1149c39b7960f7183c7e.jpg" new file mode 100644 index 00000000..60047f44 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/00_\345\274\200\347\257\207\350\257\215 \350\277\231\344\270\200\346\254\241\357\274\214\350\256\251\346\210\221\344\273\254\344\270\200\350\265\267\346\235\245\346\220\236\346\207\202MySQL/images/a78db0b99bbf1149c39b7960f7183c7e.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" new file mode 100644 index 00000000..02b05472 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" @@ -0,0 +1,150 @@ +这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: + +```csharp +mysql> select * from T where ID=10; +``` + +我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。 + +所以今天我想和你一起把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,让你对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问题时,就能够直戳本质,更为快速地定位并解决问题。 + +下面我给出的是 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 + +![img](images/0d2070e8f84c4801adbfa03bda1f98d9.png) + +MySQL 的逻辑架构图 + +大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 + +Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 + +而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。 + +也就是说,你执行 create table 建表的时候,如果不指定引擎类型,默认使用的就是 InnoDB。不过,你也可以通过指定存储引擎的类型来选择别的引擎,比如在 create table 语句中使用 engine=memory, 来指定使用内存引擎创建表。不同存储引擎的表数据存取方式不同,支持的功能也不同,在后面的文章中,我们会讨论到引擎的选择。 + +从图中不难看出,不同的存储引擎共用一个**Server 层**,也就是从连接器到执行器的部分。你可以先对每个组件的名字有个印象,接下来我会结合开头提到的那条 SQL 语句,带你走一遍整个执行流程,依次看下每个组件的作用。 + +# 连接器 + +第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的: + +```bash +mysql -h$ip -P$port -u$user -p +``` + +输完命令之后,你就需要在交互对话里面输入密码。虽然密码也可以直接跟在 -p 后面写在命令行中,但这样可能会导致你的密码泄露。如果你连的是生产服务器,强烈建议你不要这么做。 + +连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。 + +- 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。 +- 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。 + +这就意味着,一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。 + +连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。文本中这个图是 show processlist 的结果,其中的 Command 列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。 + +![img](images/f2da4aa3a672d48ec05df97b9f992fed.png)客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。 + +如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。这时候如果你要继续,就需要重连,然后再执行请求了。 + +数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。 + +建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。 + +但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。 + +怎么解决这个问题呢?你可以考虑以下两种方案。 + +1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。 +2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。 + +# 查询缓存 + +连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。 + +MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。 + +如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。 + +**但是大多数情况下我会建议你不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。** + +查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 + +好在 MySQL 也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样: + +```csharp +mysql> select SQL_CACHE * from T where ID=10; +``` + +需要注意的是,MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。 + +# 分析器 + +如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什么,因此需要对 SQL 语句做解析。 + +分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。 + +MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。 + +做完了这些识别以后,就要做“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。 + +如果你的语句不对,就会收到“You have an error in your SQL syntax”的错误提醒,比如下面这个语句 select 少打了开头的字母“s”。 + +```vbnet +mysql> elect * from t where ID=1; + +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from t where ID=1' at line 1 +``` + +一般语法错误会提示第一个出现错误的位置,所以你要关注的是紧接“use near”的内容。 + +# 优化器 + +经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。 + +优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。比如你执行下面这样的语句,这个语句是执行两个表的 join: + +```csharp +mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20; +``` + +- 既可以先从表 t1 里面取出 c=10 的记录的 ID 值,再根据 ID 值关联到表 t2,再判断 t2 里面 d 的值是否等于 20。 +- 也可以先从表 t2 里面取出 d=20 的记录的 ID 值,再根据 ID 值关联到 t1,再判断 t1 里面 c 的值是否等于 10。 + +这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。 + +优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。如果你还有一些疑问,比如优化器是怎么选择索引的,有没有可能选择错等等,没关系,我会在后面的文章中单独展开说明优化器的内容。 + +# 执行器 + +MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。 + +开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示 (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限)。 + +```sql +mysql> select * from T where ID=10; + +ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T' +``` + +如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。 + +比如我们这个例子中的表 T 中,ID 字段没有索引,那么执行器的执行流程是这样的: + +1. 调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中; +2. 调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。 +3. 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 + +至此,这个语句就执行完成了。 + +对于有索引的表,执行的逻辑也差不多。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。 + +你会在数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。 + +在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此**引擎扫描行数跟 rows_examined 并不是完全相同的。**我们后面会专门有一篇文章来讲存储引擎的内部机制,里面会有详细的说明。 + +# 小结 + +今天我给你介绍了 MySQL 的逻辑架构,希望你对一个 SQL 语句完整执行流程的各个阶段有了一个初步的印象。由于篇幅的限制,我只是用一个查询的例子将各个环节过了一遍。如果你还对每个环节的展开细节存有疑问,也不用担心,后续在实战章节中我还会再提到它们。 + +我给你留一个问题吧,如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢? \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" new file mode 100644 index 00000000..9f6ba7ff Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" differ diff --git "a/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/f2da4aa3a672d48ec05df97b9f992fed.png" "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/f2da4aa3a672d48ec05df97b9f992fed.png" new file mode 100644 index 00000000..fe32a7dc Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/01_\345\237\272\347\241\200\346\236\266\346\236\204\357\274\232\344\270\200\346\235\241SQL\346\237\245\350\257\242\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/f2da4aa3a672d48ec05df97b9f992fed.png" differ diff --git "a/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" new file mode 100644 index 00000000..a7e4488f --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/README.md" @@ -0,0 +1,136 @@ +前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 + +那么,一条更新语句的执行流程又是怎样的呢? + +之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢? + +我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: + +```sql +mysql> create table T(ID int primary key, c int); +``` + +如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写: + +```r +mysql> update T set c=c+1 where ID=2; +``` + +前面我有跟你介绍过 SQL 语句基本的执行链路,这里我再把那张图拿过来,你也可以先简单看看这个图回顾下。首先,可以确定的说,查询语句的那一套流程,更新语句也是同样会走一遍。 + +![img](images/0d2070e8f84c4801adbfa03bda1f98d9.png) + +MySQL 的逻辑架构图 + +你执行语句前要先连接数据库,这是连接器的工作。 + +前面我们说过,在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表 T 上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。 + +接下来,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。然后,执行器负责具体执行,找到这一行,然后更新。 + +与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的主角:redo log(重做日志)和 binlog(归档日志)。如果接触 MySQL,那这两个词肯定是绕不过的,我后面的内容里也会不断地和你强调。不过话说回来,redo log 和 binlog 在设计上有很多有意思的地方,这些设计思路也可以用到你自己的程序里。 + +# 重要的日志模块:redo log + +不知道你还记不记得《孔乙己》这篇文章,酒店掌柜有一个粉板,专门用来记录客人的赊账记录。如果赊账的人不多,那么他可以把顾客名和账目写在板上。但如果赊账的人多了,粉板总会有记不下的时候,这个时候掌柜一定还有一个专门记录赊账的账本。 + +如果有人要赊账或者还账的话,掌柜一般有两种做法: + +- 一种做法是直接把账本翻出来,把这次赊的账加上去或者扣除掉; +- 另一种做法是先在粉板上记下这次的账,等打烊以后再把账本翻出来核算。 + +在生意红火柜台很忙时,掌柜一定会选择后者,因为前者操作实在是太麻烦了。首先,你得找到这个人的赊账总额那条记录。你想想,密密麻麻几十页,掌柜要找到那个名字,可能还得带上老花镜慢慢找,找到之后再拿出算盘计算,最后再将结果写回到账本上。 + +这整个过程想想都麻烦。相比之下,还是先在粉板上记一下方便。你想想,如果掌柜没有粉板的帮助,每次记账都得翻账本,效率是不是低得让人难以忍受? + +同样,在 MySQL 里也有这个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 的设计者就用了类似酒店掌柜粉板的思路来提升更新效率。 + +而粉板和账本配合的整个过程,其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。 + +具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log(粉板)里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做,这就像打烊以后掌柜做的事。 + +如果今天赊账的不多,掌柜可以等打烊后再整理。但如果某天赊账的特别多,粉板写满了,又怎么办呢?这个时候掌柜只好放下手中的活儿,把粉板中的一部分赊账记录更新到账本中,然后把这些记录从粉板上擦掉,为记新账腾出空间。 + +与此类似,InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写,如下面这个图所示。 + +![img](images/16a7950217b3f0f4ed02db5db59562a7.png) + +write pos 是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。checkpoint 是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。 + +write pos 和 checkpoint 之间的是“粉板”上还空着的部分,可以用来记录新的操作。如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。 + +有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为**crash-safe**。 + +要理解 crash-safe 这个概念,可以想想我们前面赊账记录的例子。只要赊账记录记在了粉板上或写在了账本上,之后即使掌柜忘记了,比如突然停业几天,恢复生意后依然可以通过账本和粉板上的数据明确赊账账目。 + +# 重要的日志模块:binlog + +前面我们讲过,MySQL 整体来看,其实就有两块:一块是 Server 层,它主要做的是 MySQL 功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。上面我们聊到的粉板 redo log 是 InnoDB 引擎特有的日志,而 Server 层也有自己的日志,称为 binlog(归档日志)。 + +我想你肯定会问,为什么会有两份日志呢? + +因为最开始 MySQL 里并没有 InnoDB 引擎。MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog 日志只能用于归档。而 InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力。 + +这两种日志有以下三点不同。 + +1. redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。 +2. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。 +3. redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 + +有了对这两个日志的概念性理解,我们再来看执行器和 InnoDB 引擎在执行这个简单的 update 语句时的内部流程。 + +1. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。 +2. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。 +3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。 +4. 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。 +5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。 + +这里我给出这个 update 语句的执行流程图,图中浅色框表示是在 InnoDB 内部执行的,深色框表示是在执行器中执行的。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/2e5bff4910ec189fe1ee6e2ecc7b4bbe.png) + +update 语句执行流程 + +你可能注意到了,最后三步看上去有点“绕”,将 redo log 的写入拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"。 + +# 两阶段提交 + +为什么必须有“两阶段提交”呢?这是为了让两份日志之间的逻辑一致。要说明这个问题,我们得从文章开头的那个问题说起:**怎样让数据库恢复到半个月内任意一秒的状态?** + +前面我们说过了,binlog 会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有 binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。 + +当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做: + +- 首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库; +- 然后,从备份的时间点开始,将备份的 binlog 依次取出来,重放到中午误删表之前的那个时刻。 + +这样你的临时库就跟误删之前的线上库一样了,然后你可以把表数据从临时库取出来,按需要恢复到线上库去。 + +好了,说完了数据恢复过程,我们回来说说,为什么日志需要“两阶段提交”。这里不妨用反证法来进行解释。 + +由于 redo log 和 binlog 是两个独立的逻辑,如果不用两阶段提交,要么就是先写完 redo log 再写 binlog,或者采用反过来的顺序。我们看看这两种方式会有什么问题。 + +仍然用前面的 update 语句来做例子。假设当前 ID=2 的行,字段 c 的值是 0,再假设执行 update 语句过程中在写完第一个日志后,第二个日志还没有写完期间发生了 crash,会出现什么情况呢? + +1. **先写 redo log 后写 binlog**。假设在 redo log 写完,binlog 还没有写完的时候,MySQL 进程异常重启。由于我们前面说过的,redo log 写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行 c 的值是 1。 但是由于 binlog 没写完就 crash 了,这时候 binlog 里面就没有记录这个语句。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。 然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。 +2. **先写 binlog 后写 redo log**。如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以这一行 c 的值是 0。但是 binlog 里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog 来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。 + +可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。 + +你可能会说,这个概率是不是很低,平时也没有什么动不动就需要恢复临时库的场景呀? + +其实不是的,不只是误操作后需要用这个过程来恢复数据。当你需要扩容的时候,也就是需要再多搭建一些备库来增加系统的读能力的时候,现在常见的做法也是用全量备份加上应用 binlog 来实现的,这个“不一致”就会导致你的线上出现主从数据库不一致的情况。 + +简单说,redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。 + +# 小结 + +今天,我介绍了 MySQL 里面最重要的两个日志,即物理日志 redo log 和逻辑日志 binlog。 + +redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。 + +sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。 + +我还跟你介绍了与 MySQL 日志系统密切相关的“两阶段提交”。两阶段提交是跨系统维持数据逻辑一致性时常用的一个方案,即使你不做数据库内核开发,日常开发中也有可能会用到。 + +文章的最后,我给你留一个思考题吧。前面我说到定期全量备份的周期“取决于系统重要性,有的是一天一备,有的是一周一备”。那么在什么场景下,一天一备会比一周一备更有优势呢?或者说,它影响了这个数据库系统的哪个指标? \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" new file mode 100644 index 00000000..9f6ba7ff Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/0d2070e8f84c4801adbfa03bda1f98d9.png" differ diff --git "a/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/16a7950217b3f0f4ed02db5db59562a7.png" "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/16a7950217b3f0f4ed02db5db59562a7.png" new file mode 100644 index 00000000..ea7837d5 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/16a7950217b3f0f4ed02db5db59562a7.png" differ diff --git "a/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/2e5bff4910ec189fe1ee6e2ecc7b4bbe-16550422221163.png" "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/2e5bff4910ec189fe1ee6e2ecc7b4bbe-16550422221163.png" new file mode 100644 index 00000000..39dc6e0c Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/02_\346\227\245\345\277\227\347\263\273\347\273\237\357\274\232\344\270\200\346\235\241SQL\346\233\264\346\226\260\350\257\255\345\217\245\346\230\257\345\246\202\344\275\225\346\211\247\350\241\214\347\232\204\357\274\237/images/2e5bff4910ec189fe1ee6e2ecc7b4bbe-16550422221163.png" differ diff --git "a/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/README.md" new file mode 100644 index 00000000..4b310637 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/README.md" @@ -0,0 +1,127 @@ +提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 **100** 块钱,而此时你的银行卡只有 **100** 块钱。 + +转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 **100** 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。 + +简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 **MySQL** 中,事务支持是在引擎层实现的。你现在知道,**MySQL** 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 **MySQL** 原生的 MyISAM 引擎就不支持事务,这也是 **MyISAM** 被 **InnoDB** 取代的重要原因之一。 + +今天的文章里,我将会以 **InnoDB** 为例,剖析 **MySQL** 在事务支持方面的特定实现,并基于原理给出相应的实践建议,希望这些案例能加深你对 **MySQL** 事务原理的理解。 + +# 隔离性与隔离级别 + +提到事务,你肯定会想到 **ACID**(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性”。 + +当数据库上有多个事务同时执行的时候,就可能出现脏读(**dirty read**)、不可重复读(**non-repeatable read**)、幻读(**phantom read**)的问题,为了解决这些问题,就有了“隔离级别”的概念。 + +在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时候,我们都要在二者之间寻找一个平衡点。**SQL** 标准的事务隔离级别包括:读未提交(**read uncommitted**)、读提交(**read committed**)、可重复读(**repeatable read**)和串行化(**serializable** )。下面我逐一为你解释: + +- 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。 +- 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。 +- 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。 +- 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。 + +其中 “**读提交**” 和 “**可重复读** ” 比较难理解,所以我用一个例子说明这几种隔离级别。假设数据表 T 中只有一列,其中一行的值为 1,下面是按照时间顺序执行两个事务的行为。 + +```sql +mysql> create table T(c int) engine=InnoDB; +insert into T(c) values(1); +``` + +![img](images/7dea45932a6b722eb069d2264d0066f8.png)我们来看看在不同的隔离级别下,事务 A 会有哪些不同的返回结果,也就是图里面 V1、V2、V3 的返回值分别是什么。 + +- 若隔离级别是“读未提交”, 则 V1 的值就是 2。这时候事务 B 虽然还没有提交,但是结果已经被 A 看到了。因此,V2、V3 也都是 2。 +- 若隔离级别是“读提交”,则 V1 是 1,V2 的值是 2。事务 B 的更新在提交后才能被 A 看到。所以, V3 的值也是 2。 +- 若隔离级别是“可重复读”,则 V1、V2 是 1,V3 是 2。之所以 V2 还是 1,遵循的就是这个要求:**事务在执行期间看到的数据前后必须是一致的**。 +- 若隔离级别是“串行化”,则在事务 B 执行“将 1 改成 2”的时候,会被锁住。直到事务 A 提交后,事务 B 才可以继续执行。所以从 A 的角度看, V1、V2 值是 1,V3 的值是 2。 + +在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的。这里需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;而“串行化”隔离级别下直接用加锁的方式来避免并行访问。 + +我们可以看到在不同的隔离级别下,数据库行为是有所不同的。**Oracle** 数据库的默认隔离级别其实就是“读提交”,因此对于一些从 **Oracle** 迁移到 MySQL 的应用,为保证数据库隔离级别的一致,你一定要记得将 MySQL 的隔离级别设置为“读提交”。 + +配置的方式是,将启动参数 transaction-isolation 的值设置成 READ-COMMITTED。你可以用 show variables 来查看当前的值。 + +```sql +mysql> show variables like 'transaction_isolation'; + ++-----------------------+----------------+ + +| Variable_name | Value | + ++-----------------------+----------------+ + +| transaction_isolation | READ-COMMITTED | + ++-----------------------+----------------+ +``` + +总结来说,存在即合理,哪个隔离级别都有它自己的使用场景,你要根据自己的业务情况来定。我想**你可能会问那什么时候需要“可重复读”的场景呢**?我们来看一个数据校对逻辑的案例。 + +假设你在管理一个个人银行账户表。一个表存了每个月月底的余额,一个表存了账单明细。这时候你要做数据校对,也就是判断上个月的余额和当前余额的差额,是否与本月的账单明细一致。你一定希望在校对过程中,即使有用户发生了一笔新的交易,也不影响你的校对结果。 + +这时候使用“可重复读”隔离级别就很方便。事务启动时的视图可以认为是静态的,不受其他事务更新的影响。 + +# 事务隔离的实现 + +理解了事务的隔离级别,我们再来看看事务隔离具体是怎么实现的。这里我们展开说明“可重复读”。 + +在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。 + +假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。 + +![img](images/d9c313809e5ac148fc39feff532f0fee.png)当前值是 4,但是在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。如图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。对于 read-view A,要得到 1,就必须将当前值依次执行图中所有的回滚操作得到。 + +同时你会发现,即使现在有另外一个事务正在将 4 改成 5,这个事务跟 read-view A、B、C 对应的事务是不会冲突的。 + +你一定会问,回滚日志总不能一直保留吧,什么时候删除呢?答案是,在不需要的时候才删除。也就是说,系统会判断,当没有事务再需要用到这些回滚日志时,回滚日志会被删除。 + +什么时候才不需要了呢?就是当系统里没有比这个回滚日志更早的 read-view 的时候。 + +基于上面的说明,我们来讨论一下为什么建议你尽量不要使用长事务。 + +长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就会导致大量占用存储空间。 + +在 MySQL 5.5 及以前的版本,回滚日志是跟数据字典一起放在 ibdata 文件里的,即使长事务最终提交,回滚段被清理,文件也不会变小。我见过数据只有 20GB,而回滚段有 200GB 的库。最终只好为了清理回滚段,重建整个库。 + +除了对回滚段的影响,长事务还占用锁资源,也可能拖垮整个库,这个我们会在后面讲锁的时候展开。 + +# 事务的启动方式 + +如前面所述,长事务有这些潜在风险,我当然是建议你尽量避免。其实很多时候业务开发同学并不是有意使用长事务,通常是由于误用所致。MySQL 的事务启动方式有以下几种: + +1. 显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语句是 rollback。 +2. set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接。 + +有些客户端连接框架会默认连接成功后先执行一个 set autocommit=0 的命令。这就导致接下来的查询都在事务中,如果是长连接,就导致了意外的长事务。 + +因此,我会建议你总是使用 set autocommit=1, 通过显式语句的方式来启动事务。 + +但是有的开发同学会纠结“多一次交互”的问题。对于一个需要频繁使用事务的业务,第二种方式每个事务在开始时都不需要主动执行一次 “begin”,减少了语句的交互次数。如果你也有这个顾虑,我建议你使用 commit work and chain 语法。 + +在 autocommit 为 1 的情况下,用 begin 显式启动的事务,如果执行 commit 则提交事务。如果执行 commit work and chain,则是提交事务并自动启动下一个事务,这样也省去了再次执行 begin 语句的开销。同时带来的好处是从程序开发的角度明确地知道每个语句是否处于事务中。 + +你可以在 information_schema 库的 innodb_trx 这个表中查询长事务,比如下面这个语句,用于查找持续时间超过 60s 的事务。 + +```csharp +select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60 +``` + +# 小结 + +这篇文章里面,我介绍了 MySQL 的事务隔离级别的现象和实现,根据实现原理分析了长事务存在的风险,以及如何用正确的方式避免长事务。希望我举的例子能够帮助你理解事务,并更好地使用 MySQL 的事务特性。 + +我给你留一个问题吧。你现在知道了系统里面应该避免长事务,如果你是业务开发负责人同时也是数据库负责人,你会有什么方案来避免出现或者处理这种情况呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +# 上期问题时间 + +在上期文章的最后,我给你留下的问题是一天一备跟一周一备的对比。 + +好处是“最长恢复时间”更短。 + +在一天一备的模式里,最坏情况下需要应用一天的 binlog。比如,你每天 0 点做一次全量备份,而要恢复出一个到昨天晚上 23 点的备份。 + +一周一备最坏情况就要应用一周的 binlog 了。 + +系统的对应指标就是 @尼古拉斯·赵四 @慕塔 提到的 RTO(恢复目标时间)。 + +当然这个是有成本的,因为更频繁全量备份需要消耗更多存储空间,所以这个 RTO 是成本换来的,就需要你根据业务重要性来评估了。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/7dea45932a6b722eb069d2264d0066f8.png" "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/7dea45932a6b722eb069d2264d0066f8.png" new file mode 100644 index 00000000..2fb11646 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/7dea45932a6b722eb069d2264d0066f8.png" differ diff --git "a/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/d9c313809e5ac148fc39feff532f0fee.png" "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/d9c313809e5ac148fc39feff532f0fee.png" new file mode 100644 index 00000000..49b32339 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/03_\344\272\213\345\212\241\351\232\224\347\246\273\357\274\232\344\270\272\344\273\200\344\271\210\344\275\240\346\224\271\344\272\206\346\210\221\350\277\230\347\234\213\344\270\215\350\247\201\357\274\237/images/d9c313809e5ac148fc39feff532f0fee.png" differ diff --git "a/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/README.md" "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/README.md" new file mode 100644 index 00000000..8fe22186 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/README.md" @@ -0,0 +1,194 @@ +提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 **SQL** 查询比较慢,分析完原因之后,你可能就会说 “**给某个字段加个索引吧**” 之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。 + +数据库索引的内容比较多,我分成了上下两篇文章。索引是数据库系统里面最重要的概念之一,所以我希望你能够耐心看完。在后面的实战文章中,我也会经常引用这两篇文章中提到的知识点,加深你对数据库索引的理解。 + +一句话简单来说,**索引的出现其实就是为了提高数据查询的效率,就像书的目录一样**。一本 **500** 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。 + +## 索引的常见模型 + +索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先给你介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。 + +下面我主要从使用的角度,为你简单分析一下这三种模型的区别。 + +哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。 + +不可避免地,多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法是,拉出一个链表。 + +假设,你现在维护着一个身份证信息和姓名的表,需要根据身份证号查找对应的名字,这时对应的哈希索引的示意图如下所示: + +![img](images/0c62b601afda86fe5d0fe57346ace957.png) + +图 1 哈希表示意图 + +图中,User2 和 User4 根据身份证号算出来的值都是 N,但没关系,后面还跟了一个链表。假设,这时候你要查 ID_card_n2 对应的名字是什么,处理步骤就是:首先,将 ID_card_n2 通过哈希函数算出 N;然后,按顺序遍历,找到 User2。 + +需要注意的是,图中四个 ID_card_n 的值并不是递增的,这样做的好处是增加新的 User 时速度会很快,只需要往后追加。但缺点是,因为不是有序的,所以哈希索引做区间查询的速度是很慢的。 + +你可以设想下,如果你现在要找身份证号在 [ID_card_X, ID_card_Y] 这个区间的所有用户,就必须全部扫描一遍了。 + +所以,**哈希表这种结构适用于只有等值查询的场景**,比如 Memcached 及其他一些 NoSQL 引擎。 + +而**有序数组在等值查询和范围查询场景中的性能就都非常优秀**。还是上面这个根据身份证号查名字的例子,如果我们使用有序数组来实现的话,示意图如下所示: + +![img](images/bfc907a92f99cadf5493cf0afac9ca49.png) + +图 2 有序数组示意图 + +这里我们假设身份证号没有重复,这个数组就是按照身份证号递增的顺序保存的。这时候如果你要查 ID_card_n2 对应的名字,用二分法就可以快速得到,这个时间复杂度是 O(log(N))。 + +同时很显然,这个索引结构支持范围查询。你要查身份证号在 [ID_card_X, ID_card_Y] 区间的 User,可以先用二分法找到 ID_card_X(如果不存在 ID_card_X,就找到大于 ID_card_X 的第一个 User),然后向右遍历,直到查到第一个大于 ID_card_Y 的身份证号,退出循环。 + +如果仅仅看查询效率,有序数组就是最好的数据结构了。但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。 + +所以,**有序数组索引只适用于静态存储引擎**,比如你要保存的是 2017 年某个城市的所有人口信息,这类不会再修改的数据。 + +二叉搜索树也是课本里的经典数据结构了。还是上面根据身份证号查名字的例子,如果我们用二叉搜索树来实现的话,示意图如下所示: + +![img](images/04fb9d24065635a6a637c25ba9ddde68.png) + +图 3 二叉搜索树示意图 + +二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。这样如果你要查 ID_card_n2 的话,按照图中的搜索顺序就是按照 UserA -> UserC -> UserF -> User2 这个路径得到。这个时间复杂度是 O(log(N))。 + +当然为了维持 O(log(N)) 的查询复杂度,你就需要保持这棵树是平衡二叉树。为了做这个保证,更新的时间复杂度也是 O(log(N))。 + +树可以有二叉,也可以有多叉。多叉树就是每个节点有多个儿子,儿子之间的大小保证从左到右递增。二叉树是搜索效率最高的,但是实际上大多数的数据库存储却并不使用二叉树。其原因是,索引不止存在内存中,还要写到磁盘上。 + +你可以想象一下一棵 100 万节点的平衡二叉树,树高 20。一次查询可能需要访问 20 个数据块。在机械硬盘时代,从磁盘随机读一个数据块需要 10 ms 左右的寻址时间。也就是说,对于一个 100 万行的表,如果使用二叉树来存储,单独访问一个行可能需要 20 个 10 ms 的时间,这个查询可真够慢的。 + +为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据块。那么,我们就不应该使用二叉树,而是要使用“N 叉”树。这里,“N 叉”树中的“N”取决于数据块的大小。 + +以 InnoDB 的一个整数字段索引为例,这个 N 差不多是 1200。这棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了。 + +N 叉树由于在读写上的性能优点,以及适配磁盘的访问模式,已经被广泛应用在数据库引擎中了。 + +不管是哈希还是有序数组,或者 N 叉树,它们都是不断迭代、不断优化的产物或者解决方案。数据库技术发展到今天,跳表、LSM 树等数据结构也被用于引擎设计中,这里我就不再一一展开了。 + +你心里要有个概念,数据库底层存储的核心就是基于这些数据模型的。每碰到一个新数据库,我们需要先关注它的数据模型,这样才能从理论上分析出这个数据库的适用场景。 + +截止到这里,我用了半篇文章的篇幅和你介绍了不同的数据结构,以及它们的适用场景,你可能会觉得有些枯燥。但是,我建议你还是要多花一些时间来理解这部分内容,毕竟这是数据库处理数据的核心概念之一,在分析问题的时候会经常用到。当你理解了索引的模型后,就会发现在分析问题的时候会有一个更清晰的视角,体会到引擎设计的精妙之处。 + +现在,我们一起进入相对偏实战的内容吧。 + +在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。由于 InnoDB 存储引擎在 MySQL 数据库中使用最为广泛,所以下面我就以 InnoDB 为例,和你分析一下其中的索引模型。 + +## InnoDB 的索引模型 + +在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又因为前面我们提到的,InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。 + +每一个索引在 InnoDB 里面对应一棵 B+ 树。 + +假设,我们有一个主键列为 ID 的表,表中有字段 k,并且在 k 上有索引。 + +这个表的建表语句是: + +```sql +mysql> create table T( +id int primary key, +k int not null, +name varchar(16), +index (k))engine=InnoDB; +``` + +表中 R1~R5 的 (ID,k) 值分别为 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),两棵树的示例示意图如下。 + +![img](images/dcda101051f28502bd5c4402b292e38d.png) + +图 4 InnoDB 的索引组织结构 + +从图中不难看出,根据叶子节点的内容,索引类型分为主键索引和非主键索引。 + +主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。 + +非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。 + +根据上面的索引结构说明,我们来讨论一个问题:**基于主键索引和普通索引的查询有什么区别?** + +- 如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树; +- 如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。 + +也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。 + +## 索引维护 + +B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值为 700,则只需要在 R5 的记录后面插入一个新记录。如果新插入的 ID 值为 400,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。 + +而更糟的情况是,如果 R5 所在的数据页已经满了,根据 B+ 树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过程称为页分裂。在这种情况下,性能自然会受影响。 + +除了性能外,页分裂操作还影响数据页的利用率。原本放在一个页的数据,现在分到两个页中,整体空间利用率降低大约 50%。 + +当然有分裂就有合并。当相邻两个页由于删除了数据,利用率很低之后,会将数据页做合并。合并的过程,可以认为是分裂过程的逆过程。 + +基于上面的索引维护过程说明,我们来讨论一个案例: + +> 你可能在一些建表规范里面见到过类似的描述,要求建表语句里一定要有自增主键。当然事无绝对,我们来分析一下哪些场景下应该使用自增主键,而哪些场景下不应该。 + +自增主键是指自增列上定义的主键,在建表语句中一般是这么定义的: NOT NULL PRIMARY KEY AUTO_INCREMENT。 + +插入新记录的时候可以不指定 ID 的值,系统会获取当前 ID 最大值加 1 作为下一条记录的 ID 值。 + +也就是说,自增主键的插入数据模式,正符合了我们前面提到的递增插入的场景。每次插入一条新记录,都是追加操作,都不涉及到挪动其他记录,也不会触发叶子节点的分裂。 + +而有业务逻辑的字段做主键,则往往不容易保证有序插入,这样写数据成本相对较高。 + +除了考虑性能外,我们还可以从存储空间的角度来看。假设你的表中确实有一个唯一字段,比如字符串类型的身份证号,那应该用身份证号做主键,还是用自增字段做主键呢? + +由于每个非主键索引的叶子节点上都是主键的值。如果用身份证号做主键,那么每个二级索引的叶子节点占用约 20 个字节,而如果用整型做主键,则只要 4 个字节,如果是长整型(bigint)则是 8 个字节。 + +**显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。** + +所以,从性能和存储空间方面考量,自增主键往往是更合理的选择。 + +有没有什么场景适合用业务字段直接做主键的呢?还是有的。比如,有些业务的场景需求是这样的: + +1. 只有一个索引; +2. 该索引必须是唯一索引。 + +你一定看出来了,这就是典型的 KV 场景。 + +由于没有其他索引,所以也就不用考虑其他索引的叶子节点大小的问题。 + +这时候我们就要优先考虑上一段提到的“尽量使用主键查询”原则,直接将这个索引设置为主键,可以避免每次查询需要搜索两棵树。 + +## 小结 + +今天,我跟你分析了数据库引擎可用的数据结构,介绍了 InnoDB 采用的 B+ 树结构,以及为什么 InnoDB 要这么选择。B+ 树能够很好地配合磁盘的读写特性,减少单次查询的磁盘访问次数。 + +由于 InnoDB 是索引组织表,一般情况下我会建议你创建一个自增主键,这样非主键索引占用的空间最小。但事无绝对,我也跟你讨论了使用业务逻辑字段做主键的应用场景。 + +最后,我给你留下一个问题吧。对于上面例子中的 InnoDB 表 T,如果你要重建索引 k,你的两个 SQL 语句可以这么写: + +```sql +alter table T drop index k; +alter table T add index(k); +``` + +如果你要重建主键索引,也可以这么写: + +```sql +alter table T drop primary key; +alter table T add primary key(id); +``` + +我的问题是,对于上面这两个重建索引的作法,说出你的理解。如果有不合适的,为什么,更好的方法是什么? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾给出我的参考答案。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +我在上一篇文章末尾给你留下的问题是:如何避免长事务对业务的影响? + +这个问题,我们可以从应用开发端和数据库端来看。 + +**首先,从应用开发端来看:** + +1. 确认是否使用了 set autocommit=0。这个确认工作可以在测试环境中开展,把 MySQL 的 general_log 开起来,然后随便跑一个业务逻辑,通过 general_log 的日志来确认。一般框架如果会设置这个值,也就会提供参数来控制行为,你的目标就是把它改成 1。 +2. 确认是否有不必要的只读事务。有些框架会习惯不管什么语句先用 begin/commit 框起来。我见过有些是业务并没有这个需要,但是也把好几个 select 语句放到了事务中。这种只读事务可以去掉。 +3. 业务连接数据库的时候,根据业务本身的预估,通过 SET MAX_EXECUTION_TIME 命令,来控制每个语句执行的最长时间,避免单个语句意外执行太长时间。(为什么会意外?在后续的文章中会提到这类案例) + +**其次,从数据库端来看:** + +1. 监控 **information_schema.Innodb_trx** 表,设置长事务阈值,超过就报警 / 或者 kill; +2. Percona 的 pt-kill 这个工具不错,推荐使用; +3. 在业务功能测试阶段要求输出所有的 general_log,分析日志行为提前发现问题; +4. 如果使用的是 MySQL 5.6 或者更新版本,把 innodb_undo_tablespaces 设置成 2(或更大的值)。如果真的出现大事务导致回滚段过大,这样设置后清理起来更方便。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/04fb9d24065635a6a637c25ba9ddde68.png" "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/04fb9d24065635a6a637c25ba9ddde68.png" new file mode 100644 index 00000000..0193f97f Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/04fb9d24065635a6a637c25ba9ddde68.png" differ diff --git "a/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/0c62b601afda86fe5d0fe57346ace957.png" "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/0c62b601afda86fe5d0fe57346ace957.png" new file mode 100644 index 00000000..c4ee2c43 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/0c62b601afda86fe5d0fe57346ace957.png" differ diff --git "a/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/bfc907a92f99cadf5493cf0afac9ca49.png" "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/bfc907a92f99cadf5493cf0afac9ca49.png" new file mode 100644 index 00000000..c566e9eb Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/bfc907a92f99cadf5493cf0afac9ca49.png" differ diff --git "a/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" new file mode 100644 index 00000000..f43a9e45 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/04_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\212\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" differ diff --git "a/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/README.md" "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/README.md" new file mode 100644 index 00000000..98d7854e --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/README.md" @@ -0,0 +1,179 @@ +在上一篇文章中,我和你介绍了 **InnoDB** 索引的数据结构模型,今天我们再继续聊聊跟 **MySQL** 索引有关的概念。 + +在开始这篇文章之前,我们先来看一下这个问题: + +在下面这个表 T 中,如果我执行 **select * from T where k between 3 and 5**,需要执行几次树的搜索操作,会扫描多少行? + +下面是这个表的初始化语句。 + +```sql +mysql> create table T ( +ID int primary key, +k int NOT NULL DEFAULT 0, +s varchar(16) NOT NULL DEFAULT '', +index k(k)) +engine=InnoDB; + +insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg'); +``` + +![img](images/dcda101051f28502bd5c4402b292e38d.png) + +图 1 **InnoDB** 的索引组织结构 + +现在,我们一起来看看这条 **SQL** 查询语句的执行流程: + +1. 在 **k** 索引树上找到 **k=3** 的记录,取得 **ID = 300**; +2. 再到 **ID** 索引树查到 **ID=300** 对应的 **R3**; +3. 在 **k** 索引树取下一个值 **k=5**,取得 **ID=500**; +4. 再回到 **ID** 索引树查到 **ID=500** 对应的 **R4**; +5. 在 **k** 索引树取下一个值 **k=6**,不满足条件,循环结束。 + +在这个过程中,**回到主键索引树搜索的过程,我们称为回表**。可以看到,这个查询过程读了 k 索引树的 3 条记录(步骤 1、3 和 5),回表了两次(步骤 2 和 4)。 + +在这个例子中,由于查询结果所需要的数据只在主键索引上有,所以不得不回表。那么,有没有可能经过索引优化,避免回表过程呢? + +## 覆盖索引 + +如果执行的语句是 **select ID from T where k between 3 and 5**,这时只需要查 **ID** 的值,而 **ID** 的值已经在 **k** 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 **k** 已经“覆盖了”我们的查询需求,我们称为覆盖索引。 + +**由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。** + +需要注意的是,在引擎内部使用覆盖索引在索引 **k** 上其实读了三个记录,**R3~R5**(对应的索引 k 上的记录项),但是对于 **MySQL** 的 **Server** 层来说,它就是找引擎拿到了两条记录,因此 MySQL 认为扫描行数是 2。 + +> 备注:关于如何查看扫描行数的问题,我将会在第 16 文章《如何正确地显示随机消息?》中,和你详细讨论。 + +基于上面覆盖索引的说明,我们来讨论一个问题:**在一个市民信息表上,是否有必要将身份证号和名字建立联合索引?** + +假设这个市民表的定义是这样的: + +```r +CREATE TABLE `tuser` ( + `id` int(11) NOT NULL, + `id_card` varchar(32) DEFAULT NULL, + `name` varchar(32) DEFAULT NULL, + `age` int(11) DEFAULT NULL, + `ismale` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `id_card` (`id_card`), + KEY `name_age` (`name`,`age`) +) ENGINE=InnoDB +``` + +我们知道,身份证号是市民的唯一标识。也就是说,如果有根据身份证号查询市民信息的需求,我们只要在身份证号字段上建立索引就够了。而再建立一个(身份证号、姓名)的联合索引,是不是浪费空间? + +如果现在有一个高频请求,要根据市民的身份证号查询他的姓名,这个联合索引就有意义了。它可以在这个高频请求上用到覆盖索引,不再需要回表查整行记录,减少语句的执行时间。 + +当然,索引字段的维护总是有代价的。因此,在建立冗余索引来支持覆盖索引时就需要权衡考虑了。这正是业务 DBA,或者称为业务数据架构师的工作。 + +## 最左前缀原则 + +看到这里你一定有一个疑问,如果为每一种查询都设计一个索引,索引是不是太多了。如果我现在要按照市民的身份证号去查他的家庭地址呢?虽然这个查询需求在业务中出现的概率不高,但总不能让它走全表扫描吧?反过来说,单独为一个不频繁的请求创建一个(身份证号,地址)的索引又感觉有点浪费。应该怎么做呢? + +这里,我先和你说结论吧。**B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录。** + +为了直观地说明这个概念,我们用(name,age)这个联合索引来分析。 + +![img](images/89f74c631110cfbc83298ef27dcd6370.jpg) + +图 2 (name,age)索引示意图 + +可以看到,索引项是按照索引定义里面出现的字段顺序排序的。 + +当你的逻辑需求是查到所有名字是“张三”的人时,可以快速定位到 ID4,然后向后遍历得到所有需要的结果。 + +如果你要查的是所有名字第一个字是“张”的人,你的 SQL 语句的条件是"where name like ‘张 %’"。这时,你也能够用上这个索引,查找到第一个符合条件的记录是 ID3,然后向后遍历,直到不满足条件为止。 + +可以看到,不只是索引的全部定义,只要满足最左前缀,就可以利用索引来加速检索。这个最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。 + +基于上面对最左前缀索引的说明,我们来讨论一个问题:**在建立联合索引的时候,如何安排索引内的字段顺序。** + +这里我们的评估标准是,索引的复用能力。因为可以支持最左前缀,所以当已经有了 (a,b) 这个联合索引后,一般就不需要单独在 a 上建立索引了。因此,**第一原则是,如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。** + +所以现在你知道了,这段开头的问题里,我们要为高频请求创建 (身份证号,姓名)这个联合索引,并用这个索引支持“根据身份证号查询地址”的需求。 + +那么,如果既有联合查询,又有基于 a、b 各自的查询呢?查询条件里面只有 b 的语句,是无法使用 (a,b) 这个联合索引的,这时候你不得不维护另外一个索引,也就是说你需要同时维护 (a,b)、(b) 这两个索引。 + +这时候,我们要**考虑的原则就是空间**了。比如上面这个市民表的情况,name 字段是比 age 字段大的 ,那我就建议你创建一个(name,age) 的联合索引和一个 (age) 的单字段索引。 + +## 索引下推 + +上一段我们说到满足最左前缀原则的时候,最左前缀可以用于在索引中定位记录。这时,你可能要问,那些不符合最左前缀的部分,会怎么样呢? + +我们还是以市民表的联合索引(name, age)为例。如果现在有一个需求:检索出表中“名字第一个字是张,而且年龄是 10 岁的所有男孩”。那么,SQL 语句是这么写的: + +```sql +mysql> select * from tuser where name like '张 %' and age=10 and ismale=1; +``` + +你已经知道了前缀索引规则,所以这个语句在搜索索引树的时候,只能用 “张”,找到第一个满足条件的记录 ID3。当然,这还不错,总比全表扫描要好。 + +然后呢? + +当然是判断其他条件是否满足。 + +在 MySQL 5.6 之前,只能从 ID3 开始一个个回表。到主键索引上找出数据行,再对比字段值。 + +而 MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。 + +图 3 和图 4,是这两个过程的执行流程图。 + +![img](images/b32aa8b1f75611e0759e52f5915539ac.jpg) + +图 3 无索引下推执行流程 + +![img](images/76e385f3df5a694cc4238c7b65acfe1b.jpg) + +图 4 索引下推执行流程 + +在图 3 和 4 这两个图里面,每一个虚线箭头表示回表一次。 + +图 3 中,在 (name,age) 索引里面我特意去掉了 age 的值,这个过程 InnoDB 并不会去看 age 的值,只是按顺序把“name 第一个字是’张’”的记录一条条取出来回表。因此,需要回表 4 次。 + +图 4 跟图 3 的区别是,InnoDB 在 (name,age) 索引内部就判断了 age 是否等于 10,对于不等于 10 的记录,直接判断并跳过。在我们的这个例子中,只需要对 ID4、ID5 这两条记录回表取数据判断,就只需要回表 2 次。 + +## 小结 + +今天这篇文章,我和你继续讨论了数据库索引的概念,包括了覆盖索引、前缀索引、索引下推。你可以看到,在满足语句需求的情况下, 尽量少地访问资源是数据库设计的重要原则之一。我们在使用数据库的时候,尤其是在设计表结构时,也要以减少资源消耗作为目标。 + +接下来我给你留下一个问题吧。 + +实际上主键索引也是可以使用多个字段的。DBA 小吕在入职新公司的时候,就发现自己接手维护的库里面,有这么一个表,表结构定义类似这样的: + +```go +CREATE TABLE `geek` ( + `a` int(11) NOT NULL, + `b` int(11) NOT NULL, + `c` int(11) NOT NULL, + `d` int(11) NOT NULL, + PRIMARY KEY (`a`,`b`), + KEY `c` (`c`), + KEY `ca` (`c`,`a`), + KEY `cb` (`c`,`b`) +) ENGINE=InnoDB; +``` + +公司的同事告诉他说,由于历史原因,这个表需要 a、b 做联合主键,这个小吕理解了。 + +但是,学过本章内容的小吕又纳闷了,既然主键包含了 a、b 这两个字段,那意味着单独在字段 c 上创建一个索引,就已经包含了三个字段了呀,为什么要创建“ca”“cb”这两个索引? + +同事告诉他,是因为他们的业务里面有这样的两种语句: + +```vbnet +select * from geek where c=N order by a limit 1; +select * from geek where c=N order by b limit 1; +``` + +我给你的问题是,这位同事的解释对吗,为了这两个查询模式,这两个索引是否都是必须的?为什么呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +上期的问题是,通过两个 alter 语句重建索引 k,以及通过两个 alter 语句重建主键索引是否合理。 + +在评论区,有同学问到为什么要重建索引。我们文章里面有提到,索引可能因为删除,或者页分裂等原因,导致数据页有空洞,重建索引的过程会创建一个新的索引,把数据按顺序插入,这样页面的利用率最高,也就是索引更紧凑、更省空间。 + +这道题目,我给你的“参考答案”是: + +重建索引 k 的做法是合理的,可以达到省空间的目的。但是,重建主键的过程不合理。不论是删除主键还是创建主键,都会将整个表重建。所以连着执行这两个语句的话,第一个语句就白做了。这两个语句,你可以用这个语句代替 : alter table T engine=InnoDB。在专栏的第 12 篇文章《为什么表数据删掉一半,表文件大小不变?》中,我会和你分析这条语句的执行流程。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/76e385f3df5a694cc4238c7b65acfe1b.jpg" "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/76e385f3df5a694cc4238c7b65acfe1b.jpg" new file mode 100644 index 00000000..19d0f1a4 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/76e385f3df5a694cc4238c7b65acfe1b.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/89f74c631110cfbc83298ef27dcd6370.jpg" "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/89f74c631110cfbc83298ef27dcd6370.jpg" new file mode 100644 index 00000000..a557e6a7 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/89f74c631110cfbc83298ef27dcd6370.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/b32aa8b1f75611e0759e52f5915539ac.jpg" "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/b32aa8b1f75611e0759e52f5915539ac.jpg" new file mode 100644 index 00000000..699d9e67 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/b32aa8b1f75611e0759e52f5915539ac.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" new file mode 100644 index 00000000..f43a9e45 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/05_\346\267\261\345\205\245\346\265\205\345\207\272\347\264\242\345\274\225\357\274\210\344\270\213\357\274\211/images/dcda101051f28502bd5c4402b292e38d.png" differ diff --git "a/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/README.md" new file mode 100644 index 00000000..bcf004a1 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/README.md" @@ -0,0 +1,140 @@ +今天我要跟你聊聊 **MySQL** 的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 + +**根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类**。今天这篇文章,我会和你分享全局锁和表级锁。而关于行锁的内容,我会留着在下一篇文章中再和你详细介绍。 + +这里需要说明的是,锁的设计比较复杂,这两篇文章不会涉及锁的具体实现细节,主要介绍的是碰到锁时的现象和其背后的原理。 + +# 全局锁 + +顾名思义,全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 + +**全局锁的典型使用场景是,做全库逻辑备份。**也就是把整库每个表都 select 出来存成文本。 + +以前有一种做法,是通过 FTWRL 确保不会有其他线程对数据库做更新,然后对整个库做备份。注意,在备份过程中整个库完全处于只读状态。 + +但是让整库都只读,听上去就很危险: + +- 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; +- 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的 binlog,会导致主从延迟。 + +看来加全局锁不太好。但是细想一下,备份为什么要加锁呢?我们来看一下不加锁会有什么问题。 + +假设你现在要维护“极客时间”的购买系统,关注的是用户账户余额表和用户课程表。 + +现在发起一个逻辑备份。假设备份期间,有一个用户,他购买了一门课程,业务逻辑里就要扣掉他的余额,然后往已购课程里面加上一门课。 + +如果时间顺序上是先备份账户余额表 (u_account),然后用户购买,然后备份用户课程表 (u_course),会怎么样呢?你可以看一下这个图: + +![img](images/cbfd4a0bbb1210792064bcea4e49b0cd.png) + +图 1 业务和备份状态图 + +可以看到,这个备份结果里,用户 A 的数据状态是“账户余额没扣,但是用户课程表里面已经多了一门课”。如果后面用这个备份来恢复数据的话,用户 A 就发现,自己赚了。 + +作为用户可别觉得这样可真好啊,你可以试想一下:如果备份表的顺序反过来,先备份用户课程表再备份账户余额表,又可能会出现什么结果? + +也就是说,不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的。 + +说到视图你肯定想起来了,我们在前面讲事务隔离的时候,其实是有一个方法能够拿到一致性视图的,对吧? + +是的,就是在可重复读隔离级别下开启一个事务。 + +> 备注:如果你对事务隔离级别的概念不是很清晰的话,可以再回顾一下第 3 篇文章[《事务隔离:为什么你改了我还看不见?》]中的相关内容。 + +官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。 + +你一定在疑惑,有了这个功能,为什么还需要 FTWRL 呢?**一致性读是好,但前提是引擎要支持这个隔离级别。**比如,对于 MyISAM 这种不支持事务的引擎,如果备份过程中有更新,总是只能取到最新的数据,那么就破坏了备份的一致性。这时,我们就需要使用 FTWRL 命令了。 + +所以,**single-transaction 方法只适用于所有的表使用事务引擎的库。**如果有的表使用了不支持事务的引擎,那么备份就只能通过 FTWRL 方法。这往往是 DBA 要求业务开发人员使用 InnoDB 替代 MyISAM 的原因之一。 + +你也许会问,**既然要全库只读,为什么不使用 set global readonly=true 的方式呢**?确实 readonly 方式也可以让全库进入只读状态,但我还是会建议你用 FTWRL 方式,主要有两个原因: + +- 一是,在有些系统中,readonly 的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。因此,修改 global 变量的方式影响面更大,我不建议你使用。 +- 二是,在异常处理机制上有差异。如果执行 FTWRL 命令之后由于客户端发生异常断开,那么 MySQL 会自动释放这个全局锁,整个库回到可以正常更新的状态。而将整个库设置为 readonly 之后,如果客户端发生异常,则数据库就会一直保持 readonly 状态,这样会导致整个库长时间处于不可写状态,风险较高。 + +业务的更新不只是增删改数据(DML),还有可能是加字段等修改表结构的操作(DDL)。不论是哪种方法,一个库被全局锁上以后,你要对里面任何一个表做加字段操作,都是会被锁住的。 + +但是,即使没有被全局锁住,加字段也不是就能一帆风顺的,因为你还会碰到接下来我们要介绍的表级锁。 + +# 表级锁 + +MySQL 里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。 + +**表锁的语法是 lock tables … read/write。**与 FTWRL 类似,可以用 unlock tables 主动释放锁,也可以在客户端断开的时候自动释放。需要注意,lock tables 语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。 + +举个例子, 如果在某个线程 A 中执行 lock tables t1 read, t2 write; 这个语句,则其他线程写 t1、读写 t2 的语句都会被阻塞。同时,线程 A 在执行 unlock tables 之前,也只能执行读 t1、读写 t2 的操作。连写 t1 都不允许,自然也不能访问其他表。 + +在还没有出现更细粒度的锁的时候,表锁是最常用的处理并发的方式。而对于 InnoDB 这种支持行锁的引擎,一般不使用 lock tables 命令来控制并发,毕竟锁住整个表的影响面还是太大。 + +**另一类表级的锁是 MDL(metadata lock)。**MDL 不需要显式使用,在访问一个表的时候会被自动加上。MDL 的作用是,保证读写的正确性。你可以想象一下,如果一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结果跟表结构对不上,肯定是不行的。 + +因此,在 MySQL 5.5 版本中引入了 MDL,当对一个表做增删改查操作的时候,加 MDL 读锁;当要对表做结构变更操作的时候,加 MDL 写锁。 + +- 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。 +- 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。 + +虽然 MDL 锁是系统默认会加的,但却是你不能忽略的一个机制。比如下面这个例子,我经常看到有人掉到这个坑里:给一个小表加个字段,导致整个库挂了。 + +你肯定知道,给一个表加字段,或者修改字段,或者加索引,需要扫描全表的数据。在对大表操作的时候,你肯定会特别小心,以免对线上服务造成影响。而实际上,即使是小表,操作不慎也会出问题。我们来看一下下面的操作序列,假设表 t 是一个小表。 + +> 备注:这里的实验环境是 MySQL 5.6。 + +![img](images/7cf6a3bf90d72d1f0fc156ececdfb0ce.jpg) + +我们可以看到 session A 先启动,这时候会对表 t 加一个 MDL 读锁。由于 session B 需要的也是 MDL 读锁,因此可以正常执行。 + +之后 session C 会被 blocked,是因为 session A 的 MDL 读锁还没有释放,而 session C 需要 MDL 写锁,因此只能被阻塞。 + +如果只有 session C 自己被阻塞还没什么关系,但是之后所有要在表 t 上新申请 MDL 读锁的请求也会被 session C 阻塞。前面我们说了,所有对表的增删改查操作都需要先申请 MDL 读锁,就都被锁住,等于这个表现在完全不可读写了。 + +如果某个表上的查询语句频繁,而且客户端有重试机制,也就是说超时后会再起一个新 session 再请求的话,这个库的线程很快就会爆满。 + +你现在应该知道了,事务中的 MDL 锁,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放。 + +基于上面的分析,我们来讨论一个问题,**如何安全地给小表加字段?** + +首先我们要解决长事务,事务不提交,就会一直占着 MDL 锁。在 MySQL 的 information_schema 库的 innodb_trx 表中,你可以查到当前执行中的事务。如果你要做 DDL 变更的表刚好有长事务在执行,要考虑先暂停 DDL,或者 kill 掉这个长事务。 + +但考虑一下这个场景。如果你要变更的表是一个热点表,虽然数据量不大,但是上面的请求很频繁,而你不得不加个字段,你该怎么做呢? + +这时候 kill 可能未必管用,因为新的请求马上就来了。比较理想的机制是,在 alter table 语句里面设定等待时间,如果在这个指定的等待时间里面能够拿到 MDL 写锁最好,拿不到也不要阻塞后面的业务语句,先放弃。之后开发人员或者 DBA 再通过重试命令重复这个过程。 + +MariaDB 已经合并了 AliSQL 的这个功能,所以这两个开源分支目前都支持 DDL NOWAIT/WAIT n 这个语法。 + +```sql +ALTER TABLE tbl_name NOWAIT add column ... +ALTER TABLE tbl_name WAIT N add column ... +``` + +# 小结 + +今天,我跟你介绍了 MySQL 的全局锁和表级锁。 + +全局锁主要用在逻辑备份过程中。对于全部是 InnoDB 引擎的库,我建议你选择使用–single-transaction 参数,对应用会更友好。 + +表锁一般是在数据库引擎不支持行锁的时候才会被用到的。如果你发现你的应用程序里有 lock tables 这样的语句,你需要追查一下,比较可能的情况是: + +- 要么是你的系统现在还在用 MyISAM 这类不支持事务的引擎,那要安排升级换引擎; +- 要么是你的引擎升级了,但是代码还没升级。我见过这样的情况,最后业务开发就是把 lock tables 和 unlock tables 改成 begin 和 commit,问题就解决了。 + +MDL 会直到事务提交才释放,在做表结构变更的时候,你一定要小心不要导致锁住线上查询和更新。 + +最后,我给你留一个问题吧。备份一般都会在备库上执行,你在用–single-transaction 方法做逻辑备份的过程中,如果主库上的一个小表做了一个 DDL,比如给一个表上加了一列。这时候,从备库上会看到什么现象呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +说明:这篇文章没有介绍到物理备份,物理备份会有一篇单独的文章。 + +# 上期问题时间 + +上期的问题是关于对联合主键索引和 InnoDB 索引组织表的理解。 + +我直接贴 @老杨同志 的回复略作修改如下(我修改的部分用橙色标出): + +表记录 –a--|–b--|–c--|–d-- 1 2 3 d 1 3 2 d 1 4 3 d 2 1 3 d 2 2 2 d 2 3 4 d 主键 a,b 的聚簇索引组织顺序相当于 order by a,b ,也就是先按 a 排序,再按 b 排序,c 无序。 + +索引 ca 的组织是先按 c 排序,再按 a 排序,同时记录主键 –c--|–a--|–主键部分b-- (注意,这里不是 ab,而是只有 b) 2 1 3 2 2 2 3 1 2 3 1 4 3 2 1 4 2 3 这个跟索引 c 的数据是一模一样的。 + +索引 cb 的组织是先按 c 排序,在按 b 排序,同时记录主键 –c--|–b--|–主键部分a-- (同上) 2 2 2 2 3 1 3 1 2 3 2 1 3 4 1 4 3 2 + +所以,结论是 ca 可以去掉,cb 需要保留。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/7cf6a3bf90d72d1f0fc156ececdfb0ce.jpg" "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/7cf6a3bf90d72d1f0fc156ececdfb0ce.jpg" new file mode 100644 index 00000000..ebb3b692 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/7cf6a3bf90d72d1f0fc156ececdfb0ce.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/cbfd4a0bbb1210792064bcea4e49b0cd.png" "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/cbfd4a0bbb1210792064bcea4e49b0cd.png" new file mode 100644 index 00000000..d46b7b40 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/06_\345\205\250\345\261\200\351\224\201\345\222\214\350\241\250\351\224\201 \357\274\232\347\273\231\350\241\250\345\212\240\344\270\252\345\255\227\346\256\265\346\200\216\344\271\210\346\234\211\350\277\231\344\271\210\345\244\232\351\230\273\347\242\215\357\274\237/images/cbfd4a0bbb1210792064bcea4e49b0cd.png" differ diff --git "a/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/README.md" new file mode 100644 index 00000000..3bed0cad --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/README.md" @@ -0,0 +1,130 @@ +在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 + +MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。 + +我们今天就主要来聊聊 InnoDB 的行锁,以及如何通过减少锁冲突来提升业务并发度。 + +顾名思义,行锁就是针对数据表中行记录的锁。这很好理解,比如事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。 + +当然,数据库中还有一些没那么一目了然的概念和设计,这些概念如果理解和使用不当,容易导致程序出现非预期行为,比如两阶段锁。 + +## 从两阶段锁说起 + +我先给你举个例子。在下面的操作序列中,事务 B 的 update 语句执行时会是什么现象呢?假设字段 id 是表 t 的主键。![img](images/51f501f718e420244b0a2ec2ce858710.jpg) + +这个问题的结论取决于事务 A 在执行完两条 update 语句后,持有哪些锁,以及在什么时候释放。你可以验证一下:实际上事务 B 的 update 语句会被阻塞,直到事务 A 执行 commit 之后,事务 B 才能继续执行。 + +知道了这个答案,你一定知道了事务 A 持有的两个记录的行锁,都是在 commit 的时候才释放的。 + +也就是说,**在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。** + +知道了这个设定,对我们使用事务有什么帮助呢?那就是,如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。我给你举个例子。 + +假设你负责实现一个电影票在线交易业务,顾客 A 要在影院 B 购买电影票。我们简化一点,这个业务需要涉及到以下操作: + +1. 从顾客 A 账户余额中扣除电影票价; +2. 给影院 B 的账户余额增加这张电影票价; +3. 记录一条交易日志。 + +也就是说,要完成这个交易,我们需要 update 两条记录,并 insert 一条记录。当然,为了保证交易的原子性,我们要把这三个操作放在一个事务中。那么,你会怎样安排这三个语句在事务中的顺序呢? + +试想如果同时有另外一个顾客 C 要在影院 B 买票,那么这两个事务冲突的部分就是语句 2 了。因为它们要更新同一个影院账户的余额,需要修改同一行数据。 + +根据两阶段锁协议,不论你怎样安排语句顺序,所有的操作需要的行锁都是在事务提交的时候才释放的。所以,如果你把语句 2 安排在最后,比如按照 3、1、2 这样的顺序,那么影院账户余额这一行的锁时间就最少。这就最大程度地减少了事务之间的锁等待,提升了并发度。 + +好了,现在由于你的正确设计,影院余额这一行的行锁在一个事务中不会停留很长时间。但是,这并没有完全解决你的困扰。 + +如果这个影院做活动,可以低价预售一年内所有的电影票,而且这个活动只做一天。于是在活动时间开始的时候,你的 MySQL 就挂了。你登上服务器一看,CPU 消耗接近 100%,但整个数据库每秒就执行不到 100 个事务。这是什么原因呢? + +这里,我就要说到死锁和死锁检测了。 + +## 死锁和死锁检测 + +当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。这里我用数据库中的行锁举个例子。![img](images/4d0eeec7b136371b79248a0aed005a52.jpg) + +这时候,事务 A 在等待事务 B 释放 id=2 的行锁,而事务 B 在等待事务 A 释放 id=1 的行锁。 事务 A 和事务 B 在互相等待对方的资源释放,就是进入了死锁状态。当出现死锁以后,有两种策略: + +- 一种策略是,直接进入等待,直到超时。这个超时时间可以通过参数 innodb_lock_wait_timeout 来设置。 +- 另一种策略是,发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑。 + +在 InnoDB 中,innodb_lock_wait_timeout 的默认值是 50s,意味着如果采用第一个策略,当出现死锁以后,第一个被锁住的线程要过 50s 才会超时退出,然后其他线程才有可能继续执行。对于在线服务来说,这个等待时间往往是无法接受的。 + +但是,我们又不可能直接把这个时间设置成一个很小的值,比如 1s。这样当出现死锁的时候,确实很快就可以解开,但如果不是死锁,而是简单的锁等待呢?所以,超时时间设置太短的话,会出现很多误伤。 + +所以,正常情况下我们还是要采用第二种策略,即:主动死锁检测,而且 innodb_deadlock_detect 的默认值本身就是 on。主动死锁检测在发生死锁的时候,是能够快速发现并进行处理的,但是它也是有额外负担的。 + +你可以想象一下这个过程:每当一个事务被锁的时候,就要看看它所依赖的线程有没有被别人锁住,如此循环,最后判断是否出现了循环等待,也就是死锁。 + +那如果是我们上面说到的所有事务都要更新同一行的场景呢? + +每个新来的被堵住的线程,都要判断会不会由于自己的加入导致了死锁,这是一个时间复杂度是 O(n) 的操作。假设有 1000 个并发线程要同时更新同一行,那么死锁检测操作就是 100 万这个量级的。虽然最终检测的结果是没有死锁,但是这期间要消耗大量的 CPU 资源。因此,你就会看到 CPU 利用率很高,但是每秒却执行不了几个事务。 + +根据上面的分析,我们来讨论一下,怎么解决由这种热点行更新导致的性能问题呢?问题的症结在于,死锁检测要耗费大量的 CPU 资源。 + +**一种头痛医头的方法,就是如果你能确保这个业务一定不会出现死锁,可以临时把死锁检测关掉。**但是这种操作本身带有一定的风险,因为业务设计的时候一般不会把死锁当做一个严重错误,毕竟出现死锁了,就回滚,然后通过业务重试一般就没问题了,这是业务无损的。而关掉死锁检测意味着可能会出现大量的超时,这是业务有损的。 + +**另一个思路是控制并发度。**根据上面的分析,你会发现如果并发能够控制住,比如同一行同时最多只有 10 个线程在更新,那么死锁检测的成本很低,就不会出现这个问题。一个直接的想法就是,在客户端做并发控制。但是,你会很快发现这个方法不太可行,因为客户端很多。我见过一个应用,有 600 个客户端,这样即使每个客户端控制到只有 5 个并发线程,汇总到数据库服务端以后,峰值并发数也可能要达到 3000。 + +因此,这个并发控制要做在数据库服务端。如果你有中间件,可以考虑在中间件实现;如果你的团队有能修改 MySQL 源码的人,也可以做在 MySQL 里面。基本思路就是,对于相同行的更新,在进入引擎之前排队。这样在 InnoDB 内部就不会有大量的死锁检测工作了。 + +可能你会问,**如果团队里暂时没有数据库方面的专家,不能实现这样的方案,能不能从设计上优化这个问题呢?** + +你可以考虑通过将一行改成逻辑上的多行来减少锁冲突。还是以影院账户为例,可以考虑放在多条记录上,比如 10 个记录,影院的账户总额等于这 10 个记录的值的总和。这样每次要给影院账户加金额的时候,随机选其中一条记录来加。这样每次冲突概率变成原来的 1/10,可以减少锁等待个数,也就减少了死锁检测的 CPU 消耗。 + +这个方案看上去是无损的,但其实这类方案需要根据业务逻辑做详细设计。如果账户余额可能会减少,比如退票逻辑,那么这时候就需要考虑当一部分行记录变成 0 的时候,代码要有特殊处理。 + +## 小结 + +今天,我和你介绍了 MySQL 的行锁,涉及了两阶段锁协议、死锁和死锁检测这两大部分内容。 + +其中,我以两阶段协议为起点,和你一起讨论了在开发的时候如何安排正确的事务语句。这里的原则 / 我给你的建议是:如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁的申请时机尽量往后放。 + +但是,调整语句顺序并不能完全避免死锁。所以我们引入了死锁和死锁检测的概念,以及提供了三个方案,来减少死锁对数据库的影响。减少死锁的主要方向,就是控制访问相同资源的并发事务量。 + +最后,我给你留下一个问题吧。如果你要删除一个表里面的前 10000 行数据,有以下三种方法可以做到: + +- 第一种,直接执行 delete from T limit 10000; +- 第二种,在一个连接中循环执行 20 次 delete from T limit 500; +- 第三种,在 20 个连接中同时执行 delete from T limit 500。 + +你会选择哪一种方法呢?为什么呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +上期我给你留的问题是:当备库用–single-transaction 做逻辑备份的时候,如果从主库的 binlog 传来一个 DDL 语句会怎么样? + +假设这个 DDL 是针对表 t1 的, 这里我把备份过程中几个关键的语句列出来: + +```sql +Q1:SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +Q2:START TRANSACTION WITH CONSISTENT SNAPSHOT; +/* other tables */ +Q3:SAVEPOINT sp; +/* 时刻 1 */ +Q4:show create table `t1`; +/* 时刻 2 */ +Q5:SELECT * FROM `t1`; +/* 时刻 3 */ +Q6:ROLLBACK TO SAVEPOINT sp; +/* 时刻 4 */ +/* other tables */ +``` + +在备份开始的时候,为了确保 RR(可重复读)隔离级别,再设置一次 RR 隔离级别 (Q1); + +启动事务,这里用 WITH CONSISTENT SNAPSHOT 确保这个语句执行完就可以得到一个一致性视图(Q2); + +设置一个保存点,这个很重要(Q3); + +show create 是为了拿到表结构 (Q4),然后正式导数据 (Q5),回滚到 SAVEPOINT sp,在这里的作用是释放 t1 的 MDL 锁 (Q6)。当然这部分属于“超纲”,上文正文里面都没提到。 + +DDL 从主库传过来的时间按照效果不同,我打了四个时刻。题目设定为小表,我们假定到达后,如果开始执行,则很快能够执行完成。 + +参考答案如下: + +1. 如果在 Q4 语句执行之前到达,现象:没有影响,备份拿到的是 DDL 后的表结构。 +2. 如果在“时刻 2”到达,则表结构被改过,Q5 执行的时候,报 Table definition has changed, please retry transaction,现象:mysqldump 终止; +3. 如果在“时刻 2”和“时刻 3”之间到达,mysqldump 占着 t1 的 MDL 读锁,binlog 被阻塞,现象:主从延迟,直到 Q6 执行完成。 +4. 从“时刻 4”开始,mysqldump 释放了 MDL 读锁,现象:没有影响,备份拿到的是 DDL 前的表结构。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/4d0eeec7b136371b79248a0aed005a52.jpg" "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/4d0eeec7b136371b79248a0aed005a52.jpg" new file mode 100644 index 00000000..a85438d3 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/4d0eeec7b136371b79248a0aed005a52.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/51f501f718e420244b0a2ec2ce858710.jpg" "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/51f501f718e420244b0a2ec2ce858710.jpg" new file mode 100644 index 00000000..812bc3c4 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/07_\350\241\214\351\224\201\345\212\237\350\277\207\357\274\232\346\200\216\344\271\210\345\207\217\345\260\221\350\241\214\351\224\201\345\257\271\346\200\247\350\203\275\347\232\204\345\275\261\345\223\215\357\274\237/images/51f501f718e420244b0a2ec2ce858710.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/README.md" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/README.md" new file mode 100644 index 00000000..2db13f24 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/README.md" @@ -0,0 +1,260 @@ +> 你好,我是林晓斌。 你现在看到的这篇文章是我重写过的。在第一版文章发布之后,我发现在介绍事务可见性规则时,由于引入了太多概念,导致理解起来很困难。随后,我索性就重写了这篇文章。 现在的用户留言中,还能看到第一版文章中引入的 up_limit_id 的概念,为了避免大家产生误解,再此特地和大家事先说明一下。 + +我在第 3 篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。 + +但是,我在上一篇文章中,和你分享行锁的时候又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢? + +我给你举一个例子吧。下面是一个只有两行的表的初始化语句。 + +```sql +mysql> CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `k` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +insert into t(id, k) values(1,1),(2,2); +``` + +![img](images/823acf76e53c0bdba7beab45e72e90d6.png) + +图 1 事务 A、B、C 的执行流程 + +这里,我们需要注意的是事务的启动时机。 + +begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。 + +> 第一种启动方式,一致性视图是在第执行第一个快照读语句时创建的; 第二种启动方式,一致性视图是在执行 start transaction with consistent snapshot 时创建的。 + +还需要注意的是,在整个专栏里面,我们的例子中如果没有特别说明,都是默认 autocommit=1。 + +在这个例子中,事务 C 没有显式地使用 begin/commit,表示这个 update 语句本身就是一个事务,语句完成的时候会自动提交。事务 B 在更新了行之后查询 ; 事务 A 在一个只读事务中查询,并且时间顺序上是在事务 B 的查询之后。 + +这时,如果我告诉你事务 B 查到的 k 的值是 3,而事务 A 查到的 k 的值是 1,你是不是感觉有点晕呢? + +所以,今天这篇文章,我其实就是想和你说明白这个问题,希望借由把这个疑惑解开的过程,能够帮助你对 InnoDB 的事务和锁有更进一步的理解。 + +在 MySQL 里,有两个“视图”的概念: + +- 一个是 view。它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。创建视图的语法是 create view … ,而它的查询方法与表一样。 +- 另一个是 InnoDB 在实现 MVCC 时用到的一致性读视图,即 consistent read view,用于支持 RC(Read Committed,读提交)和 RR(Repeatable Read,可重复读)隔离级别的实现。 + +它没有物理结构,作用是事务执行期间用来定义“我能看到什么数据”。 + +在第 3 篇文章[《事务隔离:为什么你改了我还看不见?》]中,我跟你解释过一遍 MVCC 的实现逻辑。今天为了说明查询和更新的区别,我换一个方式来说明,把 read view 拆开。你可以结合这两篇文章的说明来更深一步地理解 MVCC。 + +## “快照”在 MVCC 里是怎么工作的? + +在可重复读隔离级别下,事务在启动的时候就“拍了个快照”。注意,这个快照是基于整库的。 + +这时,你会说这看上去不太现实啊。如果一个库有 100G,那么我启动一个事务,MySQL 就要拷贝 100G 的数据出来,这个过程得多慢啊。可是,我平时的事务执行起来很快啊。 + +实际上,我们并不需要拷贝出这 100G 的数据。我们先来看看这个快照是怎么实现的。 + +InnoDB 里面每个事务有一个唯一的事务 ID,叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请的,是按申请顺序严格递增的。 + +而每行数据也都是有多个版本的。每次事务更新数据的时候,都会生成一个新的数据版本,并且把 transaction id 赋值给这个数据版本的事务 ID,记为 row trx_id。同时,旧的数据版本要保留,并且在新的数据版本中,能够有信息可以直接拿到它。 + +也就是说,数据表中的一行记录,其实可能有多个版本 (row),每个版本有自己的 row trx_id。 + +如图 2 所示,就是一个记录被多个事务连续更新后的状态。 + +![img](images/68d08d277a6f7926a41cc5541d3dfced.png) + +图 2 行状态变更图 + +图中虚线框里是同一行数据的 4 个版本,当前最新版本是 V4,k 的值是 22,它是被 transaction id 为 25 的事务更新的,因此它的 row trx_id 也是 25。 + +你可能会问,前面的文章不是说,语句更新会生成 undo log(回滚日志)吗?那么,**undo log 在哪呢?** + +实际上,图 2 中的三个虚线箭头,就是 undo log;而 V1、V2、V3 并不是物理上真实存在的,而是每次需要的时候根据当前版本和 undo log 计算出来的。比如,需要 V2 的时候,就是通过 V4 依次执行 U3、U2 算出来。 + +明白了多版本和 row trx_id 的概念后,我们再来想一下,InnoDB 是怎么定义那个“100G”的快照的。 + +按照可重复读的定义,一个事务启动的时候,能够看到所有已经提交的事务结果。但是之后,这个事务执行期间,其他事务的更新对它不可见。 + +因此,一个事务只需要在启动的时候声明说,“以我启动的时刻为准,如果一个数据版本是在我启动之前生成的,就认;如果是我启动以后才生成的,我就不认,我必须要找到它的上一个版本”。 + +当然,如果“上一个版本”也不可见,那就得继续往前找。还有,如果是这个事务自己更新的数据,它自己还是要认的。 + +在实现上, InnoDB 为每个事务构造了一个数组,用来保存这个事务启动瞬间,当前正在“活跃”的所有事务 ID。“活跃”指的就是,启动了但还没提交。 + +数组里面事务 ID 的最小值记为低水位,当前系统里面已经创建过的事务 ID 的最大值加 1 记为高水位。 + +这个视图数组和高水位,就组成了当前事务的一致性视图(read-view)。 + +而数据版本的可见性规则,就是基于数据的 row trx_id 和这个一致性视图的对比结果得到的。 + +这个视图数组把所有的 row trx_id 分成了几种不同的情况。 + +![img](images/882114aaf55861832b4270d44507695e.png) + +图 3 数据版本可见性规则 + +这样,对于当前事务的启动瞬间来说,一个数据版本的 row trx_id,有以下几种可能: + +1. 如果落在绿色部分,表示这个版本是已提交的事务或者是当前事务自己生成的,这个数据是可见的; +2. 如果落在红色部分,表示这个版本是由将来启动的事务生成的,是肯定不可见的; +3. 如果落在黄色部分,那就包括两种情况 a. 若 row trx_id 在数组中,表示这个版本是由还没提交的事务生成的,不可见; b. 若 row trx_id 不在数组中,表示这个版本是已经提交了的事务生成的,可见。 + +比如,对于图 2 中的数据来说,如果有一个事务,它的低水位是 18,那么当它访问这一行数据时,就会从 V4 通过 U3 计算出 V3,所以在它看来,这一行的值是 11。 + +你看,有了这个声明后,系统里面随后发生的更新,是不是就跟这个事务看到的内容无关了呢?因为之后的更新,生成的版本一定属于上面的 2 或者 3(a) 的情况,而对它来说,这些新的数据版本是不存在的,所以这个事务的快照,就是“静态”的了。 + +所以你现在知道了,**InnoDB 利用了“所有数据都有多个版本”的这个特性,实现了“秒级创建快照”的能力。** + +接下来,我们继续看一下图 1 中的三个事务,分析下事务 A 的语句返回的结果,为什么是 k=1。 + +这里,我们不妨做如下假设: + +1. 事务 A 开始前,系统里面只有一个活跃事务 ID 是 99; +2. 事务 A、B、C 的版本号分别是 100、101、102,且当前系统里只有这四个事务; +3. 三个事务开始前,(1,1)这一行数据的 row trx_id 是 90。 + +这样,事务 A 的视图数组就是 [99,100], 事务 B 的视图数组是 [99,100,101], 事务 C 的视图数组是 [99,100,101,102]。 + +为了简化分析,我先把其他干扰语句去掉,只画出跟事务 A 查询逻辑有关的操作: + +![img](images/9416c310e406519b7460437cb0c5c149.png) + +图 4 事务 A 查询数据逻辑图 + +从图中可以看到,第一个有效更新是事务 C,把数据从 (1,1) 改成了 (1,2)。这时候,这个数据的最新版本的 row trx_id 是 102,而 90 这个版本已经成为了历史版本。 + +第二个有效更新是事务 B,把数据从 (1,2) 改成了 (1,3)。这时候,这个数据的最新版本(即 row trx_id)是 101,而 102 又成为了历史版本。 + +你可能注意到了,在事务 A 查询的时候,其实事务 B 还没有提交,但是它生成的 (1,3) 这个版本已经变成当前版本了。但这个版本对事务 A 必须是不可见的,否则就变成脏读了。 + +好,现在事务 A 要来读数据了,它的视图数组是 [99,100]。当然了,读数据都是从当前版本读起的。所以,事务 A 查询语句的读数据流程是这样的: + +- 找到 (1,3) 的时候,判断出 row trx_id=101,比高水位大,处于红色区域,不可见; +- 接着,找到上一个历史版本,一看 row trx_id=102,比高水位大,处于红色区域,不可见; +- 再往前找,终于找到了(1,1),它的 row trx_id=90,比低水位小,处于绿色区域,可见。 + +这样执行下来,虽然期间这一行数据被修改过,但是事务 A 不论在什么时候查询,看到这行数据的结果都是一致的,所以我们称之为一致性读。 + +这个判断规则是从代码逻辑直接转译过来的,但是正如你所见,用于人肉分析可见性很麻烦。 + +所以,我来给你翻译一下。一个数据版本,对于一个事务视图来说,除了自己的更新总是可见以外,有三种情况: + +1. 版本未提交,不可见; +2. 版本已提交,但是是在视图创建后提交的,不可见; +3. 版本已提交,而且是在视图创建前提交的,可见。 + +现在,我们用这个规则来判断图 4 中的查询结果,事务 A 的查询语句的视图数组是在事务 A 启动的时候生成的,这时候: + +- (1,3) 还没提交,属于情况 1,不可见; +- (1,2) 虽然提交了,但是是在视图数组创建之后提交的,属于情况 2,不可见; +- (1,1) 是在视图数组创建之前提交的,可见。 + +你看,去掉数字对比后,只用时间先后顺序来判断,分析起来是不是轻松多了。所以,后面我们就都用这个规则来分析。 + +## 更新逻辑 + +细心的同学可能有疑问了:**事务 B 的 update 语句,如果按照一致性读,好像结果不对哦?** + +你看图 5 中,事务 B 的视图数组是先生成的,之后事务 C 才提交,不是应该看不见 (1,2) 吗,怎么能算出 (1,3) 来? + +![img](images/86ad7e8abe7bf16505b97718d8ac149f.png) + +图 5 事务 B 更新逻辑图 + +是的,如果事务 B 在更新之前查询一次数据,这个查询返回的 k 的值确实是 1。 + +但是,当它要去更新数据的时候,就不能再在历史版本上更新了,否则事务 C 的更新就丢失了。因此,事务 B 此时的 set k=k+1 是在(1,2)的基础上进行的操作。 + +所以,这里就用到了这样一条规则:**更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)。** + +因此,在更新的时候,当前读拿到的数据是 (1,2),更新后生成了新版本的数据 (1,3),这个新版本的 row trx_id 是 101。 + +所以,在执行事务 B 查询语句的时候,一看自己的版本号是 101,最新数据的版本号也是 101,是自己的更新,可以直接使用,所以查询得到的 k 的值是 3。 + +这里我们提到了一个概念,叫作当前读。其实,除了 update 语句外,select 语句如果加锁,也是当前读。 + +所以,如果把事务 A 的查询语句 select * from t where id=1 修改一下,加上 lock in share mode 或 for update,也都可以读到版本号是 101 的数据,返回的 k 的值是 3。下面这两个 select 语句,就是分别加了读锁(S 锁,共享锁)和写锁(X 锁,排他锁)。 + +```csharp +mysql> select k from t where id=1 lock in share mode; +mysql> select k from t where id=1 for update; +``` + +再往前一步,假设事务 C 不是马上提交的,而是变成了下面的事务 C’,会怎么样呢? + +![img](images/cda2a0d7decb61e59dddc83ac51efb6e.png) + +图 6 事务 A、B、C'的执行流程 + +事务 C’的不同是,更新后并没有马上提交,在它提交前,事务 B 的更新语句先发起了。前面说过了,虽然事务 C’还没提交,但是 (1,2) 这个版本也已经生成了,并且是当前的最新版本。那么,事务 B 的更新语句会怎么处理呢? + +这时候,我们在上一篇文章中提到的“两阶段锁协议”就要上场了。事务 C’没提交,也就是说 (1,2) 这个版本上的写锁还没释放。而事务 B 是当前读,必须要读最新版本,而且必须加锁,因此就被锁住了,必须等到事务 C’释放这个锁,才能继续它的当前读。 + +![img](images/540967ea905e8b63630e496786d84c92.png) + +图 7 事务 B 更新逻辑图(配合事务 C') + +到这里,我们把一致性读、当前读和行锁就串起来了。 + +现在,我们再回到文章开头的问题:**事务的可重复读的能力是怎么实现的?** + +可重复读的核心就是一致性读(consistent read);而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。 + +而读提交的逻辑和可重复读的逻辑类似,它们最主要的区别是: + +- 在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图; +- 在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。 + +那么,我们再看一下,在读提交隔离级别下,事务 A 和事务 B 的查询语句查到的 k,分别应该是多少呢? + +这里需要说明一下,“start transaction with consistent snapshot; ”的意思是从这个语句开始,创建一个持续整个事务的一致性快照。所以,在读提交隔离级别下,这个用法就没意义了,等效于普通的 start transaction。 + +下面是读提交时的状态图,可以看到这两个查询语句的创建视图数组的时机发生了变化,就是图中的 read view 框。(注意:这里,我们用的还是事务 C 的逻辑直接提交,而不是事务 C’) + +![img](images/18fd5179b38c8c3804b313c3582cd1be.jpg) + +图 8 读提交隔离级别下的事务状态图 + +这时,事务 A 的查询语句的视图数组是在执行这个语句的时候创建的,时序上 (1,2)、(1,3) 的生成时间都在创建这个视图数组的时刻之前。但是,在这个时刻: + +- (1,3) 还没提交,属于情况 1,不可见; +- (1,2) 提交了,属于情况 3,可见。 + +所以,这时候事务 A 查询语句返回的是 k=2。 + +显然地,事务 B 查询结果 k=3。 + +## 小结 + +InnoDB 的行数据有多个版本,每个数据版本有自己的 row trx_id,每个事务或者语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据 row trx_id 和一致性视图确定数据版本的可见性。 + +- 对于可重复读,查询只承认在事务启动前就已经提交完成的数据; +- 对于读提交,查询只承认在语句启动前就已经提交完成的数据; + +而当前读,总是读取已经提交完成的最新版本。 + +你也可以想一下,为什么表结构不支持“可重复读”?这是因为表结构没有对应的行数据,也没有 row trx_id,因此只能遵循当前读的逻辑。 + +当然,MySQL 8.0 已经可以把表结构放在 InnoDB 字典里了,也许以后会支持表结构的可重复读。 + +又到思考题时间了。我用下面的表结构和初始化语句作为试验环境,事务隔离级别是可重复读。现在,我要把所有“字段 c 和 id 值相等的行”的 c 值清零,但是却发现了一个“诡异”的、改不掉的情况。请你构造出这种情况,并说明其原理。 + +```sql +mysql> CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `c` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +insert into t(id, c) values(1,1),(2,2),(3,3),(4,4); +``` + +![img](images/9b8fe7cf88c9ba40dc12e93e36c3060b.png)复现出来以后,请你再思考一下,在实际的业务开发中有没有可能碰到这种情况?你的应用代码会不会掉进这个“坑”里,你又是怎么解决的呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +我在上一篇文章最后,留给你的问题是:怎么删除表的前 10000 行。比较多的留言都选择了第二种方式,即:在一个连接中循环执行 20 次 delete from T limit 500。 + +确实是这样的,第二种方式是相对较好的。 + +第一种方式(即:直接执行 delete from T limit 10000)里面,单个语句占用时间长,锁的时间也比较长;而且大事务还会导致主从延迟。 + +第三种方式(即:在 20 个连接中同时执行 delete from T limit 500),会人为造成锁冲突。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/18fd5179b38c8c3804b313c3582cd1be.jpg" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/18fd5179b38c8c3804b313c3582cd1be.jpg" new file mode 100644 index 00000000..ee1cc437 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/18fd5179b38c8c3804b313c3582cd1be.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/540967ea905e8b63630e496786d84c92.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/540967ea905e8b63630e496786d84c92.png" new file mode 100644 index 00000000..0b76478b Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/540967ea905e8b63630e496786d84c92.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/68d08d277a6f7926a41cc5541d3dfced.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/68d08d277a6f7926a41cc5541d3dfced.png" new file mode 100644 index 00000000..e5b6673a Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/68d08d277a6f7926a41cc5541d3dfced.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/823acf76e53c0bdba7beab45e72e90d6.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/823acf76e53c0bdba7beab45e72e90d6.png" new file mode 100644 index 00000000..f628f969 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/823acf76e53c0bdba7beab45e72e90d6.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/86ad7e8abe7bf16505b97718d8ac149f.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/86ad7e8abe7bf16505b97718d8ac149f.png" new file mode 100644 index 00000000..5974fe37 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/86ad7e8abe7bf16505b97718d8ac149f.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/882114aaf55861832b4270d44507695e.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/882114aaf55861832b4270d44507695e.png" new file mode 100644 index 00000000..b774606e Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/882114aaf55861832b4270d44507695e.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9416c310e406519b7460437cb0c5c149.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9416c310e406519b7460437cb0c5c149.png" new file mode 100644 index 00000000..5629f892 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9416c310e406519b7460437cb0c5c149.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9b8fe7cf88c9ba40dc12e93e36c3060b.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9b8fe7cf88c9ba40dc12e93e36c3060b.png" new file mode 100644 index 00000000..148d2a5d Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/9b8fe7cf88c9ba40dc12e93e36c3060b.png" differ diff --git "a/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/cda2a0d7decb61e59dddc83ac51efb6e.png" "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/cda2a0d7decb61e59dddc83ac51efb6e.png" new file mode 100644 index 00000000..c7b5efeb Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/08_\344\272\213\345\212\241\345\210\260\345\272\225\346\230\257\351\232\224\347\246\273\347\232\204\350\277\230\346\230\257\344\270\215\351\232\224\347\246\273\347\232\204/images/cda2a0d7decb61e59dddc83ac51efb6e.png" differ diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/README.md" new file mode 100644 index 00000000..99b0be97 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/README.md" @@ -0,0 +1,184 @@ +在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引? + +假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的 **SQL** 语句: + +```csharp +select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz'; +``` + +所以,你一定会考虑在 **id_card** 字段上建索引。 + +由于身份证号字段比较大,我不建议你把身份证号当做主键,那么现在你有两个选择,要么给 **id_card** 字段创建唯一索引,要么创建一个普通索引。如果业务代码已经保证了不会写入重复的身份证号,那么这两个选择逻辑上都是正确的。 + +现在我要问你的是,从性能的角度考虑,你选择唯一索引还是普通索引呢?选择的依据是什么呢? + +简单起见,我们还是用第 **4** 篇文章 [**深入浅出索引(上)**]中的例子来说明,假设字段 **k** 上的值都不重复。 + +![img](images/1ed9536031d6698570ea175a7b7f9a46.png) + +图 1 InnoDB 的索引组织结构 + +接下来,我们就从这两种索引对查询语句和更新语句的性能影响来进行分析。 + +## 查询过程 + +假设,执行查询的语句是 select id from T where k=5。这个查询语句在索引树上查找的过程,先是通过 B+ 树从树根开始,按层搜索到叶子节点,也就是图中右下角的这个数据页,然后可以认为数据页内部通过二分法来定位记录。 + +- 对于普通索引来说,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。 +- 对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。 + +那么,这个不同带来的性能差距会有多少呢?答案是,微乎其微。 + +你知道的,InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。在 InnoDB 中,每个数据页的大小默认是 16KB。 + +因为引擎是按页读写的,所以说,当找到 k=5 的记录的时候,它所在的数据页就都在内存里了。那么,对于普通索引来说,要多做的那一次“查找和判断下一条记录”的操作,就只需要一次指针寻找和一次计算。 + +当然,如果 k=5 这个记录刚好是这个数据页的最后一个记录,那么要取下一个记录,必须读取下一个数据页,这个操作会稍微复杂一些。 + +但是,我们之前计算过,对于整型字段,一个数据页可以放近千个 key,因此出现这种情况的概率会很低。所以,我们计算平均性能差异时,仍可以认为这个操作成本对于现在的 CPU 来说可以忽略不计。 + +## 更新过程 + +为了说明普通索引和唯一索引对更新语句性能的影响这个问题,我需要先跟你介绍一下 change buffer。 + +当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。 + +需要说明的是,虽然名字叫作 change buffer,实际上它是可以持久化的数据。也就是说,change buffer 在内存中有拷贝,也会被写入到磁盘上。 + +将 change buffer 中的操作应用到原数据页,得到最新结果的过程称为 merge。除了访问这个数据页会触发 merge 外,系统有后台线程会定期 merge。在数据库正常关闭(shutdown)的过程中,也会执行 merge 操作。 + +显然,如果能够将更新操作先记录在 change buffer,减少读磁盘,语句的执行速度会得到明显的提升。而且,数据读入内存是需要占用 buffer pool 的,所以这种方式还能够避免占用内存,提高内存利用率。 + +那么,**什么条件下可以使用 change buffer 呢?** + +对于唯一索引来说,所有的更新操作都要先判断这个操作是否违反唯一性约束。比如,要插入 (4,400) 这个记录,就要先判断现在表中是否已经存在 k=4 的记录,而这必须要将数据页读入内存才能判断。如果都已经读入到内存了,那直接更新内存会更快,就没必要使用 change buffer 了。 + +因此,唯一索引的更新就不能使用 change buffer,实际上也只有普通索引可以使用。 + +change buffer 用的是 buffer pool 里的内存,因此不能无限增大。change buffer 的大小,可以通过参数 innodb_change_buffer_max_size 来动态设置。这个参数设置为 50 的时候,表示 change buffer 的大小最多只能占用 buffer pool 的 50%。 + +现在,你已经理解了 change buffer 的机制,那么我们再一起来看看**如果要在这张表中插入一个新记录 (4,400) 的话,InnoDB 的处理流程是怎样的。** + +第一种情况是,**这个记录要更新的目标页在内存中**。这时,InnoDB 的处理流程如下: + +- 对于唯一索引来说,找到 3 和 5 之间的位置,判断到没有冲突,插入这个值,语句执行结束; +- 对于普通索引来说,找到 3 和 5 之间的位置,插入这个值,语句执行结束。 + +这样看来,普通索引和唯一索引对更新语句性能影响的差别,只是一个判断,只会耗费微小的 CPU 时间。 + +但,这不是我们关注的重点。 + +第二种情况是,**这个记录要更新的目标页不在内存中**。这时,InnoDB 的处理流程如下: + +- 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束; +- 对于普通索引来说,则是将更新记录在 change buffer,语句执行就结束了。 + +将数据从磁盘读入内存涉及随机 IO 的访问,是数据库里面成本最高的操作之一。change buffer 因为减少了随机磁盘访问,所以对更新性能的提升是会很明显的。 + +之前我就碰到过一件事儿,有个 DBA 的同学跟我反馈说,他负责的某个业务的库内存命中率突然从 99% 降低到了 75%,整个系统处于阻塞状态,更新语句全部堵住。而探究其原因后,我发现这个业务有大量插入数据的操作,而他在前一天把其中的某个普通索引改成了唯一索引。 + +## change buffer 的使用场景 + +通过上面的分析,你已经清楚了使用 change buffer 对更新过程的加速作用,也清楚了 change buffer 只限于用在普通索引的场景下,而不适用于唯一索引。那么,现在有一个问题就是:普通索引的所有场景,使用 change buffer 都可以起到加速作用吗? + +因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change buffer 记录的变更越多(也就是这个页面上要更新的次数越多),收益就越大。 + +因此,对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时 change buffer 的使用效果最好。这种业务模型常见的就是账单类、日志类的系统。 + +反过来,假设一个业务的更新模式是写入之后马上会做查询,那么即使满足了条件,将更新先记录在 change buffer,但之后由于马上要访问这个数据页,会立即触发 merge 过程。这样随机访问 IO 的次数不会减少,反而增加了 change buffer 的维护代价。所以,对于这种业务模式来说,change buffer 反而起到了副作用。 + +## 索引选择和实践 + +回到我们文章开头的问题,普通索引和唯一索引应该怎么选择。其实,这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响。所以,我建议你尽量选择普通索引。 + +如果所有的更新后面,都马上伴随着对这个记录的查询,那么你应该关闭 change buffer。而在其他情况下,change buffer 都能提升更新性能。 + +在实际使用中,你会发现,普通索引和 change buffer 的配合使用,对于数据量大的表的更新优化还是很明显的。 + +特别地,在使用机械硬盘时,change buffer 这个机制的收效是非常显著的。所以,当你有一个类似“历史数据”的库,并且出于成本考虑用的是机械硬盘时,那你应该特别关注这些表里的索引,尽量使用普通索引,然后把 change buffer 尽量开大,以确保这个“历史数据”表的数据写入速度。 + +## change buffer 和 redo log + +理解了 change buffer 的原理,你可能会联想到我在前面文章中和你介绍过的 redo log 和 WAL。 + +在前面文章的评论中,我发现有同学混淆了 redo log 和 change buffer。WAL 提升性能的核心机制,也的确是尽量减少随机读写,这两个概念确实容易混淆。所以,这里我把它们放到了同一个流程里来说明,便于你区分这两个概念。 + +> 备注:这里,你可以再回顾下第 2 篇文章[日志系统:一条 SQL 更新语句是如何执行的?]中的相关内容。 + +现在,我们要在表上执行这个插入语句: + +```scss +mysql> insert into t(id,k) values(id1,k1),(id2,k2); +``` + +这里,我们假设当前 k 索引树的状态,查找到位置后,k1 所在的数据页在内存 (InnoDB buffer pool) 中,k2 所在的数据页不在内存中。如图 2 所示是带 change buffer 的更新状态图。 + +![img](images/980a2b786f0ea7adabef2e64fb4c4ca3.png) + +图 2 带 change buffer 的更新过程 + +分析这条更新语句,你会发现它涉及了四个部分:内存、redo log(ib_log_fileX)、 数据表空间(t.ibd)、系统表空间(ibdata1)。 + +这条更新语句做了如下的操作(按照图中的数字顺序): + +1. Page 1 在内存中,直接更新内存; +2. Page 2 没有在内存中,就在内存的 change buffer 区域,记录下“我要往 Page 2 插入一行”这个信息 +3. 将上述两个动作记入 redo log 中(图中 3 和 4)。 + +做完上面这些,事务就可以完成了。所以,你会看到,执行这条更新语句的成本很低,就是写了两处内存,然后写了一处磁盘(两次操作合在一起写了一次磁盘),而且还是顺序写的。 + +同时,图中的两个虚线箭头,是后台操作,不影响更新的响应时间。 + +那在这之后的读请求,要怎么处理呢? + +比如,我们现在要执行 select * from t where k in (k1, k2)。这里,我画了这两个读请求的流程图。 + +如果读语句发生在更新语句后不久,内存中的数据都还在,那么此时的这两个读操作就与系统表空间(ibdata1)和 redo log(ib_log_fileX)无关了。所以,我在图中就没画出这两部分。 + +![img](images/6dc743577af1dbcbb8550bddbfc5f98e.png) + +图 3 带 change buffer 的读过程 + +从图中可以看到: + +1. 读 Page 1 的时候,直接从内存返回。有几位同学在前面文章的评论中问到,WAL 之后如果读数据,是不是一定要读盘,是不是一定要从 redo log 里面把数据更新以后才可以返回?其实是不用的。你可以看一下图 3 的这个状态,虽然磁盘上还是之前的数据,但是这里直接从内存返回结果,结果是正确的。 +2. 要读 Page 2 的时候,需要把 Page 2 从磁盘读入内存中,然后应用 change buffer 里面的操作日志,生成一个正确的版本并返回结果。 + +可以看到,直到需要读 Page 2 的时候,这个数据页才会被读入内存。 + +所以,如果要简单地对比这两个机制在提升更新性能上的收益的话,**redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写),而 change buffer 主要节省的则是随机读磁盘的 IO 消耗。** + +## 小结 + +今天,我从普通索引和唯一索引的选择开始,和你分享了数据的查询和更新过程,然后说明了 change buffer 的机制以及应用场景,最后讲到了索引选择的实践。 + +由于唯一索引用不上 change buffer 的优化机制,因此如果业务可以接受,从性能角度出发我建议你优先考虑非唯一索引。 + +最后,又到了思考题时间。 + +通过图 2 你可以看到,change buffer 一开始是写内存的,那么如果这个时候机器掉电重启,会不会导致 change buffer 丢失呢?change buffer 丢失可不是小事儿,再从磁盘读入数据可就没有了 merge 过程,就等于是数据丢失了。会不会出现这种情况呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +**补充:** 评论区大家对“是否使用唯一索引”有比较多的讨论,主要是纠结在“业务可能无法确保”的情况。这里,我再说明一下: + +- 首先,业务正确性优先。咱们这篇文章的前提是“业务代码已经保证不会写入重复数据”的情况下,讨论性能问题。如果业务不能保证,或者业务就是要求数据库来做约束,那么没得选,必须创建唯一索引。这种情况下,本篇文章的意义在于,如果碰上了大量插入数据慢、内存命中率低的时候,可以给你多提供一个排查思路。 +- 然后,在一些“归档库”的场景,你是可以考虑使用普通索引的。比如,线上数据只需要保留半年,然后历史数据保存在归档库。这时候,归档数据已经是确保没有唯一键冲突了。要提高归档效率,可以考虑把表里面的唯一索引改成普通索引。 + +## 上期问题时间 + +上期的问题是:如何构造一个“数据无法修改”的场景。评论区里已经有不少同学给出了正确答案,这里我再描述一下。 + +![img](images/be7a4d8af04cdf93aaa11108933559ae.png)这样,session A 看到的就是我截图的效果了。 + +其实,还有另外一种场景,同学们在留言区都还没有提到。 + +![img](images/e24a0689571337959138d787c408defa.png) + +这个操作序列跑出来,session A 看的内容也是能够复现我截图的效果的。这个 session B’启动的事务比 A 要早,其实是上期我们描述事务版本的可见性规则时留的彩蛋,因为规则里还有一个“活跃事务的判断”,我是准备留到这里再补充的。 + +当我试图在这里讲述完整规则的时候,发现第 8 篇文章[事务到底是隔离的还是不隔离的?]中的解释引入了太多的概念,以致于分析起来非常复杂。 + +因此,我重写了第 8 篇,这样我们人工去判断可见性的时候,才会更方便。【看到这里,我建议你能够再重新打开第 8 篇文章并认真学习一次。如果学习的过程中,有任何问题,也欢迎你给我留言】 + +用新的方式来分析 session B’的更新为什么对 session A 不可见就是:在 session A 视图数组创建的瞬间,session B’是活跃的,属于“版本未提交,不可见”这种情况。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/1ed9536031d6698570ea175a7b7f9a46.png" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/1ed9536031d6698570ea175a7b7f9a46.png" new file mode 100644 index 00000000..fe48bcea Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/1ed9536031d6698570ea175a7b7f9a46.png" differ diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/6dc743577af1dbcbb8550bddbfc5f98e.png" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/6dc743577af1dbcbb8550bddbfc5f98e.png" new file mode 100644 index 00000000..de870b7c Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/6dc743577af1dbcbb8550bddbfc5f98e.png" differ diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/980a2b786f0ea7adabef2e64fb4c4ca3.png" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/980a2b786f0ea7adabef2e64fb4c4ca3.png" new file mode 100644 index 00000000..a3e033b6 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/980a2b786f0ea7adabef2e64fb4c4ca3.png" differ diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/be7a4d8af04cdf93aaa11108933559ae.png" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/be7a4d8af04cdf93aaa11108933559ae.png" new file mode 100644 index 00000000..88b2e7b3 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/be7a4d8af04cdf93aaa11108933559ae.png" differ diff --git "a/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/e24a0689571337959138d787c408defa.png" "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/e24a0689571337959138d787c408defa.png" new file mode 100644 index 00000000..d41a9310 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/09_\346\231\256\351\200\232\347\264\242\345\274\225\345\222\214\345\224\257\344\270\200\347\264\242\345\274\225\357\274\214\345\272\224\350\257\245\346\200\216\344\271\210\351\200\211\346\213\251\357\274\237/images/e24a0689571337959138d787c408defa.png" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/README.md" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/README.md" new file mode 100644 index 00000000..bf3a7606 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/README.md" @@ -0,0 +1,190 @@ +在聊到MySQL索引优化的时候,都会提到 **explain** ,但是对 **explain** 的各个参数可能一知半解 + +下面咱们就来好好聊一下 **explain** 的各个参数,来帮助我们以后能够更好的进行 **MySQL** 调优 + +## 一句话介绍 explain + +**EXPLAIN** 是 **MySQL** 必不可少的一个分析工具,主要用来测试 **SQL** 语句的性能及对 **SQL** 语句的优化,或者说模拟优化器执行 **SQL** 语句。 + +在 **Select** 语句之前增加 **explain** 关键字,执行后 **MySQL** 就会返回执行计划的信息,而不是执行 **SQL** 。但如果 **from** 中包含子查询,**MySQL** 仍会执行该子查询,并把子查询的结果放入临时表中。它显示了 **MySQL** 如何使用索引来处理 **Select** 语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。 + +## explain 用法 + +首先,我们看下面这个例子 + +```bash +EXPLAIN SELECT s.uid, s.username, s.name, f.email, f.mobile, f.phone, f.postalcode, f.address +FROM uchome_space AS s, uchome_spacefield AS f +WHERE 1 +AND s.groupid=0 +AND s.uid=f.uid +``` + +执行后的结果,如下图所示 + +![img](images/SouthEast.jpeg) + +这里面有下面几个结果,下面我们一个个来看一下 + +## 1、id + +**SELECT** 识别符。这是 **SELECT** 查询序列号。这个不重要,查询序号,即为 **SQL** 语句执行的顺序 + +```sql +EXPLAIN SELECT * FROM (SELECT* FROM uchome_space LIMIT 10)AS s +``` + +它的执行结果为: + +![img](images/SouthEast-16598858078253.jpeg) + +可以看到这时的id变化了 + +## 2、select_type + +**select** 类型,它有以下几种值 + +- **simple**:它表示简单的 **select**,没有 **union** 和 子查询 +- **primary**:最外面的 **select**,在没有子查询的语句中,最外面的 **select** 查询就是 **primary**,上图中就是这样。 +- **union**:union语句的第二个或者说后面那一个,现执行一条语句: + +```sql +explain select * from uchome_space limit 10 union select * from uchome_space limit 10,10 +``` + +会有如下结果 + +![img](images/SouthEast-16598860821086.jpeg) + +第二条语句使用了**union** + +- **dependent union**:union 中的第二个或后面的 **Select** 语句,取决于外面的查询 +- **union result**:union的结果,如上面所示 + +## 3、table + +表示的是输出行所用的表 + +## 4、type + +连接类型,有多个参数,先从最佳类型到最差类型介绍,重要且困难 + +### system + +表仅有一行,这是 **const** 类型的特列,平时不会出现,这个可以忽略 + +### const + +表最多有一个匹配行,const 用于比较 **primary key** 或者 **unique**。因为只匹配一行数据,所以很快记住一定是用到 **primary key** 或者 **unique** ,并且只检索出两条数据的情况下,才会是 **const** ,看下面这条语句 + +```sql +explain select * from `asj_admin_log` limit 1 +``` + +结果如下 + +![img](images/SouthEast-16598872012339.jpeg) + +虽然只搜索一条数据,但是因为没有用到指定的索引,所以不会使用 **const**,继续看下面这个 + +```sql +explain SELECT * FROM `asj_admin_log` where log_id = 111 +``` + +![img](images/SouthEast-165988724784912.jpeg) + +**log_id** 是主键,所以使用了 **const**。所以说可以理解为 **const** 是最优化的 + +### eq_ref + +对于 **eq_ref** 的解释,**mysql** 手册是这样说的:"对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是 **UNIQUE** 或 **PRIMARY KEY** "。**eq_ref** 可以用于使用=比较带索引的列。看下面的语句 + +```sql +explain select * from uchome_spacefield,uchome_space where uchome_spacefield.uid = uchome_space.uid +``` + +得到的结果是下图所示。很明显,**mysql** 使用 **eq_ref** 联接来处理 **uchome_space** 表。 + +![img](images/SouthEast-165988739401915.png) + +### ref + +对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是 **UNIQUE** 或 **PRIMARY KEY**(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。 + + + +## 5、possible_keys + +提示使用哪个索引会在该表中找到行 + +## 6、keys + +MySQL使用的哪个索引,简单且重要 + +## 7、key_len + +MySQL 使用的索引长度 + +## 8、ref + +ref列显示使用哪个列或常数与key一起从表中选择行 + +## 9、rows + +显示MySQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引 + +## 10、Extra + +该列包含MySQL解决查询的详细信息 + +- Distinct:**MySQL** 发现第 1 个匹配行后,停止为当前的行组合搜索更多的行 +- Not exists:不存在 +- range checked for each:没有找到合适的索引 +- using filesort :如果存在排序并且取出的列包括text类型会使用到using filesort,这会非常慢 + +> MYSQL手册是这么解释的“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行 + +- using index:只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的信息。这个比较容易理解,就是说明是否使用了索引 +- using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。 + +出现using temporary就说明语句需要优化了,举个例子来说 + +```sql +EXPLAIN SELECT ads.id FROM ads, city WHERE city.city_id = 8005 AND ads.status = 'online' AND city.ads_id=ads.id ORDER BY ads.id desc +``` + +![image-20220829092000079](images/image-20220829092000079.png) + +这条语句会使用using temporary,而下面这条语句则不会 + +```sql +EXPLAIN SELECT ads.id FROM ads, city WHERE city.city_id = 8005 AND ads.status = 'online' AND city.ads_id=ads.id ORDER BYcity.ads_id desc +``` + +![image-20220829092032304](images/image-20220829092032304.png) + +这是为什么呢?他俩之间只是一个order by不同,MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。EXPLAIN 结果中,第一行出现的表就是驱动表(Important!)以上两个查询语句,驱动表都是 city,如上面的执行计划所示! + +对驱动表可以直接排序,对非驱动表(的字段排序)需要对循环查询的合并结果(临时表)进行排序 (Important!) + +因此,order by ads.id desc 时,就要先 using temporary 了! + +驱动表的定义: + +[wwh999](http://blog.csdn.net/wwh999/article/details/643493) 在 2006年总结说,当进行多表连接查询时, [驱动表] 的定义为: +1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]; +2)未指定联接条件时,行数少的表为[驱动表](Important!)。 + +**永远用小结果集驱动大结果集** + +今天学到了一个很重要的一点:当不确定是用哪种类型的 **join** 时,让 **mysql** 优化器自动去判断 + +我们只需写 **select * from t1,t2 where t1.field = t2.field** + +通俗解释:**select * from table order by field** + +其中 **filed** 建普通索引,这种情况会使用到using temporary,因为虽然这时候使用到了索引,但因为扫描的是全表,mysql优化器会判断:反正是搜索全表而且要排序,因为这时候要回行,我还不如不沿着索引找数据,直接全部检索出所有数据来在排序。如果语句这么写 select * from table where field > 1 order by field.mysql优化器就会这么判断:这时候不是搜全表,我需要先根据where条件,沿着索引树搜出想要的相应索引数据,在回行(一边找索引一边回行)。这时候就不需要临时表了 + +## 参考 + +https://blog.csdn.net/asd051377305/article/details/113979657 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598858078253.jpeg" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598858078253.jpeg" new file mode 100644 index 00000000..4891eb41 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598858078253.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598860821086.jpeg" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598860821086.jpeg" new file mode 100644 index 00000000..3802c8c4 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598860821086.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598872012339.jpeg" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598872012339.jpeg" new file mode 100644 index 00000000..bfc5f51a Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-16598872012339.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988724784912.jpeg" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988724784912.jpeg" new file mode 100644 index 00000000..1dc859be Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988724784912.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988739401915.png" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988739401915.png" new file mode 100644 index 00000000..258f1350 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast-165988739401915.png" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast.jpeg" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast.jpeg" new file mode 100644 index 00000000..fafca473 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/SouthEast.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092000079.png" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092000079.png" new file mode 100644 index 00000000..23ac32de Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092000079.png" differ diff --git "a/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092032304.png" "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092032304.png" new file mode 100644 index 00000000..bd8f6243 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/100_Mysql explain\350\257\246\350\247\243/images/image-20220829092032304.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/README.md" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/README.md" new file mode 100644 index 00000000..a76c1380 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/README.md" @@ -0,0 +1,295 @@ +前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。 + +不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变得很慢? + +我们一起来看一个例子吧。 + +我们先建一个简单的表,表里有 a、b 两个字段,并分别建上索引: + +```go +CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB; +``` + +然后,我们往表 t 中插入 10 万行记录,取值按整数递增,即:(1,1,1),(2,2,2),(3,3,3) 直到 (100000,100000,100000)。 + +我是用存储过程来插入数据的,这里我贴出来方便你复现: + +```sql +delimiter ;; +create procedure idata() +begin + declare i int; + set i=1; + while(i<=100000)do + insert into t values(i, i, i); + set i=i+1; + end while; +end;; +delimiter ; +call idata(); +``` + +接下来,我们分析一条 SQL 语句: + +```sql +mysql> select * from t where a between 10000 and 20000; +``` + +你一定会说,这个语句还用分析吗,很简单呀,a 上有索引,肯定是要使用索引 a 的。 + +你说得没错,图 1 显示的就是使用 explain 命令看到的这条语句的执行情况。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/2cfce769551c6eac9bfbee0563d48fe3.png) + +图 1 使用 explain 命令查看语句执行情况 + +从图 1 看上去,这条查询语句的执行也确实符合预期,key 这个字段值是’a’,表示优化器选择了索引 a。 + +不过别急,这个案例不会这么简单。在我们已经准备好的包含了 10 万行数据的表上,我们再做如下操作。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/1e5ba1c2934d3b2c0d96b210a27e1a1e.png) + +图 2 session A 和 session B 的执行流程 + +这里,session A 的操作你已经很熟悉了,它就是开启了一个事务。随后,session B 把数据都删除后,又调用了 idata 这个存储过程,插入了 10 万行数据。 + +这时候,session B 的查询语句 select * from t where a between 10000 and 20000 就不会再选择索引 a 了。我们可以通过慢查询日志(slow log)来查看一下具体的执行情况。 + +为了说明优化器选择的结果是否正确,我增加了一个对照,即:使用 force index(a) 来让优化器强制使用索引 a(这部分内容,我还会在这篇文章的后半部分中提到)。 + +下面的三条 SQL 语句,就是这个实验过程。 + +```sql +set long_query_time=0; +select * from t where a between 10000 and 20000; /*Q1*/ +select * from t force index(a) where a between 10000 and 20000;/*Q2*/ +``` + +- 第一句,是将慢查询日志的阈值设置为 0,表示这个线程接下来的语句都会被记录入慢查询日志中; +- 第二句,Q1 是 session B 原来的查询; +- 第三句,Q2 是加了 force index(a) 来和 session B 原来的查询语句执行情况对比。 + +如图 3 所示是这三条 SQL 语句执行完成后的慢查询日志。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/7c58b9c71853b8bba1a8ad5e926de1f6.png) + +图 3 slow log 结果 + +可以看到,Q1 扫描了 10 万行,显然是走了全表扫描,执行时间是 40 毫秒。Q2 扫描了 10001 行,执行了 21 毫秒。也就是说,我们在没有使用 force index 的时候,MySQL 用错了索引,导致了更长的执行时间。 + +这个例子对应的是我们平常不断地删除历史数据和新增数据的场景。这时,MySQL 竟然会选错索引,是不是有点奇怪呢?今天,我们就从这个奇怪的结果说起吧。 + +## 优化器的逻辑 + +在第一篇文章中,我们就提到过,选择索引是优化器的工作。 + +而优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少。 + +当然,扫描行数并不是唯一的判断标准,优化器还会结合是否使用临时表、是否排序等因素进行综合判断。 + +我们这个简单的查询语句并没有涉及到临时表和排序,所以 MySQL 选错索引肯定是在判断扫描行数的时候出问题了。 + +那么,问题就是:**扫描行数是怎么判断的?** + +MySQL 在真正开始执行语句之前,并不能精确地知道满足这个条件的记录有多少条,而只能根据统计信息来估算记录数。 + +这个统计信息就是索引的“区分度”。显然,一个索引上不同的值越多,这个索引的区分度就越好。而一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好。 + +我们可以使用 show index 方法,看到一个索引的基数。如图 4 所示,就是表 t 的 show index 的结果 。虽然这个表的每一行的三个字段值都是一样的,但是在统计信息中,这三个索引的基数值并不同,而且其实都不准确。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/16dbf8124ad529fec0066950446079d4.png) + +图 4 表 t 的 show index 结果 + +那么,**MySQL 是怎样得到索引的基数的呢?**这里,我给你简单介绍一下 MySQL 采样统计的方法。 + +为什么要采样统计呢?因为把整张表取出来一行行统计,虽然可以得到精确的结果,但是代价太高了,所以只能选择“采样统计”。 + +采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。 + +而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计。 + +在 MySQL 中,有两种存储索引统计的方式,可以通过设置参数 innodb_stats_persistent 的值来选择: + +- 设置为 on 的时候,表示统计信息会持久化存储。这时,默认的 N 是 20,M 是 10。 +- 设置为 off 的时候,表示统计信息只存储在内存中。这时,默认的 N 是 8,M 是 16。 + +由于是采样统计,所以不管 N 是 20 还是 8,这个基数都是很容易不准的。 + +但,这还不是全部。 + +你可以从图 4 中看到,这次的索引统计值(cardinality 列)虽然不够精确,但大体上还是差不多的,选错索引一定还有别的原因。 + +其实索引统计只是一个输入,对于一个具体的语句来说,优化器还要判断,执行这个语句本身要扫描多少行。 + +接下来,我们再一起看看优化器预估的,这两个语句的扫描行数是多少。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/e2bc5f120858391d4accff05573e1289.png) + +图 5 意外的 explain 结果 + +rows 这个字段表示的是预计扫描行数。 + +其中,Q1 的结果还是符合预期的,rows 的值是 104620;但是 Q2 的 rows 值是 37116,偏差就大了。而图 1 中我们用 explain 命令看到的 rows 是只有 10001 行,是这个偏差误导了优化器的判断。 + +到这里,可能你的第一个疑问不是为什么不准,而是优化器为什么放着扫描 37000 行的执行计划不用,却选择了扫描行数是 100000 的执行计划呢? + +这是因为,如果使用索引 a,每次从索引 a 上拿到一个值,都要回到主键索引上查出整行数据,这个代价优化器也要算进去的。 + +而如果选择扫描 10 万行,是直接在主键索引上扫描的,没有额外的代价。 + +优化器会估算这两个选择的代价,从结果看来,优化器认为直接扫描主键索引更快。当然,从执行时间看来,这个选择并不是最优的。 + +使用普通索引需要把回表的代价算进去,在图 1 执行 explain 的时候,也考虑了这个策略的代价 ,但图 1 的选择是对的。也就是说,这个策略并没有问题。 + +所以冤有头债有主,MySQL 选错索引,这件事儿还得归咎到没能准确地判断出扫描行数。至于为什么会得到错误的扫描行数,这个原因就作为课后问题,留给你去分析了。 + +既然是统计信息不对,那就修正。analyze table t 命令,可以用来重新统计索引信息。我们来看一下执行效果。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/209e9d3514688a3bcabbb75e54e1e49c.png) + +图 6 执行 analyze table t 命令恢复的 explain 结果 + +这回对了。 + +所以在实践中,如果你发现 explain 的结果预估的 rows 值跟实际情况差距比较大,可以采用这个方法来处理。 + +其实,如果只是索引统计不准确,通过 analyze 命令可以解决很多问题,但是前面我们说了,优化器可不止是看扫描行数。 + +依然是基于这个表 t,我们看看另外一个语句: + +```sql +mysql> select * from t where (a between 1 and 1000) and (b between 50000 and 100000) order by b limit 1; +``` + +从条件上看,这个查询没有符合条件的记录,因此会返回空集合。 + +在开始执行这条语句之前,你可以先设想一下,如果你来选择索引,会选择哪一个呢? + +为了便于分析,我们先来看一下 a、b 这两个索引的结构图。 + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/1d037f92063e800c3bfff3f4dbf1a2b9.png) + +图 7 a、b 索引的结构图 + +如果使用索引 a 进行查询,那么就是扫描索引 a 的前 1000 个值,然后取到对应的 id,再到主键索引上去查出每一行,然后根据字段 b 来过滤。显然这样需要扫描 1000 行。 + +如果使用索引 b 进行查询,那么就是扫描索引 b 的最后 50001 个值,与上面的执行过程相同,也是需要回到主键索引上取值再判断,所以需要扫描 50001 行。 + +所以你一定会想,如果使用索引 a 的话,执行速度明显会快很多。那么,下面我们就来看看到底是不是这么一回事儿。 + +图 8 是执行 explain 的结果。 + +```sql +mysql> explain select * from t where (a between 1 and 1000) and (b between 50000 and 100000) order by b limit 1; +``` + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/483bcb1ef3bb902844e80d9cbdd73ab8.png) + +图 8 使用 explain 方法查看执行计划 2 + +可以看到,返回结果中 key 字段显示,这次优化器选择了索引 b,而 rows 字段显示需要扫描的行数是 50198。 + +从这个结果中,你可以得到两个结论: + +1. 扫描行数的估计值依然不准确; +2. 这个例子里 MySQL 又选错了索引。 + +## 索引选择异常和处理 + +其实大多数时候优化器都能找到正确的索引,但偶尔你还是会碰到我们上面举例的这两种情况:原本可以执行得很快的 SQL 语句,执行速度却比你预期的慢很多,你应该怎么办呢? + +**一种方法是,像我们第一个例子一样,采用 force index 强行选择一个索引。**MySQL 会根据词法解析的结果分析出可能可以使用的索引作为候选项,然后在候选列表中依次判断每个索引需要扫描多少行。如果 force index 指定的索引在候选索引列表中,就直接选择这个索引,不再评估其他索引的执行代价。 + +我们来看看第二个例子。刚开始分析时,我们认为选择索引 a 会更好。现在,我们就来看看执行效果: + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/9582401a6bed6cb8fd803c9555750b54.png) + +图 9 使用不同索引的语句执行耗时 + +可以看到,原本语句需要执行 2.23 秒,而当你使用 force index(a) 的时候,只用了 0.05 秒,比优化器的选择快了 40 多倍。 + +也就是说,优化器没有选择正确的索引,force index 起到了“矫正”的作用。 + +不过很多程序员不喜欢使用 force index,一来这么写不优美,二来如果索引改了名字,这个语句也得改,显得很麻烦。而且如果以后迁移到别的数据库的话,这个语法还可能会不兼容。 + +但其实使用 force index 最主要的问题还是变更的及时性。因为选错索引的情况还是比较少出现的,所以开发的时候通常不会先写上 force index。而是等到线上出现问题的时候,你才会再去修改 SQL 语句、加上 force index。但是修改之后还要测试和发布,对于生产系统来说,这个过程不够敏捷。 + +所以,数据库的问题最好还是在数据库内部来解决。那么,在数据库里面该怎样解决呢? + +既然优化器放弃了使用索引 a,说明 a 还不够合适,所以**第二种方法就是,我们可以考虑修改语句,引导 MySQL 使用我们期望的索引。**比如,在这个例子里,显然把“order by b limit 1” 改成 “order by b,a limit 1” ,语义的逻辑是相同的。 + +我们来看看改之后的效果: + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/14cd598e52a2b72dd334a42603e5b894.png) + +图 10 order by b,a limit 1 执行结果 + +之前优化器选择使用索引 b,是因为它认为使用索引 b 可以避免排序(b 本身是索引,已经是有序的了,如果选择索引 b 的话,不需要再做排序,只需要遍历),所以即使扫描行数多,也判定为代价更小。 + +现在 order by b,a 这种写法,要求按照 b,a 排序,就意味着使用这两个索引都需要排序。因此,扫描行数成了影响决策的主要条件,于是此时优化器选了只需要扫描 1000 行的索引 a。 + +当然,这种修改并不是通用的优化手段,只是刚好在这个语句里面有 limit 1,因此如果有满足条件的记录, order by b limit 1 和 order by b,a limit 1 都会返回 b 是最小的那一行,逻辑上一致,才可以这么做。 + +如果你觉得修改语义这件事儿不太好,这里还有一种改法,图 11 是执行效果。 + +```sql +mysql> select * from (select * from t where (a between 1 and 1000) and (b between 50000 and 100000) order by b limit 100)alias limit 1; +``` + +![img](https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/MySQL%E5%AE%9E%E6%88%9845%E8%AE%B2/assets/b1a2ad43c78477d7f93dbc692cbaa0d7.png) + +图 11 改写 SQL 的 explain + +在这个例子里,我们用 limit 100 让优化器意识到,使用 b 索引代价是很高的。其实是我们根据数据特征诱导了一下优化器,也不具备通用性。 + +**第三种方法是,在有些场景下,我们可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引。** + +不过,在这个例子中,我没有找到通过新增索引来改变优化器行为的方法。这种情况其实比较少,尤其是经过 DBA 索引优化过的库,再碰到这个 bug,找到一个更合适的索引一般比较难。 + +如果我说还有一个方法是删掉索引 b,你可能会觉得好笑。但实际上我碰到过两次这样的例子,最终是 DBA 跟业务开发沟通后,发现这个优化器错误选择的索引其实根本没有必要存在,于是就删掉了这个索引,优化器也就重新选择到了正确的索引。 + +## 小结 + +今天我们一起聊了聊索引统计的更新机制,并提到了优化器存在选错索引的可能性。 + +对于由于索引统计信息不准确导致的问题,你可以用 analyze table 来解决。 + +而对于其他优化器误判的情况,你可以在应用端用 force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。 + +你可能会说,今天这篇文章后面的几个例子,怎么都没有展开说明其原理。我要告诉你的是,今天的话题,我们面对的是 MySQL 的 bug,每一个展开都必须深入到一行行代码去量化,实在不是我们在这里应该做的事情。 + +所以,我把我用过的解决方法跟你分享,希望你在碰到类似情况的时候,能够有一些思路。 + +你平时在处理 MySQL 优化器 bug 的时候有什么别的方法,也发到评论区分享一下吧。 + +最后,我给你留下一个思考题。前面我们在构造第一个例子的过程中,通过 session A 的配合,让 session B 删除数据后又重新插入了一遍数据,然后就发现 explain 结果中,rows 字段从 10001 变成 37000 多。 + +而如果没有 session A 的配合,只是单独执行 delete from t 、call idata()、explain 这三句话,会看到 rows 字段其实还是 10000 左右。你可以自己验证一下这个结果。 + +这是什么原因呢?也请你分析一下吧。 + +你可以把你的分析结论写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +我在上一篇文章最后留给你的问题是,如果某次写入使用了 change buffer 机制,之后主机异常重启,是否会丢失 change buffer 和数据。 + +这个问题的答案是不会丢失,留言区的很多同学都回答对了。虽然是只更新内存,但是在事务提交的时候,我们把 change buffer 的操作也记录到 redo log 里了,所以崩溃恢复的时候,change buffer 也能找回来。 + +在评论区有同学问到,merge 的过程是否会把数据直接写回磁盘,这是个好问题。这里,我再为你分析一下。 + +merge 的执行流程是这样的: + +1. 从磁盘读入数据页到内存(老版本的数据页); +2. 从 change buffer 里找出这个数据页的 change buffer 记录 (可能有多个),依次应用,得到新版数据页; +3. 写 redo log。这个 redo log 包含了数据的变更和 change buffer 的变更。 + +到这里 merge 过程就结束了。这时候,数据页和内存中 change buffer 对应的磁盘位置都还没有修改,属于脏页,之后各自刷回自己的物理数据,就是另外一个过程了。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/14cd598e52a2b72dd334a42603e5b894-165698330664210.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/14cd598e52a2b72dd334a42603e5b894-165698330664210.png" new file mode 100644 index 00000000..75d6f126 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/14cd598e52a2b72dd334a42603e5b894-165698330664210.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/16dbf8124ad529fec0066950446079d4-16569833066424.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/16dbf8124ad529fec0066950446079d4-16569833066424.png" new file mode 100644 index 00000000..a91038ad Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/16dbf8124ad529fec0066950446079d4-16569833066424.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1d037f92063e800c3bfff3f4dbf1a2b9-16569833066427.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1d037f92063e800c3bfff3f4dbf1a2b9-16569833066427.png" new file mode 100644 index 00000000..3ebef3b3 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1d037f92063e800c3bfff3f4dbf1a2b9-16569833066427.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1e5ba1c2934d3b2c0d96b210a27e1a1e-16569833066412.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1e5ba1c2934d3b2c0d96b210a27e1a1e-16569833066412.png" new file mode 100644 index 00000000..89591736 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/1e5ba1c2934d3b2c0d96b210a27e1a1e-16569833066412.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/209e9d3514688a3bcabbb75e54e1e49c-16569833066426.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/209e9d3514688a3bcabbb75e54e1e49c-16569833066426.png" new file mode 100644 index 00000000..7f477105 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/209e9d3514688a3bcabbb75e54e1e49c-16569833066426.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/2cfce769551c6eac9bfbee0563d48fe3-16569833066411.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/2cfce769551c6eac9bfbee0563d48fe3-16569833066411.png" new file mode 100644 index 00000000..2fb89607 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/2cfce769551c6eac9bfbee0563d48fe3-16569833066411.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/483bcb1ef3bb902844e80d9cbdd73ab8-16569833066428.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/483bcb1ef3bb902844e80d9cbdd73ab8-16569833066428.png" new file mode 100644 index 00000000..6453b8ca Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/483bcb1ef3bb902844e80d9cbdd73ab8-16569833066428.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/7c58b9c71853b8bba1a8ad5e926de1f6-16569833066413.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/7c58b9c71853b8bba1a8ad5e926de1f6-16569833066413.png" new file mode 100644 index 00000000..c5bccbe1 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/7c58b9c71853b8bba1a8ad5e926de1f6-16569833066413.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/9582401a6bed6cb8fd803c9555750b54-16569833066429.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/9582401a6bed6cb8fd803c9555750b54-16569833066429.png" new file mode 100644 index 00000000..5374758b Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/9582401a6bed6cb8fd803c9555750b54-16569833066429.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/b1a2ad43c78477d7f93dbc692cbaa0d7-165698330664211.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/b1a2ad43c78477d7f93dbc692cbaa0d7-165698330664211.png" new file mode 100644 index 00000000..cfe39d02 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/b1a2ad43c78477d7f93dbc692cbaa0d7-165698330664211.png" differ diff --git "a/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/e2bc5f120858391d4accff05573e1289-16569833066425.png" "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/e2bc5f120858391d4accff05573e1289-16569833066425.png" new file mode 100644 index 00000000..ed75ec25 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/10_MySQL\344\270\272\344\273\200\344\271\210\346\234\211\346\227\266\345\200\231\344\274\232\351\200\211\351\224\231\347\264\242\345\274\225/images/e2bc5f120858391d4accff05573e1289-16569833066425.png" differ diff --git "a/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/README.md" new file mode 100644 index 00000000..c2b0b81b --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/README.md" @@ -0,0 +1,208 @@ +现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 + +假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: + +```sql +mysql> create table SUser( +ID bigint unsigned primary key, +email varchar(64), +... +)engine=innodb; +``` + +由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句: + +```csharp +mysql> select f1, f2 from SUser where email='xxx'; +``` + +从第 4 和第 5 篇讲解索引的文章中,我们可以知道,如果 email 这个字段上没有索引,那么这个语句就只能做全表扫描。 + +同时,MySQL 是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。 + +比如,这两个在 email 字段上创建索引的语句: + +```sql +mysql> alter table SUser add index index1(email); +或 +mysql> alter table SUser add index index2(email(6)); +``` + +第一个语句创建的 index1 索引里面,包含了每个记录的整个字符串;而第二个语句创建的 index2 索引里面,对于每个记录都是只取前 6 个字节。 + +那么,这两种不同的定义在数据结构和存储上有什么区别呢?如图 2 和 3 所示,就是这两个索引的示意图。 + +![img](images/d31da662bee595991862c439a5567eb7.jpg) + +图 1 email 索引结构 + +![img](images/134583875561de914991fc2e192cf842.jpg) + +图 2 email(6) 索引结构 + +从图中你可以看到,由于 email(6) 这个索引结构中每个邮箱字段都只取前 6 个字节(即:zhangs),所以占用的空间会更小,这就是使用前缀索引的优势。 + +但,这同时带来的损失是,可能会增加额外的记录扫描次数。 + +接下来,我们再看看下面这个语句,在这两个索引定义下分别是怎么执行的。 + +```csharp +select id,name,email from SUser where email='zhangssxyz@xxx.com'; +``` + +**如果使用的是 index1**(即 email 整个字符串的索引结构),执行顺序是这样的: + +1. 从 index1 索引树找到满足索引值是’zhangssxyz@xxx.com’的这条记录,取得 ID2 的值; +2. 到主键上查到主键值是 ID2 的行,判断 email 的值是正确的,将这行记录加入结果集; +3. 取 index1 索引树上刚刚查到的位置的下一条记录,发现已经不满足 email='zhangssxyz@xxx.com’的条件了,循环结束。 + +这个过程中,只需要回主键索引取一次数据,所以系统认为只扫描了一行。 + +**如果使用的是 index2**(即 email(6) 索引结构),执行顺序是这样的: + +1. 从 index2 索引树找到满足索引值是’zhangs’的记录,找到的第一个是 ID1; +2. 到主键上查到主键值是 ID1 的行,判断出 email 的值不是’zhangssxyz@xxx.com’,这行记录丢弃; +3. 取 index2 上刚刚查到的位置的下一条记录,发现仍然是’zhangs’,取出 ID2,再到 ID 索引上取整行然后判断,这次值对了,将这行记录加入结果集; +4. 重复上一步,直到在 idxe2 上取到的值不是’zhangs’时,循环结束。 + +在这个过程中,要回主键索引取 4 次数据,也就是扫描了 4 行。 + +通过这个对比,你很容易就可以发现,使用前缀索引后,可能会导致查询语句读数据的次数变多。 + +但是,对于这个查询语句来说,如果你定义的 index2 不是 email(6) 而是 email(7),也就是说取 email 字段的前 7 个字节来构建索引的话,即满足前缀’zhangss’的记录只有一个,也能够直接查到 ID2,只扫描一行就结束了。 + +也就是说**使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。** + +于是,你就有个问题:当要给字符串创建前缀索引时,有什么方法能够确定我应该使用多长的前缀呢? + +实际上,我们在建立索引时关注的是区分度,区分度越高越好。因为区分度越高,意味着重复的键值越少。因此,我们可以通过统计索引上有多少个不同的值来判断要使用多长的前缀。 + +首先,你可以使用下面这个语句,算出这个列上有多少个不同的值: + +```csharp +mysql> select count(distinct email) as L from SUser; +``` + +然后,依次选取不同长度的前缀来看这个值,比如我们要看一下 4~7 个字节的前缀索引,可以用这个语句: + +```sql +mysql> select + count(distinct left(email,4))as L4, + count(distinct left(email,5))as L5, + count(distinct left(email,6))as L6, + count(distinct left(email,7))as L7, +from SUser; +``` + +当然,使用前缀索引很可能会损失区分度,所以你需要预先设定一个可以接受的损失比例,比如 5%。然后,在返回的 L4~L7 中,找出不小于 L * 95% 的值,假设这里 L6、L7 都满足,你就可以选择前缀长度为 6。 + +# 前缀索引对覆盖索引的影响 + +前面我们说了使用前缀索引可能会增加扫描行数,这会影响到性能。其实,前缀索引的影响不止如此,我们再看一下另外一个场景。 + +你先来看看这个 SQL 语句: + +```csharp +select id,email from SUser where email='zhangssxyz@xxx.com'; +``` + +与前面例子中的 SQL 语句 + +```csharp +select id,name,email from SUser where email='zhangssxyz@xxx.com'; +``` + +相比,这个语句只要求返回 id 和 email 字段。 + +所以,如果使用 index1(即 email 整个字符串的索引结构)的话,可以利用覆盖索引,从 index1 查到结果后直接就返回了,不需要回到 ID 索引再去查一次。而如果使用 index2(即 email(6) 索引结构)的话,就不得不回到 ID 索引再去判断 email 字段的值。 + +即使你将 index2 的定义修改为 email(18) 的前缀索引,这时候虽然 index2 已经包含了所有的信息,但 InnoDB 还是要回到 id 索引再查一下,因为系统并不确定前缀索引的定义是否截断了完整信息。 + +也就是说,使用前缀索引就用不上覆盖索引对查询性能的优化了,这也是你在选择是否使用前缀索引时需要考虑的一个因素。 + +# 其他方式 + +对于类似于邮箱这样的字段来说,使用前缀索引的效果可能还不错。但是,遇到前缀的区分度不够好的情况时,我们要怎么办呢? + +比如,我们国家的身份证号,一共 18 位,其中前 6 位是地址码,所以同一个县的人的身份证号前 6 位一般会是相同的。 + +假设你维护的数据库是一个市的公民信息系统,这时候如果对身份证号做长度为 6 的前缀索引的话,这个索引的区分度就非常低了。 + +按照我们前面说的方法,可能你需要创建长度为 12 以上的前缀索引,才能够满足区分度要求。 + +但是,索引选取的越长,占用的磁盘空间就越大,相同的数据页能放下的索引值就越少,搜索的效率也就会越低。 + +那么,如果我们能够确定业务需求里面只有按照身份证进行等值查询的需求,还有没有别的处理方法呢?这种方法,既可以占用更小的空间,也能达到相同的查询效率。 + +答案是,有的。 + +**第一种方式是使用倒序存储。**如果你存储身份证号的时候把它倒过来存,每次查询的时候,你可以这么写: + +```csharp +mysql> select field_list from t where id_card = reverse('input_id_card_string'); +``` + +由于身份证号的最后 6 位没有地址码这样的重复逻辑,所以最后这 6 位很可能就提供了足够的区分度。当然了,实践中你不要忘记使用 count(distinct) 方法去做个验证。 + +**第二种方式是使用 hash 字段。**你可以在表上再创建一个整数字段,来保存身份证的校验码,同时在这个字段上创建索引。 + +```sql +mysql> alter table t add id_card_crc int unsigned, add index(id_card_crc); +``` + +然后每次插入新记录的时候,都同时用 crc32() 这个函数得到校验码填到这个新字段。由于校验码可能存在冲突,也就是说两个不同的身份证号通过 crc32() 函数得到的结果可能是相同的,所以你的查询语句 where 部分要判断 id_card 的值是否精确相同。 + +```csharp +mysql> select field_list from t where id_card_crc=crc32('input_id_card_string') and id_card='input_id_card_string' +``` + +这样,索引的长度变成了 4 个字节,比原来小了很多。 + +接下来,我们再一起看看**使用倒序存储和使用 hash 字段这两种方法的异同点。** + +首先,它们的相同点是,都不支持范围查询。倒序存储的字段上创建的索引是按照倒序字符串的方式排序的,已经没有办法利用索引方式查出身份证号码在 [ID_X, ID_Y] 的所有市民了。同样地,hash 字段的方式也只能支持等值查询。 + +它们的区别,主要体现在以下三个方面: + +1. 从占用的额外空间来看,倒序存储方式在主键索引上,不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。当然,倒序存储方式使用 4 个字节的前缀长度应该是不够的,如果再长一点,这个消耗跟额外这个 hash 字段也差不多抵消了。 +2. 在 CPU 消耗方面,倒序方式每次写和读的时候,都需要额外调用一次 reverse 函数,而 hash 字段的方式需要额外调用一次 crc32() 函数。如果只从这两个函数的计算复杂度来看的话,reverse 函数额外消耗的 CPU 资源会更小些。 +3. 从查询效率上看,使用 hash 字段方式的查询性能相对更稳定一些。因为 crc32 算出来的值虽然有冲突的概率,但是概率非常小,可以认为每次查询的平均扫描行数接近 1。而倒序存储方式毕竟还是用的前缀索引的方式,也就是说还是会增加扫描行数。 + +# 小结 + +在今天这篇文章中,我跟你聊了聊字符串字段创建索引的场景。我们来回顾一下,你可以使用的方式有: + +1. 直接创建完整索引,这样可能比较占用空间; +2. 创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引; +3. 倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题; +4. 创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。 + +在实际应用中,你要根据业务字段的特点选择使用哪种方式。 + +好了,又到了最后的问题时间。 + +如果你在维护一个学校的学生信息数据库,学生登录名的统一格式是”学号 @gmail.com", 而学号的规则是:十五位的数字,其中前三位是所在城市编号、第四到第六位是学校编号、第七位到第十位是入学年份、最后五位是顺序编号。 + +系统登录的时候都需要学生输入登录名和密码,验证正确后才能继续使用系统。就只考虑登录验证这个行为的话,你会怎么设计这个登录名的索引呢? + +你可以把你的分析思路和设计结果写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +# 上期问题时间 + +上篇文章中的第一个例子,评论区有几位同学说没有复现,大家要检查一下隔离级别是不是 RR(Repeatable Read,可重复读),创建的表 t 是不是 InnoDB 引擎。我把复现过程做成了一个视频,供你参考。 + +在上一篇文章最后,我给你留的问题是,为什么经过这个操作序列,explain 的结果就不对了?这里,我来为你分析一下原因。 + +delete 语句删掉了所有的数据,然后再通过 call idata() 插入了 10 万行数据,看上去是覆盖了原来的 10 万行。 + +但是,session A 开启了事务并没有提交,所以之前插入的 10 万行数据是不能删除的。这样,之前的数据每一行数据都有两个版本,旧版本是 delete 之前的数据,新版本是标记为 deleted 的数据。 + +这样,索引 a 上的数据其实就有两份。 + +然后你会说,不对啊,主键上的数据也不能删,那没有使用 force index 的语句,使用 explain 命令看到的扫描行数为什么还是 100000 左右?(潜台词,如果这个也翻倍,也许优化器还会认为选字段 a 作为索引更合适) + +是的,不过这个是主键,主键是直接按照表的行数来估计的。而表的行数,优化器直接用的是 show table status 的值。 + +这个值的计算方法,我会在后面有文章为你详细讲解。 + +![img](images/e0e4c8381f3feae4d87958470760d367.png) \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/134583875561de914991fc2e192cf842.jpg" "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/134583875561de914991fc2e192cf842.jpg" new file mode 100644 index 00000000..b68eb046 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/134583875561de914991fc2e192cf842.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/d31da662bee595991862c439a5567eb7.jpg" "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/d31da662bee595991862c439a5567eb7.jpg" new file mode 100644 index 00000000..cd20222d Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/d31da662bee595991862c439a5567eb7.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/e0e4c8381f3feae4d87958470760d367.png" "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/e0e4c8381f3feae4d87958470760d367.png" new file mode 100644 index 00000000..04d2bae7 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/11_\346\200\216\344\271\210\347\273\231\345\255\227\347\254\246\344\270\262\345\255\227\346\256\265\345\212\240\347\264\242\345\274\225\357\274\237/images/e0e4c8381f3feae4d87958470760d367.png" differ diff --git "a/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/README.md" new file mode 100644 index 00000000..5213bfe2 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/README.md" @@ -0,0 +1,161 @@ +平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。 + +看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。 + +## 你的 SQL 语句为什么变“慢”了 + +在前面第 2 篇文章[《日志系统:一条 SQL 更新语句是如何执行的?》]中,我为你介绍了 WAL 机制。现在你知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo log(重做日志),也就是《孔乙己》里咸亨酒店掌柜用来记账的粉板,在更新内存写完 redo log 后,就返回给客户端,本次更新成功。 + +做下类比的话,掌柜记账的账本是数据文件,记账用的粉板是日志文件(redo log),掌柜的记忆就是内存。 + +掌柜总要找时间把账本更新一下,这对应的就是把内存里的数据写入磁盘的过程,术语就是 flush。在这个 flush 操作执行之前,孔乙己的赊账总额,其实跟掌柜手中账本里面的记录是不一致的。因为孔乙己今天的赊账金额还只在粉板上,而账本里的记录是老的,还没把今天的赊账算进去。 + +**当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”**。 + +不论是脏页还是干净页,都在内存中。在这个例子里,内存对应的就是掌柜的记忆。 + +接下来,我们用一个示意图来展示一下“孔乙己赊账”的整个操作过程。假设原来孔乙己欠账 10 文,这次又要赊 9 文。 + +![img](images/349cfab9e4f5d2a75e07b2132a301fda.jpeg) + +图 1 “孔乙己赊账”更新和 flush 过程 + +回到文章开头的问题,你不难想象,平时执行很快的更新操作,其实就是在写内存和日志,而 MySQL 偶尔“抖”一下的那个瞬间,可能就是在刷脏页(flush)。 + +那么,什么情况会引发数据库的 flush 过程呢? + +我们还是继续用咸亨酒店掌柜的这个例子,想一想:掌柜在什么情况下会把粉板上的赊账记录改到账本上? + +- 第一种场景是,粉板满了,记不下了。这时候如果再有人来赊账,掌柜就只得放下手里的活儿,将粉板上的记录擦掉一些,留出空位以便继续记账。当然在擦掉之前,他必须先将正确的账目记录到账本中才行。 这个场景,对应的就是 InnoDB 的 redo log 写满了。这时候系统会停止所有更新操作,把 checkpoint 往前推进,redo log 留出空间可以继续写。我在第二讲画了一个 redo log 的示意图,这里我改成环形,便于大家理解。 + +![img](images/a25bdbbfc2cfc5d5e20690547fe7f2e5.jpg) + +图 2 redo log 状态图 + +checkpoint 可不是随便往前修改一下位置就可以的。比如图 2 中,把 checkpoint 位置从 CP 推进到 CP’,就需要将两个点之间的日志(浅绿色部分),对应的所有脏页都 flush 到磁盘上。之后,图中从 write pos 到 CP’之间就是可以再写入的 redo log 的区域。 + +- 第二种场景是,这一天生意太好,要记住的事情太多,掌柜发现自己快记不住了,赶紧找出账本把孔乙己这笔账先加进去。 这种场景,对应的就是系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。如果淘汰的是“脏页”,就要先将脏页写到磁盘。 你一定会说,这时候难道不能直接把内存淘汰掉,下次需要请求的时候,从磁盘读入数据页,然后拿 redo log 出来应用不就行了?这里其实是从性能考虑的。如果刷脏页一定会写盘,就保证了每个数据页有两种状态: + - 一种是内存里存在,内存里就肯定是正确的结果,直接返回; + - 另一种是内存里没有数据,就可以肯定数据文件上是正确的结果,读入内存后返回。 这样的效率最高。 +- 第三种场景是,生意不忙的时候,或者打烊之后。这时候柜台没事,掌柜闲着也是闲着,不如更新账本。 这种场景,对应的就是 MySQL 认为系统“空闲”的时候。当然,MySQL“这家酒店”的生意好起来可是会很快就能把粉板记满的,所以“掌柜”要合理地安排时间,即使是“生意好”的时候,也要见缝插针地找时间,只要有机会就刷一点“脏页”。 +- 第四种场景是,年底了咸亨酒店要关门几天,需要把账结清一下。这时候掌柜要把所有账都记到账本上,这样过完年重新开张的时候,就能就着账本明确账目情况了。 这种场景,对应的就是 MySQL 正常关闭的情况。这时候,MySQL 会把内存的脏页都 flush 到磁盘上,这样下次 MySQL 启动的时候,就可以直接从磁盘上读数据,启动速度会很快。 + +接下来,**你可以分析一下上面四种场景对性能的影响。** + +其中,第三种情况是属于 MySQL 空闲时的操作,这时系统没什么压力,而第四种场景是数据库本来就要关闭了。这两种情况下,你不会太关注“性能”问题。所以这里,我们主要来分析一下前两种场景下的性能问题。 + +第一种是“redo log 写满了,要 flush 脏页”,这种情况是 InnoDB 要尽量避免的。因为出现这种情况的时候,整个系统就不能再接受更新了,所有的更新都必须堵住。如果你从监控上看,这时候更新数会跌为 0。 + +第二种是“内存不够用了,要先将脏页写到磁盘”,这种情况其实是常态。**InnoDB 用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:** + +- 第一种是,还没有使用的; +- 第二种是,使用了并且是干净页; +- 第三种是,使用了并且是脏页。 + +InnoDB 的策略是尽量使用内存,因此对于一个长时间运行的库来说,未被使用的页面很少。 + +而当要读入的数据页没有在内存的时候,就必须到缓冲池中申请一个数据页。这时候只能把最久不使用的数据页从内存中淘汰掉:如果要淘汰的是一个干净页,就直接释放出来复用;但如果是脏页呢,就必须将脏页先刷到磁盘,变成干净页后才能复用。 + +所以,刷脏页虽然是常态,但是出现以下这两种情况,都是会明显影响性能的: + +1. 一个查询要淘汰的脏页个数太多,会导致查询的响应时间明显变长; +2. 日志写满,更新全部堵住,写性能跌为 0,这种情况对敏感业务来说,是不能接受的。 + +所以,InnoDB 需要有控制脏页比例的机制,来尽量避免上面的这两种情况。 + +## InnoDB 刷脏页的控制策略 + +接下来,我就来和你说说 InnoDB 脏页的控制策略,以及和这些策略相关的参数。 + +首先,你要正确地告诉 InnoDB 所在主机的 IO 能力,这样 InnoDB 才能知道需要全力刷脏页的时候,可以刷多快。 + +这就要用到 innodb_io_capacity 这个参数了,它会告诉 InnoDB 你的磁盘能力。这个值我建议你设置成磁盘的 IOPS。磁盘的 IOPS 可以通过 fio 这个工具来测试,下面的语句是我用来测试磁盘随机读写的命令: + +```bash + fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest +``` + +其实,因为没能正确地设置 innodb_io_capacity 参数,而导致的性能问题也比比皆是。之前,就曾有其他公司的开发负责人找我看一个库的性能问题,说 MySQL 的写入速度很慢,TPS 很低,但是数据库主机的 IO 压力并不大。经过一番排查,发现罪魁祸首就是这个参数的设置出了问题。 + +他的主机磁盘用的是 SSD,但是 innodb_io_capacity 的值设置的是 300。于是,InnoDB 认为这个系统的能力就这么差,所以刷脏页刷得特别慢,甚至比脏页生成的速度还慢,这样就造成了脏页累积,影响了查询和更新性能。 + +虽然我们现在已经定义了“全力刷脏页”的行为,但平时总不能一直是全力刷吧?毕竟磁盘能力不能只用来刷脏页,还需要服务用户请求。所以接下来,我们就一起看看 InnoDB 怎么控制引擎按照“全力”的百分比来刷脏页。 + +根据我前面提到的知识点,试想一下,**如果你来设计策略控制刷脏页的速度,会参考哪些因素呢?** + +这个问题可以这么想,如果刷太慢,会出现什么情况?首先是内存脏页太多,其次是 redo log 写满。 + +所以,InnoDB 的刷盘速度就是要参考这两个因素:一个是脏页比例,一个是 redo log 写盘速度。 + +InnoDB 会根据这两个因素先单独算出两个数字。 + +参数 innodb_max_dirty_pages_pct 是脏页比例上限,默认值是 75%。InnoDB 会根据当前的脏页比例(假设为 M),算出一个范围在 0 到 100 之间的数字,计算这个数字的伪代码类似这样: + +```javascript +F1(M) +{ + if M>=innodb_max_dirty_pages_pct then + return 100; + return 100*M/innodb_max_dirty_pages_pct; +} +``` + +InnoDB 每次写入的日志都有一个序号,当前写入的序号跟 checkpoint 对应的序号之间的差值,我们假设为 N。InnoDB 会根据这个 N 算出一个范围在 0 到 100 之间的数字,这个计算公式可以记为 F2(N)。F2(N) 算法比较复杂,你只要知道 N 越大,算出来的值越大就好了。 + +然后,**根据上述算得的 F1(M) 和 F2(N) 两个值,取其中较大的值记为 R,之后引擎就可以按照 innodb_io_capacity 定义的能力乘以 R% 来控制刷脏页的速度。** + +上述的计算流程比较抽象,不容易理解,所以我画了一个简单的流程图。图中的 F1、F2 就是上面我们通过脏页比例和 redo log 写入速度算出来的两个值。 + +![img](images/cc44c1d080141aa50df6a91067475374.png) + +图 3 InnoDB 刷脏页速度策略 + +现在你知道了,InnoDB 会在后台刷脏页,而刷脏页的过程是要将内存页写入磁盘。所以,无论是你的查询语句在需要内存的时候可能要求淘汰一个脏页,还是由于刷脏页的逻辑会占用 IO 资源并可能影响到了你的更新语句,都可能是造成你从业务端感知到 MySQL“抖”了一下的原因。 + +要尽量避免这种情况,你就要合理地设置 innodb_io_capacity 的值,并且**平时要多关注脏页比例,不要让它经常接近 75%**。 + +其中,脏页比例是通过 Innodb_buffer_pool_pages_dirty/Innodb_buffer_pool_pages_total 得到的,具体的命令参考下面的代码: + +```sql +mysql> select VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty'; +select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total'; +select @a/@b; +``` + +接下来,我们再看一个有趣的策略。 + +一旦一个查询请求需要在执行过程中先 flush 掉一个脏页时,这个查询就可能要比平时慢了。而 MySQL 中的一个机制,可能让你的查询会更慢:在准备刷一个脏页的时候,如果这个数据页旁边的数据页刚好是脏页,就会把这个“邻居”也带着一起刷掉;而且这个把“邻居”拖下水的逻辑还可以继续蔓延,也就是对于每个邻居数据页,如果跟它相邻的数据页也还是脏页的话,也会被放到一起刷。 + +在 InnoDB 中,innodb_flush_neighbors 参数就是用来控制这个行为的,值为 1 的时候会有上述的“连坐”机制,值为 0 时表示不找邻居,自己刷自己的。 + +找“邻居”这个优化在机械硬盘时代是很有意义的,可以减少很多随机 IO。机械硬盘的随机 IOPS 一般只有几百,相同的逻辑操作减少随机 IO 就意味着系统性能的大幅度提升。 + +而如果使用的是 SSD 这类 IOPS 比较高的设备的话,我就建议你把 innodb_flush_neighbors 的值设置成 0。因为这时候 IOPS 往往不是瓶颈,而“只刷自己”,就能更快地执行完必要的刷脏页操作,减少 SQL 语句响应时间。 + +在 MySQL 8.0 中,innodb_flush_neighbors 参数的默认值已经是 0 了。 + +## 小结 + +今天这篇文章,我延续第 2 篇中介绍的 WAL 的概念,和你解释了这个机制后续需要的刷脏页操作和执行时机。利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。 + +但是,由此也带来了内存脏页的问题。脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。在文章里,我也给你介绍了控制刷脏页的方法和对应的监控方式。 + +文章最后,我给你留下一个思考题吧。 + +一个内存配置为 128GB、innodb_io_capacity 设置为 20000 的大规格实例,正常会建议你将 redo log 设置成 4 个 1GB 的文件。 + +但如果你在配置的时候不慎将 redo log 设置成了 1 个 100M 的文件,会发生什么情况呢?又为什么会出现这样的情况呢? + +你可以把你的分析结论写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +上期我留给你的问题是,给一个学号字段创建索引,有哪些方法。 + +由于这个学号的规则,无论是正向还是反向的前缀索引,重复度都比较高。因为维护的只是一个学校的,因此前面 6 位(其中,前三位是所在城市编号、第四到第六位是学校编号)其实是固定的,邮箱后缀都是 @gamil.com,因此可以只存入学年份加顺序编号,它们的长度是 9 位。 + +而其实在此基础上,可以用数字类型来存这 9 位数字。比如 201100001,这样只需要占 4 个字节。其实这个就是一种 hash,只是它用了最简单的转换规则:字符串转数字的规则,而刚好我们设定的这个背景,可以保证这个转换后结果的唯一性。 + +评论区中,也有其他一些很不错的见解。 + +评论用户 @封建的风 说,一个学校的总人数这种数据量,50 年才 100 万学生,这个表肯定是小表。为了业务简单,直接存原来的字符串。这个答复里面包含了“优化成本和收益”的思想,我觉得值得 at 出来。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/349cfab9e4f5d2a75e07b2132a301fda.jpeg" "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/349cfab9e4f5d2a75e07b2132a301fda.jpeg" new file mode 100644 index 00000000..aa2d7204 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/349cfab9e4f5d2a75e07b2132a301fda.jpeg" differ diff --git "a/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/a25bdbbfc2cfc5d5e20690547fe7f2e5.jpg" "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/a25bdbbfc2cfc5d5e20690547fe7f2e5.jpg" new file mode 100644 index 00000000..beec1ce3 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/a25bdbbfc2cfc5d5e20690547fe7f2e5.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/cc44c1d080141aa50df6a91067475374.png" "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/cc44c1d080141aa50df6a91067475374.png" new file mode 100644 index 00000000..05faf3e2 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/12_\344\270\272\344\273\200\344\271\210\346\210\221\347\232\204MySQL\344\274\232\342\200\234\346\212\226\342\200\235\344\270\200\344\270\213\357\274\237/images/cc44c1d080141aa50df6a91067475374.png" differ diff --git "a/MySQL/MySQL45\350\256\262/14_count()\350\277\231\344\271\210\346\205\242\357\274\214\346\210\221\350\257\245\346\200\216\344\271\210\345\212\236\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/14_count()\350\277\231\344\271\210\346\205\242\357\274\214\346\210\221\350\257\245\346\200\216\344\271\210\345\212\236\357\274\237/README.md" new file mode 100644 index 00000000..95dcbd7c --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/14_count()\350\277\231\344\271\210\346\205\242\357\274\214\346\210\221\350\257\245\346\200\216\344\271\210\345\212\236\357\274\237/README.md" @@ -0,0 +1,198 @@ +# 14 count()这么慢,我该怎么办? + +在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条 select count(*) from t 语句不就解决了吗? + +但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL 怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。 + +那么今天,我们就来聊聊 count(*) 语句到底是怎样实现的,以及 MySQL 为什么会这么实现。然后,我会再和你说说,如果应用中有这种频繁变更并需要统计表行数的需求,业务设计上可以怎么做。 + +## count(*) 的实现方式 + +你首先要明确的是,在不同的 MySQL 引擎中,count(*) 有不同的实现方式。 + +- MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高; +- 而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。 + +这里需要注意的是,我们在这篇文章里讨论的是没有过滤条件的 count(*),如果加了 where 条件的话,MyISAM 表也是不能返回得这么快的。 + +在前面的文章中,我们一起分析了为什么要使用 InnoDB,因为不论是在事务支持、并发能力还是在数据安全方面,InnoDB 都优于 MyISAM。我猜你的表也一定是用了 InnoDB 引擎。这就是当你的记录数越来越多的时候,计算一个表的总行数会越来越慢的原因。 + +那**为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢?** + +这是因为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因,InnoDB 表“应该返回多少行”也是不确定的。这里,我用一个算 count(*) 的例子来为你解释一下。 + +假设表 t 中现在有 10000 条记录,我们设计了三个用户并行的会话。 + +- 会话 A 先启动事务并查询一次表的总行数; +- 会话 B 启动事务,插入一行后记录后,查询表的总行数; +- 会话 C 先启动一个单独的语句,插入一行记录后,查询表的总行数。 + +我们假设从上到下是按照时间顺序执行的,同一行语句是在同一时刻执行的。 + +![img](images/5e716ba1d464c8224c1c1f36135d0e97.png) + +图 1 会话 A、B、C 的执行流程 + +你会看到,在最后一个时刻,三个会话 A、B、C 会同时查询表 t 的总行数,但拿到的结果却不同。 + +这和 InnoDB 的事务设计有关系,可重复读是它默认的隔离级别,在代码上就是通过多版本并发控制,也就是 MVCC 来实现的。每一行记录都要判断自己是否对这个会话可见,因此对于 count(*) 请求来说,InnoDB 只好把数据一行一行地读出依次判断,可见的行才能够用于计算“基于这个查询”的表的总行数。 + +> 备注:如果你对 MVCC 记忆模糊了,可以再回顾下第 3 篇文章[《事务隔离:为什么你改了我还看不见?》]和第 8 篇文章[《事务到底是隔离的还是不隔离的?》]中的相关内容。 + +当然,现在这个看上去笨笨的 MySQL,在执行 count(*) 操作的时候还是做了优化的。 + +你知道的,InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来遍历。**在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。** + +如果你用过 show table status 命令的话,就会发现这个命令的输出结果里面也有一个 TABLE_ROWS 用于显示这个表当前有多少行,这个命令执行挺快的,那这个 TABLE_ROWS 能代替 count(*) 吗? + +你可能还记得在第 10 篇文章[《 MySQL 为什么有时候会选错索引?》]中我提到过,索引统计的值是通过采样来估算的。实际上,TABLE_ROWS 就是从这个采样估算得来的,因此它也很不准。有多不准呢,官方文档说误差可能达到 40% 到 50%。**所以,show table status 命令显示的行数也不能直接使用。** + +到这里我们小结一下: + +- MyISAM 表虽然 count(*) 很快,但是不支持事务; +- show table status 命令虽然返回很快,但是不准确; +- InnoDB 表直接 count(*) 会遍历全表,虽然结果准确,但会导致性能问题。 + +那么,回到文章开头的问题,如果你现在有一个页面经常要显示交易系统的操作记录总数,到底应该怎么办呢?答案是,我们只能自己计数。 + +接下来,我们讨论一下,看看自己计数有哪些方法,以及每种方法的优缺点有哪些。 + +这里,我先和你说一下这些方法的基本思路:你需要自己找一个地方,把操作记录表的行数存起来。 + +## 用缓存系统保存计数 + +对于更新很频繁的库来说,你可能会第一时间想到,用缓存系统来支持。 + +你可以用一个 Redis 服务来保存这个表的总行数。这个表每被插入一行 Redis 计数就加 1,每被删除一行 Redis 计数就减 1。这种方式下,读和更新操作都很快,但你再想一下这种方式存在什么问题吗? + +没错,缓存系统可能会丢失更新。 + +Redis 的数据不能永久地留在内存里,所以你会找一个地方把这个值定期地持久化存储起来。但即使这样,仍然可能丢失更新。试想如果刚刚在数据表中插入了一行,Redis 中保存的值也加了 1,然后 Redis 异常重启了,重启后你要从存储 redis 数据的地方把这个值读回来,而刚刚加 1 的这个计数操作却丢失了。 + +当然了,这还是有解的。比如,Redis 异常重启以后,到数据库里面单独执行一次 count(*) 获取真实的行数,再把这个值写回到 Redis 里就可以了。异常重启毕竟不是经常出现的情况,这一次全表扫描的成本,还是可以接受的。 + +但实际上,**将计数保存在缓存系统中的方式,还不只是丢失更新的问题。即使 Redis 正常工作,这个值还是逻辑上不精确的。** + +你可以设想一下有这么一个页面,要显示操作记录的总数,同时还要显示最近操作的 100 条记录。那么,这个页面的逻辑就需要先到 Redis 里面取出计数,再到数据表里面取数据记录。 + +我们是这么定义不精确的: + +1. 一种是,查到的 100 行结果里面有最新插入记录,而 Redis 的计数里还没加 1; +2. 另一种是,查到的 100 行结果里没有最新插入的记录,而 Redis 的计数里已经加了 1。 + +这两种情况,都是逻辑不一致的。 + +我们一起来看看这个时序图。 + +![img](images/39898af053695dad37227d71ae288e33.png) + +图 2 会话 A、B 执行时序图 + +图 2 中,会话 A 是一个插入交易记录的逻辑,往数据表里插入一行 R,然后 Redis 计数加 1;会话 B 就是查询页面显示时需要的数据。 + +在图 2 的这个时序里,在 T3 时刻会话 B 来查询的时候,会显示出新插入的 R 这个记录,但是 Redis 的计数还没加 1。这时候,就会出现我们说的数据不一致。 + +你一定会说,这是因为我们执行新增记录逻辑时候,是先写数据表,再改 Redis 计数。而读的时候是先读 Redis,再读数据表,这个顺序是相反的。那么,如果保持顺序一样的话,是不是就没问题了?我们现在把会话 A 的更新顺序换一下,再看看执行结果。 + +![img](images/5c2f786beae1d8917cdc5033b7bf0bdb.png) + +图 3 调整顺序后,会话 A、B 的执行时序图 + +你会发现,这时候反过来了,会话 B 在 T3 时刻查询的时候,Redis 计数加了 1 了,但还查不到新插入的 R 这一行,也是数据不一致的情况。 + +在并发系统里面,我们是无法精确控制不同线程的执行时刻的,因为存在图中的这种操作序列,所以,我们说即使 Redis 正常工作,这个计数值还是逻辑上不精确的。 + +## 在数据库保存计数 + +根据上面的分析,用缓存系统保存计数有丢失数据和计数不精确的问题。那么,**如果我们把这个计数直接放到数据库里单独的一张计数表 C 中,又会怎么样呢?** + +首先,这解决了崩溃丢失的问题,InnoDB 是支持崩溃恢复不丢数据的。 + +> 备注:关于 InnoDB 的崩溃恢复,你可以再回顾一下第 2 篇文章[《日志系统:一条 SQL 更新语句是如何执行的?》]中的相关内容。 + +然后,我们再看看能不能解决计数不精确的问题。 + +你会说,这不一样吗?无非就是把图 3 中对 Redis 的操作,改成了对计数表 C 的操作。只要出现图 3 的这种执行序列,这个问题还是无解的吧? + +这个问题还真不是无解的。 + +我们这篇文章要解决的问题,都是由于 InnoDB 要支持事务,从而导致 InnoDB 表不能把 count(*) 直接存起来,然后查询的时候直接返回形成的。 + +所谓以子之矛攻子之盾,现在我们就利用“事务”这个特性,把问题解决掉。 + +![img](images/9e4170e2dfca3524eb5e92adb8647de3.png) + +图 4 会话 A、B 的执行时序图 + +我们来看下现在的执行结果。虽然会话 B 的读操作仍然是在 T3 执行的,但是因为这时候更新事务还没有提交,所以计数值加 1 这个操作对会话 B 还不可见。 + +因此,会话 B 看到的结果里, 查计数值和“最近 100 条记录”看到的结果,逻辑上就是一致的。 + +## 不同的 count 用法 + +在前面文章的评论区,有同学留言问到:在 select count(?) from t 这样的查询语句里面,count(*)、count(主键 id)、count(字段) 和 count(1) 等不同用法的性能,有哪些差别。今天谈到了 count(*) 的性能问题,我就借此机会和你详细说明一下这几种用法的性能差别。 + +需要注意的是,下面的讨论还是基于 InnoDB 引擎的。 + +这里,首先你要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。 + +所以,count(*)、count(主键 id) 和 count(1) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。 + +至于分析性能差别的时候,你可以记住这么几个原则: + +1. server 层要什么就给什么; +2. InnoDB 只给必要的值; +3. 现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做。 + +这是什么意思呢?接下来,我们就一个个地来看看。 + +**对于 count(主键 id) 来说**,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。 + +**对于 count(1) 来说**,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。 + +单看这两个用法的差别的话,你能对比出来,count(1) 执行得要比 count(主键 id) 快。因为从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 + +**对于 count(字段) 来说**: + +1. 如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加; +2. 如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。 + +也就是前面的第一条原则,server 层要什么字段,InnoDB 就返回什么字段。 + +**但是 count(\*) 是例外**,并不会把全部字段取出来,而是专门做了优化,不取值。count(*) 肯定不是 null,按行累加。 + +看到这里,你一定会说,优化器就不能自己判断一下吗,主键 id 肯定非空啊,为什么不能按照 count(*) 来处理,多么简单的优化啊。 + +当然,MySQL 专门针对这个语句进行优化,也不是不可以。但是这种需要专门优化的情况太多了,而且 MySQL 已经优化过 count(*) 了,你直接使用这种用法就可以了。 + +所以结论是:按照效率排序的话,count(字段) “数据更新到内存” -> “写 binlog” -> “提交事务”,是不是也可以提供崩溃恢复的能力? + +答案是不可以。 + +如果说**历史原因**的话,那就是 InnoDB 并不是 MySQL 的原生存储引擎。MySQL 的原生引擎是 MyISAM,设计之初就有没有支持崩溃恢复。 + +InnoDB 在作为 MySQL 的插件加入 MySQL 引擎家族之前,就已经是一个提供了崩溃恢复和事务支持的引擎了。 + +InnoDB 接入了 MySQL 后,发现既然 binlog 没有崩溃恢复的能力,那就用 InnoDB 原有的 redo log 好了。 + +而如果说**实现上的原因**的话,就有很多了。就按照问题中说的,只用 binlog 来实现崩溃恢复的流程,我画了一张示意图,这里就没有 redo log 了。 + +![img](images/eb838b87e9c20fa00aca50ef154f2a63.jpg) + +图 2 只用 binlog 支持崩溃恢复 + +这样的流程下,binlog 还是不能支持崩溃恢复的。我说一个不支持的点吧:binlog 没有能力恢复“数据页”。 + +如果在图中标的位置,也就是 binlog2 写完了,但是整个事务还没有 commit 的时候,MySQL 发生了 crash。 + +重启后,引擎内部事务 2 会回滚,然后应用 binlog2 可以补回来;但是对于事务 1 来说,系统已经认为提交完成了,不会再应用一次 binlog1。 + +但是,InnoDB 引擎使用的是 WAL 技术,执行事务的时候,写完内存和日志,事务就算完成了。如果之后崩溃,要依赖于日志来恢复数据页。 + +也就是说在图中这个位置发生崩溃的话,事务 1 也是可能丢失了的,而且是数据页级的丢失。此时,binlog 里面并没有记录数据页的更新细节,是补不回来的。 + +你如果要说,那我优化一下 binlog 的内容,让它来记录数据页的更改可以吗?但,这其实就是又做了一个 redo log 出来。 + +所以,至少现在的 binlog 能力,还不能支持崩溃恢复。 + +## 追问 6:那能不能反过来,只用 redo log,不要 binlog? + +回答:如果只从崩溃恢复的角度来讲是可以的。你可以把 binlog 关掉,这样就没有两阶段提交了,但系统依然是 crash-safe 的。 + +但是,如果你了解一下业界各个公司的使用场景的话,就会发现在正式的生产库上,binlog 都是开着的。因为 binlog 有着 redo log 无法替代的功能。 + +一个是归档。redo log 是循环写,写到末尾是要回到开头继续写的。这样历史日志没法保留,redo log 也就起不到归档的作用。 + +一个就是 MySQL 系统依赖于 binlog。binlog 作为 MySQL 一开始就有的功能,被用在了很多地方。其中,MySQL 系统高可用的基础,就是 binlog 复制。 + +还有很多公司有异构系统(比如一些数据分析系统),这些系统就靠消费 MySQL 的 binlog 来更新自己的数据。关掉 binlog 的话,这些下游系统就没法输入了。 + +总之,由于现在包括 MySQL 高可用在内的很多系统机制都依赖于 binlog,所以“鸠占鹊巢”redo log 还做不到。你看,发展生态是多么重要。 + +## 追问 7:redo log 一般设置多大? + +回答:redo log 太小的话,会导致很快就被写满,然后不得不强行刷 redo log,这样 WAL 机制的能力就发挥不出来了。 + +所以,如果是现在常见的几个 TB 的磁盘的话,就不要太小气了,直接将 redo log 设置为 4 个文件、每个文件 1GB 吧。 + +## 追问 8:正常运行中的实例,数据写入后的最终落盘,是从 redo log 更新过来的还是从 buffer pool 更新过来的呢? + +回答:这个问题其实问得非常好。这里涉及到了,“redo log 里面到底是什么”的问题。 + +实际上,redo log 并没有记录数据页的完整数据,所以它并没有能力自己去更新磁盘数据页,也就不存在“数据最终落盘,是由 redo log 更新过去”的情况。 + +1. 如果是正常运行的实例的话,数据页被修改以后,跟磁盘的数据页不一致,称为脏页。最终数据落盘,就是把内存中的数据页写盘。这个过程,甚至与 redo log 毫无关系。 +2. 在崩溃恢复场景中,InnoDB 如果判断到一个数据页可能在崩溃恢复的时候丢失了更新,就会将它读到内存,然后让 redo log 更新内存内容。更新完成后,内存页变成脏页,就回到了第一种情况的状态。 + +## 追问 9:redo log buffer 是什么?是先修改内存,还是先写 redo log 文件? + +回答:这两个问题可以一起回答。 + +在一个事务的更新过程中,日志是要写多次的。比如下面这个事务: + +```sql +begin; +insert into t1 ... +insert into t2 ... +commit; +``` + +这个事务要往两个表中插入记录,插入数据的过程中,生成的日志都得先保存起来,但又不能在还没 commit 的时候就直接写到 redo log 文件里。 + +所以,redo log buffer 就是一块内存,用来先存 redo 日志的。也就是说,在执行第一个 insert 的时候,数据的内存被修改了,redo log buffer 也写入了日志。 + +但是,真正把日志写到 redo log 文件(文件名是 ib_logfile+ 数字),是在执行 commit 语句的时候做的。 + +(这里说的是事务执行过程中不会“主动去刷盘”,以减少不必要的 IO 消耗。但是可能会出现“被动写入磁盘”,比如内存不够、其他事务提交等情况。这个问题我们会在后面第 22 篇文章《MySQL 有哪些“饮鸩止渴”的提高性能的方法?》中再详细展开)。 + +单独执行一个更新语句的时候,InnoDB 会自己启动一个事务,在语句执行完成的时候提交。过程跟上面是一样的,只不过是“压缩”到了一个语句里面完成。 + +以上这些问题,就是把大家提过的关于 redo log 和 binlog 的问题串起来,做的一次集中回答。如果你还有问题,可以在评论区继续留言补充。 + +# 业务设计问题 + +接下来,我再和你分享 @ithunter 同学在第 8 篇文章[《事务到底是隔离的还是不隔离的?》]的评论区提到的跟索引相关的一个问题。我觉得这个问题挺有趣、也挺实用的,其他同学也可能会碰上这样的场景,在这里解答和分享一下。 + +问题是这样的(我文字上稍微做了点修改,方便大家理解): + +> 业务上有这样的需求,A、B 两个用户,如果互相关注,则成为好友。设计上是有两张表,一个是 like 表,一个是 friend 表,like 表有 user_id、liker_id 两个字段,我设置为复合唯一索引即 uk_user_id_liker_id。语句执行逻辑是这样的: + +> 以 A 关注 B 为例: 第一步,先查询对方有没有关注自己(B 有没有关注 A) select * from like where user_id = B and liker_id = A; + +> 如果有,则成为好友 insert into friend; + +> 没有,则只是单向关注关系 insert into like; + +> 但是如果 A、B 同时关注对方,会出现不会成为好友的情况。因为上面第 1 步,双方都没关注对方。第 1 步即使使用了排他锁也不行,因为记录不存在,行锁无法生效。请问这种情况,在 MySQL 锁层面有没有办法处理? + +首先,我要先赞一下这样的提问方式。虽然极客时间现在的评论区还不能追加评论,但如果大家能够一次留言就把问题讲清楚的话,其实影响也不大。所以,我希望你在留言提问的时候,也能借鉴这种方式。 + +接下来,我把 @ithunter 同学说的表模拟出来,方便我们讨论。 + +```sql +CREATE TABLE `like` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) NOT NULL, + `liker_id` int(11) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_user_id_liker_id` (`user_id`,`liker_id`) +) ENGINE=InnoDB; + +CREATE TABLE `friend` ( + id` int(11) NOT NULL AUTO_INCREMENT, + `friend_1_id` int(11) NOT NULL, + `firned_2_id` int(11) NOT NULL, + UNIQUE KEY `uk_friend` (`friend_1_id`,`firned_2_id`) + PRIMARY KEY (`id`) +) ENGINE=InnoDB; +``` + +虽然这个题干中,并没有说到 friend 表的索引结构。但我猜测 friend_1_id 和 friend_2_id 也有索引,为便于描述,我给加上唯一索引。 + +顺便说明一下,“like”是关键字,我一般不建议使用关键字作为库名、表名、字段名或索引名。 + +我把他的疑问翻译一下,在并发场景下,同时有两个人,设置为关注对方,就可能导致无法成功加为朋友关系。 + +现在,我用你已经熟悉的时刻顺序表的形式,把这两个事务的执行语句列出来:![img](images/c45063baf1ae521bf5d98b6d7c0e0ced.png) + +图 3 并发“喜欢”逻辑操作顺序 + +由于一开始 A 和 B 之间没有关注关系,所以两个事务里面的 select 语句查出来的结果都是空。 + +因此,session 1 的逻辑就是“既然 B 没有关注 A,那就只插入一个单向关注关系”。session 2 也同样是这个逻辑。 + +这个结果对业务来说就是 bug 了。因为在业务设定里面,这两个逻辑都执行完成以后,是应该在 friend 表里面插入一行记录的。 + +如提问里面说的,“第 1 步即使使用了排他锁也不行,因为记录不存在,行锁无法生效”。不过,我想到了另外一个方法,来解决这个问题。 + +首先,要给“like”表增加一个字段,比如叫作 relation_ship,并设为整型,取值 1、2、3。 + +> 值是 1 的时候,表示 user_id 关注 liker_id; 值是 2 的时候,表示 liker_id 关注 user_id; 值是 3 的时候,表示互相关注。 + +然后,当 A 关注 B 的时候,逻辑改成如下所示的样子: + +应用代码里面,比较 A 和 B 的大小,如果 A begin; /* 启动事务 */ +insert into `like`(user_id, liker_id, relation_ship) values(A, B, 1) on duplicate key update relation_ship=relation_ship | 1; +select relation_ship from `like` where user_id=A and liker_id=B; +/* 代码中判断返回的 relation_ship, + 如果是 1,事务结束,执行 commit + 如果是 3,则执行下面这两个语句: + */ +insert ignore into friend(friend_1_id, friend_2_id) values(A,B); +commit; +``` + +如果 A>B,则执行下面的逻辑 + +```sql +mysql> begin; /* 启动事务 */ +insert into `like`(user_id, liker_id, relation_ship) values(B, A, 2) on duplicate key update relation_ship=relation_ship | 2; +select relation_ship from `like` where user_id=B and liker_id=A; +/* 代码中判断返回的 relation_ship, + 如果是 2,事务结束,执行 commit + 如果是 3,则执行下面这两个语句: +*/ +insert ignore into friend(friend_1_id, friend_2_id) values(B,A); +commit; +``` + +这个设计里,让“like”表里的数据保证 user_id < liker_id,这样不论是 A 关注 B,还是 B 关注 A,在操作“like”表的时候,如果反向的关系已经存在,就会出现行锁冲突。 + +然后,insert … on duplicate 语句,确保了在事务内部,执行了这个 SQL 语句后,就强行占住了这个行锁,之后的 select 判断 relation_ship 这个逻辑时就确保了是在行锁保护下的读操作。 + +操作符 “|” 是按位或,连同最后一句 insert 语句里的 ignore,是为了保证重复调用时的幂等性。 + +这样,即使在双方“同时”执行关注操作,最终数据库里的结果,也是 like 表里面有一条关于 A 和 B 的记录,而且 relation_ship 的值是 3, 并且 friend 表里面也有了 A 和 B 的这条记录。 + +不知道你会不会吐槽:之前明明还说尽量不要使用唯一索引,结果这个例子一上来我就创建了两个。这里我要再和你说明一下,之前文章我们讨论的,是在“业务开发保证不会插入重复记录”的情况下,着重要解决性能问题的时候,才建议尽量使用普通索引。 + +而像这个例子里,按照这个设计,业务根本就是保证“我一定会插入重复数据,数据库一定要要有唯一性约束”,这时就没啥好说的了,唯一索引建起来吧。 + +# 小结 + +这是专栏的第一篇答疑文章。 + +我针对前 14 篇文章,大家在评论区中的留言,从中摘取了关于日志和索引的相关问题,串成了今天这篇文章。这里我也要再和你说一声,有些我答应在答疑文章中进行扩展的话题,今天这篇文章没来得及扩展,后续我会再找机会为你解答。所以,篇幅所限,评论区见吧。 + +最后,虽然这篇是答疑文章,但课后问题还是要有的。 + +我们创建了一个简单的表 t,并插入一行,然后对这一行做修改。 + +```sql +mysql> CREATE TABLE `t` ( +`id` int(11) NOT NULL primary key auto_increment, +`a` int(11) DEFAULT NULL +) ENGINE=InnoDB; +insert into t values(1,2); +``` + +这时候,表 t 里有唯一的一行数据 (1,2)。假设,我现在要执行: + +```shell +mysql> update t set a=2 where id=1; +``` + +你会看到这样的结果: + +![img](images/367b3f299b94353f32f75ea825391170.png)结果显示,匹配 (rows matched) 了一行,修改 (Changed) 了 0 行。 + +仅从现象上看,MySQL 内部在处理这个命令的时候,可以有以下三种选择: + +1. 更新都是先读后写的,MySQL 读出数据,发现 a 的值本来就是 2,不更新,直接返回,执行结束; +2. MySQL 调用了 InnoDB 引擎提供的“修改为 (1,2)”这个接口,但是引擎发现值与原来相同,不更新,直接返回; +3. InnoDB 认真执行了“把这个值修改成 (1,2)"这个操作,该加锁的加锁,该更新的更新。 + +你觉得实际情况会是以上哪种呢?你可否用构造实验的方式,来证明你的结论?进一步地,可以思考一下,MySQL 为什么要选择这种策略呢? + +你可以把你的验证方法和思考写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +# 上期问题时间 + +上期的问题是,用一个计数表记录一个业务表的总行数,在往业务表插入数据的时候,需要给计数值加 1。 + +逻辑实现上是启动一个事务,执行两个语句: + +1. insert into 数据表; +2. update 计数表,计数值加 1。 + +从系统并发能力的角度考虑,怎么安排这两个语句的顺序。 + +这里,我直接复制 @阿建 的回答过来供你参考: + +> 并发系统性能的角度考虑,应该先插入操作记录,再更新计数表。 知识点在[《行锁功过:怎么减少行锁对性能的影响?》] 因为更新计数表涉及到行锁的竞争,先插入再更新能最大程度地减少事务之间的锁等待,提升并发度。 + +评论区有同学说,应该把 update 计数表放后面,因为这个计数表可能保存了多个业务表的计数值。如果把 update 计数表放到事务的第一个语句,多个业务表同时插入数据的话,等待时间会更长。 + +这个答案的结论是对的,但是理解不太正确。即使我们用一个计数表记录多个业务表的行数,也肯定会给表名字段加唯一索引。类似于下面这样的表结构: + +```sql +CREATE TABLE `rows_stat` ( + `table_name` varchar(64) NOT NULL, + `row_count` int(10) unsigned NOT NULL, + PRIMARY KEY (`table_name`) +) ENGINE=InnoDB; +``` + +在更新计数表的时候,一定会传入 where table_name=$table_name,使用主键索引,更新加行锁只会锁在一行上。 + +而在不同业务表插入数据,是更新不同的行,不会有行锁。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/367b3f299b94353f32f75ea825391170.png" "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/367b3f299b94353f32f75ea825391170.png" new file mode 100644 index 00000000..42dde4e4 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/367b3f299b94353f32f75ea825391170.png" differ diff --git "a/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/c45063baf1ae521bf5d98b6d7c0e0ced.png" "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/c45063baf1ae521bf5d98b6d7c0e0ced.png" new file mode 100644 index 00000000..59c1ff97 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/c45063baf1ae521bf5d98b6d7c0e0ced.png" differ diff --git "a/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/eb838b87e9c20fa00aca50ef154f2a63.jpg" "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/eb838b87e9c20fa00aca50ef154f2a63.jpg" new file mode 100644 index 00000000..ccd15e66 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/eb838b87e9c20fa00aca50ef154f2a63.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/ee9af616e05e4b853eba27048351f62a.jpg" "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/ee9af616e05e4b853eba27048351f62a.jpg" new file mode 100644 index 00000000..4af4f79e Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/15_\346\227\245\345\277\227\345\222\214\347\264\242\345\274\225\347\233\270\345\205\263\351\227\256\351\242\230/images/ee9af616e05e4b853eba27048351f62a.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/README.md" new file mode 100644 index 00000000..cfbd5b79 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/README.md" @@ -0,0 +1,333 @@ +在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 **1000** 个人的姓名、年龄。 + +假设这个表的部分定义是这样的: + +```r +CREATE TABLE `t` ( + `id` int(11) NOT NULL, + `city` varchar(16) NOT NULL, + `name` varchar(16) NOT NULL, + `age` int(11) NOT NULL, + `addr` varchar(128) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `city` (`city`) +) ENGINE=InnoDB; +``` + +这时,你的 SQL 语句可以这么写: + +```csharp +select city,name,age from t where city='杭州' order by name limit 1000 ; +``` + +这个语句看上去逻辑很清晰,但是你了解它的执行流程吗?今天,我就和你聊聊这个语句是怎么执行的,以及有什么参数会影响执行的行为。 + +# 全字段排序 + +前面我们介绍过索引,所以你现在就很清楚了,为避免全表扫描,我们需要在 city 字段加上索引。 + +在 city 字段上创建索引之后,我们用 explain 命令来看看这个语句的执行情况。 + +![img](images/826579b63225def812330ef6c344a303.png) + +图 1 使用 explain 命令查看语句的执行情况 + +Extra 这个字段中的“Using filesort”表示的就是需要排序,MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。 + +为了说明这个 SQL 查询语句的执行过程,我们先来看一下 city 这个索引的示意图。 + +![img](images/5334cca9118be14bde95ec94b02f0a3e.png) + +图 2 city 字段的索引示意图 + +从图中可以看到,满足 city='杭州’条件的行,是从 ID_X 到 ID_(X+N) 的这些记录。 + +通常情况下,这个语句执行流程如下所示 : + +1. 初始化 sort_buffer,确定放入 name、city、age 这三个字段; +2. 从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X; +3. 到主键 id 索引取出整行,取 name、city、age 三个字段的值,存入 sort_buffer 中; +4. 从索引 city 取下一个记录的主键 id; +5. 重复步骤 3、4 直到 city 的值不满足查询条件为止,对应的主键 id 也就是图中的 ID_Y; +6. 对 sort_buffer 中的数据按照字段 name 做快速排序; +7. 按照排序结果取前 1000 行返回给客户端。 + +我们暂且把这个排序过程,称为全字段排序,执行流程的示意图如下所示,下一篇文章中我们还会用到这个排序。 + +![img](images/6c821828cddf46670f9d56e126e3e772.jpg) + +图 3 全字段排序 + +图中“按 name 排序”这个动作,可能在内存中完成,也可能需要使用外部排序,这取决于排序所需的内存和参数 sort_buffer_size。 + +sort_buffer_size,就是 MySQL 为排序开辟的内存(sort_buffer)的大小。如果要排序的数据量小于 sort_buffer_size,排序就在内存中完成。但如果排序数据量太大,内存放不下,则不得不利用磁盘临时文件辅助排序。 + +你可以用下面介绍的方法,来确定一个排序语句是否使用了临时文件。 + +```sql +/* 打开 optimizer_trace,只对本线程有效 */ +SET optimizer_trace='enabled=on'; + +/* @a 保存 Innodb_rows_read 的初始值 */ +select VARIABLE_VALUE into @a from performance_schema.session_status where variable_name = 'Innodb_rows_read'; + +/* 执行语句 */ +select city, name,age from t where city='杭州' order by name limit 1000; + +/* 查看 OPTIMIZER_TRACE 输出 */ +SELECT * FROM `information_schema`.`OPTIMIZER_TRACE`\G + +/* @b 保存 Innodb_rows_read 的当前值 */ +select VARIABLE_VALUE into @b from performance_schema.session_status where variable_name = 'Innodb_rows_read'; + +/* 计算 Innodb_rows_read 差值 */ +select @b-@a; +``` + +这个方法是通过查看 OPTIMIZER_TRACE 的结果来确认的,你可以从 number_of_tmp_files 中看到是否使用了临时文件。 + +![img](images/89baf99cdeefe90a22370e1d6f5e6495.png) + +图 4 全排序的 OPTIMIZER_TRACE 部分结果 + +number_of_tmp_files 表示的是,排序过程中使用的临时文件数。你一定奇怪,为什么需要 12 个文件?内存放不下时,就需要使用外部排序,外部排序一般使用归并排序算法。可以这么简单理解,**MySQL 将需要排序的数据分成 12 份,每一份单独排序后存在这些临时文件中。然后把这 12 个有序文件再合并成一个有序的大文件。** + +如果 sort_buffer_size 超过了需要排序的数据量的大小,number_of_tmp_files 就是 0,表示排序可以直接在内存中完成。 + +否则就需要放在临时文件中排序。sort_buffer_size 越小,需要分成的份数越多,number_of_tmp_files 的值就越大。 + +接下来,我再和你解释一下图 4 中其他两个值的意思。 + +我们的示例表中有 4000 条满足 city='杭州’的记录,所以你可以看到 examined_rows=4000,表示参与排序的行数是 4000 行。 + +sort_mode 里面的 packed_additional_fields 的意思是,排序过程对字符串做了“紧凑”处理。即使 name 字段的定义是 varchar(16),在排序过程中还是要按照实际长度来分配空间的。 + +同时,最后一个查询语句 select @b-@a 的返回结果是 4000,表示整个执行过程只扫描了 4000 行。 + +这里需要注意的是,为了避免对结论造成干扰,我把 internal_tmp_disk_storage_engine 设置成 MyISAM。否则,select @b-@a 的结果会显示为 4001。 + +这是因为查询 OPTIMIZER_TRACE 这个表时,需要用到临时表,而 internal_tmp_disk_storage_engine 的默认值是 InnoDB。如果使用的是 InnoDB 引擎的话,把数据从临时表取出来的时候,会让 Innodb_rows_read 的值加 1。 + +# rowid 排序 + +在上面这个算法过程里面,只对原表的数据读了一遍,剩下的操作都是在 sort_buffer 和临时文件中执行的。但这个算法有一个问题,就是如果查询要返回的字段很多的话,那么 sort_buffer 里面要放的字段数太多,这样内存里能够同时放下的行数很少,要分成很多个临时文件,排序的性能会很差。 + +所以如果单行很大,这个方法效率不够好。 + +那么,**如果 MySQL 认为排序的单行长度太大会怎么做呢?** + +接下来,我来修改一个参数,让 MySQL 采用另外一种算法。 + +```java +SET max_length_for_sort_data = 16; +``` + +max_length_for_sort_data,是 MySQL 中专门控制用于排序的行数据的长度的一个参数。它的意思是,如果单行的长度超过这个值,MySQL 就认为单行太大,要换一个算法。 + +city、name、age 这三个字段的定义总长度是 36,我把 max_length_for_sort_data 设置为 16,我们再来看看计算过程有什么改变。 + +新的算法放入 sort_buffer 的字段,只有要排序的列(即 name 字段)和主键 id。 + +但这时,排序的结果就因为少了 city 和 age 字段的值,不能直接返回了,整个执行流程就变成如下所示的样子: + +1. 初始化 sort_buffer,确定放入两个字段,即 name 和 id; +2. 从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X; +3. 到主键 id 索引取出整行,取 name、id 这两个字段,存入 sort_buffer 中; +4. 从索引 city 取下一个记录的主键 id; +5. 重复步骤 3、4 直到不满足 city='杭州’条件为止,也就是图中的 ID_Y; +6. 对 sort_buffer 中的数据按照字段 name 进行排序; +7. 遍历排序结果,取前 1000 行,并按照 id 的值回到原表中取出 city、name 和 age 三个字段返回给客户端。 + +这个执行流程的示意图如下,我把它称为 rowid 排序。 + +![img](images/dc92b67721171206a302eb679c83e86d.jpg) + +图 5 rowid 排序 + +对比图 3 的全字段排序流程图你会发现,rowid 排序多访问了一次表 t 的主键索引,就是步骤 7。 + +需要说明的是,最后的“结果集”是一个逻辑概念,实际上 MySQL 服务端从排序后的 sort_buffer 中依次取出 id,然后到原表查到 city、name 和 age 这三个字段的结果,不需要在服务端再耗费内存存储结果,是直接返回给客户端的。 + +根据这个说明过程和图示,你可以想一下,这个时候执行 select @b-@a,结果会是多少呢? + +现在,我们就来看看结果有什么不同。 + +首先,图中的 examined_rows 的值还是 4000,表示用于排序的数据是 4000 行。但是 select @b-@a 这个语句的值变成 5000 了。 + +因为这时候除了排序过程外,在排序完成后,还要根据 id 去原表取值。由于语句是 limit 1000,因此会多读 1000 行。 + +![img](images/27f164804d1a4689718291be5d10f89b.png) + +图 6 rowid 排序的 OPTIMIZER_TRACE 部分输出 + +从 OPTIMIZER_TRACE 的结果中,你还能看到另外两个信息也变了。 + +- sort_mode 变成了 ,表示参与排序的只有 name 和 id 这两个字段。 +- number_of_tmp_files 变成 10 了,是因为这时候参与排序的行数虽然仍然是 4000 行,但是每一行都变小了,因此需要排序的总数据量就变小了,需要的临时文件也相应地变少了。 + +# 全字段排序 VS rowid 排序 + +我们来分析一下,从这两个执行流程里,还能得出什么结论。 + +如果 MySQL 实在是担心排序内存太小,会影响排序效率,才会采用 rowid 排序算法,这样排序过程中一次可以排序更多行,但是需要再回到原表去取数据。 + +如果 MySQL 认为内存足够大,会优先选择全字段排序,把需要的字段都放到 sort_buffer 中,这样排序后就会直接从内存里面返回查询结果了,不用再回到原表去取数据。 + +这也就体现了 MySQL 的一个设计思想:**如果内存够,就要多利用内存,尽量减少磁盘访问。** + +对于 InnoDB 表来说,rowid 排序会要求回表多造成磁盘读,因此不会被优先选择。 + +这个结论看上去有点废话的感觉,但是你要记住它,下一篇文章我们就会用到。 + +看到这里,你就了解了,MySQL 做排序是一个成本比较高的操作。那么你会问,是不是所有的 order by 都需要排序操作呢?如果不排序就能得到正确的结果,那对系统的消耗会小很多,语句的执行时间也会变得更短。 + +其实,并不是所有的 order by 语句,都需要排序操作的。从上面分析的执行过程,我们可以看到,MySQL 之所以需要生成临时表,并且在临时表上做排序操作,**其原因是原来的数据都是无序的。** + +你可以设想下,如果能够保证从 city 这个索引上取出来的行,天然就是按照 name 递增排序的话,是不是就可以不用再排序了呢? + +确实是这样的。 + +所以,我们可以在这个市民表上创建一个 city 和 name 的联合索引,对应的 SQL 语句是: + +```sql +alter table t add index city_user(city, name); +``` + +作为与 city 索引的对比,我们来看看这个索引的示意图。 + +![img](images/f980201372b676893647fb17fac4e2bf.png) + +图 7 city 和 name 联合索引示意图 + +在这个索引里面,我们依然可以用树搜索的方式定位到第一个满足 city='杭州’的记录,并且额外确保了,接下来按顺序取“下一条记录”的遍历过程中,只要 city 的值是杭州,name 的值就一定是有序的。 + +这样整个查询过程的流程就变成了: + +1. 从索引 (city,name) 找到第一个满足 city='杭州’条件的主键 id; +2. 到主键 id 索引取出整行,取 name、city、age 三个字段的值,作为结果集的一部分直接返回; +3. 从索引 (city,name) 取下一个记录主键 id; +4. 重复步骤 2、3,直到查到第 1000 条记录,或者是不满足 city='杭州’条件时循环结束。 + +![img](images/3f590c3a14f9236f2d8e1e2cb9686692.jpg) + +图 8 引入 (city,name) 联合索引后,查询语句的执行计划 + +可以看到,这个查询过程不需要临时表,也不需要排序。接下来,我们用 explain 的结果来印证一下。 + +![img](images/fc53de303811ba3c46d344595743358a.png) + +图 9 引入 (city,name) 联合索引后,查询语句的执行计划 + +从图中可以看到,Extra 字段中没有 Using filesort 了,也就是不需要排序了。而且由于 (city,name) 这个联合索引本身有序,所以这个查询也不用把 4000 行全都读一遍,只要找到满足条件的前 1000 条记录就可以退出了。也就是说,在我们这个例子里,只需要扫描 1000 次。 + +既然说到这里了,我们再往前讨论,**这个语句的执行流程有没有可能进一步简化呢?**不知道你还记不记得,我在第 5 篇文章[《 深入浅出索引(下)》]中,和你介绍的覆盖索引。 + +这里我们可以再稍微复习一下。**覆盖索引是指,索引上的信息足够满足查询请求,不需要再回到主键索引上去取数据。** + +按照覆盖索引的概念,我们可以再优化一下这个查询语句的执行流程。 + +针对这个查询,我们可以创建一个 city、name 和 age 的联合索引,对应的 SQL 语句就是: + +```sql +alter table t add index city_user_age(city, name, age); +``` + +这时,对于 city 字段的值相同的行来说,还是按照 name 字段的值递增排序的,此时的查询语句也就不再需要排序了。这样整个查询语句的执行流程就变成了: + +1. 从索引 (city,name,age) 找到第一个满足 city='杭州’条件的记录,取出其中的 city、name 和 age 这三个字段的值,作为结果集的一部分直接返回; +2. 从索引 (city,name,age) 取下一个记录,同样取出这三个字段的值,作为结果集的一部分直接返回; +3. 重复执行步骤 2,直到查到第 1000 条记录,或者是不满足 city='杭州’条件时循环结束。 + +![img](images/df4b8e445a59c53df1f2e0f115f02cd6.jpg) + +图 10 引入 (city,name,age) 联合索引后,查询语句的执行流程 + +然后,我们再来看看 explain 的结果。 + +![img](images/9e40b7b8f0e3f81126a9171cc22e3423.png) + +图 11 引入 (city,name,age) 联合索引后,查询语句的执行计划 + +可以看到,Extra 字段里面多了“Using index”,表示的就是使用了覆盖索引,性能上会快很多。 + +当然,这里并不是说要为了每个查询能用上覆盖索引,就要把语句中涉及的字段都建上联合索引,毕竟索引还是有维护代价的。这是一个需要权衡的决定。 + +# 小结 + +今天这篇文章,我和你介绍了 MySQL 里面 order by 语句的几种算法流程。 + +在开发系统的时候,你总是不可避免地会使用到 order by 语句。你心里要清楚每个语句的排序逻辑是怎么实现的,还要能够分析出在最坏情况下,每个语句的执行对系统资源的消耗,这样才能做到下笔如有神,不犯低级错误。 + +最后,我给你留下一个思考题吧。 + +假设你的表里面已经有了 city_name(city, name) 这个联合索引,然后你要查杭州和苏州两个城市中所有的市民的姓名,并且按名字排序,显示前 100 条记录。如果 SQL 查询语句是这么写的 : + +```csharp +mysql> select * from t where city in ('杭州'," 苏州 ") order by name limit 100; +``` + +那么,这个语句执行的时候会有排序过程吗,为什么? + +如果业务端代码由你来开发,需要实现一个在数据库端不需要排序的方案,你会怎么实现呢? + +进一步地,如果有分页需求,要显示第 101 页,也就是说语句最后要改成 “limit 10000,100”, 你的实现方法又会是什么呢? + +你可以把你的思考和观点写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +# 上期问题时间 + +上期的问题是,当 MySQL 去更新一行,但是要修改的值跟原来的值是相同的,这时候 MySQL 会真的去执行一次修改吗?还是看到值相同就直接返回呢? + +这是第一次我们课后问题的三个选项都有同学选的,所以我要和你需要详细说明一下。 + +第一个选项是,MySQL 读出数据,发现值与原来相同,不更新,直接返回,执行结束。这里我们可以用一个锁实验来确认。 + +假设,当前表 t 里的值是 (1,2)。 + +![img](images/6d9d8837560d01b57d252c470157ea90.png) + +图 12 锁验证方式 + +session B 的 update 语句被 blocked 了,加锁这个动作是 InnoDB 才能做的,所以排除选项 1。 + +第二个选项是,MySQL 调用了 InnoDB 引擎提供的接口,但是引擎发现值与原来相同,不更新,直接返回。有没有这种可能呢?这里我用一个可见性实验来确认。 + +假设当前表里的值是 (1,2)。 + +![img](images/441682b64a3f5dd50f35b12ca4b87c96.png) + +图 13 可见性验证方式 + +session A 的第二个 select 语句是一致性读(快照读),它是不能看见 session B 的更新的。 + +现在它返回的是 (1,3),表示它看见了某个新的版本,这个版本只能是 session A 自己的 update 语句做更新的时候生成。(如果你对这个逻辑有疑惑的话,可以回顾下第 8 篇文章[《事务到底是隔离的还是不隔离的?》]中的相关内容) + +所以,我们上期思考题的答案应该是选项 3,即:InnoDB 认真执行了“把这个值修改成 (1,2)"这个操作,该加锁的加锁,该更新的更新。 + +然后你会说,MySQL 怎么这么笨,就不会更新前判断一下值是不是相同吗?如果判断一下,不就不用浪费 InnoDB 操作,多去更新一次了? + +其实 MySQL 是确认了的。只是在这个语句里面,MySQL 认为读出来的值,只有一个确定的 (id=1), 而要写的是 (a=3),只从这两个信息是看不出来“不需要修改”的。 + +作为验证,你可以看一下下面这个例子。 + +![img](images/63dd6df32dacdb827d256e5acb9837c1.png) + +图 14 可见性验证方式 -- 对照 + +**补充说明:** + +上面我们的验证结果都是在 binlog_format=statement 格式下进行的。 + +@didiren 补充了一个 case, 如果是 binlog_format=row 并且 binlog_row_image=FULL 的时候,由于 MySQL 需要在 binlog 里面记录所有的字段,所以在读数据的时候就会把所有数据都读出来了。 + +根据上面说的规则,“既然读了数据,就会判断”, 因此在这时候,select * from t where id=1,结果就是“返回 (1,2)”。 + +同理,如果是 binlog_row_image=NOBLOB, 会读出除 blob 外的所有字段,在我们这个例子里,结果还是“返回 (1,2)”。 + +对应的代码如图 15 所示。这是 MySQL 5.6 版本引入的,在此之前我没有看过。所以,特此说明。 + +![img](images/d413b9235d56c62f9829750a68b06b89.png) + +图 15 binlog_row_image=FULL 读字段逻辑 + +类似的,@mahonebags 同学提到了 timestamp 字段的问题。结论是:如果表中有 timestamp 字段而且设置了自动更新的话,那么更新“别的字段”的时候,MySQL 会读入所有涉及的字段,这样通过判断,就会发现不需要修改。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/27f164804d1a4689718291be5d10f89b.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/27f164804d1a4689718291be5d10f89b.png" new file mode 100644 index 00000000..aa0fbb28 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/27f164804d1a4689718291be5d10f89b.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/3f590c3a14f9236f2d8e1e2cb9686692.jpg" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/3f590c3a14f9236f2d8e1e2cb9686692.jpg" new file mode 100644 index 00000000..54cb2a45 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/3f590c3a14f9236f2d8e1e2cb9686692.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/441682b64a3f5dd50f35b12ca4b87c96.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/441682b64a3f5dd50f35b12ca4b87c96.png" new file mode 100644 index 00000000..6652ab5f Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/441682b64a3f5dd50f35b12ca4b87c96.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/5334cca9118be14bde95ec94b02f0a3e.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/5334cca9118be14bde95ec94b02f0a3e.png" new file mode 100644 index 00000000..05c57d70 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/5334cca9118be14bde95ec94b02f0a3e.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/63dd6df32dacdb827d256e5acb9837c1.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/63dd6df32dacdb827d256e5acb9837c1.png" new file mode 100644 index 00000000..9ebc3629 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/63dd6df32dacdb827d256e5acb9837c1.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" new file mode 100644 index 00000000..e2993530 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6d9d8837560d01b57d252c470157ea90.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6d9d8837560d01b57d252c470157ea90.png" new file mode 100644 index 00000000..352413ca Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/6d9d8837560d01b57d252c470157ea90.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/826579b63225def812330ef6c344a303.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/826579b63225def812330ef6c344a303.png" new file mode 100644 index 00000000..938f48f4 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/826579b63225def812330ef6c344a303.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/89baf99cdeefe90a22370e1d6f5e6495.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/89baf99cdeefe90a22370e1d6f5e6495.png" new file mode 100644 index 00000000..dd3038f7 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/89baf99cdeefe90a22370e1d6f5e6495.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/9e40b7b8f0e3f81126a9171cc22e3423.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/9e40b7b8f0e3f81126a9171cc22e3423.png" new file mode 100644 index 00000000..287a02a7 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/9e40b7b8f0e3f81126a9171cc22e3423.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/d413b9235d56c62f9829750a68b06b89.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/d413b9235d56c62f9829750a68b06b89.png" new file mode 100644 index 00000000..e2e7128e Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/d413b9235d56c62f9829750a68b06b89.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" new file mode 100644 index 00000000..8513b326 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/df4b8e445a59c53df1f2e0f115f02cd6.jpg" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/df4b8e445a59c53df1f2e0f115f02cd6.jpg" new file mode 100644 index 00000000..e0957cde Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/df4b8e445a59c53df1f2e0f115f02cd6.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/f980201372b676893647fb17fac4e2bf.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/f980201372b676893647fb17fac4e2bf.png" new file mode 100644 index 00000000..ddd1d1df Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/f980201372b676893647fb17fac4e2bf.png" differ diff --git "a/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/fc53de303811ba3c46d344595743358a.png" "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/fc53de303811ba3c46d344595743358a.png" new file mode 100644 index 00000000..8f42fc08 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/16_order by\346\230\257\346\200\216\344\271\210\345\267\245\344\275\234\347\232\204\357\274\237/images/fc53de303811ba3c46d344595743358a.png" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/README.md" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/README.md" new file mode 100644 index 00000000..87516352 --- /dev/null +++ "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/README.md" @@ -0,0 +1,313 @@ +我在上一篇文章,为你讲解完 order by 语句的几种执行模式后,就想到了之前一个做英语学习 App 的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQL 排序逻辑的理解。 + +这个英语学习 App 首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。 + +现在,如果让你来设计这个 SQL 语句,你会怎么写呢? + +为了便于理解,我对这个例子进行了简化:去掉每个级别的用户都有一个对应的单词表这个逻辑,直接就是从一个单词表中随机选出三个单词。这个表的建表语句和初始数据的命令如下: + +```sql +mysql> CREATE TABLE `words` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `word` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +delimiter ;; +create procedure idata() +begin + declare i int; + set i=0; + while i<10000 do + insert into words(word) values(concat(char(97+(i div 1000)), char(97+(i % 1000 div 100)), char(97+(i % 100 div 10)), char(97+(i % 10)))); + set i=i+1; + end while; +end;; +delimiter ; + +call idata(); +``` + +为了便于量化说明,我在这个表里面插入了 10000 行记录。接下来,我们就一起看看要随机选择 3 个单词,有什么方法实现,存在什么问题以及如何改进。 + +## 内存临时表 + +首先,你会想到用 order by rand() 来实现这个逻辑。 + +```csharp +mysql> select word from words order by rand() limit 3; +``` + +这个语句的意思很直白,随机排序取前 3 个。虽然这个 SQL 语句写法很简单,但执行流程却有点复杂的。 + +我们先用 explain 命令来看看这个语句的执行情况。 + +![img](images/59a4fb0165b7ce1184e41f2d061ce350.png) + +图 1 使用 explain 命令查看语句的执行情况 + +Extra 字段显示 Using temporary,表示的是需要使用临时表;Using filesort,表示的是需要执行排序操作。 + +因此这个 Extra 的意思就是,需要临时表,并且需要在临时表上排序。 + +这里,你可以先回顾一下[上一篇文章]中全字段排序和 rowid 排序的内容。我把上一篇文章的两个流程图贴过来,方便你复习。 + +![img](images/6c821828cddf46670f9d56e126e3e772.jpg) + +图 2 全字段排序 + +![img](images/dc92b67721171206a302eb679c83e86d.jpg) + +图 3 rowid 排序 + +然后,我再问你一个问题,你觉得对于临时内存表的排序来说,它会选择哪一种算法呢?回顾一下上一篇文章的一个结论:**对于 InnoDB 表来说**,执行全字段排序会减少磁盘访问,因此会被优先选择。 + +我强调了“InnoDB 表”,你肯定想到了,**对于内存表,回表过程只是简单地根据数据行的位置,直接访问内存得到数据,根本不会导致多访问磁盘**。优化器没有了这一层顾虑,那么它会优先考虑的,就是用于排序的行越小越好了,所以,MySQL 这时就会选择 rowid 排序。 + +理解了这个算法选择的逻辑,我们再来看看语句的执行流程。同时,通过今天的这个例子,我们来尝试分析一下语句的扫描行数。 + +这条语句的执行流程是这样的: + +1. 创建一个临时表。这个临时表使用的是 memory 引擎,表里有两个字段,第一个字段是 double 类型,为了后面描述方便,记为字段 R,第二个字段是 varchar(64) 类型,记为字段 W。并且,这个表没有建索引。 +2. 从 words 表中,按主键顺序取出所有的 word 值。对于每一个 word 值,调用 rand() 函数生成一个大于 0 小于 1 的随机小数,并把这个随机小数和 word 分别存入临时表的 R 和 W 字段中,到此,扫描行数是 10000。 +3. 现在临时表有 10000 行数据了,接下来你要在这个没有索引的内存临时表上,按照字段 R 排序。 +4. 初始化 sort_buffer。sort_buffer 中有两个字段,一个是 double 类型,另一个是整型。 +5. 从内存临时表中一行一行地取出 R 值和位置信息(我后面会和你解释这里为什么是“位置信息”),分别存入 sort_buffer 中的两个字段里。这个过程要对内存临时表做全表扫描,此时扫描行数增加 10000,变成了 20000。 +6. 在 sort_buffer 中根据 R 的值进行排序。注意,这个过程没有涉及到表操作,所以不会增加扫描行数。 +7. 排序完成后,取出前三个结果的位置信息,依次到内存临时表中取出 word 值,返回给客户端。这个过程中,访问了表的三行数据,总扫描行数变成了 20003。 + +接下来,我们通过慢查询日志(slow log)来验证一下我们分析得到的扫描行数是否正确。 + +```csharp +# Query_time: 0.900376 Lock_time: 0.000347 Rows_sent: 3 Rows_examined: 20003 +SET timestamp=1541402277; +select word from words order by rand() limit 3; +``` + +其中,Rows_examined:20003 就表示这个语句执行过程中扫描了 20003 行,也就验证了我们分析得出的结论。 + +这里插一句题外话,在平时学习概念的过程中,你可以经常这样做,先通过原理分析算出扫描行数,然后再通过查看慢查询日志,来验证自己的结论。我自己就是经常这么做,这个过程很有趣,分析对了开心,分析错了但是弄清楚了也很开心。 + +现在,我来把完整的排序执行流程图画出来。 + +![img](images/2abe849faa7dcad0189b61238b849ffc.png) + +图 4 随机排序完整流程图 1 + +图中的 pos 就是位置信息,你可能会觉得奇怪,这里的“位置信息”是个什么概念?在上一篇文章中,我们对 InnoDB 表排序的时候,明明用的还是 ID 字段。 + +这时候,我们就要回到一个基本概念:**MySQL 的表是用什么方法来定位“一行数据”的。** + +在前面[第 4]和[第 5]篇介绍索引的文章中,有几位同学问到,如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法回表了? + +其实不是的。如果你创建的表没有主键,或者把一个表的主键删掉了,那么 InnoDB 会自己生成一个长度为 6 字节的 rowid 来作为主键。 + +这也就是排序模式里面,rowid 名字的来历。实际上它表示的是:每个引擎用来唯一标识数据行的信息。 + +- 对于有主键的 InnoDB 表来说,这个 rowid 就是主键 ID; +- 对于没有主键的 InnoDB 表来说,这个 rowid 就是由系统生成的; +- MEMORY 引擎不是索引组织表。在这个例子里面,你可以认为它就是一个数组。因此,这个 rowid 其实就是数组的下标。 + +到这里,我来稍微小结一下:**order by rand() 使用了内存临时表,内存临时表排序的时候使用了 rowid 排序方法。** + +## 磁盘临时表 + +那么,是不是所有的临时表都是内存表呢? + +其实不是的。tmp_table_size 这个配置限制了内存临时表的大小,默认值是 16M。如果临时表大小超过了 tmp_table_size,那么内存临时表就会转成磁盘临时表。 + +磁盘临时表使用的引擎默认是 InnoDB,是由参数 internal_tmp_disk_storage_engine 控制的。 + +当使用磁盘临时表的时候,对应的就是一个没有显式索引的 InnoDB 表的排序过程。 + +为了复现这个过程,我把 tmp_table_size 设置成 1024,把 sort_buffer_size 设置成 32768, 把 max_length_for_sort_data 设置成 16。 + +```sql +set tmp_table_size=1024; +set sort_buffer_size=32768; +set max_length_for_sort_data=16; +/* 打开 optimizer_trace,只对本线程有效 */ +SET optimizer_trace='enabled=on'; + +/* 执行语句 */ +select word from words order by rand() limit 3; + +/* 查看 OPTIMIZER_TRACE 输出 */ +SELECT * FROM `information_schema`.`OPTIMIZER_TRACE`\G +``` + +![img](images/78d2db9a4fdba81feadccf6e878b4aab.png) + +图 5 OPTIMIZER_TRACE 部分结果 + +然后,我们来看一下这次 OPTIMIZER_TRACE 的结果。 + +因为将 max_length_for_sort_data 设置成 16,小于 word 字段的长度定义,所以我们看到 sort_mode 里面显示的是 rowid 排序,这个是符合预期的,参与排序的是随机值 R 字段和 rowid 字段组成的行。 + +这时候你可能心算了一下,发现不对。R 字段存放的随机值就 8 个字节,rowid 是 6 个字节(至于为什么是 6 字节,就留给你课后思考吧),数据总行数是 10000,这样算出来就有 140000 字节,超过了 sort_buffer_size 定义的 32768 字节了。但是,number_of_tmp_files 的值居然是 0,难道不需要用临时文件吗? + +这个 SQL 语句的排序确实没有用到临时文件,采用是 MySQL 5.6 版本引入的一个新的排序算法,即:优先队列排序算法。接下来,我们就看看为什么没有使用临时文件的算法,也就是归并排序算法,而是采用了优先队列排序算法。 + +其实,我们现在的 SQL 语句,只需要取 R 值最小的 3 个 rowid。但是,如果使用归并排序算法的话,虽然最终也能得到前 3 个值,但是这个算法结束后,已经将 10000 行数据都排好序了。 + +也就是说,后面的 9997 行也是有序的了。但,我们的查询并不需要这些数据是有序的。所以,想一下就明白了,这浪费了非常多的计算量。 + +而优先队列算法,就可以精确地只得到三个最小值,执行流程如下: + +1. 对于这 10000 个准备排序的 (R,rowid),先取前三行,构造成一个堆; + +(对数据结构印象模糊的同学,可以先设想成这是一个由三个元素组成的数组) + +1. 取下一个行 (R’,rowid’),跟当前堆里面最大的 R 比较,如果 R’小于 R,把这个 (R,rowid) 从堆中去掉,换成 (R’,rowid’); +2. 重复第 2 步,直到第 10000 个 (R’,rowid’) 完成比较。 + +这里我简单画了一个优先队列排序过程的示意图。 + +![img](images/e9c29cb20bf9668deba8981e444f6897.png) + +图 6 优先队列排序算法示例 + +图 6 是模拟 6 个 (R,rowid) 行,通过优先队列排序找到最小的三个 R 值的行的过程。整个排序过程中,为了最快地拿到当前堆的最大值,总是保持最大值在堆顶,因此这是一个最大堆。 + +图 5 的 OPTIMIZER_TRACE 结果中,filesort_priority_queue_optimization 这个部分的 chosen=true,就表示使用了优先队列排序算法,这个过程不需要临时文件,因此对应的 number_of_tmp_files 是 0。 + +这个流程结束后,我们构造的堆里面,就是这个 10000 行里面 R 值最小的三行。然后,依次把它们的 rowid 取出来,去临时表里面拿到 word 字段,这个过程就跟上一篇文章的 rowid 排序的过程一样了。 + +我们再看一下上面一篇文章的 SQL 查询语句: + +```csharp +select city,name,age from t where city='杭州' order by name limit 1000 ; +``` + +你可能会问,这里也用到了 limit,为什么没用优先队列排序算法呢?原因是,这条 SQL 语句是 limit 1000,如果使用优先队列算法的话,需要维护的堆的大小就是 1000 行的 (name,rowid),超过了我设置的 sort_buffer_size 大小,所以只能使用归并排序算法。 + +总之,不论是使用哪种类型的临时表,order by rand() 这种写法都会让计算过程非常复杂,需要大量的扫描行数,因此排序过程的资源消耗也会很大。 + +再回到我们文章开头的问题,怎么正确地随机排序呢? + +## 随机排序方法 + +我们先把问题简化一下,如果只随机选择 1 个 word 值,可以怎么做呢?思路上是这样的: + +1. 取得这个表的主键 id 的最大值 M 和最小值 N; +2. 用随机函数生成一个最大值到最小值之间的数 X = (M-N)*rand() + N; +3. 取不小于 X 的第一个 ID 的行。 + +我们把这个算法,暂时称作随机算法 1。这里,我直接给你贴一下执行语句的序列: + +```sql +mysql> select max(id),min(id) into @M,@N from t ; +set @X= floor((@M-@N+1)*rand() + @N); +select * from t where id >= @X limit 1; +``` + +这个方法效率很高,因为取 max(id) 和 min(id) 都是不需要扫描索引的,而第三步的 select 也可以用索引快速定位,可以认为就只扫描了 3 行。但实际上,这个算法本身并不严格满足题目的随机要求,因为 ID 中间可能有空洞,因此选择不同行的概率不一样,不是真正的随机。 + +比如你有 4 个 id,分别是 1、2、4、5,如果按照上面的方法,那么取到 id=4 的这一行的概率是取得其他行概率的两倍。 + +如果这四行的 id 分别是 1、2、40000、40001 呢?这个算法基本就能当 bug 来看待了。 + +所以,为了得到严格随机的结果,你可以用下面这个流程: + +1. 取得整个表的行数,并记为 C。 +2. 取得 Y = floor(C * rand())。 floor 函数在这里的作用,就是取整数部分。 +3. 再用 limit Y,1 取得一行。 + +我们把这个算法,称为随机算法 2。下面这段代码,就是上面流程的执行语句的序列。 + +```sql +mysql> select count(*) into @C from t; +set @Y = floor(@C * rand()); +set @sql = concat("select * from t limit ", @Y, ",1"); +prepare stmt from @sql; +execute stmt; +DEALLOCATE prepare stmt; +``` + +由于 limit 后面的参数不能直接跟变量,所以我在上面的代码中使用了 prepare+execute 的方法。你也可以把拼接 SQL 语句的方法写在应用程序中,会更简单些。 + +这个随机算法 2,解决了算法 1 里面明显的概率不均匀问题。 + +MySQL 处理 limit Y,1 的做法就是按顺序一个一个地读出来,丢掉前 Y 个,然后把下一个记录作为返回结果,因此这一步需要扫描 Y+1 行。再加上,第一步扫描的 C 行,总共需要扫描 C+Y+1 行,执行代价比随机算法 1 的代价要高。 + +当然,随机算法 2 跟直接 order by rand() 比起来,执行代价还是小很多的。 + +你可能问了,如果按照这个表有 10000 行来计算的话,C=10000,要是随机到比较大的 Y 值,那扫描行数也跟 20000 差不多了,接近 order by rand() 的扫描行数,为什么说随机算法 2 的代价要小很多呢?我就把这个问题留给你去课后思考吧。 + +现在,我们再看看,如果我们按照随机算法 2 的思路,要随机取 3 个 word 值呢?你可以这么做: + +1. 取得整个表的行数,记为 C; +2. 根据相同的随机方法得到 Y1、Y2、Y3; +3. 再执行三个 limit Y, 1 语句得到三行数据。 + +我们把这个算法,称作随机算法 3。下面这段代码,就是上面流程的执行语句的序列。 + +```sql +mysql> select count(*) into @C from t; +set @Y1 = floor(@C * rand()); +set @Y2 = floor(@C * rand()); +set @Y3 = floor(@C * rand()); +select * from t limit @Y1,1; // 在应用代码里面取 Y1、Y2、Y3 值,拼出 SQL 后执行 +select * from t limit @Y2,1; +select * from t limit @Y3,1; +``` + +## 小结 + +今天这篇文章,我是借着随机排序的需求,跟你介绍了 MySQL 对临时表排序的执行过程。 + +如果你直接使用 order by rand(),这个语句需要 Using temporary 和 Using filesort,查询的执行代价往往是比较大的。所以,在设计的时候你要量避开这种写法。 + +今天的例子里面,我们不是仅仅在数据库内部解决问题,还会让应用代码配合拼接 SQL 语句。在实际应用的过程中,比较规范的用法就是:尽量将业务逻辑写在业务代码中,让数据库只做“读写数据”的事情。因此,这类方法的应用还是比较广泛的。 + +最后,我给你留下一个思考题吧。 + +上面的随机算法 3 的总扫描行数是 C+(Y1+1)+(Y2+1)+(Y3+1),实际上它还是可以继续优化,来进一步减少扫描行数的。 + +我的问题是,如果你是这个需求的开发人员,你会怎么做,来减少扫描行数呢?说说你的方案,并说明你的方案需要的扫描行数。 + +你可以把你的设计和结论写在留言区里,我会在下一篇文章的末尾和你讨论这个问题。感谢你的收听,也欢迎你把这篇文章分享给更多的朋友一起阅读。 + +## 上期问题时间 + +我在上一篇文章最后留给你的问题是,select * from t where city in (“杭州”," 苏州 ") order by name limit 100; 这个 SQL 语句是否需要排序?有什么方案可以避免排序? + +虽然有 (city,name) 联合索引,对于单个 city 内部,name 是递增的。但是由于这条 SQL 语句不是要单独地查一个 city 的值,而是同时查了"杭州"和" 苏州 "两个城市,因此所有满足条件的 name 就不是递增的了。也就是说,这条 SQL 语句需要排序。 + +那怎么避免排序呢? + +这里,我们要用到 (city,name) 联合索引的特性,把这一条语句拆成两条语句,执行流程如下: + +1. 执行 select * from t where city=“杭州” order by name limit 100; 这个语句是不需要排序的,客户端用一个长度为 100 的内存数组 A 保存结果。 +2. 执行 select * from t where city=“苏州” order by name limit 100; 用相同的方法,假设结果被存进了内存数组 B。 +3. 现在 A 和 B 是两个有序数组,然后你可以用归并排序的思想,得到 name 最小的前 100 值,就是我们需要的结果了。 + +如果把这条 SQL 语句里“limit 100”改成“limit 10000,100”的话,处理方式其实也差不多,即:要把上面的两条语句改成写: + +```vbnet +select * from t where city=" 杭州 " order by name limit 10100; +``` + +和 + +```vbnet + select * from t where city=" 苏州 " order by name limit 10100。 +``` + +这时候数据量较大,可以同时起两个连接一行行读结果,用归并排序算法拿到这两个结果集里,按顺序取第 10001~10100 的 name 值,就是需要的结果了。 + +当然这个方案有一个明显的损失,就是从数据库返回给客户端的数据量变大了。 + +所以,如果数据的单行比较大的话,可以考虑把这两条 SQL 语句改成下面这种写法: + +```vbnet +select id,name from t where city=" 杭州 " order by name limit 10100; +``` + +和 + +```vbnet +select id,name from t where city=" 苏州 " order by name limit 10100。 +``` + +然后,再用归并排序的方法取得按 name 顺序第 10001~10100 的 name、id 的值,然后拿着这 100 个 id 到数据库中去查出所有记录。 \ No newline at end of file diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/2abe849faa7dcad0189b61238b849ffc.png" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/2abe849faa7dcad0189b61238b849ffc.png" new file mode 100644 index 00000000..139b2092 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/2abe849faa7dcad0189b61238b849ffc.png" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/59a4fb0165b7ce1184e41f2d061ce350.png" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/59a4fb0165b7ce1184e41f2d061ce350.png" new file mode 100644 index 00000000..60e06253 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/59a4fb0165b7ce1184e41f2d061ce350.png" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" new file mode 100644 index 00000000..e2993530 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/6c821828cddf46670f9d56e126e3e772.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/78d2db9a4fdba81feadccf6e878b4aab.png" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/78d2db9a4fdba81feadccf6e878b4aab.png" new file mode 100644 index 00000000..b4c55e2d Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/78d2db9a4fdba81feadccf6e878b4aab.png" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" new file mode 100644 index 00000000..8513b326 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/dc92b67721171206a302eb679c83e86d.jpg" differ diff --git "a/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/e9c29cb20bf9668deba8981e444f6897.png" "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/e9c29cb20bf9668deba8981e444f6897.png" new file mode 100644 index 00000000..a01b7972 Binary files /dev/null and "b/MySQL/MySQL45\350\256\262/17_\345\246\202\344\275\225\346\255\243\347\241\256\345\234\260\346\230\276\347\244\272\351\232\217\346\234\272\346\266\210\346\201\257\357\274\237/images/e9c29cb20bf9668deba8981e444f6897.png" differ diff --git a/README.md b/README.md index db0b15a8..06bcc3ec 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,13 @@ 为了更方便小伙伴的复习和查询,把本仓库做成一个在线的文档 - 在线文档:http://note.moguit.cn/ +- 备用地址:http://moxi159753.gitee.io/learningnotes/ ## 内推 -目前字节跳动的 **广告系统** 和 **在线教育** 等方向拥有大量岗位需求,欢迎点击下方**内推链接**【内推码:PS33MAS】选择合适的岗位投递。小伙伴们使用**内推链接**投递后,可以通过 **公众号** 联系我跟进面试进度。 +目前字节跳动拥有大量岗位需求,欢迎点击下方**内推链接**【内推码: **WYU3X8M**】选择合适的岗位投递。小伙伴们使用**内推链接**投递后,可以通过 **公众号** 联系我跟进面试进度。 -春招&实习:[点我传送](https://job.toutiao.com/campus/m/position?category=&external_referral_code=PS33MAS&job_hot_flag=&keywords=&location=&project=&type=) ,社会招聘:[点我传送](https://job.toutiao.com/experienced/m/?external_referral_code=PS33MAS) +提前批投递:[点我传送](https://jobs.toutiao.com/s/eGmrue1) ,社会招聘:[点我传送](https://job.toutiao.com/s/eGmBtNC) ## 仓库地址 @@ -48,41 +49,82 @@ ## 个人博客搭建 -如果想搭建个人的博客系统,可以购买优惠服务器后,参考 [教程](http://www.moguit.cn/#/info?blogUid=8100dcb585fff77e3fa25eed50e3708e) 在服务器搭建 [蘑菇博客项目](https://gitee.com/moxi159753/mogu_blog_v2) 用于知识点的梳理 +如果想搭建个人的博客系统,可以购买优惠服务器后,参考 [20分钟部署一个微服务架构的博客系统](https://www.bilibili.com/video/BV13y4y1V7Us) 在服务器搭建 [蘑菇博客项目](https://gitee.com/moxi159753/mogu_blog_v2) 用于知识点的梳理 -> 【阿里云】云服务器双12狂欢特惠,1核2G 5M轻量级应用服务器114元/年【博主使用】 [点我传送](https://www.aliyun.com/minisite/goods?userCode=w7aungxw) +> 【阿里云】云服务器狂欢特惠,**2核2G5M** 轻量级应用服务器 **60** 元/年【博主目前使用】 [点我传送](https://www.aliyun.com/minisite/goods?userCode=w7aungxw) > -> 【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元(老用户重新用微信QQ注册即可) [点我进入](https://curl.qcloud.com/zry6xub9) +> 【腾讯云】云产品限时秒杀,爆款 **2核4G8M** 云服务器,首年**74**元/年【博主强烈推荐】 [点我进入](https://curl.qcloud.com/zry6xub9) ## 公众号文章 > 来源陌溪的个人公众号:**[陌溪教你学编程](https://gitee.com/moxi159753/wx_picture/raw/master/picture/%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)** -- [大型生产事故,开源项目蘑菇博客差点被删库](https://mp.weixin.qq.com/s/UprMwItKjJ-Bcj1Z5ija1g) -- [蘑菇博客从0到2000Star,分享我的Java自学路线图](https://mp.weixin.qq.com/s/3u6OOYkpj4_ecMzfMqKJRw) -- [陌溪在开源社区逛了几个月, 终于写下了蘑菇博客的开源文档](https://mp.weixin.qq.com/s/VXH19dQRkNtPbzDMVXwsPQ) -- [从三本院校到斩获字节跳动后端研发Offer-讲述我的故事](https://mp.weixin.qq.com/s/c4rR_aWpmNNFGn-mZBLWYg) -- [年轻人不讲码德,竟然用1核2G服务器来部署蘑菇博客](https://mp.weixin.qq.com/s/geq912p7hinDEeNU1Py1jQ) -- [蘑菇博客前端页面如何引入矢量图标](https://mp.weixin.qq.com/s/mO0HlIZsjdluY16YW8rOdA) -- [Windows+VMware快速搭建蘑菇博客本地开发环境](https://mp.weixin.qq.com/s/9aB7yyP9j67MS-zhigJFWA) -- [陌溪在公众号摸滚翻爬半个月,整理的入门指南](https://mp.weixin.qq.com/s/Jj1i-mD9Tw0vUEFXi5y54g) -- [Nacos出现重大安全漏洞,开源项目险遭脱库](https://mp.weixin.qq.com/s/8DtVEtJZU47Ugr802l9ZWg) -- [还在人肉运维?看看蘑菇博客是如何实现自动化部署](https://t.1yb.co/kQ3A) -- [使用IDEA发布蘑菇博客Docker镜像到服务器](https://t.1yb.co/kQ3P) -- [陌溪在Github网上冲浪时遇到的问题](https://t.1yb.co/kQ3X) -- [陌溪终于有时间写代码了](https://t.1yb.co/kQ40) -- [开源项目蘑菇博客是如何集成第三方登录](https://t.1yb.co/kQ4e) -- [SpringBoot项目启动时增加自定义Banner](https://t.1yb.co/kQ4h) -- [蘑菇博客Golang版安装指南](https://t.1yb.co/kQ4k) -- [开源项目蘑菇博客如何集成Minio对象存储服务器](https://t.1yb.co/kRXt) -- [读者问:有没有高效的记视频笔记方法?](https://t.1yb.co/msyJ) -- [不限速的阿里云盘PC桌面版本来了~](https://t.1yb.co/pPOW) -- [万字长文带你学习ElasticSearch](https://t.1yb.co/pPPo) -- [一文带你了解轻量性日志采集器Beats的使用](https://t.1yb.co/pPQ9) -- [如何使用一条命令完成蘑菇博客的部署?](https://t.1yb.co/pPQr) -- [双非本科,折戟成沙铁未销,九面字节终上岸!](https://mp.weixin.qq.com/s/SRf2f8wFFyjz2BUUXD_pmg) -- [如何给蘑菇博客搭建一套分布式日志收集系统?](https://mp.weixin.qq.com/s/AvF_IAZobOyerhM7moOBLw) -- [蘑菇博客被跨站脚本攻击了?](https://mp.weixin.qq.com/s/ogKcfvfix8cVsmSENj-nKQ) +- [大型生产事故,开源项目蘑菇博客差点被删库](http://www.moguit.cn/info/392) +- [蘑菇博客从0到2000Star,分享我的Java自学路线图](http://www.moguit.cn/info/581) +- [陌溪在开源社区逛了几个月, 终于写下了蘑菇博客的开源文档](http://www.moguit.cn/info/347) +- [从三本院校到斩获字节跳动后端研发Offer-讲述我的故事](http://www.moguit.cn/info/587) +- [年轻人不讲码德,竟然用1核2G服务器来部署蘑菇博客](http://www.moguit.cn/info/96) +- [蘑菇博客前端页面如何引入矢量图标](http://www.moguit.cn/info/39) +- [Windows+VMware快速搭建蘑菇博客本地开发环境](http://www.moguit.cn/info/583) +- [陌溪在公众号摸滚翻爬半个月,整理的入门指南](http://www.moguit.cn/info/585) +- [Nacos出现重大安全漏洞,开源项目险遭脱库](http://www.moguit.cn/info/586) +- [还在人肉运维?看看蘑菇博客是如何实现自动化部署](http://www.moguit.cn/info/13) +- [使用IDEA发布蘑菇博客Docker镜像到服务器](http://www.moguit.cn/info/588) +- [陌溪在Github网上冲浪时遇到的问题](http://www.moguit.cn/info/589) +- [陌溪终于有时间写代码了](http://www.moguit.cn/info/592) +- [开源项目蘑菇博客是如何集成第三方登录](http://www.moguit.cn/info/247) +- [SpringBoot项目启动时增加自定义Banner](http://www.moguit.cn/info/245) +- [蘑菇博客Golang版安装指南](http://www.moguit.cn/info/593) +- [开源项目蘑菇博客如何集成Minio对象存储服务器](http://www.moguit.cn/info/278) +- [读者问:有没有高效的记视频笔记方法?](http://www.moguit.cn/info/594) +- [不限速的阿里云盘PC桌面版本来了~](http://www.moguit.cn/info/596) +- [万字长文带你学习ElasticSearch](http://www.moguit.cn/info/375) +- [一文带你了解轻量性日志采集器Beats的使用](http://www.moguit.cn/info/203) +- [如何使用一条命令完成蘑菇博客的部署?](http://www.moguit.cn/info/597) +- [双非本科,折戟成沙铁未销,九面字节终上岸!](http://www.moguit.cn/info/598) +- [如何给蘑菇博客搭建一套分布式日志收集系统?](http://www.moguit.cn/info/436) +- [蘑菇博客被跨站脚本攻击了?](http://www.moguit.cn/info/613) +- [如何给蘑菇博客搭建一套全链路追踪模块?](http://www.moguit.cn/info/95) +- [陌溪在字节跳动工作两周啦~](http://www.moguit.cn/info/600) +- [为什么你们制作镜像只有5MB,而我却200MB?](http://www.moguit.cn/info/573) +- [面试官:谈谈你对ThreadLocal的理解?](http://www.moguit.cn/info/54) +- [字节二面:蘑菇博客是怎么解决缓存穿透的](http://www.moguit.cn/info/602) +- [还在用破解IDEA?陌溪手把手教如何申请正版](http://www.moguit.cn/info/604) +- [32图,教你部署一个博客小程序](http://www.moguit.cn/info/605) +- [为什么我向开源项目作者提问,他却不理我?](http://www.moguit.cn/info/311) +- [14次架构升级,淘宝是如何从单机到支持千万级别并发?](http://www.moguit.cn/info/71) +- [陌溪让公司损失了100万。。。](http://www.moguit.cn/info/606) +- [如何用可视化工具,管理蘑菇博客中的微服务组件?](http://www.moguit.cn/info/570) +- [陌溪准备买房啦~](http://www.moguit.cn/info/611) +- [学妹问:我可以用蘑菇博客作为毕设么?](http://www.moguit.cn/info/612) +- [蘑菇博客更新啦](http://www.moguit.cn/info/615) +- [如何通过宝塔安装蘑菇博客](http://www.moguit.cn/info/618) +- [什么!蘑菇博客在国庆期间仅有1人访问?](http://www.moguit.cn/info/620) +- [恭喜这位学弟!民办二本九面字节终上岸](https://www.moguit.cn/info/622) +- [什么!有人在蘑菇留言区口吐芬芳?](http://www.moguit.cn/info/621) +- [低配服务器也能玩转蘑菇博客!](http://www.moguit.cn/info/623) +- [蘑菇博客Go版一键部署指南](https://www.moguit.cn/info/623) +- [帮老家的亲戚搭建一个小程序商城](http://www.moguit.cn/info/625) +- [蘑菇群友来杭州了..](http://www.moguit.cn/info/626) +- [首次开放下载!BAT大厂面试求职必备!Gitee高星笔记!](https://www.moguit.cn/info/627) +- [再见了VMware,一款更轻量级的虚拟机!](http://www.moguit.cn/info/628) +- [蘑菇社区更新日志](https://www.moguit.cn/info/656) +- [震惊!!!蘑菇社区竟然遭遇了DOS攻击!](http://www.moguit.cn/info/651) +- [陌溪在百度上搜索蘑菇博客,被吓了一跳](https://www.moguit.cn/info/702) +- [让天下没有难装的环境!](https://www.moguit.cn/info/762) +- [一款强大的桌面级工具平台-Utools](https://www.moguit.cn/info/923) +- [蘑菇过了个年又宕机了。。如何优雅的移除CDN](https://www.moguit.cn/info/944) +- [字节跳动春季招聘来啦,文末陌溪上岸面经~](https://www.moguit.cn/info/967) +- [网站打开花了20秒,我决定自建蘑菇CDN](https://www.moguit.cn/info/976) +- [2年目睹了40场删库场景,我决定给蘑菇写一个备份脚本](https://www.moguit.cn/info/1003) +- [公众号万粉了](https://www.moguit.cn/info/1038) +- [蘑菇博客K8S搭建指南](https://www.moguit.cn/info/1060) +- [网站被刷了!](https://www.moguit.cn/info/1061) +- [一款功能强大的Docker容器实时指标监控](https://www.moguit.cn/info/1069) +- [使用Kubernetes部署蘑菇社区](https://www.moguit.cn/info/1077) +- [AOP实现登录校验注解,能作用于方法和类上](https://www.moguit.cn/info/1090) +- [网站被收录了!](https://www.moguit.cn/info/1092) +- [盘一盘,近期蘑菇社区都更新啥~](https://www.moguit.cn/info/1115) ## Java @@ -98,7 +140,7 @@ - [Java使用Redis删除指定前缀Key](./Java/Java使用Redis删除指定前缀Key/README.md) - [前端的一些跨域问题](./Java/前端的一些跨域问题/README.md) - [使用Ip2region替代淘宝IP接口](./Java/使用Ip2region替代淘宝IP接口/README.md) -- [聊一聊-Java泛型中的通配符T,E,K,V](http://www.moguit.cn/#/info?blogUid=0aa459dc0ae9f9ad82cd22665d08a20d) +- [聊一聊-Java泛型中的通配符T,E,K,V](http://www.moguit.cn/info/21) - [JVM类加载机制](./Java/JVM类加载机制/README.md) - [VisualVM安装VisualGC插件](./Java/VisualVM安装VisualGC插件/README.md) - [谈谈你对ThreadLocal的理解](./Java/谈谈你对ThreadLocal的理解/README.md) @@ -268,12 +310,12 @@ > 来源Bilibili黑马程序员的视频:[Elastic Stack(ELK)从入门到实践](https://www.bilibili.com/video/BV1iJ411c7Az) -- [ElasticSearch介绍与安装](./ElasticStack/1_ElasticSearch介绍与安装) -- [Beats入门简介](./ElasticStack/2_Beats入门简介) -- [Kibana安装与介绍](./ElasticStack/3_Kibana安装与介绍) -- [Logstash入门简介](./ElasticStack/4_Logstash入门简介) -- [ElasticStack综合案例](./ElasticStack/5_ElasticStack综合案例) -- [使用ELK搭建蘑菇博客日志收集](./ElasticStack/6_使用ELK搭建蘑菇博客日志收集) +- [ElasticSearch介绍与安装](./ElasticStack/1_ElasticSearch介绍与安装/README.md) +- [Beats入门简介](./ElasticStack/2_Beats入门简介/README.md) +- [Kibana安装与介绍](./ElasticStack/3_Kibana安装与介绍/README.md) +- [Logstash入门简介](./ElasticStack/4_Logstash入门简介/README.md) +- [ElasticStack综合案例](./ElasticStack/5_ElasticStack综合案例/README.md) +- [使用ELK搭建蘑菇博客日志收集](./ElasticStack/6_使用ELK搭建蘑菇博客日志收集/README.md) ## 算法学习 @@ -524,11 +566,11 @@ ## 关注&交流 -刚刚创建了QQ/微信群 (**加群备注**:`蘑菇博客`) 蘑菇博客交流群,目前项目还存在很多不足之处,欢迎各位老哥进群进行技术交流,为了识别同行,防止广告进入,希望加群的时候能添加备注,谢谢~ +刚刚创建了 **QQ**/ **微信群**,目前项目还存在很多不足之处,欢迎各位老哥进群进行技术交流,为了识别同行,防止广告进入,希望加群的时候能添加备注,谢谢~ -| 微信群(备注:`蘑菇博客`)【邀请您加群】 | QQ群(备注:`蘑菇博客`) | -| :---------------------------------------------------: | :----------------------------------------------------: | -| | | +| 微信群【备注:加群】 | ~~QQ群(备注:`蘑菇博客`)【群满】~~ | QQ群(备注:`蘑菇博客`)【推荐】 | +| :------------------------------------------------------: | :----------------------------------------------------: | ------------------------------------------------------ | +| | | | ## 赞赏 diff --git a/README_zh.md b/README_zh.md new file mode 100644 index 00000000..0e7302b6 --- /dev/null +++ b/README_zh.md @@ -0,0 +1,585 @@ +# 📙陌溪的学习笔记 + +## 关于我 + +[**陌溪**](https://gitee.com/moxi159753/LearningNotes/raw/master/doc/images/qq/添加陌溪.png) 是一个从三本院校一路摸滚翻爬上来的程序员。目前就职于字节跳动的Data广告部门,是字节跳动全线产品的商业变现研发团队。这两天创建了一个 **微信公众号【[陌溪教你学编程](https://gitee.com/moxi159753/LearningNotes/raw/master/doc/images/qq/公众号2.jpg)】**,未来将会在公众号上持续性的输出很多原创小知识以及学习资源,欢迎各位小伙伴关注我,和我一起共同学习,同时我也希望各位小伙伴能够给 **LearningNotes** 项目多多 **Star** 支持,您的**点赞**就是我维护的动力! + +🔗友情链接:我的好友阿秀前段时间收集了超过1000本计算机经典书籍的PDF,包括C++、Java、Python、操作系统、计算机网络、数据库等方面的书籍都有收录,基本上你能听过的都在里面了。这是他的仓库 [CS-Books](https://github.com/forthespada/CS-Books),大家可以去看看,以后看书不花钱不是梦了哈哈,欢迎Star⭐ + +## 项目介绍 + +个人学习笔记,主要来源于B站上视频的学习,同时会记录平时一些学习和项目中遇到的问题,同步更新在 [蘑菇博客](http://www.moguit.cn),如果对我的博客网站感兴趣的话,欢迎关注我的 [蘑菇博客源码](https://gitee.com/moxi159753/mogu_blog_v2),如果笔记对您有帮助的话,欢迎star支持,谢谢~ + +笔记主要涵盖:**Java**,**JVM**、**JUC**、**Spring**,**SpringCloud**,**计算机网络**,**操作系统**,**数据结构**,**Vue** 等 + +本仓库有来源自己总结、网上收集、视频笔记,如果有侵权之处,可以联系我进行删除 + +因个人能力有限,笔记中可能还有**很多错误**的地方,还请大家能够多多指出交流,也欢迎各位小伙伴能够提交 **Pull Request** 请求进行完善。 + +如果您要转载本仓库中的笔记到其它地方,欢迎添加笔记的仓库地址:[LearningNotes](https://gitee.com/moxi159753/LearningNotes) + +## PDF下载 + +本仓库中整理的笔记同时提供 **PDF** 离线版本,请扫描下方公众号『**陌溪教你学编程**』后,回复关键字『**PDF**』,即可下载 **仓库最新 PDF 版本的笔记**。 + +

+ +

+ +## 在线阅读 + +为了更方便小伙伴的复习和查询,把本仓库做成一个在线的文档 + +- 在线文档:http://note.moguit.cn/ +- 备用地址:http://moxi159753.gitee.io/learningnotes/ + +## 内推 + +目前字节跳动拥有大量岗位需求,欢迎点击下方**内推链接**【内推码: **WYU3X8M**】选择合适的岗位投递。小伙伴们使用**内推链接**投递后,可以通过 **公众号** 联系我跟进面试进度。 + +提前批投递:[点我传送](https://jobs.toutiao.com/s/eGmrue1) ,社会招聘:[点我传送](https://job.toutiao.com/s/eGmBtNC) + +## 仓库地址 + +本仓库同步托管在Github和Gitee中 + +- Gitee仓库:https://gitee.com/moxi159753/LearningNotes +- Github仓库:https://github.com/moxi624/LearningNotes + +## 个人博客搭建 + +如果想搭建个人的博客系统,可以购买优惠服务器后,参考 [20分钟部署一个微服务架构的博客系统](https://www.bilibili.com/video/BV13y4y1V7Us) 在服务器搭建 [蘑菇博客项目](https://gitee.com/moxi159753/mogu_blog_v2) 用于知识点的梳理 + +> 【阿里云】云服务器狂欢特惠,**2核2G5M** 轻量级应用服务器 **60** 元/年【博主目前使用】 [点我传送](https://www.aliyun.com/minisite/goods?userCode=w7aungxw) +> +> 【腾讯云】云产品限时秒杀,爆款 **2核4G8M** 云服务器,首年**74**元/年【博主强烈推荐】 [点我进入](https://curl.qcloud.com/TYzPgyNC) + +## 公众号文章 + +> 来源陌溪的个人公众号:**[陌溪教你学编程](https://gitee.com/moxi159753/wx_picture/raw/master/picture/%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)** + +- [大型生产事故,开源项目蘑菇博客差点被删库](http://www.moguit.cn/info/392) +- [蘑菇博客从0到2000Star,分享我的Java自学路线图](http://www.moguit.cn/info/581) +- [陌溪在开源社区逛了几个月, 终于写下了蘑菇博客的开源文档](http://www.moguit.cn/info/347) +- [从三本院校到斩获字节跳动后端研发Offer-讲述我的故事](http://www.moguit.cn/info/587) +- [年轻人不讲码德,竟然用1核2G服务器来部署蘑菇博客](http://www.moguit.cn/info/96) +- [蘑菇博客前端页面如何引入矢量图标](http://www.moguit.cn/info/39) +- [Windows+VMware快速搭建蘑菇博客本地开发环境](http://www.moguit.cn/info/583) +- [陌溪在公众号摸滚翻爬半个月,整理的入门指南](http://www.moguit.cn/info/585) +- [Nacos出现重大安全漏洞,开源项目险遭脱库](http://www.moguit.cn/info/586) +- [还在人肉运维?看看蘑菇博客是如何实现自动化部署](http://www.moguit.cn/info/13) +- [使用IDEA发布蘑菇博客Docker镜像到服务器](http://www.moguit.cn/info/588) +- [陌溪在Github网上冲浪时遇到的问题](http://www.moguit.cn/info/589) +- [陌溪终于有时间写代码了](http://www.moguit.cn/info/592) +- [开源项目蘑菇博客是如何集成第三方登录](http://www.moguit.cn/info/247) +- [SpringBoot项目启动时增加自定义Banner](http://www.moguit.cn/info/245) +- [蘑菇博客Golang版安装指南](http://www.moguit.cn/info/593) +- [开源项目蘑菇博客如何集成Minio对象存储服务器](http://www.moguit.cn/info/278) +- [读者问:有没有高效的记视频笔记方法?](http://www.moguit.cn/info/594) +- [不限速的阿里云盘PC桌面版本来了~](http://www.moguit.cn/info/596) +- [万字长文带你学习ElasticSearch](http://www.moguit.cn/info/375) +- [一文带你了解轻量性日志采集器Beats的使用](http://www.moguit.cn/info/203) +- [如何使用一条命令完成蘑菇博客的部署?](http://www.moguit.cn/info/597) +- [双非本科,折戟成沙铁未销,九面字节终上岸!](http://www.moguit.cn/info/598) +- [如何给蘑菇博客搭建一套分布式日志收集系统?](http://www.moguit.cn/info/436) +- [蘑菇博客被跨站脚本攻击了?](http://www.moguit.cn/info/613) +- [如何给蘑菇博客搭建一套全链路追踪模块?](http://www.moguit.cn/info/95) +- [陌溪在字节跳动工作两周啦~](http://www.moguit.cn/info/600) +- [为什么你们制作镜像只有5MB,而我却200MB?](http://www.moguit.cn/info/573) +- [面试官:谈谈你对ThreadLocal的理解?](http://www.moguit.cn/info/54) +- [字节二面:蘑菇博客是怎么解决缓存穿透的](http://www.moguit.cn/info/602) +- [还在用破解IDEA?陌溪手把手教如何申请正版](http://www.moguit.cn/info/604) +- [32图,教你部署一个博客小程序](http://www.moguit.cn/info/605) +- [为什么我向开源项目作者提问,他却不理我?](http://www.moguit.cn/info/311) +- [14次架构升级,淘宝是如何从单机到支持千万级别并发?](http://www.moguit.cn/info/71) +- [陌溪让公司损失了100万。。。](http://www.moguit.cn/info/606) +- [如何用可视化工具,管理蘑菇博客中的微服务组件?](http://www.moguit.cn/info/570) +- [陌溪准备买房啦~](http://www.moguit.cn/info/611) +- [学妹问:我可以用蘑菇博客作为毕设么?](http://www.moguit.cn/info/612) +- [蘑菇博客更新啦](http://www.moguit.cn/info/615) +- [如何通过宝塔安装蘑菇博客](http://www.moguit.cn/info/618) +- [什么!蘑菇博客在国庆期间仅有1人访问?](http://www.moguit.cn/info/620) +- [恭喜这位学弟!民办二本九面字节终上岸](https://www.moguit.cn/info/622) +- [什么!有人在蘑菇留言区口吐芬芳?](http://www.moguit.cn/info/621) +- [低配服务器也能玩转蘑菇博客!](http://www.moguit.cn/info/623) +- [蘑菇博客Go版一键部署指南](https://www.moguit.cn/info/623) +- [帮老家的亲戚搭建一个小程序商城](http://www.moguit.cn/info/625) +- [蘑菇群友来杭州了..](http://www.moguit.cn/info/626) +- [首次开放下载!BAT大厂面试求职必备!Gitee高星笔记!](https://www.moguit.cn/info/627) +- [再见了VMware,一款更轻量级的虚拟机!](http://www.moguit.cn/info/628) +- [蘑菇社区更新日志](https://www.moguit.cn/info/656) +- [震惊!!!蘑菇社区竟然遭遇了DOS攻击!](http://www.moguit.cn/info/651) +- [陌溪在百度上搜索蘑菇博客,被吓了一跳](https://www.moguit.cn/info/702) +- [让天下没有难装的环境!](https://www.moguit.cn/info/762) +- [一款强大的桌面级工具平台-Utools](https://www.moguit.cn/info/923) +- [蘑菇过了个年又宕机了。。如何优雅的移除CDN](https://www.moguit.cn/info/944) +- [字节跳动春季招聘来啦,文末陌溪上岸面经~](https://www.moguit.cn/info/967) +- [网站打开花了20秒,我决定自建蘑菇CDN](https://www.moguit.cn/info/976) +- [2年目睹了40场删库场景,我决定给蘑菇写一个备份脚本](https://www.moguit.cn/info/1003) +- [公众号万粉了](https://www.moguit.cn/info/1038) +- [蘑菇博客K8S搭建指南](https://www.moguit.cn/info/1060) +- [网站被刷了!](https://www.moguit.cn/info/1061) +- [一款功能强大的Docker容器实时指标监控](https://www.moguit.cn/info/1069) +- [使用Kubernetes部署蘑菇社区](https://www.moguit.cn/info/1077) +- [AOP实现登录校验注解,能作用于方法和类上](https://www.moguit.cn/info/1090) +- [网站被收录了!](https://www.moguit.cn/info/1092) +- [盘一盘,近期蘑菇社区都更新啥~](https://www.moguit.cn/info/1115) + +## Java + +> 来源Bilibili尚硅谷周阳老师学习视频:[点我传送](https://www.bilibili.com/video/BV15J4112785) + +- [equals和等等的区别](http://www.moguit.cn/info/322) +- [普通代码块和静态代码块](http://www.moguit.cn/info/162) +- [分布式锁](http://www.moguit.cn/info/283) +- [MySQL的存储引擎](http://www.moguit.cn/info/109) +- [JDK动态代理和CGLIB动态代理](http://www.moguit.cn/info/291) +- [Java注解和反射](http://www.moguit.cn/info/216) +- [泛型的类型擦除](http://www.moguit.cn/info/175) +- [Java使用Redis删除指定前缀Key](http://www.moguit.cn/info/136) +- [前端的一些跨域问题](http://www.moguit.cn/info/303) +- [使用Ip2region替代淘宝IP接口](http://www.moguit.cn/info/337) +- [聊一聊-Java泛型中的通配符T,E,K,V](http://www.moguit.cn/info/21) +- [JVM类加载机制](./Java/JVM类加载机制/README.md) +- [VisualVM安装VisualGC插件](http://www.moguit.cn/info/390) +- [谈谈你对ThreadLocal的理解](http://www.moguit.cn/info/54) +- [谈谈你对AQS的理解](http://www.moguit.cn/info/362) +- [ArrayList扩容机制](http://www.moguit.cn/info/614) + +## Java8新特性 + +> 来源Bilibili尚硅谷李贺飞老师学习视频:[Java8新特性](https://www.bilibili.com/video/BV1ut411g7E9) + +- [HashMap变化](http://www.moguit.cn/info/85) +- [Lambda表达式](http://www.moguit.cn/info/167) +- [方法引用和构造器](http://www.moguit.cn/info/354) +- [强大的Stream](http://www.moguit.cn/info/258) +- [并行流](./校招面试/Java8新特性/5_并行流/README.md) +- [Optional容器类](./校招面试/Java8新特性/6_Optional容器类/README.md) + +## NIO + +- [NIO是什么](http://www.moguit.cn/info/413) +- [IO到NIO的演变](http://www.moguit.cn/info/115) +- [IO和NIO的区别](http://www.moguit.cn/info/74) + +## JVM + +> 来源Bilibili尚硅谷宋红康老师JVM教程:[硅谷2020最新版宋红康JVM教程](https://www.bilibili.com/video/BV1PJ411n7xZ) + +- [JVM与Java体系结构](http://www.moguit.cn/info/428) +- [类加载子系统](http://www.moguit.cn/info/47) +- [运行时数据区概述及线程](http://www.moguit.cn/info/112) +- [程序计数器](http://www.moguit.cn/info/98) +- [虚拟机栈](http://www.moguit.cn/info/106) +- [本地方法接口](http://www.moguit.cn/info/407) +- [本地方法栈](http://www.moguit.cn/info/55) +- [堆](http://www.moguit.cn/info/196) +- [方法区](http://www.moguit.cn/info/420) +- [对象实例化内存布局与访问定位](http://www.moguit.cn/info/211) +- [直接内存](http://www.moguit.cn/info/424) +- [执行引擎](http://www.moguit.cn/info/100) +- [StringTable](http://www.moguit.cn/info/99) +- [垃圾回收概述](http://www.moguit.cn/info/410) +- [垃圾回收相关算法](http://www.moguit.cn/info/310) +- [垃圾回收相关概念](http://www.moguit.cn/info/269) +- [垃圾回收器](http://www.moguit.cn/info/36) + +## JUC + +>来源Bilibili尚硅谷周阳老师学习视频:[尚硅谷Java大厂面试题第二季](https://www.bilibili.com/video/BV18b411M7xz) + +- [Volatile和JMM内存模型的可见性](http://www.moguit.cn/info/188) +- [Volatile不保证原子性](http://www.moguit.cn/info/89) +- [Volatile禁止指令重排](http://www.moguit.cn/info/165) +- [Volatile的应用](http://www.moguit.cn/info/261) +- [CAS底层原理](http://www.moguit.cn/info/33) +- [原子类AtomicInteger的ABA问题](http://www.moguit.cn/info/131) +- [ArrayList为什么是线程不安全的](http://www.moguit.cn/info/394) +- [TransferValue是什么](./5_TransferValue是什么) +- [Java锁之读写锁](http://www.moguit.cn/info/406) +- [Java锁之公平锁和非公平锁](http://www.moguit.cn/info/244) +- [Java锁之可重入锁和递归锁](http://www.moguit.cn/info/183) +- [Java锁之自旋锁](http://www.moguit.cn/info/427) +- [CountDownLatch是什么](http://www.moguit.cn/info/195) +- [CyclicBarrier是什么](http://www.moguit.cn/info/367) +- [Semaphore是什么](http://www.moguit.cn/info/205) +- [Java中的阻塞队列](http://www.moguit.cn/info/144) +- [Synchronized和Lock的区别与好处](http://www.moguit.cn/info/38) +- [Java线程池详解](http://www.moguit.cn/info/345) +- [死锁编码及快速定位](http://www.moguit.cn/info/176) +- [JVM体系结构](./12_JVM/JVM体系结构) +- [什么是GCRoots能做什么](http://www.moguit.cn/info/282) +- [JVM参数调优](http://www.moguit.cn/info/433) +- [Java中的强引用_软引用_弱引用_虚引用分别是什么](http://www.moguit.cn/info/292) +- [Java内存溢出OOM](http://www.moguit.cn/info/290) +- [垃圾回收器](http://www.moguit.cn/info/24) +- [Linux相关命令](http://www.moguit.cn/info/387) +- [Github学习](http://www.moguit.cn/info/281) +- [乐观锁和悲观锁](./15_乐观锁和悲观锁) +- [源码](./校招面试/JUC/Code) + +## Docker + +- [DockerCompose入门学习](http://www.moguit.cn/info/568) +- [Docker容器相关命令](http://www.moguit.cn/info/236) +- [10分钟看懂Docker和K8S](http://www.moguit.cn/info/323) +- [Docker图形化工具Portainer介绍与安装](http://www.moguit.cn/info/570) +- [如何将镜像推送到阿里云容器镜像服务](http://www.moguit.cn/info/571) +- [使用DockerCompose制作蘑菇博客YAML镜像文件](http://www.moguit.cn/info/567) +- [使用GithubAction构建蘑菇博客镜像提交DockerHub](http://www.moguit.cn/info/569) + +## K8S + +> 来源Bilibili尚硅谷教程:[k8s教程由浅入深-尚硅谷](https://www.bilibili.com/video/BV1GT4y1A756) + +- [Kubernetes简介](http://www.moguit.cn/info/250) +- [搭建K8S集群前置知识](http://www.moguit.cn/info/7) +- [使用kubeadm方式搭建K8S集群](http://www.moguit.cn/info/548) +- [使用二进制方式搭建K8S集群](./4_使用二进制方式搭建K8S集群/README.md) +- [Kubeadm和二进制方式对比](./5_Kubeadm和二进制方式对比/README.md) +- [Kubernetes集群管理工具kubectl](http://www.moguit.cn/info/549) +- [Kubernetes集群YAML文件详解](http://www.moguit.cn/info/551) +- [Kubernetes核心技术Pod](http://www.moguit.cn/info/552) +- [Kubernetes核心技术Controller](http://www.moguit.cn/info/553) +- [Kubernetes核心技术Service](http://www.moguit.cn/info/554) +- [Kubernetes控制器Controller详解](http://www.moguit.cn/#/info?blogUid=bf58178837d8b3eba8e5b092a3193211) +- [Kubernetes配置管理](http://www.moguit.cn/info/556) +- [Kubernetes集群安全机制](http://www.moguit.cn/info/558) +- [Kubernetes核心技术Ingress](http://www.moguit.cn/info/559) +- [Kubernetes核心技术Helm](http://www.moguit.cn/info/560) +- [Kubernetes持久化存储](http://www.moguit.cn/info/561) +- [Kubernetes集群资源监控](http://www.moguit.cn/info/562) +- [Kubernetes搭建高可用集群](http://www.moguit.cn/info/563) +- [Kubernetes容器交付介绍](http://www.moguit.cn/info/574) +- [使用kubeadm-ha脚本一键安装K8S](./30_使用kubeadm-ha脚本一键安装K8S/README.md) +- [Kubernetes可视化界面kubesphere](./31_Kubernetes可视化界面kubesphere/README.md) + +- [Kubernetes配置默认存储类](./32_Kubernetes配置默认存储类/README.md) + +## 中间件 + +>来源Bilibili中华石杉老师学习视频:[Java工程师面试突击](https://www.bilibili.com/video/BV1UJ411X7M1) + +- [消息队列的面试连环炮](http://www.moguit.cn/info/415) +- [分布式搜索引擎的面试连环炮](http://www.moguit.cn/info/227) +- [分布式缓存](http://www.moguit.cn/info/140) +- [Redis的面试连环炮](http://www.moguit.cn/info/253) +- [Redis的面试连环炮2](http://www.moguit.cn/info/179) +- [分布式系统的面试连环炮](http://www.moguit.cn/info/397) +- [分布式系统幂等性与顺序性及分布式锁](http://www.moguit.cn/info/318) +- [分布式Session解决方案](http://www.moguit.cn/info/91) +- [Spring中的事务](http://www.moguit.cn/info/132) +- [分布式事务解决方案](http://www.moguit.cn/info/197) +- [设计一个高并发系统](http://www.moguit.cn/info/22) +- [数据库分库分表的面试连环炮](http://www.moguit.cn/info/94) +- [MySQL读写复制及主从同步时延](http://www.moguit.cn/info/49) +- [为啥在项目里要用缓存?](http://www.moguit.cn/info/608) +- [常见的消息队列有哪些?](http://www.moguit.cn/info/101) +- [5个方案告诉你:高并发环境下,先操作数据库还是先操作缓存?](http://www.moguit.cn/info/325) + +## SpringCloud + +> 来源Bilibili尚硅谷周阳老师学习视频:[尚硅谷2020最新版SpringCloud(H版&alibaba)框架](https://www.bilibili.com/video/BV18E411x7eT) + +- [SpringCloud是什么](http://www.moguit.cn/info/609) +- [搭建Eureka集群](http://www.moguit.cn/info/333) +- [Eureka停更后的替换](http://www.moguit.cn/info/381) +- [Ribbon负载均衡](http://www.moguit.cn/info/304) +- [OpenFeign实现服务调用](http://www.moguit.cn/info/90) +- [Hystrix中的服务降级和熔断](http://www.moguit.cn/info/5) +- [服务网关Gateway](http://www.moguit.cn/info/371) +- [分布式配置中心SpringCloudConfig](http://www.moguit.cn/info/300) +- [消息总线Bus](http://www.moguit.cn/info/104) +- [消息驱动SpringCloudStream](http://www.moguit.cn/info/286) +- [SpringCloudSleuth分布式请求链路跟踪](http://www.moguit.cn/info/220) +- [使用Nacos实现服务注册发现以及服务配置等功能](http://www.moguit.cn/info/401) +- [SpringCloudAlibabaSentinel实现熔断和限流](http://www.moguit.cn/info/121) +- [SpringCloudAlibabaSeata处理分布式事务](http://www.moguit.cn/info/166) +- [使用Zipkin搭建蘑菇博客链路追踪](http://www.moguit.cn/info/95) +- [源码](./SpringCloud/SpringCloud2020/SpringCloud2020) + +## SpringSecurity + +> 来源Bilibili黑马程序员视频教程:[手把手教你精通新版SpringSecurity](https://www.bilibili.com/video/BV1EE411u7YV) + +- [初识SpringSecurity](.http://www.moguit.cn/info/319) +- [SpringSecurity在MVC项目中的使用](http://www.moguit.cn/info/359) +- [SpringSecurity在单机环境下的使用](http://www.moguit.cn/info/382) +- [SpringSecurity在分布式环境下的使用](http://www.moguit.cn/info/111) +- [OAuth2.0介绍](http://www.moguit.cn/info/356) + +## ElasticStack + +> 来源Bilibili黑马程序员的视频:[Elastic Stack(ELK)从入门到实践](https://www.bilibili.com/video/BV1iJ411c7Az) + +- [ElasticSearch介绍与安装](http://www.moguit.cn/info/375) +- [Beats入门简介](http://www.moguit.cn/info/203) +- [Kibana安装与介绍](http://www.moguit.cn/info/76) +- [Logstash入门简介](http://www.moguit.cn/info/156) +- [ElasticStack综合案例](http://www.moguit.cn/info/32) +- [使用ELK搭建蘑菇博客日志收集](http://www.moguit.cn/info/436) + +## 算法学习 + +> 来源牛客网剑指offer的题目:  [点我传送](https://www.nowcoder.com/ta/coding-interviews?page=1) +> +> Bilibili视频学习解题思路(Python版本):  [点我传送](https://www.bilibili.com/video/BV1K4411o7KP) + +- [斐波那契数列](./数据结构/1_斐波那契数列/README.md) +- [青蛙跳台阶](./数据结构/2_青蛙跳台阶/README.md) +- [找出丑数](./数据结构/3_找出丑数/README.md) +- [二维数组中的查找](./数据结构/4_二维数组中的查找/README.md) +- [替换空格](./数据结构/5_替换空格/README.md) +- [两个栈实现一个队列](./数据结构/6_两个栈实现一个队列/README.md) +- [旋转数组的最小数字](./数据结构/7_旋转数组的最小数字/README.md) +- [调整数组顺序使奇数位于偶数前面](./数据结构/8_调整数组顺序使奇数位于偶数前面/README.md) +- [包含min函数的栈](./数据结构/9_包含min函数的栈/README.md) +- [栈的压入弹出序列](./数据结构/10_栈的压入弹出序列/README.md) +- [从尾到头打印链表](./数据结构/11_从尾到头打印链表/README.md) +- [链表中倒数第K个节点](./数据结构/12_链表中倒数第K个节点/README.md) +- [反转链表](./数据结构/13_反转链表/README.md) +- [合并两个排序的链表](./数据结构/14_合并两个排序的链表/README.md) +- [复杂链表的复制](./数据结构/15_复杂链表的复制/README.md) +- [两个链表的公共结点](./数据结构/16_两个链表的公共结点/README.md) +- [孩子们的游戏(圆圈中最后剩下的数)](./数据结构/17_孩子们的游戏(圆圈中最后剩下的数/README.md)) +- [链表中环的入口结点](./数据结构/18_链表中环的入口结点/README.md) +- [二进制中1的个数](./数据结构/19_二进制中1的个数/README.md) +- [不用加减乘除做加法](./数据结构/20_不用加减乘除做加法/README.md) +- [数组中出现次数超过一半的数字](./数据结构/21_数组中出现次数超过一半的数字/README.md) +- [整数中1出现的次数](./数据结构/22_整数中1出现的次数/README.md) +- [数组中只出现一次的数字](./数据结构/23_数组中只出现一次的数字/README.md) +- [树的遍历](./数据结构/24_树的遍历/README.md) +- [重建二叉树](./数据结构/25_重建二叉树/README.md) +- [树的子结构](./数据结构/26_树的子结构/README.md) +- [二叉树的镜像](./数据结构/27_二叉树的镜像/README.md) +- [从上往下打印二叉树](./数据结构/28_从上往下打印二叉树/README.md) +- [二叉搜索树的后序遍历序列](./数据结构/29_二叉搜索树的后序遍历序列/README.md) +- [二叉树中和为某一值的路径](./数据结构/30_二叉树中和为某一值的路径/README.md) +- [二叉搜索树与双向链表](./数据结构/31_二叉搜索树与双向链表/README.md) +- [最小的K个数](./数据结构/32_最小的K个数/README.md) +- [数据流中的中位数](./数据结构/33_数据流中的中位数/README.md) +- [ 二叉树的下一个节点](./数据结构/34_二叉树的下一个节点/README.md) +- [对称的二叉树](./数据结构/35_对称的二叉树/README.md) +- [按之字形顺序打印二叉树](./数据结构/36_按之字形顺序打印二叉树/README.md) +- [把二叉树打印成多行](./数据结构/37_把二叉树打印成多行/README.md) +- [二叉搜索树的第K个节点](./数据结构/38_二叉搜索树的第K个节点/README.md) +- [序列化二叉树](./数据结构/39_序列化二叉树/README.md) +- [连续子数组的最大和](./数据结构/40_连续子数组的最大和/README.md) +- [矩形覆盖](./数据结构/41_矩形覆盖/README.md) +- [排序算法-冒泡插入选择](./数据结构/42_排序算法-冒泡插入选择/README.md) +- [希尔排序](./数据结构/43_希尔排序/README.md) +- [归并排序](./数据结构/44_归并排序/README.md) +- [快速排序](./数据结构/45_快速排序/README.md) +- [常见的动态规划算法](./数据结构/动态规划算法/常见的动态规划算法/README.md) +- [源码](./数据结构/NowCode) + +## SpringBoot + +- [Eureka管理页面配置接口返回git信息](./SpringBoot/Eureka管理页面配置接口返回git信息/README.md) +- [Java如何通过IP地址获取地区](./SpringBoot/Java如何通过IP地址获取地区/README.md) +- [SpringSecurity造成无法使用iframe的内嵌页面的解决方法](./SpringBoot/SpringSecurity造成无法使用iframe的内嵌页面的解决方法/README.md) +- [SpringBoot解决时区问题](./SpringBoot/SpringBoot解决时区问题/README.md) +- [SpringBoot项目中使用字符串占位符](./SpringBoot/SpringBoot项目中使用字符串占位符/README.md) +- [SpringBoot中使用注解的方式创建队列和交换机](./SpringBoot/SpringBoot中使用注解的方式创建队列和交换机/README.md) +- [解决升级SpringBoot2.X后无法向eureka注册服务的问题](./SpringBoot/解决升级SpringBoot2.X后无法向eureka注册服务的问题/README.md) +- [使用DevTool实现SpringBoot项目热部署](./SpringBoot/使用DevTool实现SpringBoot项目热部署/README.md) +- [使用自定义日志接口收集用户访问日志](./SpringBoot/使用自定义日志接口收集用户访问日志/README.md) +- [Bean的生命周期](./SpringBoot/Bean的生命周期/README.md) + +## Vue + +- [Axios中拦截器的使用](./Vue/Axios中拦截器的使用/README.md) +- [ElementUI中Upload如何批量上传](./Vue/ElementUI中Upload如何批量上传/README.md) +- [el-select因为绑定的值为整数而无法默认选择](./Vue/el-select因为绑定的值为整数而无法默认选择/README.md) +- [Vue动态计算Table表格的高度](./Vue/Vue动态计算Table表格的高度/README.md) +- [Vue对Element中的e-tag添加@click事件无效](./Vue/Vue对Element中的e-tag添加@click事件无效/README.md) +- [Vue使用Echarts制作一个文章贡献度表](./Vue/Vue使用Echarts制作一个文章贡献度表/README.md) +- [Vue中input框自动聚焦](./Vue/Vue中input框自动聚焦/README.md) +- [Vue使用vue-count-to插件对数字显示美化](./Vue/Vue使用vue-count-to插件对数字显示美化/README.md) +- [Vue项目如何关闭Eslint校验](./Vue/Vue项目如何关闭Eslint校验/README.md) +- [Vue项目使用阿里巴巴矢量图标库](./Vue/Vue项目使用阿里巴巴矢量图标库/README.md) +- [Vue项目引入CDN加速](./Vue/Vue项目引入CDN加速/README.md) +- [Vue制作一个评论模块](./Vue/Vue制作一个评论模块/README.md) +- [Vue中Html和Markdown互相转换](./Vue/Vue中Html和Markdown互相转换/README.md) +- [Vue中对数组变化监听](./Vue/Vue中对数组变化监听/README.md) +- [Vue中使用Vue-cropper进行图片裁剪](./Vue/Vue中使用Vue-cropper进行图片裁剪/README.md) +- [Vuex学习指南-实现一个计数器](./Vue/VueX/Vuex学习指南-实现一个计数器/README.md) +- [Vue中防止XSS脚本攻击](./Vue/Vue中防止XSS脚本攻击/README.md) +- [Vue如何使用G2绘制图片](./Ant/G2/Vue如何使用G2绘制图片/README.md) +- [使用Vuex进行两个页面逻辑交互](./Vue/使用Vuex进行两个页面逻辑交互/README.md) + +## 杂记 + +- [CKEditor前端样式和编辑器的样式不一致的问题](./杂记/CKEditor前端样式和编辑器的样式不一致的问题/README.md) +- [Ckeidtor中上传图片添加token信息](./杂记/ckeidtor中上传图片添加token信息/README.md) +- [CLion搭建C语言开发环境](./杂记/CLion搭建C语言开发环境/README.md) +- [Elasticsearch介绍与安装](./杂记/Elasticsearch介绍与安装/README.md) +- [Github项目配置Actions](./杂记/Github项目配置Actions/README.md) +- [SpringBoot+Vue如何集成第三方登录登录JustAuth](./杂记/SpringBoot+Vue如何集成第三方登录登录JustAuth/README.md) +- [SpringBoot项目启动增加自定义Banner](./杂记/SpringBoot项目启动增加自定义Banner/README.md) +- [VSCode服务版搭建教程,让平板化为生产力工具](./杂记/VSCode服务版搭建教程/README.md) +- [Windows平台编写bat脚本让后台启动多个程序](./杂记/Windows平台编写bat脚本让后台启动多个程序/README.md) +- [记一次蘑菇博客差点被删库的经历](./杂记/记一次蘑菇博客差点被删库的经历/README.md) +- [解决git默认不区分大小写的问题](./杂记/解决git默认不区分大小写的问题/README.md) +- [蘑菇博客从Eureka迁移到Nacos](./杂记/蘑菇博客从Eureka迁移到Nacos/README.md) +- [Windows环境下搭建蘑菇博客](./杂记/Windows环境下搭建蘑菇博客/README.md) +- [Docker搭建蘑菇博客(Eureka版)](./杂记/Docker搭建蘑菇博客(Eureka版)/README.md) +- [Docker搭建蘑菇博客(Nacos版)](./杂记/Docker搭建蘑菇博客(Nacos版)/README.md) +- [DockerCompose一键部署蘑菇博客(Nacos版)](./杂记/DockerCompose一键部署蘑菇博客(Nacos版)/README.md) +- [蘑菇博客Nacos安装指南](./杂记/蘑菇博客Nacos安装指南/README.md) +- [蘑菇博客Sentinel安装指南](./杂记/蘑菇博客Sentinel安装指南/README.md) +- [蘑菇博客QQ小程序发布指南](./杂记/蘑菇博客QQ小程序发布指南/README.md) +- [蘑菇博客后台登录页面增加粒子特效](./杂记/蘑菇博客后台登录页面增加粒子特效/README.md) +- [蘑菇博客集成MarkDown编辑器tui-editor](./杂记/蘑菇博客集成MarkDown编辑器tui-editor/README.md) +- [蘑菇博客配置七牛云存储](./杂记/蘑菇博客配置七牛云存储/README.md) +- [蘑菇博客配置域名解析](./杂记/蘑菇博客配置域名解析/README.md) +- [蘑菇博客切换搜索模式](./杂记/蘑菇博客切换搜索模式/README.md) +- [蘑菇博客部署到阿里云服务器(Eureka版)](./杂记/蘑菇博客部署到阿里云服务器(Eureka版)/README.md) +- [蘑菇博客部署到阿里云服务器(Nacos版)](./杂记/蘑菇博客部署到阿里云服务器(Nacos版)/README.md) +- [蘑菇博客如何扩展新的功能和页面](./杂记/蘑菇博客如何扩展新的功能和页面/README.md) +- [蘑菇博客使用GithubAction完成持续集成](./杂记/蘑菇博客使用GithubAction完成持续集成/README.md) +- [蘑菇博客使用SQL语句进行搜索出的内容忽略大小写并添加高亮效果](./杂记/蘑菇博客使用SQL语句进行搜索出的内容忽略大小写并添加高亮效果/README.md) +- [蘑菇博客添加本地Markdown文件上传功能](./杂记/蘑菇博客添加本地Markdown文件上传功能/README.md) +- [如何给七牛云中的文件配置防盗链](./杂记/如何给七牛云中的文件配置防盗链/README.md) +- [如何使用docsify给蘑菇博客编写开发文档](./杂记/如何使用docsify给蘑菇博客编写开发文档/README.md) +- [如何制作github小徽章](./杂记/如何制作github小徽章/README.md) +- [使用JustAuth集成QQ登录](./杂记/使用JustAuth集成QQ登录/README.md) +- [使用开源项目申请JetBrains全家桶](./杂记/使用开源项目申请JetBrains全家桶/README.md) +- [什么是CICD](./杂记/什么是CICD/README.md) +- [罗技K380快捷键](./杂记/罗技K380快捷键/README.md) +- [将PDF转换为Kindle能识别的MOBI格式](./杂记/将PDF转换为Kindle能识别的MOBI格式/README.md) +- [OCR文字识别软件](./杂记/OCR文字识别软件/README.md) +- [如何向开源社区正确提问](./杂记/如何向开源社区正确提问/README.md) + +## Linux + +- [Linux下查看文件和文件夹占用空间大小](./Linux/Linux下查看文件和文件夹占用空间大小/README.md) +- [Linux下通过nginx配置https](./Linux/Linux下通过nginx配置https/README.md) +- [CentOS下如何安装Nginx](./Linux/CentOS下如何安装Nginx/README.md) +- [记一次因代码出错不断输出日志占满Docker容器硬盘的排查经历](./Linux/记一次因代码出错不断输出日志占满Docker容器硬盘的排查经历/README.md) +- [CentOS下安装Nacos](./Linux/CentOS下安装Nacos/README.md) +- [CentOS下安装Sentinel](./Linux/CentOS下安装Sentinel/README.md) +- [VMWare中CentOS如何配置固定IP](./Linux/VMWare中CentOS如何配置固定IP/README.md) +- [CentOS中将文本中的ip替换成服务器外网ip](./Linux/CentOS中将文本中的ip替换成服务器外网ip/README.md) +- [Asciinema-一种基于文本的终端录制方法](./Linux/Asciinema-一种基于文本的终端录制方法/README.md) + +## Redis + +- [Redis中的数据结构](./Redis/Redis中的数据结构/README.md) +- [Redis中的跳跃表](./Redis/Redis中的跳跃表/README.md) +- [Redis缓存穿透-布隆过滤器](./Redis/Redis缓存穿透-布隆过滤器/README.md) +- [大白话谈IO模型](./Redis/大白话谈IO模型/README.md) +- [IO多路复用底层原理](./Redis/IO多路复用底层原理/README.md) +- [Redis实现分布式锁](./Redis/Redis实现分布式锁/README.md) + +## JavaScript + +- [Js设置二级域名和顶级域名下共享Cookie](./JavaScript/Js设置二级域名和顶级域名下共享Cookie/README.md) +- [如何通过Js将时间转换为刚刚_几分钟前_几小时前](./JavaScript/如何通过Js将时间转换为刚刚_几分钟前_几小时前/README.md) + +## 数据库 + +- [MyBatis常见面试题](./数据库/MyBatis常见面试题/README.md) +- [MyBatis的缓存机制](./数据库/MyBatis的缓存机制/README.md) +- [MySQL索引](./数据库/MySQL索引/README.md) + +## 操作系统 + +- [进程和线程通信](./操作系统/1_进程和线程通信/README.md) + +## 计算机网络 + +- [三次握手和四次挥手](./计算机网络/1_三次握手和四次挥手/README.md) +- [https和http](./计算机网络/2_https和http/README.md) +- [TCP中的拥塞控制和流量控制](./计算机网络/3_TCP中的拥塞控制和流量控制/README.md) +- [物理层](./计算机网络/4_物理层/README.md) +- [数据链路层](./计算机网络/5_数据链路层/README.md) +- [http中的状态码](./计算机网络/http中的状态码/README.md) + +## 面经 + +- [京东面经](./校招面试/面经汇总/1_京东面经/README.md) +- [字节跳动面试总结](./校招面试/面经汇总/2_字节跳动面试总结/README.md) +- [京东零售提前批Java一面](./校招面试/面经汇总/3_京东零售提前批Java一面/README.md) +- [京东零售提前批Java二面](./校招面试/面经汇总/4_京东零售提前批Java二面/README.md) +- [滴滴出行提前批Java123面](./校招面试/面经汇总/5_滴滴出行提前批Java123面/README.md) + +## Golang基础 + +> 来源Bilibili IT营 大地老师学习视频:[点我传送](https://www.bilibili.com/video/BV14T4y1g7h9) + +- [Go语言的安装](./Golang/Golang基础/0_Go语言的安装/README.md) +- [Go语言发展简史](./Golang/Golang基础/1_Go语言发展简史/README.md) +- [Go的变量](./Golang/Golang基础/2_Go的变量/README.md) +- [Go的数据类型](./Golang/Golang基础/3_Go的数据类型/README.md) +- [Go的运算符](./Golang/Golang基础/4_Go的运算符/README.md) +- [Go的流程控制](./Golang/Golang基础/5_Go的流程控制/README.md) +- [Go的数组](./Golang/Golang基础/6_Go的数组/README.md) +- [Go的切片](./Golang/Golang基础/7_Go的切片/README.md) +- [Go的map](./Golang/Golang基础/8_Go的map/README.md) +- [Go的函数](./Golang/Golang基础/9_Go的函数/README.md) +- [Go中的日期函数](./Golang/Golang基础/10_Go中的日期函数/README.md) +- [Go中的指针](./Golang/Golang基础/11_Go中的指针/README.md) +- [Go中的结构体](./Golang/Golang基础/12_Go中的结构体/README.md) +- [Go中的包以及GoMod](./Golang/Golang基础/13_Go中的包以及GoMod/README.md) +- [Go中的接口](./Golang/Golang基础/14_Go中的接口/README.md) +- [goroutine实现并行和并发](./Golang/Golang基础/15_goroutine实现并行和并发/README.md) +- [Golang中的反射](./Golang/Golang基础/16_Golang中的反射/README.md) +- [源码](./Golang/Golang基础/Code) + +## Golang进阶 + +> 来源bilibili 七米老师的学习视频:[点我传送](https://www.bilibili.com/video/BV17Q4y1P7n9) +> +> 李文周老师的博客:[点我传送](https://www.liwenzhou.com/) + +- [Golang并发编程](./Golang/Golang进阶/4_Golang并发编程/README.md) +- [互联网协议介绍](./Golang/Golang进阶/5_互联网协议介绍/README.md) +- [HTTP请求](./Golang/Golang进阶/6_HTTP请求/README.md) +- [日志库](./Golang/Golang进阶/7_日志库/README.md) +- [反射](./Golang/Golang进阶/8_反射/README.md) +- [单元测试](./Golang/Golang进阶/9_单元测试/README.md) +- [Flag包的用法](./Golang/Golang进阶/10_Flag包的用法/README.md) +- [Go操作数据库](./Golang/Golang进阶/11_Go操作数据库/README.md) +- [sqlx库的使用](./Golang/Golang进阶/12_sqlx库的使用/README.md) +- [Go操作Redis](./Golang/Golang进阶/13_Go操作Redis/README.md) +- [Go操作消息队列](./Golang/Golang进阶/14_Go操作消息队列/README.md) +- [Go的依赖管理GoModule](./Golang/Golang进阶/15_Go的依赖管理GoModule/README.md) +- [GoContext的使用](./Golang/Golang进阶/16_GoContext的使用/README.md) +- [日志收集项目架构设计及Kafka介绍](./Golang/Golang进阶/17_日志收集项目架构设计及Kafka介绍/README.md) +- [etcd介绍](./Golang/Golang进阶/18_etcd介绍/README.md) +- [ES介绍和使用](./Golang/Golang进阶/19_ES介绍和使用/README.md) +- [Kafka消费示例](./Golang/Golang进阶/20_Kafka消费示例/README.md) +- [Kibana介绍和使用](./Golang/Golang进阶/21_Kibana介绍和使用/README.md) +- [Prometheus和Grafana介绍](./Golang/Golang进阶/22_Prometheus和Grafana介绍/README.md) +- [源码](./Golang/Golang进阶/GoAdvanceCode) + +## Golang框架-Gin + +> 来源bilibili 七米老师的学习视频:[点我传送](https://www.bilibili.com/video/BV17Q4y1P7n9) +> +> 李文周老师的博客:[点我传送](https://www.liwenzhou.com/) + +- [Gin内容介绍](./Golang/Gin框架/1_Gin内容介绍/README.md) +- [Http及Template介绍](./Golang/Gin框架/2_http及Template介绍/README.md) +- [GORM介绍和使用](./Golang/Gin框架/3_GORM介绍和使用/README.md) +- [GORM进行CURD](./Golang/Gin框架/4_GORM进行CURD/README.md) +- [源码](./Golang/Gin框架/Code) + +## 关注&交流 + +刚刚创建了 **QQ**/ **微信群**,目前项目还存在很多不足之处,欢迎各位老哥进群进行技术交流,为了识别同行,防止广告进入,希望加群的时候能添加备注,谢谢~ + +| 微信群【备注:加群】 | ~~QQ群(备注:`蘑菇博客`)【群满】~~ | QQ群(备注:`蘑菇博客`)【推荐】 | +| :------------------------------------------------------: | :----------------------------------------------------: | ------------------------------------------------------ | +| | | | + +## 赞赏 + +如果觉得**本仓库**对您有帮助的话,希望朋友能够给博主**喝一杯咖啡**(ps.. 小伙伴赞赏的时候可以备注一下下~) + +| 微信 | 支付宝 | +| :----------------------------------------------: | :-----------------------------------------------: | +| | | + diff --git "a/SpringCloud/Feign\351\205\215\347\275\256\345\205\250\345\261\200Sentinel\346\265\201\346\216\247\345\274\202\345\270\270\345\222\214\351\231\215\347\272\247\345\274\202\345\270\270/README.md" "b/SpringCloud/Feign\351\205\215\347\275\256\345\205\250\345\261\200Sentinel\346\265\201\346\216\247\345\274\202\345\270\270\345\222\214\351\231\215\347\272\247\345\274\202\345\270\270/README.md" index c4526e2f..99cb5374 100644 --- "a/SpringCloud/Feign\351\205\215\347\275\256\345\205\250\345\261\200Sentinel\346\265\201\346\216\247\345\274\202\345\270\270\345\222\214\351\231\215\347\272\247\345\274\202\345\270\270/README.md" +++ "b/SpringCloud/Feign\351\205\215\347\275\256\345\205\250\345\261\200Sentinel\346\265\201\346\216\247\345\274\202\345\270\270\345\222\214\351\231\215\347\272\247\345\274\202\345\270\270/README.md" @@ -12,7 +12,7 @@ Blocked by Sentinel(flow limiting) ## Feign全局兜底异常处理 -之前提到过通过 [配置Sentinel规则持久化到Nacos中](http://www.moguit.cn/#/info?blogUid=6473a200c9986f45af2ae9f12534ec93) 提到将Sentinel规则持久化到数据库中,但是我们在通过feign调用时,不能很好的处理由sentinel产生的流控异常,当然我们可以通过 @SentinelResource 注解来解决,如下所示,我们通过在需要处理的方法上,编写一个异常处理的方法即可 +之前提到过通过 [配置Sentinel规则持久化到Nacos中](http://www.moguit.cn/#/info?blogUid=6473a200c9986f45af2ae9f12534ec93) 提到将Sentinel规则持久化到数据库中,但是我们在通过feign调用时,不能很好的处理由sentinel产生的流控异常,当然我们可以通过 **@SentinelResource** 注解来解决,如下所示,我们通过在需要处理的方法上,编写一个异常处理的方法即可 ```bash @GetMapping("/testHotKey") diff --git a/SpringCloud/SpringCloud2020/README.md b/SpringCloud/SpringCloud2020/README.md index cdadeeab..0532a26d 100644 --- a/SpringCloud/SpringCloud2020/README.md +++ b/SpringCloud/SpringCloud2020/README.md @@ -5,23 +5,23 @@

- ## SpringCloud > 来源Bilibili尚硅谷周阳老师学习视频:[尚硅谷2020最新版SpringCloud(H版&alibaba)框架](https://www.bilibili.com/video/BV18E411x7eT) -- [SpringCloud是什么](./1_SpringCloud是什么) -- [搭建Eureka集群](./3_搭建Eureka集群)  [传送门](http://www.moguit.cn/#/info?blogUid=bcbe47eb92aa3ca50fe57f0154a0d03c) -- [Eureka停更后的替换](./4_Eureka停更后的替换)  [传送门](http://www.moguit.cn/#/info?blogUid=d60f64857d0d4c01e99de1f8715db75d) -- [Ribbon负载均衡](./5_Ribbon负载均衡)   [传送门](http://www.moguit.cn/#/info?blogUid=ada9f522a377c5b3a2a323cabd376637) -- [OpenFeign实现服务调用](./6_OpenFeign实现服务调用)   [传送门](http://www.moguit.cn/#/info?blogUid=32fcba6449f1caac0a7ecb2fef323158) -- [Hystrix中的服务降级和熔断](./7_Hystrix中的服务降级和熔断)   [传送门](http://www.moguit.cn/#/info?blogUid=030a46c4ac414860135f6500ba7683af) -- [服务网关Gateway](./8_服务网关Gateway)  [传送门](http://www.moguit.cn/#/info?blogUid=d0fbc44ce9abb852f095ba3293bc8f5e) -- [分布式配置中心SpringCloudConfig](./9_分布式配置中心SpringCloudConfig)  [传送门](http://www.moguit.cn/#/info?blogUid=abea85566c6ce7a7bbd7a290ff40be59) -- [消息总线Bus](./10_消息总线Bus)  [传送门](http://www.moguit.cn/#/info?blogUid=3c228ae1db6a9313ab4068ccdd9921ff) -- [消息驱动SpringCloudStream](./11_消息驱动SpringCloudStream)  [传送门](http://www.moguit.cn/#/info?blogUid=a4ac92b0bafc804629a9aa0309dc36e6) -- [SpringCloudSleuth分布式请求链路跟踪](./12_SpringCloudSleuth分布式请求链路跟踪)  [传送门](http://www.moguit.cn/#/info?blogUid=7e4fd64914beae0ffc521bff1541cacc) -- [使用Nacos实现服务注册发现以及服务配置等功能](./13_Nacos是什么)  [传送门](http://www.moguit.cn/#/info?blogUid=e6e619349d31dded928c9265c5a9c672) -- [SpringCloudAlibabaSentinel实现熔断和限流](./14_SpringCloudAlibabaSentinel实现熔断和限流)  [传送门](http://www.moguit.cn/#/info?blogUid=408e9c889ebf96a66af2adfdc258ba5f) -- [SpringCloudAlibabaSeata处理分布式事务](./15_SpringCloudAlibabaSeata处理分布式事务)  [传送门](http://www.moguit.cn/#/info?blogUid=5f17644d6db710c60fc42fad561000bd) +- [SpringCloud是什么](http://www.moguit.cn/info/609) +- [搭建Eureka集群](http://www.moguit.cn/info/333) +- [Eureka停更后的替换](http://www.moguit.cn/info/381) +- [Ribbon负载均衡](http://www.moguit.cn/info/304) +- [OpenFeign实现服务调用](http://www.moguit.cn/info/90) +- [Hystrix中的服务降级和熔断](http://www.moguit.cn/info/5) +- [服务网关Gateway](http://www.moguit.cn/info/371) +- [分布式配置中心SpringCloudConfig](http://www.moguit.cn/info/300) +- [消息总线Bus](http://www.moguit.cn/info/104) +- [消息驱动SpringCloudStream](http://www.moguit.cn/info/286) +- [SpringCloudSleuth分布式请求链路跟踪](http://www.moguit.cn/info/220) +- [使用Nacos实现服务注册发现以及服务配置等功能](http://www.moguit.cn/info/401) +- [SpringCloudAlibabaSentinel实现熔断和限流](http://www.moguit.cn/info/121) +- [SpringCloudAlibabaSeata处理分布式事务](http://www.moguit.cn/info/166) +- [使用Zipkin搭建蘑菇博客链路追踪](http://www.moguit.cn/info/95) - [源码](SpringCloud2020) \ No newline at end of file diff --git "a/SpringCloud/\345\276\256\346\234\215\345\212\241\344\271\213\345\220\220\346\247\275\344\270\200\344\270\213Nacos\346\227\245\345\277\227\347\232\204\347\226\257\347\213\202\350\276\223\345\207\272/README.md" "b/SpringCloud/\345\276\256\346\234\215\345\212\241\344\271\213\345\220\220\346\247\275\344\270\200\344\270\213Nacos\346\227\245\345\277\227\347\232\204\347\226\257\347\213\202\350\276\223\345\207\272/README.md" new file mode 100644 index 00000000..59edef3b --- /dev/null +++ "b/SpringCloud/\345\276\256\346\234\215\345\212\241\344\271\213\345\220\220\346\247\275\344\270\200\344\270\213Nacos\346\227\245\345\277\227\347\232\204\347\226\257\347\213\202\350\276\223\345\207\272/README.md" @@ -0,0 +1,132 @@ +### 前言 + +目前公司系统采用 **Spring Cloud** 架构,其中服务注册和发现组件用的 **Nacos**,最近运维抱怨说,磁盘不够用,日志增长的太快。简单排查一下,罪魁祸首竟然是 **Nacos**。 + +按理说 **Nacos** 作为服务注册中心,不会应该会产生太多日志的,本身涉及的服务也不多,但几天就会产生 **1G** 以上的日志,的确有点疯狂。这篇文章就聊聊 **Nacos** 的日志系统。 + +### 事件背景 + +经过排查,其中输出最多的日志为 **{nacos.home}/logs/access_log.yyyy-mm-dd.log** 格式的日志。日志中包含了微服务系统调用 **Nacos** 及集群之间通信的日志,比如心跳 **(/nacos/v1/ns/instance/beat)** 、获取服务列表 **(/nacos/v1/ns/instance/list)** 、状态检查 **(/nacos/v1/ns/service/status)** 等。 + +我们知道 **Nacos** 是基于 **Spring Boot** 实现的,**access_log** 日志是 **Spring Boot** 提内置的Tomcat的访问日志。关于该项日志的配置,没有保留最大天数,也没有日志大小的控制。而且随着 **Nacos Server** 与各个服务直接的心跳、获取、注册等会不停的产生访问日志,微服务越多,日志增长越快。这些日志打印会迅速占用完磁盘空间,带来资源浪费和运维成本。 + +### 解决方案 + +上述的 **access_log** 日志输出 **Nacos** 是提供了控制开关的,在 **Nacos** 的 **conf** 目录下 **application.properties** 配置文件中,默认有以下配置: + +``` +#*************** Access Log Related Configurations ***************# +### If turn on the access log: +server.tomcat.accesslog.enabled=true + +### The access log pattern: +server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i + +### The directory of access log: +server.tomcat.basedir= +``` + +可以看到,关于访问日志支持关闭、日志输出格式以及日志输出的目录。 + +在测试环境,我们可以直接将enabled的配置项设置为false,直接关闭该日志的输出。 + +```bash +server.tomcat.accesslog.enabled=false +``` + +但在生产环境,这样操作就有一定的风险了。当关闭之后,生产出现问题时需要根据日志进行排查,就会找不到对应的日志。 + +此时,只能通过其他方式进行处理,比如在 **Linux** 操作系统下通过编写 **crontab** 来完成日志的定时删除。对应的脚本示例如下: + +```bash +#!/bin/bash + +logFile="/data/nacos/bin/logs/nacos_del_access.log" +# 保留14天日志 +date=`date -d "$date -14 day" +"%Y-%m-%d"` +# 具体位置可调整 +delFilePath="/data/nacos/bin/logs/access_log.${date}.log" + +if [ ! -f "${logFile}" ];then + echo 'access log文件打印日志频繁. /etc/cron.daily/nacosDelAccessLogs.sh 会定时删除access日志文件' >>${logFile} +fi +# 日志文件存在, 则删除 +if [ -f "${delFilePath}" ];then + rm -rf ${delFilePath} + curDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"` + echo '['${curDate}'] 删除文件'${delFilePath} >>${logFile} +fi +``` + +虽然问题解决了,但很明显并不优雅,这也是 **Nacos Server** 日志输出的问题之一。 + +### 日志级别动态调整 + +关于 **Nacos Server** 日志的输出级别,在1.1.3版本之前,同样会打印大量的日志,而且没办法动态的进行调整。在此版本之后,日志输出得到了优化,并且支持通过 **API** 的形式来进行日志级别的调整,示例如下: + +复制 + +```bash +# 调整naming模块的naming-raft.log的级别为error: +curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/log?logName=naming-raft&logLevel=error' +# 调整config模块的config-dump.log的级别为warn: +curl -X PUT '$nacos_server:8848/nacos/v1/cs/ops/log?logName=config-dump&logLevel=warn' +``` + +### 客户端日志 + +业务系统集成的客户端在1.1.3版本之后,也进行了优化,避免日志大量打印(主要涉及心跳日志、轮询日志等)。 + +在业务系统的application.yml配置文件中,可通过日志级别设置来进行控制: + +复制 + +```yml +# 日志级别,可以指定到具体类 +logging: + level: + com.alibaba.nacos: warn +``` + +也可以通过启动时的JVM参数来进行控制,默认是info级别: + +```bash +-Dcom.alibaba.nacos.naming.log.level=warn -Dcom.alibaba.nacos.config.log.level=warn +``` + +上述示例分别指定了Naming客户端和Config客户端的日志级别,适用于1.0.0及以上版本。 + +### 更细的日志配置 + +查看conf目录下的nacos-logback.xml配置,你会发现Nacos相关的日志配置项非常多,如果因项目需要进行更精细化的配置,可在此文件中进行直接配置。 + +以naming-server对应的append配置为例,看一下默认的配置: + +复制 + +```xml + + ${LOG_HOME}/naming-server.log + true + + ${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i + 1GB + 7 + 7GB + true + + + %date %level %msg%n%n + UTF-8 + + +``` + +这里根据自己的需要,可调整输出的日志格式、日志文件分割、日志保留日期及日志压缩等处理。 + +### 小结 + +关于 **Nacos** 的日志输出就聊这么多,整体而言相关的日志输出有些过于多了,而且在灵活配置方面还有待提升。基于目前的现状我们可以通过自定义或定时任务等配合完成日志输出与管理。 + + \ No newline at end of file diff --git a/SpringSecurity/README.md b/SpringSecurity/README.md index 552c12d0..4a93667e 100644 --- a/SpringSecurity/README.md +++ b/SpringSecurity/README.md @@ -12,8 +12,8 @@ ## 目录 -- [初识SpringSecurity](./1_初识SpringSecurity/README.md) -- [SpringSecurity在MVC项目中的使用](./2_SpringSecurity在MVC项目中的使用/README.md) -- [SpringSecurity在单机环境下的使用](./3_SpringSecurity在单机环境下的使用/README.md) -- [SpringSecurity在分布式环境下的使用](./4_SpringSecurity在分布式环境下的使用/README.md) -- [OAuth2.0介绍](./5_OAuth2.0介绍/README.md) +- [初识SpringSecurity](.http://www.moguit.cn/info/319) +- [SpringSecurity在MVC项目中的使用](http://www.moguit.cn/info/359) +- [SpringSecurity在单机环境下的使用](http://www.moguit.cn/info/382) +- [SpringSecurity在分布式环境下的使用](http://www.moguit.cn/info/111) +- [OAuth2.0介绍](http://www.moguit.cn/info/356) diff --git "a/Vue/SPA\347\232\204SEO\346\226\271\346\241\210\345\257\271\346\257\224\344\273\245\345\217\212\345\256\236\350\267\265/README.md" "b/Vue/SPA\347\232\204SEO\346\226\271\346\241\210\345\257\271\346\257\224\344\273\245\345\217\212\345\256\236\350\267\265/README.md" new file mode 100644 index 00000000..51154a46 --- /dev/null +++ "b/Vue/SPA\347\232\204SEO\346\226\271\346\241\210\345\257\271\346\257\224\344\273\245\345\217\212\345\256\236\350\267\265/README.md" @@ -0,0 +1,441 @@ +# SPA 的 SEO 方案对比、最终实践 + +## 前言 + +前端开发技术日新月异,由于现代化构建、用户体验的需求,angular/vue/react 等框架已经成为开发标配,大部分应用都是 [SPA](https://zh.wikipedia.org/zh-hans/单页应用),同时也带来了很多新问题: + +- [SEO](https://zh.wikipedia.org/wiki/搜尋引擎最佳化) 不友好 +- 首屏渲染慢 + +为了解决这些问题,开源社区有很多方案,本文主要对这些方案进行对比,最后给出我们实际使用的插件式方案。 + +## 一、客户端渲染(CSR)方案 + +[![img](images/p2DkVy-V5a10pn.png)](https://content.markdowner.net/pub/p2DkVy-V5a10pn) + +React开发的SPA就是一种CSR方案,如图所示,在到达浏览器之前的html页面是没有内容的,要等到浏览器执行相应异步请求获取数据填充后才显示界面。 + +**优点** + +- SPA 的优点(用户体验较好) + +**缺点** + +- SEO不友好(爬虫如果没有执行js的能力,如百度,获取到的页面是空的,不利于网站推广) +- 首屏加载慢(到达浏览器端后再加载数据,增加用户等待时间) + +## 二、服务端渲染 (SSR)方案 + +[![img](images/WDEPGk-V389w79.png)](https://content.markdowner.net/pub/WDEPGk-V389w79)**基本原理:** 在服务端起一个node应用,浏览器到来时,先拦截执行部分 js 异步请求,提前将数据填充到 html 页面中返回浏览器。这样爬虫抓取到的页面就是带数据的,有利于SEO + +**需解决问题:** + +1. 大部分应用开发时都有状态管理方案([Vuex](https://vuex.vuejs.org/zh/guide/), [Redux](https://redux.js.org/)),SPA 应用到达浏览器前状态都是空的,使用SSR后意味着需要在服务端提前填充数据到 store +2. 需要拦截相应 hook(vue 的 created、react 的 componentDidMount),等待异步数据请求完成,确认渲染完成 + +针对这些问题,社区也有相应框架可参考: + +| 框架 | 解决方案 | Github star | +| :------ | :-------------------------------- | :---------- | +| Vue | [Nuxt.js](https://zh.nuxtjs.org/) | 28.4k | +| React | [Nextjs](https://nextjs.org/) | 50.8k | +| Angular | - | - | + +不想使用框架,也可以自己修改react、vue 的 render 方法实现(改动工作量更大) + +**优点** + +- SEO 友好 +- 首屏渲染快(可在服务端缓存页面,请求到来直接给 html) + +**缺点** + +- 代码改动大、需要做特定SSR框架的改动(经过我们实践、原有SPA代码改动非常大) +- 丢失了部分SPA体验 +- node 容易成为性能瓶颈 + +## 三、构建时预渲染方案 + +| Solution | Github Star | +| :----------------------------------------------------------- | :---------- | +| [prerender-spa-plugin](https://github.com/chrisvfritz/prerender-spa-plugin) | 6k | +| [puppeteer](https://github.com/puppeteer/puppeteer) | 63.2k | +| [phantomjs](https://github.com/Medium/phantomjs) | 1.4k | + +**基本原理:** 利用webpack 等构建工具,针对 SPA 应用开发后只有一个 index.html 文件入口问题,用上述预渲染中间件在前端项目构建时预先获取页面数据,生成多个页面,如 about、help 、contact 等页面,优化首屏渲染与部分页面SEO + +**优点** + +- 代码侵入性小 + +**缺点** + +- 无法用于大量动态路径页面场景(生成的 html 页面数据大,而且页面数据会有更新。如 /article/123,文章页面) +- 后台请求数据变动时前端应该同步更新版本 + +## 四、服务端动态渲染(利用user-agent) + +[![img](images/4Vmk3n-aon3eGQ.png)](https://content.markdowner.net/pub/4Vmk3n-aon3eGQ) + +回归到原始需求,为了提高用户体验我们用了SPA技术、为了SEO 我们用了 SSR、预渲染等技术。不同技术方案有一定差距,不能兼顾优点。但仔细想,需要这些技术优点的“用户”,其实时不一样的,SPA 针对的是浏览器普通用户、SSR 针对的是网页爬虫,如 googlebot、baiduspider 等,那为什么我们不能给不同“用户”不同的页面呢,服务端动态渲染就是这种方案。 + +**基本原理:** 服务端对请求的 user-agent 进行判断,浏览器端直接给 SPA 页面,如果是爬虫,给经过动态渲染的 html 页面 + +**PS:** 你可能会问,给了爬虫不同的页面,会不会被认为是网页作弊行为呢? + +Google 给了[回复](https://developers.google.com/search/docs/guides/dynamic-rendering): + +> ## Dynamic rendering is not cloaking +> +> Googlebot generally doesn't consider dynamic rendering as [cloaking](https://support.google.com/webmasters/answer/66355). As long as your dynamic rendering produces similar content, Googlebot won't view dynamic rendering as cloaking. +> +> When you're setting up dynamic rendering, your site may produce error pages. Googlebot doesn't consider these error pages as cloaking and [treats the error as any other error page](https://developers.google.com/search/docs/guides/javascript-seo-basics#use-meaningful-http-status-codes). +> +> Using dynamic rendering to serve completely different content to users and crawlers can be considered cloaking. For example, a website that serves a page about cats to users and a page about dogs to crawlers can be considered cloaking. + +也就是说,如果我们没有刻意去作弊,而是使用动态渲染方案去解决SEO问题,爬虫经过对比网站内容,没有明显差异,不会认为这是作弊行为。 + +**优点** + +- 兼顾 SPA优点同时解决SEO问题 + +**缺点** + +- 需要服务端应用(但动态渲染只针对爬虫、不会成为性能瓶颈) + +**总结:** 经过前期其他方案的实践、优缺点权衡、最终我们选择了方案四的动态渲染作为 SPA 的 SEO 方案。 + +## 实现细节 + +[![img](images/1qa8x4-V1bWyeo.png)](https://content.markdowner.net/pub/1qa8x4-V1bWyeo) + +上图为最终实现。(存在优化点:右边CDN整合、可以考虑使用Node替代nginx部分功能,简化架构) + +#### 社区方案: + +| 方案 | github star | 描述 | +| :----------------------------------------------------------- | :---------- | :------------------------------------------ | +| [puppeteer](https://developers.google.com/web/tools/puppeteer/get-started) | 63.2k | 可用于动态渲染、前端测试、操作模拟。API丰富 | +| [rendertron](https://github.com/GoogleChrome/rendertron) | 4.9k | 动态渲染 | +| [prerender.io](https://prerender.io/) | 5.6k | 动态渲染 | + +选型使用 puppeteer 作为动态渲染方案。 + +依赖: + +```json +{ + "dependencies": { + "bluebird": "^3.7.2", + "express": "^4.17.1", + "puppeteer": "^5.2.0", + "redis": "^3.0.2", + "request": "^2.88.2" + } +} +``` + +代码参考[Google 官方 Demo](https://developers.google.com/web/tools/puppeteer/articles/ssr)进行改造,下面是基础代码: + +**server.js** + +```javascript +import express from 'express'; +import request from 'request'; +import ssr from './ssr.js'; + +const app = express(); + +const host = 'https://www.abc.com'; + +app.get('*', async (req, res) => { + const {html, ttRenderMs} = await ssr(`${host}${req.originalUrl}`); + res.set('Server-Timing', `Prerender;dur=${ttRenderMs};desc="Headless render time (ms)"`); + return res.status(200).send(html); // Serve prerendered page as response. +}); + +app.listen(8080, () => console.log('Server started. Press Ctrl + C to quit')); +``` + +**ssr.js** + +```javascript +import puppeteer from 'puppeteer'; + +// In-memory cache of rendered pages. +const RENDER_CACHE = new Map(); + +async function ssr(url) { + if (RENDER_CACHE.has(url)) { + return {html: RENDER_CACHE.get(url), ttRenderMs: 0}; + } + const start = Date.now(); + + const browser = await puppeteer.launch({ + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + const page = await browser.newPage(); + try { + // networkidle0 waits for the network to be idle (no requests for 500ms). + await page.goto(url, {waitUntil: 'networkidle0'}); + await page.waitForSelector('#root'); // ensure #posts exists in the DOM. + } catch (err) { + console.error(err); + throw new Error('page.goto/waitForSelector timed out.'); + } + + const html = await page.content(); // serialized HTML of page DOM. + await browser.close(); + + const ttRenderMs = Date.now() - start; + console.info(`Puppeteer rendered page: ${url} in: ${ttRenderMs}ms`); + + RENDER_CACHE.set(url, html); // cache rendered page. + + return {html, ttRenderMs}; +} + +export {ssr as default}; +``` + +Demo 代码存在以下问题: + +- 页面渲染后返回浏览器,有时会再次执行异步请求获取数据(重复请求) +- 使用了 Map 做页面缓存,在node服务崩溃时会丢失全部缓存。没有超时限制,随着时间增长,内存消耗大(缓存机制) +- 样式错乱:虽然内容有渲染进html,但是打开样式是错乱的(如postman 上打开) +- 重复请求 React/Vue 静态文件,ssr 函数会当成一个页面进行渲染(错误渲染) + +下面对这些问题逐个击破 + +### 重复请求 + +根本原因是React/Vue 代码生命周期函数重复执行。一般我们在created/componentDidMount hook 进行异步数据请求,这个hook在动态渲染的时候执行了一次,在HTML返回浏览器的时候,dom挂载又执行了一次,此问题在[Google Support](https://developers.google.com/web/tools/puppeteer/articles/ssr#rerender)也有提及。可以通过小小改造前端代码,判断页面是否已被动态渲染再执行异步请求。可参考: + +```javascript +componentDidMount() { + const PRE_RENDERED = document.querySelector('#posts'); + if(!PRE_RENDERED) { + // 异步请求 + // 插入含有 #posts id 的 dom 元素 + } +} +``` + +### 缓存机制 + +针对 Map 缓存的问题,我们使用了Redis进行改造,增加超时机制,同时可以避免node崩溃缓存击穿问题 + +**redis/index.js** + +```javascript +import redis from 'redis'; +import bluebird from 'bluebird'; + +bluebird.promisifyAll(redis); + +const host = 'www.abc.com'; +const port = 6379; +const password = '123456'; + +const client = redis.createClient({ + host, + port, + password, + retry_strategy: function(options) { + if (options.error && options.error.code === "ECONNREFUSED") { + return new Error("The server refused the connection"); + } + if (options.total_retry_time > 1000 * 60 * 60) { + return new Error("Retry time exhausted"); + } + if (options.attempt > 10) { + return undefined; + } + return Math.min(options.attempt * 100, 3000); + }, +}); + +client.on("error", function(e) { + console.error('dynamic-render redis error: ', e); +}); + +export default client; +``` + +### 样式错乱 + +出现这个问题的原因是: + +```html + +``` + +如果爬虫没有 js 执行能力,并不会去请求这类样式文件,所以我们需要将link标签转换为 style 标签。 + +这部分工作在以前可以不搞,反正主要内容已经给到爬虫了,但是现在爬虫越来越聪明,能够通过样式文件识别网站是否有作弊行为,而且如果不做这块,在百度、谷歌的快照页面看到的是错乱的页面,会降低排名,所以我们要帮爬虫安排好样式文件。 + +下面代码利用 puppeteer 请求样式文件,用 style 替代 link 标签。 **ssr.js** + +```javascript +import puppeteer from 'puppeteer'; +import redisClient from './redis/index.js'; + +async function ssr(url) { + const REDIS_KEY = `ssr:${url}`; + const CACHE_TIME = 600; // 10 分钟缓存 + const CACHE_HTML = await redisClient.getAsync(REDIS_KEY); + + if (CACHE_HTML) { + return { html: CACHE_HTML, ttRenderMs: 0 }; + } + const start = Date.now(); + + const browser = await puppeteer.launch({ + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + + try { + const page = await browser.newPage(); + const stylesheetContents = {}; + + // 1. Stash the responses of local stylesheets. + page.on('response', async resp => { + const responseUrl = resp.url(); + const sameOrigin = new URL(responseUrl).origin === new URL(url).origin; + const isStylesheet = resp.request().resourceType() === 'stylesheet'; + if (sameOrigin && isStylesheet) { + stylesheetContents[responseUrl] = await resp.text(); + } + }); + + // 2. Load page as normal, waiting for network requests to be idle. + // networkidle0 waits for the network to be idle (no requests for 500ms). + await page.goto(url, {waitUntil: 'networkidle0'}); + await page.waitForSelector('#root'); // ensure #posts exists in the DOM. + + // 3. Inline the CSS. + // Replace stylesheets in the page with their equivalent